summaryrefslogtreecommitdiff
path: root/ick2/apibase.py
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2017-11-25 18:43:36 +0100
committerLars Wirzenius <liw@liw.fi>2017-11-25 18:43:36 +0100
commit2d4733f446dd4e62a554bfe637b1d595571842f8 (patch)
tree8cd3e25939ddf7acf703a863b21f498a28804cad /ick2/apibase.py
parentbdadf8cf1acddcbec060a529bedafd0abb5913f2 (diff)
downloadick2-2d4733f446dd4e62a554bfe637b1d595571842f8.tar.gz
Fix: POST /project with an existing project name fails
Diffstat (limited to 'ick2/apibase.py')
-rw-r--r--ick2/apibase.py16
1 files changed, 12 insertions, 4 deletions
diff --git a/ick2/apibase.py b/ick2/apibase.py
index 7694b47..9795178 100644
--- a/ick2/apibase.py
+++ b/ick2/apibase.py
@@ -73,8 +73,11 @@ class APIbase:
ick2.log.log(
'trace', msg_text='POST called', kwargs=kwargs,
content_type=content_type, body=body)
- body = callback(body)
- ick2.log.log('trace', msg_text='returned body', body=repr(body))
+ try:
+ body = callback(body)
+ except ick2.ExistsAlready as e:
+ ick2.log.log('error', msg_text=str(e))
+ return ick2.conflict(str(e))
return ick2.created(body)
return wrapper
@@ -144,8 +147,13 @@ class ResourceApiBase(APIbase):
return self._state.get_resource(self._type_name, name)
def create(self, body, **kwargs):
- return self._state.add_resource(
- self._type_name, self.get_resource_name(body), body)
+ name = self.get_resource_name(body)
+ try:
+ self._state.get_resource(self._type_name, name)
+ except ick2.NotFound:
+ return self._state.add_resource(self._type_name, name, body)
+ else:
+ raise ick2.ExistsAlready(name)
def get_resource_name(self, resource): # pragma: no cover
raise NotImplementedError()