diff options
Diffstat (limited to 'patchtracker')
-rw-r--r-- | patchtracker/DB.py | 52 | ||||
-rwxr-xr-x | patchtracker/SourceArchive.py | 14 | ||||
-rwxr-xr-x | patchtracker/Templates.py | 15 |
3 files changed, 39 insertions, 42 deletions
diff --git a/patchtracker/DB.py b/patchtracker/DB.py index 370d691..9324e97 100644 --- a/patchtracker/DB.py +++ b/patchtracker/DB.py @@ -66,13 +66,6 @@ class PatchTrackerDB: def setFactory(self, factory): self.db.row_factory = factory - def findSourcePackage(self, srcpkg): - q = "SELECT * FROM packages WHERE name=? AND version=?" - cursor = self.db.cursor() - cursor.execute(q, (srcpkg.name, srcpkg.version)) - s = cursor.fetchone() - return s - def saveSourcePackage(self, srcpkg): cursor = self.db.cursor() #print "creating new record for",srcpkg @@ -83,42 +76,31 @@ class PatchTrackerDB: srcpkg.version,srcpkg.diffgz_name,srcpkg.diffgz_size, srcpkg.diffgz_md5sum)) - def findSuite(self, suite): - q = "SELECT * FROM suites WHERE name = ?" + def saveSuite(self, suite): + q = "INSERT OR REPLACE INTO suites (id,name) \ + VALUES ((SELECT MAX(id)+1 FROM suites),?)" cursor = self.db.cursor() cursor.execute(q, (suite,)) - return cursor.fetchone() - def saveSuite(self, suite): - s = self.findSuite(suite) - if not s: - q = "INSERT INTO suites (id,name) \ - VALUES ((SELECT MAX(id)+1 FROM suites),?)" - cursor = self.db.cursor() - cursor.execute(q, (suite,)) - - def findComponent(self, component): - q = "SELECT * FROM components WHERE name = ?" + def saveComponent(self, component): + q = "INSERT OR REPLACE INTO components (id,name) \ + VALUES ((SELECT MAX(id)+1 FROM components),?)" cursor = self.db.cursor() cursor.execute(q, (component,)) - return cursor.fetchone() - def saveComponent(self, component): - c = self.findComponent(component) - if not c: - q = "INSERT INTO components (id,name) \ - VALUES ((SELECT MAX(id)+1 FROM components),?)" - cursor = self.db.cursor() - cursor.execute(q, (component,)) - - def findCollection(self, package="%"): + def findCollection(self, package="%", version=None): oldfactory = self.db.row_factory self.db.row_factory = srcpkg_collection_factory cursor = self.db.cursor() toc = SourceArchive.SourcePackageIndex() q = "SELECT * FROM packages AS p,package_rel_map AS m,suites AS s \ WHERE p.name LIKE ? AND p.id = m.package_id AND m.suite_id = s.id" - cursor.execute(q, (package,)) + qargs = (package,) + if version: + q += " AND p.version = ?" + qargs += (version,) + + cursor.execute(q, qargs) # use srcpkg_factory to fetch sourcepackages, once per suite for srcpkg,rest in cursor.fetchall(): toc.ins(srcpkg, rest["name"]) @@ -131,14 +113,6 @@ class PatchTrackerDB: def findMasterIndex(self): return self.findCollection(package="%") - def findSourcePackageRelation(self, srcpkg, suite): - q = "SELECT * FROM packages AS p,suites AS s,package_rel_map AS m \ - WHERE p.name=? AND s.name=? AND m.package_id=p.id \ - AND m.suite_id=s.id" - cursor = self.db.cursor() - cursor.execute(q, (srcpkg.name, suite)) - return cursor.fetchone() - def relateSourcePackage(self, name, version, suite, component): q = "INSERT OR REPLACE INTO package_rel_map \ (package_id,suite_id,component_id) \ diff --git a/patchtracker/SourceArchive.py b/patchtracker/SourceArchive.py index b8bc9eb..a30e07d 100755 --- a/patchtracker/SourceArchive.py +++ b/patchtracker/SourceArchive.py @@ -131,8 +131,20 @@ class SourcePackageIndex: if not self.pkgs[srcpkg.idx][srcpkg.name].has_key(rel): self.pkgs[srcpkg.idx][srcpkg.name][rel] = srcpkg + def size(self): + return sum([len(self.pkgs[i]) for i in self.pkgs.iterkeys()]) + + def getpackage(self, name): + try: + return self.getletter(name)[name] + except KeyError: + return None + def getletter(self, letter): - return self.pkgs[getidx(letter)] + try: + return self.pkgs[getidx(letter)] + except KeyError: + return None def indices(self): return sorted(self.pkgs.iterkeys()) diff --git a/patchtracker/Templates.py b/patchtracker/Templates.py index ba9764c..0848da1 100755 --- a/patchtracker/Templates.py +++ b/patchtracker/Templates.py @@ -44,8 +44,19 @@ class LetterTocTemplate(OurTemplate): tpl = os.sep.join([Conf.template_dir, "letter_toc.tmpl"]) OurTemplate.__init__(self, file=tpl) - def releases(self): - return dists +class SearchResultsTemplate(OurTemplate): + def __init__(self, search, collection): + self.pkgs = {} + self.idx = search + self.dists = {} + for idx in collection.indices(): + for name,packagelist in collection.getletter(idx).iteritems(): + self.pkgs[name] = packagelist + for d in packagelist.iterkeys(): + self.dists[d] = True + tpl = os.sep.join([Conf.template_dir, "searchresults.tmpl"]) + OurTemplate.__init__(self, file=tpl) + class ErrorTemplate(OurTemplate): def __init__(self, msg): |