From 9ea6166068fd33b5fb3cec532ca14564c9b8673f Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Mon, 16 Oct 2017 18:51:14 +0300 Subject: Refactor: make it easier to add resource types to API --- ick2/controllerapi.py | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) (limited to 'ick2/controllerapi.py') diff --git a/ick2/controllerapi.py b/ick2/controllerapi.py index c2d4ef4..aa0871b 100644 --- a/ick2/controllerapi.py +++ b/ick2/controllerapi.py @@ -171,24 +171,41 @@ class VersionAPI(APIbase): pass -class ProjectAPI(APIbase): +class SubAPI(APIbase): + + def __init__(self, type_name, state): + super().__init__(state) + self._type_name = type_name def list(self): return { - 'projects': self._state.get_resources('projects'), + self._type_name: self._state.get_resources(self._type_name), } def show(self, name): - return self._state.get_resource('projects', name) + return self._state.get_resource(self._type_name, name) def create(self, body): - return self._state.add_resource('projects', body['project'], body) + return self._state.add_resource( + self._type_name, self.get_resource_name(body), body) + + def get_resource_name(self, resource): # pragma: no cover + raise NotImplementedError def update(self, body, name): - return self._state.update_resource('projects', name, body) + return self._state.update_resource(self._type_name, name, body) def delete(self, name): - self._state.remove_resource('projects', name) + self._state.remove_resource(self._type_name, name) + + +class ProjectAPI(SubAPI): + + def __init__(self, state): + super().__init__('projects', state) + + def get_resource_name(self, resource): + return resource['project'] def response(status_code, body, headers): # pragma: no cover -- cgit v1.2.1