From cd9c47eabb00f528f801ff3f1a73a3f22ce24d88 Mon Sep 17 00:00:00 2001 From: Sean Finney Date: Thu, 13 May 2010 20:23:37 +0200 Subject: Add maintainer search in django implementation, commonize w/index search. --- patchtracker/ComplexQueries.py | 18 +++++++++++------- patchtracker/urls.py | 2 ++ patchtracker/views.py | 15 +++++++++++++-- templates/letter_toc.html | 33 --------------------------------- templates/searchresults.html | 33 +++++++++++++++++++++++++++++++++ templates/searchresults.tmpl | 34 ---------------------------------- 6 files changed, 59 insertions(+), 76 deletions(-) delete mode 100644 templates/letter_toc.html create mode 100644 templates/searchresults.html delete mode 100644 templates/searchresults.tmpl diff --git a/patchtracker/ComplexQueries.py b/patchtracker/ComplexQueries.py index 706301e..be7e30f 100644 --- a/patchtracker/ComplexQueries.py +++ b/patchtracker/ComplexQueries.py @@ -1,16 +1,13 @@ import models -class PackageIndex: - def __init__( self, index ): +class PackageIndexQuery: + def __init__( self, queryobj ): self.dists = [d.name for d in models.RepositorySuite.objects.all()] self.index = {} self.packages = [] + self.queryobj = queryobj - 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: + for mapping in queryobj: self._addPackageMapping(mapping.package, mapping.suite) def _addPackageMapping( self, package, suite ): @@ -23,3 +20,10 @@ class PackageIndex: for pkg in self.packages: yield { 'package':pkg, 'entries':self.index[pkg.name] } +class PackageIndex (PackageIndexQuery): + def __init__( self, index ): + mappings = models.SourcePackageMapping.objects.order_by('package__name').filter( package__name=index ) + if not mappings: + mappings = models.SourcePackageMapping.objects.order_by('package__name').filter( package__name__startswith=index ) + + PackageIndexQuery.__init__(self, mappings) diff --git a/patchtracker/urls.py b/patchtracker/urls.py index b7a916f..4108086 100644 --- a/patchtracker/urls.py +++ b/patchtracker/urls.py @@ -6,6 +6,8 @@ urlpatterns = patterns('', views.package_vers), url(r'^package/(?P\w+)$', views.display_toc), + url(r'^email/(?P.*)$', + views.maintainer_search), url(r'^patch/(?P(debianonly|misc|nondebian|series))/view/(?P\w+)/(?P[^/]+)/(?P.*)$', views.display_patch), url(r'^patch/(?P(debianonly|misc|nondebian|series))/dl/(?P\w+)/(?P[^/]+)/(?P.*)$', diff --git a/patchtracker/views.py b/patchtracker/views.py index e790f3a..b125681 100644 --- a/patchtracker/views.py +++ b/patchtracker/views.py @@ -1,5 +1,6 @@ import os +import django.db.models import django.http import django.shortcuts import django.template @@ -17,10 +18,20 @@ def package_vers(request, package, version): def display_toc(request, index): packageIndex = ComplexQueries.PackageIndex(index) - tmpl = 'letter_toc.html' - extra = { 'index':index, 'packageIndex':packageIndex, 'conf':Conf } + tmpl = 'searchresults.html' + searchDescription = "Packages by index" + extra = { 'index':index, 'packageIndex':packageIndex, 'conf':Conf, + 'searchDescription':searchDescription, 'searchKey':index } return django.shortcuts.render_to_response(tmpl, extra) +def maintainer_search(request, maintainer): + mappings = models.SourcePackageMapping.objects.order_by('package__name').filter( django.db.models.Q(package__maintainer__contains=maintainer) | django.db.models.Q(package__uploaders__contains=maintainer ) ) + packageIndex = ComplexQueries.PackageIndexQuery( mappings ) + tmpl = 'searchresults.html' + searchDescription = "Maintainer email" + extra = { 'index':maintainer, 'packageIndex':packageIndex, 'conf':Conf, + 'searchDescription':searchDescription, 'searchKey':maintainer } + 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 ) diff --git a/templates/letter_toc.html b/templates/letter_toc.html deleted file mode 100644 index bff8a34..0000000 --- a/templates/letter_toc.html +++ /dev/null @@ -1,33 +0,0 @@ -{% extends "base.html" %} -{% block title %} -Debian Project patch tracking system -{% endblock %} -{% block content %} -

Debian Project patch tracking system

-

Packaging patches by index - {{ index }}

- - - -{% for dist in packageIndex.dists %} - -{% endfor %} - -{% for row in packageIndex %} - - - {% for pkg in row.entries %} - - {% endfor %} - -{% endfor %} -
package{{ dist }}
- - {{ row.package.name }} - - {% if pkg %} - {{ pkg.wrappable_version|safe }} - {% else %} - n/a - {% endif %} -
-{% endblock %} diff --git a/templates/searchresults.html b/templates/searchresults.html new file mode 100644 index 0000000..6f5abe5 --- /dev/null +++ b/templates/searchresults.html @@ -0,0 +1,33 @@ +{% extends "base.html" %} +{% block title %} +Debian Project patch tracking system +{% endblock %} +{% block content %} +

Debian Project patch tracking system

+

Search Results: {{ searchDescription }} - {{ searchKey }}

+ + + +{% for dist in packageIndex.dists %} + +{% endfor %} + +{% for row in packageIndex %} + + + {% for pkg in row.entries %} + + {% endfor %} + +{% endfor %} +
package{{ dist }}
+ + {{ row.package.name }} + + {% if pkg %} + {{ pkg.wrappable_version|safe }} + {% else %} + n/a + {% endif %} +
+{% endblock %} diff --git a/templates/searchresults.tmpl b/templates/searchresults.tmpl deleted file mode 100644 index 76bf5ff..0000000 --- a/templates/searchresults.tmpl +++ /dev/null @@ -1,34 +0,0 @@ -#import templates -#extends templates.skeleton -#def title -Debian Project patch tracking system - Search Results -#end def -#def body -

Debian Project patch tracking system

-

Search Results - $searchtype: $idx

- - - -#for $d in $dists - -#end for - -#for $p in $sorted($pkgs.iterkeys) - - - #for $d in $dists - - #end for - -#end for -
package$d
- - $p - - #if $pkgs[$p].has_key($d) - $pkgs[$p][$d].version - #else - n/a - #end if -
-#end def -- cgit v1.2.3