explodinglabs/jsonrpcserver

dispatcher get request as 'str' only

yakkle opened this issue · 1 comments

If I call dispatcher with request as bytes, that doesn't work.

    def dispatch():
         request_bytes = b'{"id": 1, "jsonrpc": "2.0",  "method": "get_name"}'
         await async_dispatch(request_bytes, methods, context=context)

because of bytes.replace need bytes-like object in log.py.

Traceback (most recent call last):
  File "/Users/yakkle/.virtualenvs/icon_rpc_server/lib/python3.7/site-packages/sanic/app.py", line 976, in handle_request
    response = await response
  File "/Users/yakkle/projects/icon_rpc_server/iconrpcserver/dispatcher/v3/version3.py", line 50, in dispatch
    response = await async_dispatch(request.body, methods, context=context)
  File "/Users/yakkle/.virtualenvs/icon_rpc_server/lib/python3.7/site-packages/jsonrpcserver/async_dispatcher.py", line 98, in dispatch
    log_request(request, trim_log_values=trim_log_values)
  File "/Users/yakkle/.virtualenvs/icon_rpc_server/lib/python3.7/site-packages/jsonrpcserver/dispatcher.py", line 82, in log_request
    return log_(request, request_logger, logging.INFO, trim=trim_log_values, **kwargs)
  File "/Users/yakkle/.virtualenvs/icon_rpc_server/lib/python3.7/site-packages/jsonrpcserver/log.py", line 78, in log_
    message = message.replace("\n", "").replace("  ", " ").replace("{ ", "{")
TypeError: a bytes-like object is required, not 'str'

request object of sanic has json as dict type and body as bytes type.
I have to convert dict or bytes to str.
It would be better support request as bytes to avoid redundant converting.

bcb commented

Yes many of the libraries require you to decode the request before passing it to jsonrpcserver, (examples)

Isn’t it best for the implementation to do it, not jsonrpcserver? Jsonrpcserver doesn’t know how to decode it.