diff options
-rw-r--r-- | ick2/controllerapi.py | 46 | ||||
-rw-r--r-- | ick2/controllerapi_tests.py | 16 |
2 files changed, 44 insertions, 18 deletions
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': '{}/<worker>'.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 diff --git a/ick2/controllerapi_tests.py b/ick2/controllerapi_tests.py index 7ad3344..6b31117 100644 --- a/ick2/controllerapi_tests.py +++ b/ick2/controllerapi_tests.py @@ -268,27 +268,27 @@ class WorkAPITests(unittest.TestCase): api.create(worker) return api - def create_work_api(self, projects, workers): - return ick2.WorkAPI(self.state, projects, workers) + def create_work_api(self): + return ick2.WorkAPI(self.state) def test_worker_gets_no_work_when_no_pipeline_is_triggered(self): - projects = self.create_project_api() - workers = self.create_worker_api() - work = self.create_work_api(projects, workers) + self.create_project_api() + self.create_worker_api() + work = self.create_work_api() self.assertEqual(work.get_work('asterix'), {}) def test_worker_gets_work_when_a_pipeline_is_triggered(self): projects = self.create_project_api() - workers = self.create_worker_api() - work = self.create_work_api(projects, workers) projects.set_pipeline('triggered', 'foo', 'build') + self.create_worker_api() + work = self.create_work_api() expected = { 'project': 'foo', 'pipeline': 'build', 'step': { 'shell': 'step-1', }, - 'current_step': 0, + 'step_index': 0, } self.assertEqual(work.get_work('asterix'), expected) |