from pysqlite2 import dbapi2 as sqlite import Conf as Conf import os import errno import time class PatchTrackerDB: db = None now = None cursor = None def __init__(self, dbname=Conf.database): self.now = int(time.time()) self.db = sqlite.connect(dbname) self.cursor = self.db.cursor() self.cursor.execute("SELECT * FROM sqlite_master WHERE name='packages'") if not self.cursor.fetchone(): print "repopulating empty database..." for l in file(Conf.sqlschema).readlines(): self.cursor.execute(l) def findSourcePackage(self, srcpkg): q = "SELECT * FROM packages WHERE package = ? AND version = ?" self.cursor.execute(q, (srcpkg.name, srcpkg.version)) s = self.cursor.fetchone() return s def saveSourcePackage(self, srcpkg): s = self.findSourcePackage(srcpkg) if not s: print "creating new record for",srcpkg q = "INSERT INTO packages (package,format,diffgz,loc,type,version,updated) VALUES (?,?,?,?,?,?,?)" else: print "updating record for",srcpkg q = "UPDATE packages SET package=?,format=?,diffgz=?,loc=?,type=?,version=?,updated=?" self.cursor.execute(q, (srcpkg.name,srcpkg.format,srcpkg.diffgz,srcpkg.loc,srcpkg.type,srcpkg.version,self.now)) def findRelease(self, release) raise Exception("not yet implemented") def saveRelease(self, release) raise Exception("not yet implemented") def findComponent(self, release, component): raise Exception("not yet implemented") def saveComponent(self, component): raise Exception("not yet implemented") def relateComponentToSourcePackage(self, component, srcpkg): raise Exception("not yet implemented") def finalize(self): # remove cruft in a rather lazy way self.cursor.execute("DELETE FROM packages WHERE updated < ?", (self.now,)) self.db.commit() if __name__ == "__main__": print "patch tracker db testing" d = PatchTrackerDB(dbname="foo.db") from SourceArchive import SourcePackage sp = SourcePackage({'Package':'foo','Format':'blah','Directory':'/foo','Version':'1.2.3.4','Files':[]}) d.saveSourcePackage(sp) d.finalize()