From 0bbb3cc4d07b94a57db37bbb5857625bd7b97a88 Mon Sep 17 00:00:00 2001 From: Kevin Morris Date: Fri, 17 Sep 2021 12:33:23 -0700 Subject: [PATCH] fix(FastAPI): rpc - include other fields with errors PHP does this, we should persist the behavior here for v=5. Signed-off-by: Kevin Morris --- aurweb/routers/rpc.py | 24 ++++++++++++++++-------- test/test_rpc.py | 16 ++++++++++++++-- 2 files changed, 30 insertions(+), 10 deletions(-) diff --git a/aurweb/routers/rpc.py b/aurweb/routers/rpc.py index 8bc761cc..f12dfc2e 100644 --- a/aurweb/routers/rpc.py +++ b/aurweb/routers/rpc.py @@ -51,20 +51,28 @@ async def rpc(request: Request, type: Optional[str] = Query(None), arg: Optional[str] = Query(None), args: Optional[List[str]] = Query(None, alias="arg[]")): - - # Ensure valid version was passed - if v is None: - return {"error": "Please specify an API version."} - elif v != 5: - return {"error": "Invalid version specified."} - # Defaults for returned data returned_data = {} returned_data["version"] = v returned_data["results"] = [] returned_data["resultcount"] = 0 - returned_data["type"] = type + + # Default the type field to "error", until we determine that + # we're not erroneous (below). + returned_data["type"] = "error" + + # Ensure valid version was passed + if v is None: + returned_data["error"] = "Please specify an API version." + return returned_data + elif v != 5: + returned_data["error"] = "Invalid version specified." + return returned_data + else: + # We got past initial error cases; set the type to what + # the user gave us. + returned_data["type"] = type # Take arguments from either 'args' or 'args[]' and put them into 'argument_list'. argument_list = [] diff --git a/test/test_rpc.py b/test/test_rpc.py index a2c86b27..37e8db51 100644 --- a/test/test_rpc.py +++ b/test/test_rpc.py @@ -323,7 +323,13 @@ def test_rpc_bad_type(): def test_rpc_bad_version(): # Define expected response. - expected_data = {'error': 'Invalid version specified.'} + expected_data = { + 'version': 0, + 'resultcount': 0, + 'results': [], + 'type': 'error', + 'error': 'Invalid version specified.' + } # Make dummy request. response = make_request("/rpc/?v=0&type=info&arg=big-chungus") @@ -337,7 +343,13 @@ def test_rpc_bad_version(): def test_rpc_no_version(): # Define expected response. - expected_data = {'error': 'Please specify an API version.'} + expected_data = { + 'version': None, + 'resultcount': 0, + 'results': [], + 'type': 'error', + 'error': 'Please specify an API version.' + } # Make dummy request. response = make_request("/rpc/?type=info&arg=big-chungus")