From 2d4733f446dd4e62a554bfe637b1d595571842f8 Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Sat, 25 Nov 2017 18:43:36 +0100 Subject: Fix: POST /project with an existing project name fails --- ick2/apibase.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'ick2/apibase.py') 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() -- cgit v1.2.1