summaryrefslogtreecommitdiff
path: root/ick2/controllerapi.py
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2017-11-05 19:15:17 +0100
committerLars Wirzenius <liw@liw.fi>2017-11-05 19:15:17 +0100
commit0936bf84505531a8b4d239afbd38aeb8cdd7f6eb (patch)
tree9ab2899ac42cbe2e945c1536013c7439af4ae8c8 /ick2/controllerapi.py
parentf96b35f63cf1464c3f0dcfbcc70d6e4c0116f5c8 (diff)
downloadick2-0936bf84505531a8b4d239afbd38aeb8cdd7f6eb.tar.gz
Add: GET /work/foo
Diffstat (limited to 'ick2/controllerapi.py')
-rw-r--r--ick2/controllerapi.py46
1 files changed, 36 insertions, 10 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