X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=daklib%2Fdbconn.py;h=94ab0d62f8e41750214a5c94e3bd59cd8846e413;hb=2a3769b50958eeec3dc614183c64a209c4a456de;hp=554eba4f2ef3646310f867c52e98d020e228938c;hpb=59a219acf70252880f5939ce44620ab4c153496e;p=dak.git diff --git a/daklib/dbconn.py b/daklib/dbconn.py index 554eba4f..94ab0d62 100755 --- a/daklib/dbconn.py +++ b/daklib/dbconn.py @@ -458,11 +458,11 @@ class DBBinary(ORMObject): def properties(self): return ['package', 'version', 'maintainer', 'source', 'architecture', \ 'poolfile', 'binarytype', 'fingerprint', 'install_date', \ - 'suites_count'] + 'suites_count', 'binary_id'] def not_null_constraints(self): - return ['package', 'version', 'maintainer', 'source', 'architecture', \ - 'poolfile', 'binarytype'] + return ['package', 'version', 'maintainer', 'source', 'poolfile', \ + 'binarytype'] __all__.append('DBBinary') @@ -482,69 +482,6 @@ def get_suites_binary_in(package, session=None): __all__.append('get_suites_binary_in') -@session_wrapper -def get_binary_from_id(binary_id, session=None): - """ - Returns DBBinary object for given C{id} - - @type binary_id: int - @param binary_id: Id of the required binary - - @type session: Session - @param session: Optional SQLA session object (a temporary one will be - generated if not supplied) - - @rtype: DBBinary - @return: DBBinary object for the given binary (None if not present) - """ - - q = session.query(DBBinary).filter_by(binary_id=binary_id) - - try: - return q.one() - except NoResultFound: - return None - -__all__.append('get_binary_from_id') - -@session_wrapper -def get_binaries_from_name(package, version=None, architecture=None, session=None): - """ - Returns list of DBBinary objects for given C{package} name - - @type package: str - @param package: DBBinary package name to search for - - @type version: str or None - @param version: Version to search for (or None) - - @type architecture: str, list or None - @param architecture: Architectures to limit to (or None if no limit) - - @type session: Session - @param session: Optional SQL session object (a temporary one will be - generated if not supplied) - - @rtype: list - @return: list of DBBinary objects for the given name (may be empty) - """ - - q = session.query(DBBinary).filter_by(package=package) - - if version is not None: - q = q.filter_by(version=version) - - if architecture is not None: - if not isinstance(architecture, list): - architecture = [architecture] - q = q.join(Architecture).filter(Architecture.arch_string.in_(architecture)) - - ret = q.all() - - return ret - -__all__.append('get_binaries_from_name') - @session_wrapper def get_binaries_from_source_id(source_id, session=None): """ @@ -1257,7 +1194,7 @@ class PoolFile(ORMObject): def properties(self): return ['filename', 'file_id', 'filesize', 'md5sum', 'sha1sum', \ - 'sha256sum', 'location', 'source', 'last_used'] + 'sha256sum', 'location', 'source', 'binary', 'last_used'] def not_null_constraints(self): return ['filename', 'md5sum', 'location'] @@ -2572,14 +2509,10 @@ def add_deb_to_db(u, filename, session=None): # Add and flush object so it has an ID session.add(bin) - session.flush() - # Add BinAssociations - for suite_name in u.pkg.changes["distribution"].keys(): - ba = BinAssociation() - ba.binary_id = bin.binary_id - ba.suite_id = get_suite(suite_name).suite_id - session.add(ba) + suite_names = u.pkg.changes["distribution"].keys() + bin.suites = session.query(Suite). \ + filter(Suite.suite_name.in_(suite_names)).all() session.flush() @@ -3075,7 +3008,7 @@ class DBConn(object): arch_id = self.tbl_binaries.c.architecture, architecture = relation(Architecture), poolfile_id = self.tbl_binaries.c.file, - poolfile = relation(PoolFile), + poolfile = relation(PoolFile, backref=backref('binary', uselist = False)), binarytype = self.tbl_binaries.c.type, fingerprint_id = self.tbl_binaries.c.sig_fpr, fingerprint = relation(Fingerprint),