summaryrefslogtreecommitdiff
path: root/patchtracker/ComplexQueries.py
blob: be7e30f300125083b751cb7c7e3046baf9d13d14 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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)