diff roundup/rest.py @ 5576:77d11a24f718 REST-rebased

Exceptions Handle a case where KeyError exception raise uncaught, Changed some UsageError exception to ValueError exception to handle 409 Conflicted error. committer: Ralf Schlatterbeck <rsc@runtux.com>
author Chau Nguyen <dangchau1991@yahoo.com>
date Wed, 30 Jan 2019 10:26:34 +0100
parents 7a7927643357
children 11e75fbb9edc
line wrap: on
line diff
--- a/roundup/rest.py	Wed Jan 30 10:26:34 2019 +0100
+++ b/roundup/rest.py	Wed Jan 30 10:26:34 2019 +0100
@@ -125,7 +125,7 @@
         # check for the key property
         key = class_obj.getkey()
         if key and key not in props:
-            raise UsageError('Must provide the "%s" property.' % key)
+            raise UsageError("Must provide the '%s' property." % key)
 
         for key in props:
             if not self.db.security.hasPermission('Create', self.db.getuid(),
@@ -138,7 +138,9 @@
             item_id = class_obj.create(**props)
             self.db.commit()
         except (TypeError, IndexError, ValueError), message:
-            raise UsageError(message)
+            raise ValueError(message)
+        except KeyError, msg:
+            raise UsageError("Must provide the %s property." % msg)
 
         # set the header Location
         link = self.base_path + class_name + item_id
@@ -152,10 +154,10 @@
         return 201, result
 
     def post_element(self, class_name, item_id, input):
-        raise Reject('Invalid request')
+        raise Reject('POST to an item is not allowed')
 
     def put_collection(self, class_name, input):
-        raise Reject('Invalid request')
+        raise Reject('PUT a class is not allowed')
 
     def put_element(self, class_name, item_id, input):
         class_obj = self.db.getclass(class_name)
@@ -170,7 +172,7 @@
             result = class_obj.set(item_id, **props)
             self.db.commit()
         except (TypeError, IndexError, ValueError), message:
-            raise UsageError(message)
+            raise ValueError(message)
 
         result = {
             'id': item_id,
@@ -219,7 +221,7 @@
         return 200, result
 
     def patch_collection(self, class_name, input):
-        raise Reject('Invalid request')
+        raise Reject('PATCH a class is not allowed')
 
     def patch_element(self, class_name, item_id, input):
         raise NotImplementedError
@@ -288,8 +290,11 @@
             output = error_obj(400, msg)
             self.client.response_code = 400
         except (AttributeError, Reject), msg:
-            output = error_obj(405, 'Method Not Allowed. ' + str(msg))
+            output = error_obj(405, msg)
             self.client.response_code = 405
+        except ValueError, msg:
+            output = error_obj(409, msg)
+            self.client.response_code = 409
         except NotImplementedError:
             output = error_obj(402, 'Method is under development')
             self.client.response_code = 402

Roundup Issue Tracker: http://roundup-tracker.org/