result += " | "
# doesn't do version lookup yet.
- component = get_component_by_package_suite(d['name'], suite_list, session)
+ component = get_component_by_package_suite(d['name'], suite_list, \
+ session = session)
if component is not None:
adepends = d['name']
if d['version'] != '' :
__all__.append('get_suites_binary_in')
@session_wrapper
-def get_component_by_package_suite(package, suite_list, session=None):
+def get_component_by_package_suite(package, suite_list, arch_list=[], session=None):
'''
Returns the component name of the newest binary package in suite_list or
- None if no package is found.
+ None if no package is found. The result can be optionally filtered by a list
+ of architecture names.
@type package: str
@param package: DBBinary package name to search for
@type suite_list: list of str
@param suite_list: list of suite_name items
+ @type arch_list: list of str
+ @param arch_list: optional list of arch_string items that defaults to []
+
@rtype: str or NoneType
@return: name of component or None
'''
- binary = session.query(DBBinary).filter_by(package = package). \
- join(DBBinary.suites).filter(Suite.suite_name.in_(suite_list)). \
- order_by(desc(DBBinary.version)).first()
+ q = session.query(DBBinary).filter_by(package = package). \
+ join(DBBinary.suites).filter(Suite.suite_name.in_(suite_list))
+ if len(arch_list) > 0:
+ q = q.join(DBBinary.architecture). \
+ filter(Architecture.arch_string.in_(arch_list))
+ binary = q.order_by(desc(DBBinary.version)).first()
if binary is None:
return None
else:
__all__.append('get_component_by_package_suite')
-@session_wrapper
-def get_binary_components(package, suitename, arch, session=None):
- # Check for packages that have moved from one component to another
- query = """SELECT c.name FROM binaries b, bin_associations ba, suite s, location l, component c, architecture a, files f
- WHERE b.package=:package AND s.suite_name=:suitename
- AND (a.arch_string = :arch OR a.arch_string = 'all')
- AND ba.bin = b.id AND ba.suite = s.id AND b.architecture = a.id
- AND f.location = l.id
- AND l.component = c.id
- AND b.file = f.id"""
-
- vals = {'package': package, 'suitename': suitename, 'arch': arch}
-
- return session.execute(query, vals)
-
-__all__.append('get_binary_components')
-
################################################################################
class BinaryACL(object):
# Check for packages that have moved from one component to another
entry['suite'] = suite
- res = get_binary_components(self.pkg.files[f]['package'], suite, entry["architecture"], session)
- if res.rowcount > 0:
- entry["othercomponents"] = res.fetchone()[0]
+ arch_list = [entry["architecture"], 'all']
+ component = get_component_by_package_suite(self.pkg.files[f]['package'], \
+ [suite], arch_list = arch_list, session = session)
+ if component is not None:
+ entry["othercomponents"] = component
def check_files(self, action=True):
file_keys = self.pkg.files.keys()
def test_get_component_by_package_suite(self):
'test get_component_by_package_suite()'
- result = get_component_by_package_suite('hello', ['sid'], self.session)
+ result = get_component_by_package_suite('hello', ['sid'], \
+ session = self.session)
self.assertEqual('main', result)
- result = get_component_by_package_suite('hello', ['hamm'], self.session)
+ result = get_component_by_package_suite('hello', ['hamm'], \
+ session = self.session)
self.assertEqual(None, result)
- result = get_component_by_package_suite('foobar', ['sid'], self.session)
+ result = get_component_by_package_suite('foobar', ['sid'], \
+ session = self.session)
self.assertEqual(None, result)
# test that the newest version is returend
- result = get_component_by_package_suite('gnome-hello', ['squeeze'], self.session)
+ result = get_component_by_package_suite('gnome-hello', ['squeeze'], \
+ session = self.session)
self.assertEqual('main', result)
- result = get_component_by_package_suite('gnome-hello', ['sid'], self.session)
+ result = get_component_by_package_suite('gnome-hello', ['sid'], \
+ session = self.session)
self.assertEqual('contrib', result)
+ # test arch_list
+ result = get_component_by_package_suite('hello', ['sid'], \
+ arch_list = ['i386'], session = self.session)
+ self.assertEqual('main', result)
+ result = get_component_by_package_suite('hello', ['sid'], \
+ arch_list = ['amd64'], session = self.session)
+ self.assertEqual(None, result)
if __name__ == '__main__':
unittest.main()