From 90404c48e011f0cf9e715359290ce1b4f7c9e02b Mon Sep 17 00:00:00 2001 From: Pedro Alvarez Date: Mon, 7 Mar 2016 17:48:43 +0000 Subject: Find unbuilt artifacts Change-Id: If6116eee783ad2d5018395cbcea9361bd8924164 --- gear/client.py | 39 +++++++++++++++++++++++++++++++-------- 1 file 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) -- cgit v1.2.1