From: Mark Hymers Date: Thu, 23 Jul 2009 22:33:06 +0000 (+0100) Subject: enhance binary and source find routines X-Git-Url: https://git.decadent.org.uk/gitweb/?a=commitdiff_plain;h=98a9167cf4ca8ce6344152505c05537626f208f6;p=dak.git enhance binary and source find routines Signed-off-by: Mark Hymers --- diff --git a/daklib/dbconn.py b/daklib/dbconn.py index 10a6486d..66921b85 100755 --- a/daklib/dbconn.py +++ b/daklib/dbconn.py @@ -194,13 +194,19 @@ def get_binary_from_id(id, session=None): __all__.append('get_binary_from_id') -def get_binaries_from_name(package, session=None): +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 package: str, list or None + @param package: 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) @@ -210,10 +216,42 @@ def get_binaries_from_name(package, session=None): """ if session is None: session = DBConn().session() - return session.query(DBBinary).filter_by(package=package).all() + + 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)) + + return q.all() __all__.append('get_binaries_from_name') +def get_binaries_from_source_id(source_id, session=None): + """ + Returns list of DBBinary objects for given C{source_id} + + @type source_id: int + @param source_id: source_id to search for + + @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) + """ + if session is None: + session = DBConn().session() + return session.query(DBBinary).filter_by(source_id=source_id).all() + +__all__.append('get_binaries_from_source_id') + + def get_binary_from_name_suite(package, suitename, session=None): ### For dak examine-package ### XXX: Doesn't use object API yet @@ -252,6 +290,7 @@ def get_binary_components(package, suitename, arch, session=None): return session.execute(query, vals) __all__.append('get_binary_components') + ################################################################################ class Component(object): @@ -1249,13 +1288,16 @@ def source_exists(source, source_version, suites = ["any"], session=None): __all__.append('source_exists') -def get_sources_from_name(source, dm_upload_allowed=None, session=None): +def get_sources_from_name(source, version=None, dm_upload_allowed=None, session=None): """ - Returns list of DBSource objects for given C{source} name + Returns list of DBSource objects for given C{source} name and other parameters @type source: str @param source: DBSource package name to search for + @type source: str or None + @param source: DBSource version name to search for or None if not applicable + @type dm_upload_allowed: bool @param dm_upload_allowed: If None, no effect. If True or False, only return packages with that dm_upload_allowed setting @@ -1271,6 +1313,10 @@ def get_sources_from_name(source, dm_upload_allowed=None, session=None): session = DBConn().session() q = session.query(DBSource).filter_by(source=source) + + if version is not None: + q = q.filter_by(version=version) + if dm_upload_allowed is not None: q = q.filter_by(dm_upload_allowed=dm_upload_allowed)