summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2019-10-18 10:49:26 +0300
committerLars Wirzenius <liw@liw.fi>2019-10-18 10:49:26 +0300
commite7deacdc5ed9ca4faef3375e5b962d7b000ba9b5 (patch)
tree532a5a8cc25fb77ddf48807fc594e5e182910953
parent67de4c99b46c5f77950393a0f5b88a400949c331 (diff)
downloadick2-e7deacdc5ed9ca4faef3375e5b962d7b000ba9b5.tar.gz
Revert "Drop: TransactionalState.has_resource (bad, racy)"
This reverts commit 2cdb28a8350478a5d92607be8c95d5e5d43f4dfc.
-rw-r--r--ick2/apibase.py6
-rw-r--r--ick2/trans.py7
2 files changed, 9 insertions, 4 deletions
diff --git a/ick2/apibase.py b/ick2/apibase.py
index 19f70e4..b950c11 100644
--- a/ick2/apibase.py
+++ b/ick2/apibase.py
@@ -182,6 +182,8 @@ class ResourceApiBase(APIbase):
as_dict = self.mangle_new_resource(body)
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, name) as resource:
resource.from_dict(as_dict)
@@ -196,6 +198,8 @@ class ResourceApiBase(APIbase):
def update(self, body, name, token=None, **kwargs):
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, name) as resource:
as_dict = self.mangle_updated_resource(resource.as_dict(), body)
@@ -207,4 +211,6 @@ class ResourceApiBase(APIbase):
return new
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, name=name)
self._trans.remove_resource(token, self._type_name, name)
diff --git a/ick2/trans.py b/ick2/trans.py
index 119f277..b35cf50 100644
--- a/ick2/trans.py
+++ b/ick2/trans.py
@@ -60,8 +60,6 @@ class TransactionalState:
self.state = state
def new(self, token, kind, name):
- if self.state.has_resource(token, kind, name):
- raise ick2.ExistsAlaready(name)
return TransactionalResource(token, self.state, kind, name)
def modify(self, token, kind, name):
@@ -69,6 +67,9 @@ class TransactionalState:
raise ick2.NotFound(kind=kind, name=name)
return TransactionalResource(token, self.state, kind, name)
+ def has_resource(self, token, kind, name):
+ return self.state.has_resource(token, kind, name)
+
def get_resource(self, token, kind, name):
return self.state.get_resource(token, kind, name)
@@ -76,6 +77,4 @@ class TransactionalState:
return self.state.get_resources(token, kind)
def remove_resource(self, token, kind, name):
- if not self.state.has_resource(token, kind, name):
- raise ick2.NotFound(kind=kind, name=name)
self.state.remove_resource(token, kind, name)