From 0936bf84505531a8b4d239afbd38aeb8cdd7f6eb Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Sun, 5 Nov 2017 19:15:17 +0100 Subject: Add: GET /work/foo --- ick2/controllerapi.py | 46 ++++++++++++++++++++++++++++++++++++---------- 1 file changed, 36 insertions(+), 10 deletions(-) (limited to 'ick2/controllerapi.py') diff --git a/ick2/controllerapi.py b/ick2/controllerapi.py index 91d68b6..a7d4026 100644 --- a/ick2/controllerapi.py +++ b/ick2/controllerapi.py @@ -34,6 +34,7 @@ class ControllerAPI: apis = { '/version': VersionAPI, '/projects': ProjectAPI, + '/work': WorkAPI, '/workers': WorkerAPI, } @@ -299,45 +300,70 @@ class ProjectAPI(ResourceApiBase): class WorkAPI(APIbase): - def __init__(self, state, projects, workers): + def __init__(self, state): super().__init__(state) - self._projects = projects - self._workers = workers - self._type_name = 'workers' + self._type_name = 'work' + + def get_routes(self, path): # pragma: no cover + return [ + { + 'method': 'GET', + 'path': '{}/'.format(path), + 'callback': self.GET(self.get_work), + }, + ] def get_work(self, worker): - worker_state = self._state.get_resource(self._type_name, worker) + worker_state = self._get_worker(worker) if not worker_state.get('doing'): project, pipeline = self._pick_triggered_pipeline() if project is None: doing = {} else: pipeline['status'] = 'building' - self._projects.update(project, project['project']) + self._update_project(project) doing = { 'project': project['project'], 'pipeline': pipeline['name'], 'step': pipeline['actions'][0], - 'current_step': 0, + 'step_index': 0, } worker_state = { 'worker': worker, 'doing': doing, } - self._state.update_resource(self._type_name, worker, worker_state) + self._update_worker(worker_state) return worker_state['doing'] + def _get_worker(self, worker): # pragma: no cover + try: + return self._state.get_resource('workers', worker) + except ick2.NotFound: + return { + 'worker': worker, + } + + def _update_worker(self, worker_state): + self._state.update_resource( + 'workers', worker_state['worker'], worker_state) + def _pick_triggered_pipeline(self): - projects = self._projects.list() - for project in projects['projects']: + projects = self._get_projects() + for project in projects: for pipeline in project['pipelines']: if pipeline.get('status') == 'triggered': return project, pipeline return None, None + def _get_projects(self): + return self._state.get_resources('projects') + + def _update_project(self, project): + self._state.update_resource('projects', project['project'], project) + def create(self, *args, **kwargs): # pragma: no cover pass -- cgit v1.2.1