summaryrefslogtreecommitdiff
path: root/ick2/workapi.py
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2017-11-18 21:39:45 +0100
committerLars Wirzenius <liw@liw.fi>2017-11-18 21:39:45 +0100
commit11b88250079142fbb0a29fbd0968725e63301264 (patch)
tree6d18b310eeba1b35a344c7e75bb471d5b60ea908 /ick2/workapi.py
parentb7a65fc2ea20ea32dca94205618f94aea3939f33 (diff)
downloadick2-11b88250079142fbb0a29fbd0968725e63301264.tar.gz
Refactor: move worker get/update into their own class
Diffstat (limited to 'ick2/workapi.py')
-rw-r--r--ick2/workapi.py41
1 files changed, 24 insertions, 17 deletions
diff --git a/ick2/workapi.py b/ick2/workapi.py
index 3f0b195..0c3df6e 100644
--- a/ick2/workapi.py
+++ b/ick2/workapi.py
@@ -20,6 +20,7 @@ class WorkAPI(ick2.APIbase):
def __init__(self, state):
super().__init__(state)
+ self._workers = Workers(state)
self._type_name = 'work'
def get_routes(self, path): # pragma: no cover
@@ -37,7 +38,7 @@ class WorkAPI(ick2.APIbase):
]
def get_work(self, worker):
- worker_state = self._get_worker(worker)
+ worker_state = self._workers.get_worker(worker)
if not worker_state.get('doing'):
project, pipeline = self._pick_triggered_pipeline()
if project is None:
@@ -64,22 +65,10 @@ class WorkAPI(ick2.APIbase):
'worker': worker,
'doing': doing,
}
- self._update_worker(worker_state)
+ self._workers.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._get_projects()
for project in projects:
@@ -98,7 +87,7 @@ class WorkAPI(ick2.APIbase):
if 'worker' not in update: # pragma: no cover
raise ick2.BadUpdate('no worker specified')
- worker_state = self._get_worker(update['worker'])
+ worker_state = self._workers.get_worker(update['worker'])
doing = worker_state.get('doing', {})
self._check_work_update(doing, update)
@@ -131,7 +120,7 @@ class WorkAPI(ick2.APIbase):
'worker': update['worker'],
'doing': doing,
}
- self._update_worker(worker_state)
+ self._workers.update_worker(worker_state)
elif exit_code is not None:
assert isinstance(exit_code, int)
assert exit_code != 0
@@ -143,7 +132,7 @@ class WorkAPI(ick2.APIbase):
'worker': update['worker'],
'doing': {},
}
- self._update_worker(worker_state)
+ self._workers.update_worker(worker_state)
def _check_work_update(self, doing, update): # pragma: no cover
must_match = ['worker', 'project', 'pipeline', 'build_id']
@@ -217,3 +206,21 @@ class WorkAPI(ick2.APIbase):
def delete(self, *args, **kwargs): # pragma: no cover
pass
+
+
+class Workers: # pragma: no cover
+
+ def __init__(self, state):
+ self._state = state
+
+ def get_worker(self, name):
+ try:
+ return self._state.get_resource('workers', name)
+ except ick2.NotFound:
+ return {
+ 'worker': name,
+ }
+
+ def update_worker(self, worker):
+ self._state.update_resource(
+ 'workers', worker['worker'], worker)