diff --git a/.gitignore b/.gitignore index 735ef5c..e58cbb8 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ __pycache__/ /docs-build /dist /build +/src/descanso/_version.py # well known common utilities .idea/ diff --git a/src/descanso/jsonrpc.py b/src/descanso/jsonrpc.py index ff1fc9a..2dcbd0b 100644 --- a/src/descanso/jsonrpc.py +++ b/src/descanso/jsonrpc.py @@ -175,11 +175,12 @@ def transform_request( ) -> HttpRequest: request_id = get_extra(request, EXTRA_JSON_RPC_REQUEST_ID) method = get_extra(request, EXTRA_JSON_RPC_METHOD) + params = {"params": request.body} if request.body is not None else {} request.body = { "jsonrpc": "2.0", "id": request_id, "method": method, - "params": request.body, + **params, } return request diff --git a/src/descanso/rest_builder.py b/src/descanso/rest_builder.py index 84d14dc..4f4ffd9 100644 --- a/src/descanso/rest_builder.py +++ b/src/descanso/rest_builder.py @@ -47,7 +47,7 @@ _MethodParamSpec = ParamSpec("_MethodParamSpec") -class BuilderParams(TypedDict): +class BuilderParams(TypedDict, total=False): body_name: str query_param_dumper: Dumper | None diff --git a/tests/request_transformers/test_jsonrpc.py b/tests/request_transformers/test_jsonrpc.py new file mode 100644 index 0000000..963c359 --- /dev/null +++ b/tests/request_transformers/test_jsonrpc.py @@ -0,0 +1,49 @@ +from descanso.jsonrpc import ( + EXTRA_JSON_RPC_METHOD, + EXTRA_JSON_RPC_REQUEST_ID, + PackJsonRPC, +) +from descanso.request import HttpRequest + + +def test_empty_body_omit_params() -> None: + request = HttpRequest( + extras=[ + (EXTRA_JSON_RPC_REQUEST_ID, "some_id"), + (EXTRA_JSON_RPC_METHOD, "some_method"), + ], + method="POST", + ) + expected_body = { + "id": "some_id", + "method": "some_method", + "jsonrpc": "2.0", + } + + transformer = PackJsonRPC() + result_request = transformer.transform_request(request, [], [], {}) + + assert result_request.body == expected_body + + +def test_body_set_in_params() -> None: + params = {"param1": "value1", "param2": "value2"} + request = HttpRequest( + body=params, + extras=[ + (EXTRA_JSON_RPC_REQUEST_ID, "some_id"), + (EXTRA_JSON_RPC_METHOD, "some_method"), + ], + method="POST", + ) + expected_body = { + "id": "some_id", + "method": "some_method", + "jsonrpc": "2.0", + "params": params, + } + + transformer = PackJsonRPC() + result_request = transformer.transform_request(request, [], [], {}) + + assert result_request.body == expected_body