diff options
author | Sean Finney <seanius@debian.org> | 2010-05-13 19:28:58 +0200 |
---|---|---|
committer | Sean Finney <seanius@debian.org> | 2010-05-13 19:28:58 +0200 |
commit | 01e55d8e6ca532ceb1382db529f82941bc7a6bad (patch) | |
tree | 8260781e2f038c6a00fa7a64ec789c7ca873450f /patchtracker | |
parent | 022a984fd1d24241c3e1801fd210cd34cdf0e5a6 (diff) | |
download | patch-tracker-01e55d8e6ca532ceb1382db529f82941bc7a6bad.tar.gz |
Package index listing now implemented in django
Diffstat (limited to 'patchtracker')
-rw-r--r-- | patchtracker/ComplexQueries.py | 25 | ||||
-rwxr-xr-x | patchtracker/Templates.py | 10 | ||||
-rw-r--r-- | patchtracker/models.py | 12 | ||||
-rw-r--r-- | patchtracker/urls.py | 2 | ||||
-rw-r--r-- | patchtracker/views.py | 8 |
5 files changed, 47 insertions, 10 deletions
diff --git a/patchtracker/ComplexQueries.py b/patchtracker/ComplexQueries.py new file mode 100644 index 0000000..706301e --- /dev/null +++ b/patchtracker/ComplexQueries.py @@ -0,0 +1,25 @@ +import models + +class PackageIndex: + def __init__( self, index ): + self.dists = [d.name for d in models.RepositorySuite.objects.all()] + self.index = {} + self.packages = [] + + packageMappings = models.SourcePackageMapping.objects.order_by('package__name').filter( package__name=index ) + if not packageMappings: + packageMappings = models.SourcePackageMapping.objects.order_by('package__name').filter( package__name__startswith=index ) + + for mapping in packageMappings: + self._addPackageMapping(mapping.package, mapping.suite) + + def _addPackageMapping( self, package, suite ): + if package.name not in self.index: + self.index[package.name] = [None] * len(self.dists) + self.packages.append(package) + self.index[package.name][self.dists.index(suite.name)] = package + + def __iter__( self ): + for pkg in self.packages: + yield { 'package':pkg, 'entries':self.index[pkg.name] } + diff --git a/patchtracker/Templates.py b/patchtracker/Templates.py index 42e07dc..bb93eae 100755 --- a/patchtracker/Templates.py +++ b/patchtracker/Templates.py @@ -12,22 +12,12 @@ class OurTemplate(Template): if searchList: for k,v in searchList.iteritems(): ourSearchList[k]=v - self.escape_name = self._escape_name - self.wrappable_version = self._wrappable_version self.link = self._link Template.__init__(self, file=file, searchList=ourSearchList) def _link(self, where, name): return str("<a href=\"%s\">%s</a>"%(where,name)) - def _escape_name(self, name): - return re.sub("([^a-zA-Z0-9-])", (lambda x: "_%d"%(ord(x.group(1)))), name) - - def _wrappable_version(self, version): - """ output a version that can be broken up by a web browser using - the unicode zero-whitespace-break character (​) """ - return '​'.join([version[i:i+12] for i in range(0,len(version),12)]) - class FrontPageTemplate(OurTemplate): def __init__(self, indices): tpl = os.sep.join([Conf.template_dir, "frontpage.tmpl"]) diff --git a/patchtracker/models.py b/patchtracker/models.py index 0fb997d..95a59df 100644 --- a/patchtracker/models.py +++ b/patchtracker/models.py @@ -1,3 +1,5 @@ +import re + from django.db import models from django.contrib import admin @@ -22,6 +24,16 @@ class SourcePackage (models.Model): else: return "Native" + def anchor_name(self): + """ output a version of the package name suitable for use as an + anchor name (i.e. <a name="foo">) """ + return re.sub("([^a-zA-Z0-9-])", (lambda x: "_%d"%(ord(x.group(1)))), self.name) + + def wrappable_version(self): + """ output a version that can be broken up by a web browser using + the unicode zero-whitespace-break character (​) """ + return '​'.join([self.version[i:i+12] for i in range(0,len(self.version),12)]) + def __unicode__( self ): return "%s (%s)"%(self.name, self.version) diff --git a/patchtracker/urls.py b/patchtracker/urls.py index 6d2d20b..b7a916f 100644 --- a/patchtracker/urls.py +++ b/patchtracker/urls.py @@ -4,6 +4,8 @@ import views urlpatterns = patterns('', url(r'^package/(?P<package>\w+)/(?P<version>[^/]+)$', views.package_vers), + url(r'^package/(?P<index>\w+)$', + views.display_toc), url(r'^patch/(?P<patchType>(debianonly|misc|nondebian|series))/view/(?P<package>\w+)/(?P<version>[^/]+)/(?P<patchName>.*)$', views.display_patch), url(r'^patch/(?P<patchType>(debianonly|misc|nondebian|series))/dl/(?P<package>\w+)/(?P<version>[^/]+)/(?P<patchName>.*)$', diff --git a/patchtracker/views.py b/patchtracker/views.py index ec20cdb..4db3666 100644 --- a/patchtracker/views.py +++ b/patchtracker/views.py @@ -4,6 +4,7 @@ import django.http import django.shortcuts import django.template +import ComplexQueries import DebTarHandler import DiffGzHandler import Conf @@ -23,6 +24,13 @@ def package_vers(request, package, version): extra = { 'pkg':pkg, 'ctx':ctx, 'conf':Conf, 'diffhandler':diffhandler } return django.shortcuts.render_to_response(tmpl, extra, context_instance=ctx) +def display_toc(request, index): + packageIndex = ComplexQueries.PackageIndex(index) + tmpl = 'letter_toc.html' + extra = { 'index':index, 'packageIndex':packageIndex, 'conf':Conf } + return django.shortcuts.render_to_response(tmpl, extra) + + def display_patch(request, patchType, package, version, patchName): pkg = models.SourcePackage.objects.get( name=package, version=version ) ctx = django.template.RequestContext(request) |