~launchpad-pqm/launchpad/devel

« back to all changes in this revision

Viewing changes to lib/lp/soyuz/model/buildqueue.py

Merge.

Show diffs side-by-side

added added

removed removed

Lines of Context:
7
7
 
8
8
__all__ = [
9
9
    'BuildQueue',
10
 
    'BuildQueueSet'
 
10
    'BuildQueueSet',
 
11
    'specific_job_classes',
11
12
    ]
12
13
 
13
14
import logging
37
38
    IStoreSelector, MAIN_STORE, DEFAULT_FLAVOR)
38
39
 
39
40
 
 
41
def specific_job_classes():
 
42
    """Job classes that may run on the build farm."""
 
43
    job_classes = dict()
 
44
    # Get all components that implement the `IBuildFarmJob` interface.
 
45
    components = getSiteManager()
 
46
    implementations = sorted(components.getUtilitiesFor(IBuildFarmJob))
 
47
    # The above yields a collection of 2-tuples where the first element
 
48
    # is the name of the `BuildFarmJobType` enum and the second element
 
49
    # is the implementing class respectively.
 
50
    for job_enum_name, job_class in implementations:
 
51
        job_enum = getattr(BuildFarmJobType, job_enum_name)
 
52
        job_classes[job_enum] = job_class
 
53
 
 
54
    return job_classes
 
55
 
 
56
 
40
57
class BuildQueue(SQLBase):
41
58
    implements(IBuildQueue)
42
59
    _table = "BuildQueue"
60
77
        return IBuildFarmJobBehavior(self.specific_job)
61
78
 
62
79
    @property
63
 
    def specific_job_classes(self):
64
 
        """See `IBuildQueue`."""
65
 
        job_classes = dict()
66
 
        # Get all components that implement the `IBuildFarmJob` interface.
67
 
        components = getSiteManager()
68
 
        implementations = sorted(components.getUtilitiesFor(IBuildFarmJob))
69
 
        # The above yields a collection of 2-tuples where the first element
70
 
        # is the name of the `BuildFarmJobType` enum and the second element
71
 
        # is the implementing class respectively.
72
 
        for job_enum_name, job_class in implementations:
73
 
            job_enum = getattr(BuildFarmJobType, job_enum_name)
74
 
            job_classes[job_enum] = job_class
75
 
 
76
 
        return job_classes
77
 
 
78
 
    @property
79
80
    def specific_job(self):
80
81
        """See `IBuildQueue`."""
81
 
        specific_class = self.specific_job_classes[self.job_type]
 
82
        specific_class = specific_job_classes()[self.job_type]
82
83
        store = Store.of(self)
83
84
        result_set = store.find(
84
85
            specific_class, specific_class.job == self.job)
318
319
        result_set = store.find(
319
320
            BuildQueue,
320
321
            BuildQueue.job == Job.id,
 
322
            # status is a property. Let's use _status.
 
323
            Job._status == JobStatus.RUNNING,
321
324
            Job.date_started != None)
322
325
        return result_set
323
326