diff options
Diffstat (limited to 'patchtracker/ComplexQueries.py')
-rw-r--r-- | patchtracker/ComplexQueries.py | 29 |
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) |