summaryrefslogtreecommitdiff
path: root/patchtracker/ComplexQueries.py
diff options
context:
space:
mode:
Diffstat (limited to 'patchtracker/ComplexQueries.py')
-rw-r--r--patchtracker/ComplexQueries.py29
1 files changed, 29 insertions, 0 deletions
diff --git a/patchtracker/ComplexQueries.py b/patchtracker/ComplexQueries.py
new file mode 100644
index 0000000..be7e30f
--- /dev/null
+++ b/patchtracker/ComplexQueries.py
@@ -0,0 +1,29 @@
+import models
+
+class PackageIndexQuery:
+ def __init__( self, queryobj ):
+ self.dists = [d.name for d in models.RepositorySuite.objects.all()]
+ self.index = {}
+ self.packages = []
+ self.queryobj = queryobj
+
+ for mapping in queryobj:
+ 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] }
+
+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)