summaryrefslogtreecommitdiff
path: root/patchtracker
diff options
context:
space:
mode:
authorSean Finney <seanius@debian.org>2010-05-13 19:28:58 +0200
committerSean Finney <seanius@debian.org>2010-05-13 19:28:58 +0200
commit01e55d8e6ca532ceb1382db529f82941bc7a6bad (patch)
tree8260781e2f038c6a00fa7a64ec789c7ca873450f /patchtracker
parent022a984fd1d24241c3e1801fd210cd34cdf0e5a6 (diff)
downloadpatch-tracker-01e55d8e6ca532ceb1382db529f82941bc7a6bad.tar.gz
Package index listing now implemented in django
Diffstat (limited to 'patchtracker')
-rw-r--r--patchtracker/ComplexQueries.py25
-rwxr-xr-xpatchtracker/Templates.py10
-rw-r--r--patchtracker/models.py12
-rw-r--r--patchtracker/urls.py2
-rw-r--r--patchtracker/views.py8
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 (&#8203;) """
- return '&#8203;'.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 (&#8203;) """
+ return '&#8203;'.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)