* packagedb icin composition kullan inheritance yerine

* sourcedb'i de adam et
This commit is contained in:
Eray Özkural
2005-06-29 07:54:13 +00:00
parent ae3717e37a
commit f223561f0d
5 changed files with 54 additions and 25 deletions
+1 -1
View File
@@ -38,7 +38,7 @@ Legend:
2. Alpha
+ write specfile (eray)
/ file locking for database access
/ file locking for database access (eray)
- verify metodlari
- SpecFile
- MetaData
+8 -13
View File
@@ -7,25 +7,20 @@
# we basically store everything in PackageInfo class
# yes, we are cheap
from bsddb.dbshelve import DBShelf
#from bsddb.dbshelve import DBShelf
import bsddb.dbshelve as shelve
import os, fcntl
import util
from config import config
from bsddb import db
class PackageDB(DBShelf):
class PackageDB(object):
def __init__(self):
DBShelf.__init__(self)
util.check_dir(config.db_dir())
filename = os.path.join(config.db_dir(), 'package.bdb')
#d.open(filename, dbname, filetype, flags, mode)
flags = db.DB_CREATE
mode = 0660
filetype=db.DB_HASH
dbname = None
self.open( filename, dbname, filetype, flags, mode )
self.d = shelve.open(filename)
self.fdummy = open(filename)
fcntl.flock(self.fdummy, fcntl.LOCK_EX)
@@ -35,19 +30,19 @@ class PackageDB(DBShelf):
def has_package(self, name):
name = str(name)
return self.has_key(name)
return self.d.has_key(name)
def get_package(self, name):
name = str(name)
return self[name]
return self.d[name]
def add_package(self, package_info):
name = str(package_info.name)
self[name] = package_info
self.d[name] = package_info
def remove_package(self, name):
name = str(name)
del self[name]
del self.d[name]
packagedb = PackageDB()
+35 -6
View File
@@ -7,12 +7,41 @@
# yes, we are cheap
import bsddb.dbshelve as shelve
import os, fcntl
util.check_dir(config.db_dir())
d = shelve.open(config.db_dir() + '/source.bdb')
import util
from config import config
from bsddb import db
def add_source(name, source_info):
d[name] = source_info
class SourceDB(object):
def __init__(self):
util.check_dir(config.db_dir())
filename = os.path.join(config.db_dir(), 'source.bdb')
self.d = shelve.open(filename)
self.fdummy = open(filename)
fcntl.flock(self.fdummy, fcntl.LOCK_EX)
def __del__(self):
#fcntl.flock(self.fdummy, fcntl.LOCK_UN)
self.fdummy.close()
def has_source(self, name):
name = str(name)
return self.d.has_key(name)
def get_source(self, name):
name = str(name)
return self.d[name]
def add_source(self, source_info):
assert source_info.verify()
name = str(source_info.name)
self.d[name] = source_info
def remove_source(self, name):
name = str(name)
del self.d[name]
sourcedb = SourceDB()
def remove_source(name):
del d[name]
+5
View File
@@ -128,6 +128,11 @@ class SourceInfo:
xml.addNodeUnder(node, "History", update.elt(xml))
return node
def verify(self):
ret = True
ret &= len(self.history) > 0
return ret
class PackageInfo:
"""A structure to hold package information. Package information is
located under <Package> tag in PSPEC file. Opposite to Source each
+5 -5
View File
@@ -2,7 +2,7 @@
import unittest
import os
from pisi import packagedb
from pisi.sourcedb import sourcedb
from pisi import util
from pisi import context
@@ -12,12 +12,12 @@ class SourceDBTestCase(unittest.TestCase):
self.ctx = context.BuildContext("samples/popt/popt.pspec")
def testAdd(self):
sourcedb.add_source("testsourcedb", self.ctx.spec.source)
self.assert_(sourcedb.has_package("testsourcedb"))
sourcedb.add_source(self.ctx.spec.source)
self.assert_(sourcedb.has_source("popt"))
def testRemove(self):
self.testAdd()
sourcedb.remove_package("testsourcedb")
self.assert_(not sourcedb.has_package("testsourcedb"))
sourcedb.remove_source("popt")
self.assert_(not sourcedb.has_source("popt"))
suite = unittest.makeSuite(SourceDBTestCase)