From 22ef6837637d10b5efcc8da43824d791d2887eab Mon Sep 17 00:00:00 2001 From: Beau Barker Date: Sat, 3 Jul 2021 20:45:21 +1000 Subject: [PATCH] Reorder dispatch_to_response_pure params The params that change most go last --- jsonrpcserver/dispatcher.py | 23 ++++++------- tests/test_dispatcher.py | 66 ++++++++++++++++++------------------- 2 files changed, 45 insertions(+), 44 deletions(-) diff --git a/jsonrpcserver/dispatcher.py b/jsonrpcserver/dispatcher.py index dcdb7a8..1cf7de0 100644 --- a/jsonrpcserver/dispatcher.py +++ b/jsonrpcserver/dispatcher.py @@ -149,10 +149,10 @@ def create_requests(requests: Union[Dict, List[Dict]]) -> Union[Request, List[Re def dispatch_to_response_pure( *, - methods: Methods, - context: Any, - schema_validator: Callable, deserializer: Callable, + schema_validator: Callable, + context: Any, + methods: Methods, request: str, ) -> Union[Response, List[Response], None]: """ @@ -164,9 +164,10 @@ def dispatch_to_response_pure( testing, not dispatch_to_response or dispatch. Args: - methods: Collection of methods that can be called. + deserializer: Function that is used to deserialize data. + schema_validator: context: Will be passed to methods as the first param if not None. - deserialize: Function that is used to deserialize data. + methods: Collection of methods that can be called. request: The incoming request string. Returns: @@ -214,11 +215,11 @@ def dispatch_to_response( Args: request: The JSON-RPC request string. methods: Collection of methods that can be called. If not passed, uses the - internal methods object. + internal, global methods object which is populated with the @method + decorator. context: Will be passed to methods as the first param if not None. schema_validator: - deserialize: Function that is used to deserialize data. - request: The incoming request string. + deserializer: Function that is used to deserialize data. Returns: A Response, list of Responses or None. @@ -227,10 +228,10 @@ def dispatch_to_response( >>> dispatch('{"jsonrpc": "2.0", "method": "ping", "id": 1}', [ping]) """ return dispatch_to_response_pure( - methods=global_methods if methods is None else methods, - context=context, - schema_validator=schema_validator, deserializer=deserializer, + schema_validator=schema_validator, + context=context, + methods=global_methods if methods is None else methods, request=request, ) diff --git a/tests/test_dispatcher.py b/tests/test_dispatcher.py index 38466dd..0238aab 100644 --- a/tests/test_dispatcher.py +++ b/tests/test_dispatcher.py @@ -122,10 +122,10 @@ def test_create_requests_batch(): def test_dispatch_to_response_pure(): response = dispatch_to_response_pure( - methods=Methods(ping), - context=None, - schema_validator=default_schema_validator, deserializer=default_deserializer, + schema_validator=default_schema_validator, + context=None, + methods=Methods(ping), request='{"jsonrpc": "2.0", "method": "ping", "id": 1}', ) assert isinstance(response, SuccessResponse) @@ -135,10 +135,10 @@ def test_dispatch_to_response_pure(): def test_dispatch_to_response_pure_notification(): response = dispatch_to_response_pure( - methods=Methods(ping), - context=None, - schema_validator=default_schema_validator, deserializer=default_deserializer, + schema_validator=default_schema_validator, + context=None, + methods=Methods(ping), request='{"jsonrpc": "2.0", "method": "ping"}', ) assert response is None @@ -147,10 +147,10 @@ def test_dispatch_to_response_pure_notification(): def test_dispatch_to_response_pure_invalid_json(): """Unable to parse, must return an error""" response = dispatch_to_response_pure( - methods=Methods(ping), - context=None, - schema_validator=default_schema_validator, deserializer=default_deserializer, + schema_validator=default_schema_validator, + context=None, + methods=Methods(ping), request="{", ) assert isinstance(response, ErrorResponse) @@ -159,10 +159,10 @@ def test_dispatch_to_response_pure_invalid_json(): def test_dispatch_to_response_pure_notification_invalid_jsonrpc(): response = dispatch_to_response_pure( - methods=Methods(ping), - context=None, - schema_validator=default_schema_validator, deserializer=default_deserializer, + schema_validator=default_schema_validator, + context=None, + methods=Methods(ping), request='{"jsonrpc": "0", "method": "notify"}', ) assert isinstance(response, ErrorResponse) @@ -172,10 +172,10 @@ def test_dispatch_to_response_pure_notification_invalid_jsonrpc(): def test_dispatch_to_response_pure_invalid_jsonrpc(): """Invalid JSON-RPC, must return an error. (impossible to determine if notification)""" response = dispatch_to_response_pure( - methods=Methods(ping), - context=None, - schema_validator=default_schema_validator, deserializer=default_deserializer, + schema_validator=default_schema_validator, + context=None, + methods=Methods(ping), request="{}", ) assert isinstance(response, ErrorResponse) @@ -188,10 +188,10 @@ def foo(colour: str) -> Result: return InvalidParams() response = dispatch_to_response_pure( - methods=Methods(foo), - context=None, - schema_validator=default_schema_validator, deserializer=default_deserializer, + schema_validator=default_schema_validator, + context=None, + methods=Methods(foo), request='{"jsonrpc": "2.0", "method": "foo", "params": ["blue"], "id": 1}', ) assert isinstance(response, ErrorResponse) @@ -203,10 +203,10 @@ def foo(colour: str, size: str): pass response = dispatch_to_response_pure( - methods=Methods(foo), - context=None, - schema_validator=default_schema_validator, deserializer=default_deserializer, + schema_validator=default_schema_validator, + context=None, + methods=Methods(foo), request='{"jsonrpc": "2.0", "method": "foo", "params": {"colour":"blue"}, "id": 1}', ) assert isinstance(response, ErrorResponse) @@ -220,10 +220,10 @@ def not_a_result(): return None response = dispatch_to_response_pure( - methods=Methods(not_a_result), - context=None, - schema_validator=default_schema_validator, deserializer=default_deserializer, + schema_validator=default_schema_validator, + context=None, + methods=Methods(not_a_result), request='{"jsonrpc": "2.0", "method": "not_a_result", "id": 1}', ) assert isinstance(response, ErrorResponse) @@ -355,10 +355,10 @@ def test_examples_invalid_jsonrpc_batch(): The examples are expecting a batch response full of error responses. """ response = dispatch_to_response_pure( - methods=Methods(ping), - context=None, - schema_validator=default_schema_validator, deserializer=default_deserializer, + schema_validator=default_schema_validator, + context=None, + methods=Methods(ping), request="[1]", ) assert isinstance(response, ErrorResponse) @@ -371,10 +371,10 @@ def test_examples_multiple_invalid_jsonrpc(): The examples are expecting a batch response full of error responses. """ response = dispatch_to_response_pure( - methods=Methods(ping), - context=None, - schema_validator=default_schema_validator, deserializer=default_deserializer, + schema_validator=default_schema_validator, + context=None, + methods=Methods(ping), request="[1, 2, 3]", ) assert isinstance(response, ErrorResponse) @@ -412,10 +412,10 @@ def test_examples_mixed_requests_and_notifications(): ] ) response = dispatch_to_response_pure( - methods=methods, - context=None, - schema_validator=default_schema_validator, deserializer=default_deserializer, + schema_validator=default_schema_validator, + context=None, + methods=methods, request=requests, ) expected = [