diff options
author | Lars Wirzenius <liw@liw.fi> | 2017-12-15 17:32:34 +0200 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2017-12-15 17:32:34 +0200 |
commit | 389454df96b8b0d41edd2179287201844cfedbf6 (patch) | |
tree | dff1744fe7cb5e9f026e8ff842db0ee58b81e260 /ick2 | |
parent | bc1eb6165749d3ff8ed1846c37673cfed56ad9e9 (diff) | |
download | ick2-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__.py | 8 | ||||
-rw-r--r-- | ick2/state.py | 55 | ||||
-rw-r--r-- | ick2/workapi.py | 39 |
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) |