From c5749895ab4f6893bdf1d398691d1dd33e81574c Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Sun, 16 Nov 2008 20:15:34 +0000 Subject: have some more thandy. This update includes a working downloader with tor support, a package system framework, and more. Most of what's left is glue code. git-svn-id: file:///home/or/svnrepo/updater/trunk@17288 55e972cd-5a19-0410-ae62-a4d7a52db4cd --- lib/thandy/packagesys/PackageDB.py | 81 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 lib/thandy/packagesys/PackageDB.py (limited to 'lib/thandy/packagesys/PackageDB.py') diff --git a/lib/thandy/packagesys/PackageDB.py b/lib/thandy/packagesys/PackageDB.py new file mode 100644 index 0000000..bb218be --- /dev/null +++ b/lib/thandy/packagesys/PackageDB.py @@ -0,0 +1,81 @@ +# Copyright 2008 The Tor Project, Inc. See LICENSE for licensing information. + +import anydbm +import shelve + +import thandy.util +import thandy.formats + +class SimplePackageDB: + + def __init__(self, filename): + self._db = anydbm.open(filename, 'c') + + def setVersion(self, package, version, filelist): + pass + + def setInstallParameters(self, package, params): + pass + + def getCurVersion(self, package): + pass + + def getInstallParameters(self, package): + pass + + +class DBBackedPackageSystem(thandy.packagesys.PackageSystem): + def __init__(self, packageDB): + self._packageDB = packageDB + +class DBBackedPackageHandle(thandy.packagesys.PackageHandle): + def __init__(self, packageDB, name, version, filelist): + thandy.packagesys.PackageSystem.PackageHandle.__init__(self) + self._packageDB = packageDB + self._name = name + self._version = version + self._filelist = filelist + + self._metaData = None + + def _getInstallBase(self): + raise NotImplemented() + + def anyVersionInstalled(self, transaction=None): + return self._packageDB.getCurVersion(self._name) != None + + def getInstalledVersion(self, transaction=None): + return self._packageDB.getCurVersion(self._name) + + def install(self): + params = self._doInstall() + self._packageDB.setCurVersion( + self._name, self._version, self._filelist) + self._packageDB.setInstallParameters(self._name, params) + + def _doInstall(self): + raise NotImplemented() + + def isInstalled(self): + return self.getInstalledVersion(self, transaction) == self._version + + def checkInstall(self): + base = self._getInstallBase() + + all_ok = True + for fn, hash in self._filelist: + fn = os.path.join(base, fn) + if not os.path.exists(fn): + all_ok = False + else: + f = open(fn, 'rb') + try: + try: + d = thandy.formats.getFileDigest(f) + except OSError: + all_ok = False + break + finally: + f.close() + + return all_ok -- cgit v1.2.3