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