diff roundup/rest.py @ 5588:6b3a9655a7d9 REST-rebased

Move decorator to outside of the class Change unittest to test the new format using the decorator committer: Ralf Schlatterbeck <rsc@runtux.com>
author Chau Nguyen <dangchau1991@yahoo.com>
date Wed, 30 Jan 2019 10:26:35 +0100
parents cb2b320fde16
children 5a2de4c19109
line wrap: on
line diff
--- a/roundup/rest.py	Wed Jan 30 10:26:35 2019 +0100
+++ b/roundup/rest.py	Wed Jan 30 10:26:35 2019 +0100
@@ -14,7 +14,58 @@
 import traceback
 from roundup import hyperdb
 from roundup.exceptions import *
-from roundup import xmlrpc
+
+
+def _data_decorator(func):
+    """Wrap the returned data into an object."""
+    def format_object(self, *args, **kwargs):
+        # get the data / error from function
+        try:
+            code, data = func(self, *args, **kwargs)
+        except IndexError, msg:
+            code = 404
+            data = msg
+        except Unauthorised, msg:
+            code = 403
+            data = msg
+        except (hyperdb.DesignatorError, UsageError), msg:
+            code = 400
+            data = msg
+        except (AttributeError, Reject), msg:
+            code = 405
+            data = msg
+        except ValueError, msg:
+            code = 409
+            data = msg
+        except NotImplementedError:
+            code = 402  # nothing to pay, just a mark for debugging purpose
+            data = 'Method under development'
+        except:
+            exc, val, tb = sys.exc_info()
+            code = 400
+            # if self.DEBUG_MODE in roundup_server
+            # else data = 'An error occurred. Please check...',
+            data = val
+
+            # out to the logfile
+            print 'EXCEPTION AT', time.ctime()
+            traceback.print_exc()
+
+        # decorate it
+        self.client.response_code = code
+        if code >= 400:  # any error require error format
+            result = {
+                'error': {
+                    'status': code,
+                    'msg': data
+                }
+            }
+        else:
+            result = {
+                'data': data
+            }
+        return result
+    return format_object
 
 
 class RestfulInstance(object):
@@ -89,55 +140,6 @@
 
         return prop
 
-    def _data_decorator(func):
-        """Wrap the returned data into an object.."""
-        def format_object(self, *args, **kwargs):
-            try:
-                code, data = func(self, *args, **kwargs)
-            except IndexError, msg:
-                code = 404
-                data = msg
-            except Unauthorised, msg:
-                code = 403
-                data = msg
-            except (hyperdb.DesignatorError, UsageError), msg:
-                code = 400
-                data = msg
-            except (AttributeError, Reject), msg:
-                code = 405
-                data = msg
-            except ValueError, msg:
-                code = 409
-                data = msg
-            except NotImplementedError:
-                code = 402  # nothing to pay, just a mark for debugging purpose
-                data = 'Method under development'
-            except:
-                exc, val, tb = sys.exc_info()
-                code = 400
-                # if self.DEBUG_MODE in roundup_server
-                # else data = 'An error occurred. Please check...',
-                data = val
-
-                # out to the logfile
-                print 'EXCEPTION AT', time.ctime()
-                traceback.print_exc()
-
-            self.client.response_code = code
-            if code >= 400:  # any error require error format
-                result = {
-                    'error': {
-                        'status': code,
-                        'msg': data
-                    }
-                }
-            else:
-                result = {
-                    'data': data
-                }
-            return result
-        return format_object
-
     @_data_decorator
     def get_collection(self, class_name, input):
         """GET resource from class URI.

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