summaryrefslogtreecommitdiff
path: root/ick2
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2017-12-15 17:32:34 +0200
committerLars Wirzenius <liw@liw.fi>2017-12-15 17:32:34 +0200
commit389454df96b8b0d41edd2179287201844cfedbf6 (patch)
treedff1744fe7cb5e9f026e8ff842db0ee58b81e260 /ick2
parentbc1eb6165749d3ff8ed1846c37673cfed56ad9e9 (diff)
downloadick2-389454df96b8b0d41edd2179287201844cfedbf6.tar.gz
Refactors: Workers, Project classes
These are wrapper classes around ControllerStore, which abstract away the irrelevant details for callers.
Diffstat (limited to 'ick2')
-rw-r--r--ick2/__init__.py8
-rw-r--r--ick2/state.py55
-rw-r--r--ick2/workapi.py39
3 files changed, 64 insertions, 38 deletions
diff --git a/ick2/__init__.py b/ick2/__init__.py
index 1fffe31..b9715bb 100644
--- a/ick2/__init__.py
+++ b/ick2/__init__.py
@@ -15,7 +15,13 @@
from .version import __version__, __version_info__
from .logging import setup_logging, log
-from .state import ControllerState, NotFound, WrongPipelineStatus
+from .state import (
+ ControllerState,
+ NotFound,
+ WrongPipelineStatus,
+ Workers,
+ Projects,
+)
from .exceptions import (
BadUpdate,
ExistsAlready,
diff --git a/ick2/state.py b/ick2/state.py
index 548ce87..0038c8b 100644
--- a/ick2/state.py
+++ b/ick2/state.py
@@ -21,6 +21,9 @@ import os
import yaml
+import ick2
+
+
class ControllerState:
def __init__(self):
@@ -95,3 +98,55 @@ class WrongPipelineStatus(Exception): # pragma: no cover
def __init__(self, new_state):
super().__init__('Cannot set pipeline state to {}'.format(new_state))
+
+
+class ResourceStore: # pragma: no cover
+
+ def __init__(self, state, category, name_field):
+ self._state = state
+ self._category = category
+ self._name_field = name_field
+
+ def list(self):
+ return self._state.get_resources(self._category)
+
+ def get(self, name):
+ try:
+ return self._state.get_resource(self._category, name)
+ except ick2.NotFound:
+ return {
+ self._name_field: name,
+ }
+
+ def update(self, resource):
+ name = resource[self._name_field]
+ try:
+ self._state.get_resource(self._category, name)
+ except ick2.NotFound:
+ raise ick2.NotFound()
+ else:
+ self._state.update_resource(self._category, name, resource)
+
+
+class Workers(ResourceStore): # pragma: no cover
+
+ def __init__(self, state):
+ super().__init__(state, 'workers', 'worker')
+
+ def get_worker(self, name):
+ return self.get(name)
+
+ def update_worker(self, worker):
+ self.update(worker)
+
+
+class Projects(ResourceStore): # pragma: no cover
+
+ def __init__(self, state):
+ super().__init__(state, 'projects', 'project')
+
+ def get_projects(self):
+ return self.list()
+
+ def update_project(self, project):
+ self.update(project)
diff --git a/ick2/workapi.py b/ick2/workapi.py
index f958132..e0ba1c1 100644
--- a/ick2/workapi.py
+++ b/ick2/workapi.py
@@ -20,8 +20,8 @@ class WorkAPI(ick2.APIbase):
def __init__(self, state):
super().__init__(state)
- self._workers = Workers(state)
- self._projects = Projects(state)
+ self._workers = ick2.Workers(state)
+ self._projects = ick2.Projects(state)
self._type_name = 'work'
def get_routes(self, path): # pragma: no cover
@@ -228,38 +228,3 @@ 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):
- try:
- self._state.get_resource('workers', worker['worker'])
- except ick2.NotFound:
- raise ick2.NotFound()
- else:
- self._state.update_resource(
- 'workers', worker['worker'], worker)
-
-
-class Projects: # pragma: no cover
-
- def __init__(self, state):
- self._state = state
-
- def get_projects(self):
- return self._state.get_resources('projects')
-
- def update_project(self, project):
- self._state.update_resource('projects', project['project'], project)