def properties(self):
return ['package', 'version', 'maintainer', 'source', 'architecture', \
'poolfile', 'binarytype', 'fingerprint', 'install_date', \
- 'suites_count', 'binary_id', 'contents_count']
+ 'suites_count', 'binary_id', 'contents_count', 'extra_sources']
def not_null_constraints(self):
return ['package', 'version', 'maintainer', 'source', 'poolfile', \
bin.source_id = bin_sources[0].source_id
+ if entry.has_key("built-using"):
+ for srcname, version in entry["built-using"]:
+ exsources = get_sources_from_name(srcname, version, session=session)
+ if len(exsources) != 1:
+ raise NoSourceFieldError, "Unable to find source package (%s = %s) in Built-Using for %s (%s), %s, file %s, type %s, signed by %s" % \
+ (srcname, version, bin.package, bin.version, entry["architecture"],
+ filename, bin.binarytype, u.pkg.changes["fingerprint"])
+
+ bin.extra_sources.append(exsources[0])
+
# Add and flush object so it has an ID
session.add(bin)
'changes_pending_files_map',
'changes_pending_source_files',
'changes_pool_files',
+ 'extra_src_references',
# TODO: the maintainer column in table override should be removed.
'override',
'suite_architectures',
fingerprint = relation(Fingerprint),
install_date = self.tbl_binaries.c.install_date,
suites = relation(Suite, secondary=self.tbl_bin_associations,
- backref=backref('binaries', lazy='dynamic'))),
+ backref=backref('binaries', lazy='dynamic')),
+ extra_sources = relation(DBSource, secondary=self.tbl_extra_src_references,
+ backref=backref('extra_binary_references', lazy='dynamic'))),
extension = validator)
mapper(BinaryACL, self.tbl_binary_acl,
def __createconn(self):
from config import Config
cnf = Config()
- if cnf["DB::Service"]:
+ if cnf.has_key("DB::Service"):
connstr = "postgresql://service=%s" % cnf["DB::Service"]
- elif cnf["DB::Host"]:
+ elif cnf.has_key("DB::Host"):
# TCP/IP
connstr = "postgresql://%s" % cnf["DB::Host"]
- if cnf["DB::Port"] and cnf["DB::Port"] != "-1":
+ if cnf.has_key("DB::Port") and cnf["DB::Port"] != "-1":
connstr += ":%s" % cnf["DB::Port"]
connstr += "/%s" % cnf["DB::Name"]
else:
# Unix Socket
connstr = "postgresql:///%s" % cnf["DB::Name"]
- if cnf["DB::Port"] and cnf["DB::Port"] != "-1":
+ if cnf.has_key("DB::Port") and cnf["DB::Port"] != "-1":
connstr += "?port=%s" % cnf["DB::Port"]
engine_args = { 'echo': self.debug }
self.__setuptables()
self.__setupmappers()
+ self.pid = os.getpid()
def session(self):
+ # reinitialize DBConn in new processes
+ if self.pid != os.getpid():
+ clear_mappers()
+ self.__createconn()
return self.db_smaker()
- def reset(self):
- '''
- Resets the DBConn object. This function must be called by subprocesses
- created by the multiprocessing module. See tests/dbtest_multiproc.py
- for an example.
- '''
- clear_mappers()
- self.__createconn()
-
__all__.append('DBConn')