From 80539a84aaa17aca1da9c56794e41a114e222041 Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Sun, 14 Jul 2019 16:44:51 +0300 Subject: Add: update_resource --- ick2/persistent.py | 9 +++++++++ ick2/persistent_tests.py | 18 ++++++++++++++++++ 2 files changed, 27 insertions(+) (limited to 'ick2') diff --git a/ick2/persistent.py b/ick2/persistent.py index d865207..d323db7 100644 --- a/ick2/persistent.py +++ b/ick2/persistent.py @@ -45,6 +45,9 @@ class PersistentStateInterface: # pragma: no cover def write_resource(self, token, kind, rid, resource): raise NotImplementedError() + def update_resource(self, token, kind, rid, resource): + raise NotImplementedError() + def remove_resource(self, token, kind, rid): raise NotImplementedError() @@ -72,6 +75,9 @@ class MemoryPersistentState(PersistentStateInterface): 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) @@ -101,6 +107,9 @@ class MuckPersistentState(PersistentStateInterface): 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) diff --git a/ick2/persistent_tests.py b/ick2/persistent_tests.py index 802ca8b..8406acf 100644 --- a/ick2/persistent_tests.py +++ b/ick2/persistent_tests.py @@ -49,6 +49,24 @@ class PersistentStateTestsMixIn: self.assertTrue(isinstance(r2, ick2.Resource)) self.assertEqual(r.as_dict(), r2.as_dict()) + def test_updates_resource(self): + as_dict = {'foo': 'bar'} + r = ick2.resource_from_dict(as_dict) + + as_dict = {'foo': 'yo'} + r2 = ick2.resource_from_dict(as_dict) + + token = self.get_token() + self.state.write_resource(token, 'silly', '#1', r) + 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']) + + actual = self.state.get_resource(token, 'silly', '#1') + self.assertTrue(isinstance(actual, ick2.Resource)) + self.assertEqual(actual.as_dict(), r2.as_dict()) + def test_removes_resource(self): as_dict = {'foo': 'bar'} r = ick2.resource_from_dict(as_dict) -- cgit v1.2.1