From 03a559309b8790f6bc3ad3d92300a4c172910abb Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Sat, 20 Jul 2019 15:58:49 +0300 Subject: Change: refer to resource by name, not id --- ick2/__init__.py | 1 - ick2/apibase.py | 21 ++++++------- ick2/persistent.py | 82 +++++++++++++++--------------------------------- ick2/persistent_tests.py | 17 +++------- ick2/trans.py | 40 +++++++++++------------ 5 files changed, 59 insertions(+), 102 deletions(-) (limited to 'ick2') diff --git a/ick2/__init__.py b/ick2/__init__.py index 8bfa867..e21f666 100644 --- a/ick2/__init__.py +++ b/ick2/__init__.py @@ -21,7 +21,6 @@ from .store import ( ) from .persistent import ( MemoryPersistentState, - MuckPersistentState, NotFound, Resource, resource_from_dict, diff --git a/ick2/apibase.py b/ick2/apibase.py index e18ebe2..b950c11 100644 --- a/ick2/apibase.py +++ b/ick2/apibase.py @@ -23,8 +23,7 @@ class APIbase: def __init__(self, state): assert (state is None or - isinstance(state, ick2.MemoryPersistentState) or - isinstance(state, ick2.MuckPersistentState)) + isinstance(state, ick2.MemoryPersistentState)) self._trans = ick2.TransactionalState(state) def get_routes(self, path): @@ -182,11 +181,11 @@ class ResourceApiBase(APIbase): body=body, token=token, kwargs=kwargs) as_dict = self.mangle_new_resource(body) - rid = self.get_resource_name(as_dict) - if self._trans.has_resource(token, self._type_name, rid): - raise ick2.ExistsAlready(rid) + name = self.get_resource_name(as_dict) + if self._trans.has_resource(token, self._type_name, name): + raise ick2.ExistsAlready(name) - with self._trans.new(token, self._type_name, rid) as resource: + with self._trans.new(token, self._type_name, name) as resource: resource.from_dict(as_dict) return as_dict @@ -198,11 +197,11 @@ class ResourceApiBase(APIbase): raise NotImplementedError() def update(self, body, name, token=None, **kwargs): - rid = self.get_resource_name(body) - if not self._trans.has_resource(token, self._type_name, rid): - raise ick2.NotFound(kind=self._type_name, rid=rid) + name = self.get_resource_name(body) + if not self._trans.has_resource(token, self._type_name, name): + raise ick2.NotFound(kind=self._type_name, name=name) - with self._trans.modify(token, self._type_name, rid) as resource: + with self._trans.modify(token, self._type_name, name) as resource: as_dict = self.mangle_updated_resource(resource.as_dict(), body) resource.from_dict(as_dict) @@ -213,5 +212,5 @@ class ResourceApiBase(APIbase): def delete(self, name, token=None, **kwargs): if not self._trans.has_resource(token, self._type_name, name): - raise ick2.NotFound(kind=self._type_name, rid=name) + raise ick2.NotFound(kind=self._type_name, name=name) self._trans.remove_resource(token, self._type_name, name) diff --git a/ick2/persistent.py b/ick2/persistent.py index d323db7..e225b88 100644 --- a/ick2/persistent.py +++ b/ick2/persistent.py @@ -27,28 +27,28 @@ import ick2 class PersistentStateInterface: # pragma: no cover - def get_resource_ids(self, token, kind): + def get_resource_names(self, token, kind): raise NotImplementedError() - def has_resource(self, token, kind, rid): + def has_resource(self, token, kind, name): raise NotImplementedError() - def get_resource(self, token, kind, rid): + def get_resource(self, token, kind, name): raise NotImplementedError() def get_resources(self, token, kind): return [ - self.get_resource(token, kind, rid) - for rid in self.get_resource_ids(token, kind) + self.get_resource(token, kind, name) + for name in self.get_resource_names(token, kind) ] - def write_resource(self, token, kind, rid, resource): + def write_resource(self, token, kind, name, resource): raise NotImplementedError() - def update_resource(self, token, kind, rid, resource): + def update_resource(self, token, kind, name, resource): raise NotImplementedError() - def remove_resource(self, token, kind, rid): + def remove_resource(self, token, kind, name): raise NotImplementedError() @@ -57,71 +57,39 @@ class MemoryPersistentState(PersistentStateInterface): def __init__(self): self._res = {} - def get_resource_ids(self, token, kind): + def get_resource_names(self, token, kind): if kind not in self._res: return [] return list(self._res[kind].keys()) - def has_resource(self, token, kind, rid): - return kind in self._res and rid in self._res[kind] + def has_resource(self, token, kind, name): + return kind in self._res and name in self._res[kind] - def get_resource(self, token, kind, rid): - if kind not in self._res or rid not in self._res[kind]: - raise ick2.NotFound(kind=kind, rid=rid) - return self._res[kind][rid] + def get_resource(self, token, kind, name): + if kind not in self._res or name not in self._res[kind]: + raise ick2.NotFound(kind=kind, name=name) + return self._res[kind][name] - def write_resource(self, token, kind, rid, resource): + def write_resource(self, token, kind, name, resource): if kind not in self._res: self._res[kind] = {} - self._res[kind][rid] = resource + self._res[kind][name] = resource - def update_resource(self, token, kind, rid, resource): - self.write_resource(token, kind, rid, resource) + def update_resource(self, token, kind, name, resource): + self.write_resource(token, kind, name, resource) - def remove_resource(self, token, kind, rid): - if kind not in self._res or rid not in self._res[kind]: - raise ick2.NotFound(kind=kind, rid=rid) - del self._res[kind][rid] - - -class MuckPersistentState(PersistentStateInterface): - - def __init__(self): - self._res = {} - - def get_resource_ids(self, token, kind): - if kind not in self._res: - return [] - return list(self._res[kind].keys()) - - def has_resource(self, token, kind, rid): - return kind in self._res and rid in self._res[kind] - - def get_resource(self, token, kind, rid): - if kind not in self._res or rid not in self._res[kind]: - raise ick2.NotFound(kind=kind, rid=rid) - return self._res[kind][rid] - - def write_resource(self, token, kind, rid, resource): - if kind not in self._res: - self._res[kind] = {} - self._res[kind][rid] = resource - - def update_resource(self, token, kind, rid, resource): - self.write_resource(token, kind, rid, resource) - - def remove_resource(self, token, kind, rid): - if kind not in self._res or rid not in self._res[kind]: - raise ick2.NotFound(kind=kind, rid=rid) - del self._res[kind][rid] + def remove_resource(self, token, kind, name): + if kind not in self._res or name not in self._res[kind]: + raise ick2.NotFound(kind=kind, name=name) + del self._res[kind][name] class NotFound(Exception): - def __init__(self, kind, rid): + def __init__(self, kind, name): super().__init__( 'Resource {}:{} not found'.format( - kind or "unknown", rid or "unknown")) + kind or "unknown", name or "unknown")) class Resource: # pragma: no cover diff --git a/ick2/persistent_tests.py b/ick2/persistent_tests.py index 8406acf..18b5c5c 100644 --- a/ick2/persistent_tests.py +++ b/ick2/persistent_tests.py @@ -29,7 +29,7 @@ class PersistentStateTestsMixIn: def test_has_no_resources_initially(self): token = self.get_token() - self.assertEqual(self.state.get_resource_ids(token, 'silly'), []) + self.assertEqual(self.state.get_resource_names(token, 'silly'), []) def test_has_no_resource_initially(self): token = self.get_token() @@ -43,7 +43,7 @@ class PersistentStateTestsMixIn: token = self.get_token() self.state.write_resource(token, 'silly', '#1', r) self.assertTrue(self.state.has_resource(token, 'silly', '#1')) - self.assertEqual(self.state.get_resource_ids(token, 'silly'), ['#1']) + self.assertEqual(self.state.get_resource_names(token, 'silly'), ['#1']) r2 = self.state.get_resource(token, 'silly', '#1') self.assertTrue(isinstance(r2, ick2.Resource)) @@ -61,7 +61,7 @@ class PersistentStateTestsMixIn: self.state.update_resource(token, 'silly', '#1', r2) self.assertTrue(self.state.has_resource(token, 'silly', '#1')) - self.assertEqual(self.state.get_resource_ids(token, 'silly'), ['#1']) + self.assertEqual(self.state.get_resource_names(token, 'silly'), ['#1']) actual = self.state.get_resource(token, 'silly', '#1') self.assertTrue(isinstance(actual, ick2.Resource)) @@ -75,7 +75,7 @@ class PersistentStateTestsMixIn: self.state.write_resource(token, 'silly', '#1', r) self.state.remove_resource(token, 'silly', '#1') self.assertFalse(self.state.has_resource(token, 'silly', '#1')) - self.assertEqual(self.state.get_resource_ids(token, 'silly'), []) + self.assertEqual(self.state.get_resource_names(token, 'silly'), []) def test_raises_error_removing_nonexistent_resource_kind(self): token = self.get_token() @@ -99,12 +99,3 @@ class MemoryPersistentStateTests(unittest.TestCase, PersistentStateTestsMixIn): def setUp(self): self.state = ick2.MemoryPersistentState() - - -class MuckPersistentStateTests(unittest.TestCase, PersistentStateTestsMixIn): - - def get_token(self): - return 'DUMMY-TOKEN' - - def setUp(self): - self.state = ick2.MuckPersistentState() diff --git a/ick2/trans.py b/ick2/trans.py index 171c996..afbeeb2 100644 --- a/ick2/trans.py +++ b/ick2/trans.py @@ -19,14 +19,14 @@ import ick2 class TransactionalResource: - def __init__(self, token, state, kind, rid): + def __init__(self, token, state, kind, name): self.token = token self.state = state self.kind = kind - self.rid = rid - if state.has_resource(self.token, kind, rid): + self.name = name + if state.has_resource(self.token, kind, name): self.new = False - self.resource = state.get_resource(self.token, kind, rid) + self.resource = state.get_resource(self.token, kind, name) else: self.new = True self.resource = ick2.resource_from_dict({}) @@ -48,10 +48,10 @@ class TransactionalResource: if exc_type is None: if self.new: self.state.write_resource( - self.token, self.kind, self.rid, self.resource) + self.token, self.kind, self.name, self.resource) else: self.state.update_resource( - self.token, self.kind, self.rid, self.resource) + self.token, self.kind, self.name, self.resource) class TransactionalState: @@ -59,25 +59,25 @@ class TransactionalState: def __init__(self, state): self.state = state - def new(self, token, kind, rid): - return TransactionalResource(token, self.state, kind, rid) + def new(self, token, kind, name): + return TransactionalResource(token, self.state, kind, name) - def modify(self, token, kind, rid): - if not self.state.has_resource(token, kind, rid): - raise ick2.NotFound(kind=kind, rid=rid) - return TransactionalResource(token, self.state, kind, rid) + def modify(self, token, kind, name): + if not self.state.has_resource(token, kind, name): + raise ick2.NotFound(kind=kind, name=name) + return TransactionalResource(token, self.state, kind, name) - def get_resource_ids(self, token, kind): - return self.state.get_resource_ids(token, kind) + def get_resource_names(self, token, kind): + return self.state.get_resource_names(token, kind) - def has_resource(self, token, kind, rid): - return self.state.has_resource(token, kind, rid) + def has_resource(self, token, kind, name): + return self.state.has_resource(token, kind, name) - def get_resource(self, token, kind, rid): - return self.state.get_resource(token, kind, rid) + def get_resource(self, token, kind, name): + return self.state.get_resource(token, kind, name) def get_resources(self, token, kind): return self.state.get_resources(token, kind) - def remove_resource(self, token, kind, rid): - self.state.remove_resource(token, kind, rid) + def remove_resource(self, token, kind, name): + self.state.remove_resource(token, kind, name) -- cgit v1.2.1