summaryrefslogtreecommitdiff
path: root/patchtracker/ComplexQueries.py
diff options
context:
space:
mode:
Diffstat (limited to 'patchtracker/ComplexQueries.py')
-rw-r--r--patchtracker/ComplexQueries.py25
1 files changed, 25 insertions, 0 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] }
+