add id field to jsonrpc response
This commit is contained in:
parent
5233dc303e
commit
4e0194d576
1 changed files with 15 additions and 13 deletions
|
@ -108,9 +108,10 @@ class AuthJSONRPCServer(AuthorizedBase):
|
||||||
def setup(self):
|
def setup(self):
|
||||||
return NotImplementedError()
|
return NotImplementedError()
|
||||||
|
|
||||||
def _render_error(self, failure, request, version=jsonrpclib.VERSION_1, response_code=FAILURE):
|
def _render_error(self, failure, request, id_,
|
||||||
|
version=jsonrpclib.VERSION_2, response_code=FAILURE):
|
||||||
err = JSONRPCException(Failure(failure), response_code)
|
err = JSONRPCException(Failure(failure), response_code)
|
||||||
fault = jsonrpclib.dumps(err, version=version)
|
fault = jsonrpclib.dumps(err, id=id_, version=version)
|
||||||
self._set_headers(request, fault)
|
self._set_headers(request, fault)
|
||||||
if response_code != AuthJSONRPCServer.FAILURE:
|
if response_code != AuthJSONRPCServer.FAILURE:
|
||||||
request.setResponseCode(response_code)
|
request.setResponseCode(response_code)
|
||||||
|
@ -144,19 +145,19 @@ class AuthJSONRPCServer(AuthorizedBase):
|
||||||
parsed = jsonrpclib.loads(content)
|
parsed = jsonrpclib.loads(content)
|
||||||
except ValueError as err:
|
except ValueError as err:
|
||||||
log.warning("Unable to decode request json")
|
log.warning("Unable to decode request json")
|
||||||
self._render_error(err, request)
|
self._render_error(err, request, None)
|
||||||
return server.NOT_DONE_YET
|
return server.NOT_DONE_YET
|
||||||
|
|
||||||
function_name = parsed.get('method')
|
function_name = parsed.get('method')
|
||||||
args = parsed.get('params')
|
args = parsed.get('params')
|
||||||
id = parsed.get('id')
|
id_ = parsed.get('id')
|
||||||
token = parsed.pop('hmac', None)
|
token = parsed.pop('hmac', None)
|
||||||
version = self._get_jsonrpc_version(parsed.get('jsonrpc'), id)
|
version = self._get_jsonrpc_version(parsed.get('jsonrpc'), id_)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self._run_subhandlers(request)
|
self._run_subhandlers(request)
|
||||||
except SubhandlerError as err:
|
except SubhandlerError as err:
|
||||||
self._render_error(err, request, version)
|
self._render_error(err, request, id_, version)
|
||||||
return server.NOT_DONE_YET
|
return server.NOT_DONE_YET
|
||||||
|
|
||||||
reply_with_next_secret = False
|
reply_with_next_secret = False
|
||||||
|
@ -167,7 +168,8 @@ class AuthJSONRPCServer(AuthorizedBase):
|
||||||
except InvalidAuthenticationToken as err:
|
except InvalidAuthenticationToken as err:
|
||||||
log.warning("API validation failed")
|
log.warning("API validation failed")
|
||||||
self._render_error(
|
self._render_error(
|
||||||
err, request, version=version, response_code=AuthJSONRPCServer.UNAUTHORIZED)
|
err, request, id_, version=version,
|
||||||
|
response_code=AuthJSONRPCServer.UNAUTHORIZED)
|
||||||
return server.NOT_DONE_YET
|
return server.NOT_DONE_YET
|
||||||
self._update_session_secret(session_id)
|
self._update_session_secret(session_id)
|
||||||
reply_with_next_secret = True
|
reply_with_next_secret = True
|
||||||
|
@ -176,7 +178,7 @@ class AuthJSONRPCServer(AuthorizedBase):
|
||||||
function = self._get_jsonrpc_method(function_name)
|
function = self._get_jsonrpc_method(function_name)
|
||||||
except AttributeError as err:
|
except AttributeError as err:
|
||||||
log.warning("Unknown method: %s", function_name)
|
log.warning("Unknown method: %s", function_name)
|
||||||
self._render_error(err, request, version)
|
self._render_error(err, request, id_, version)
|
||||||
return server.NOT_DONE_YET
|
return server.NOT_DONE_YET
|
||||||
|
|
||||||
if args == [{}]:
|
if args == [{}]:
|
||||||
|
@ -186,9 +188,9 @@ class AuthJSONRPCServer(AuthorizedBase):
|
||||||
|
|
||||||
# cancel the response if the connection is broken
|
# cancel the response if the connection is broken
|
||||||
notify_finish.addErrback(self._response_failed, d)
|
notify_finish.addErrback(self._response_failed, d)
|
||||||
d.addCallback(self._callback_render, request, version, reply_with_next_secret)
|
d.addCallback(self._callback_render, request, id_, version, reply_with_next_secret)
|
||||||
d.addErrback(
|
d.addErrback(
|
||||||
log.fail(self._render_error, request, version=version),
|
log.fail(self._render_error, request, id_, version=version),
|
||||||
'Failed to process %s', function_name
|
'Failed to process %s', function_name
|
||||||
)
|
)
|
||||||
return server.NOT_DONE_YET
|
return server.NOT_DONE_YET
|
||||||
|
@ -299,7 +301,7 @@ class AuthJSONRPCServer(AuthorizedBase):
|
||||||
if not handler(request):
|
if not handler(request):
|
||||||
raise SubhandlerError("Subhandler error processing request: %s", request)
|
raise SubhandlerError("Subhandler error processing request: %s", request)
|
||||||
|
|
||||||
def _callback_render(self, result, request, version, auth_required=False):
|
def _callback_render(self, result, request, id_, version, auth_required=False):
|
||||||
result_for_return = result if not isinstance(result, dict) else result['result']
|
result_for_return = result if not isinstance(result, dict) else result['result']
|
||||||
|
|
||||||
if version == jsonrpclib.VERSION_PRE1:
|
if version == jsonrpclib.VERSION_PRE1:
|
||||||
|
@ -308,12 +310,12 @@ class AuthJSONRPCServer(AuthorizedBase):
|
||||||
# Convert the result (python) to JSON-RPC
|
# Convert the result (python) to JSON-RPC
|
||||||
try:
|
try:
|
||||||
encoded_message = jsonrpclib.dumps(
|
encoded_message = jsonrpclib.dumps(
|
||||||
result_for_return, version=version, default=default_decimal)
|
result_for_return, id=id_, version=version, default=default_decimal)
|
||||||
self._set_headers(request, encoded_message, auth_required)
|
self._set_headers(request, encoded_message, auth_required)
|
||||||
self._render_message(request, encoded_message)
|
self._render_message(request, encoded_message)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
log.exception("Failed to render API response: %s", result)
|
log.exception("Failed to render API response: %s", result)
|
||||||
self._render_error(err, request, version)
|
self._render_error(err, request, id_, version)
|
||||||
|
|
||||||
def _render_response(self, result, code):
|
def _render_response(self, result, code):
|
||||||
return defer.succeed({'result': result, 'code': code})
|
return defer.succeed({'result': result, 'code': code})
|
||||||
|
|
Loading…
Reference in a new issue