comparison 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
comparison
equal deleted inserted replaced
5587:cb2b320fde16 5588:6b3a9655a7d9
12 import sys 12 import sys
13 import time 13 import time
14 import traceback 14 import traceback
15 from roundup import hyperdb 15 from roundup import hyperdb
16 from roundup.exceptions import * 16 from roundup.exceptions import *
17 from roundup import xmlrpc 17
18
19 def _data_decorator(func):
20 """Wrap the returned data into an object."""
21 def format_object(self, *args, **kwargs):
22 # get the data / error from function
23 try:
24 code, data = func(self, *args, **kwargs)
25 except IndexError, msg:
26 code = 404
27 data = msg
28 except Unauthorised, msg:
29 code = 403
30 data = msg
31 except (hyperdb.DesignatorError, UsageError), msg:
32 code = 400
33 data = msg
34 except (AttributeError, Reject), msg:
35 code = 405
36 data = msg
37 except ValueError, msg:
38 code = 409
39 data = msg
40 except NotImplementedError:
41 code = 402 # nothing to pay, just a mark for debugging purpose
42 data = 'Method under development'
43 except:
44 exc, val, tb = sys.exc_info()
45 code = 400
46 # if self.DEBUG_MODE in roundup_server
47 # else data = 'An error occurred. Please check...',
48 data = val
49
50 # out to the logfile
51 print 'EXCEPTION AT', time.ctime()
52 traceback.print_exc()
53
54 # decorate it
55 self.client.response_code = code
56 if code >= 400: # any error require error format
57 result = {
58 'error': {
59 'status': code,
60 'msg': data
61 }
62 }
63 else:
64 result = {
65 'data': data
66 }
67 return result
68 return format_object
18 69
19 70
20 class RestfulInstance(object): 71 class RestfulInstance(object):
21 """The RestfulInstance performs REST request from the client""" 72 """The RestfulInstance performs REST request from the client"""
22 73
87 except hyperdb.HyperdbValueError, msg: 138 except hyperdb.HyperdbValueError, msg:
88 raise UsageError(msg) 139 raise UsageError(msg)
89 140
90 return prop 141 return prop
91 142
92 def _data_decorator(func):
93 """Wrap the returned data into an object.."""
94 def format_object(self, *args, **kwargs):
95 try:
96 code, data = func(self, *args, **kwargs)
97 except IndexError, msg:
98 code = 404
99 data = msg
100 except Unauthorised, msg:
101 code = 403
102 data = msg
103 except (hyperdb.DesignatorError, UsageError), msg:
104 code = 400
105 data = msg
106 except (AttributeError, Reject), msg:
107 code = 405
108 data = msg
109 except ValueError, msg:
110 code = 409
111 data = msg
112 except NotImplementedError:
113 code = 402 # nothing to pay, just a mark for debugging purpose
114 data = 'Method under development'
115 except:
116 exc, val, tb = sys.exc_info()
117 code = 400
118 # if self.DEBUG_MODE in roundup_server
119 # else data = 'An error occurred. Please check...',
120 data = val
121
122 # out to the logfile
123 print 'EXCEPTION AT', time.ctime()
124 traceback.print_exc()
125
126 self.client.response_code = code
127 if code >= 400: # any error require error format
128 result = {
129 'error': {
130 'status': code,
131 'msg': data
132 }
133 }
134 else:
135 result = {
136 'data': data
137 }
138 return result
139 return format_object
140
141 @_data_decorator 143 @_data_decorator
142 def get_collection(self, class_name, input): 144 def get_collection(self, class_name, input):
143 """GET resource from class URI. 145 """GET resource from class URI.
144 146
145 This function returns only items have View permission 147 This function returns only items have View permission

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