diff options
author | Pedro Alvarez <pedro.alvarez@codethink.co.uk> | 2016-03-07 17:48:43 +0000 |
---|---|---|
committer | Pedro Alvarez <pedro.alvarez@codethink.co.uk> | 2016-03-27 11:53:02 +0000 |
commit | 90404c48e011f0cf9e715359290ce1b4f7c9e02b (patch) | |
tree | e3ab5e75657aa8df9a1ed8e258e3eea373dc4f63 | |
parent | 2cf7d80e432e1ae527f1b810ecd3e2cd9b0c2dcb (diff) | |
download | morph-90404c48e011f0cf9e715359290ce1b4f7c9e02b.tar.gz |
Find unbuilt artifacts
Change-Id: If6116eee783ad2d5018395cbcea9361bd8924164
-rw-r--r-- | gear/client.py | 39 |
1 files changed, 31 insertions, 8 deletions
diff --git a/gear/client.py b/gear/client.py index 17202cdd..ad1b0fc4 100644 --- a/gear/client.py +++ b/gear/client.py @@ -17,7 +17,7 @@ gear.Server() class theController(): def __init__(self): - self.graph_client = aGearmanClient(self) + self.graph_client = BuildGraphClient(self) self.artifact = None def _process_build_graph(self, packet): @@ -57,37 +57,56 @@ class theController(): mapped_components.append(a) return result, mapped_components + def find_artifacts_that_are_ready_to_build(self, root_artifact, components=[]): + '''Return unbuilt artifacts whose dependencies are all built. -class aGearmanClient(gear.Client): + The 'root_artifact' parameter is expected to be a tree of ArtifactReference + objects. These must have the 'state' attribute set to BUILT or UNBUILT. If + 'components' is passed, then only those artifacts and their dependencies + will be built. + + ''' + def is_ready_to_build(artifact): + return (artifact.state == UNBUILT and + all(a.state == BUILT + for a in artifact.dependencies)) + + artifacts, _ = self._map_build_graph(root_artifact, lambda a: a, + components) + return [a for a in artifacts if is_ready_to_build(a)] + + + +class BuildGraphClient(gear.Client): def __init__(self, controller): - super(aGearmanClient, self).__init__() + super(BuildGraphClient, self).__init__() self.controller = controller self.finished = False def handleWorkComplete(self, packet): - job = super(aGearmanClient, self).handleWorkComplete(packet) + job = super(BuildGraphClient, self).handleWorkComplete(packet) print "workcomplete" self.controller._process_build_graph(packet) return job def handleWorkData(self, packet): - job = super(aGearmanClient, self).handleWorkData(packet) + job = super(BuildGraphClient, self).handleWorkData(packet) print job.data[-1] job.data = [] return job def handleWorkFail(self, packet): - job = super(aGearmanClient, self).handleWorkFail(packet) + job = super(BuildGraphClient, self).handleWorkFail(packet) print "workfail" return job def handleWorkException(self, packet): - job = super(aGearmanClient, self).handleWorkException(packet) + job = super(BuildGraphClient, self).handleWorkException(packet) print "workexception" return job def handleDisconnect(self, job): - job = super(aGearmanClient, self).handleDisconnect(job) + job = super(BuildGraphClient, self).handleDisconnect(job) print "disconnect" @@ -117,3 +136,7 @@ client.submitJob(job) while True: import time time.sleep(2) + if controller.artifact != None: + to_build = controller.find_artifacts_that_are_ready_to_build(controller.artifact) + print to_build + exit(0) |