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)