diff --git a/pet/classifier.py b/pet/classifier.py index c9619f7..2b9c7d0 100644 --- a/pet/classifier.py +++ b/pet/classifier.py @@ -175,35 +175,53 @@ def __init__(self, session, named_trees, nt, bugs.get(nt.source, []), suite_packages.get(nt.source, []), tags.get(nt.package_id, []))) + @classmethod + def order_packages_by_popcon(cls, packages): + has_no_popcon = [] + packages_queue = PriorityQueue() + for package in packages: + package_popcon = popcon.package(package.name) + + # The package has popcon + if package_popcon: + packages_queue.put((-package_popcon[package.name], package)) + else: + has_no_popcon.append(package) + + ordered_packages = [] + while packages_queue.empty() is False: + _, package = packages_queue.get() + ordered_packages.append(package) + + for package in has_no_popcon: + ordered_packages.append(package) + + return ordered_packages + def classify(self): + self.packages = Classifier.order_packages_by_popcon(self.packages) classified = dict() - ordered_packages = PriorityQueue() - for p in self.packages: - if p.ready_for_upload: - cls = 'ready_for_upload' - elif p.has_rc_bugs: - cls = 'rc_bugs' - elif p.missing_tag: - cls = 'missing_tag' - elif not p.tags: - cls = 'new' - elif p.newer_upstream: - cls = 'new_upstream' - elif p.watch_problem: - cls = 'watch_problem' - elif p.bugs: - cls = 'bugs' - elif not p.is_tagged: - cls = 'wip' + for package in self.packages: + if package.ready_for_upload: + classification = 'ready_for_upload' + elif package.has_rc_bugs: + classification = 'rc_bugs' + elif package.missing_tag: + classification = 'missing_tag' + elif not package.tags: + classification = 'new' + elif package.newer_upstream: + classification = 'new_upstream' + elif package.watch_problem: + classification = 'watch_problem' + elif package.bugs: + classification = 'bugs' + elif not package.is_tagged: + classification = 'wip' else: - cls = 'other' + classification = 'other' - package_popcon = popcon.package(p.name) - if package_popcon: - ordered_packages.put((-package_popcon[p.name], cls, p)) - while ordered_packages.empty() is False: - _, cls, package = ordered_packages.get() - classified.setdefault(cls, []).append(package) + classified.setdefault(classification, []).append(package) return classified diff --git a/test/test_classifier.py b/test/test_classifier.py index 65c89d5..ced0106 100644 --- a/test/test_classifier.py +++ b/test/test_classifier.py @@ -1,5 +1,13 @@ import unittest import pet.classifier +from pet.classifier import Classifier +import random +import popcon + + +class FakePackage(): + def __init__(self): + self.name = '' class TestPetClassifier(unittest.TestCase): @@ -7,5 +15,19 @@ class TestPetClassifier(unittest.TestCase): def setUp(self): pass - def test_something(self): - pass + def test_classify_popcon(self): + + package_libdigest_md4_perl = FakePackage() + package_libdigest_md4_perl.name = 'libdigest-md4-perl' + package_libsharyanto_utils_perl = FakePackage() + package_libsharyanto_utils_perl.name = 'libsharyanto-utils-perl' + + packages = [package_libdigest_md4_perl, package_libsharyanto_utils_perl] + random.shuffle(packages) + ordered_packages = Classifier.order_packages_by_popcon(packages) + + for i in range(0, len(packages) - 1): + package1 = popcon.package(ordered_packages[i].name) + package2 = popcon.package(ordered_packages[i + 1].name) + self.assertGreaterEqual(package1[ordered_packages[i].name], + package2[ordered_packages[i + 1].name])