comparison rhodecode/controllers/api/__init__.py @ 1708:fee9895fa46e beta

changed API to match fully JSON-RPC specs
author Marcin Kuzminski <marcin@python-works.com>
date Mon, 21 Nov 2011 03:08:09 +0200
parents 60249224be04
children 631caf880b87
comparison
equal deleted inserted replaced
1707:54fda6ce9e98 1708:fee9895fa46e
48 48
49 class JSONRPCError(BaseException): 49 class JSONRPCError(BaseException):
50 50
51 def __init__(self, message): 51 def __init__(self, message):
52 self.message = message 52 self.message = message
53 super(JSONRPCError, self).__init__()
53 54
54 def __str__(self): 55 def __str__(self):
55 return str(self.message) 56 return str(self.message)
56 57
57 58
58 def jsonrpc_error(message, code=None): 59 def jsonrpc_error(message, code=None):
59 """ 60 """
60 Generate a Response object with a JSON-RPC error body 61 Generate a Response object with a JSON-RPC error body
61 """ 62 """
62 from pylons.controllers.util import Response 63 from pylons.controllers.util import Response
63 resp = Response(body=json.dumps(dict(result=None, error=message)), 64 resp = Response(body=json.dumps(dict(id=None, result=None, error=message)),
64 status=code, 65 status=code,
65 content_type='application/json') 66 content_type='application/json')
66 return resp 67 return resp
67 68
68 69
115 % (e, urllib.unquote_plus(raw_body))) 116 % (e, urllib.unquote_plus(raw_body)))
116 117
117 # check AUTH based on API KEY 118 # check AUTH based on API KEY
118 try: 119 try:
119 self._req_api_key = json_body['api_key'] 120 self._req_api_key = json_body['api_key']
121 self._req_id = json_body['id']
120 self._req_method = json_body['method'] 122 self._req_method = json_body['method']
121 self._req_params = json_body['args'] 123 self._req_params = json_body['args']
122 log.debug('method: %s, params: %s', 124 log.debug('method: %s, params: %s',
123 self._req_method, 125 self._req_method,
124 self._req_params) 126 self._req_params)
218 self._error = str(json_exc) 220 self._error = str(json_exc)
219 221
220 if self._error is not None: 222 if self._error is not None:
221 raw_response = None 223 raw_response = None
222 224
223 response = dict(result=raw_response, error=self._error) 225 response = dict(id=self._req_id, result=raw_response,
226 error=self._error)
224 227
225 try: 228 try:
226 return json.dumps(response) 229 return json.dumps(response)
227 except TypeError, e: 230 except TypeError, e:
228 log.debug('Error encoding response: %s', e) 231 log.debug('Error encoding response: %s', e)