Mercurial > p > roundup > code
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.
