diff --git a/sanic/request.py b/sanic/request.py index d81702a4..95b64d34 100644 --- a/sanic/request.py +++ b/sanic/request.py @@ -265,9 +265,12 @@ class Request: :type errors: str :return: RequestParameters """ - if not self.parsed_args[ - (keep_blank_values, strict_parsing, encoding, errors) - ]: + if ( + keep_blank_values, + strict_parsing, + encoding, + errors, + ) not in self.parsed_args: if self.query_string: self.parsed_args[ (keep_blank_values, strict_parsing, encoding, errors) @@ -321,9 +324,12 @@ class Request: :type errors: str :return: list """ - if not self.parsed_not_grouped_args[ - (keep_blank_values, strict_parsing, encoding, errors) - ]: + if ( + keep_blank_values, + strict_parsing, + encoding, + errors, + ) not in self.parsed_not_grouped_args: if self.query_string: self.parsed_not_grouped_args[ (keep_blank_values, strict_parsing, encoding, errors) diff --git a/tests/test_requests.py b/tests/test_requests.py index add05f4a..7a47c3f9 100644 --- a/tests/test_requests.py +++ b/tests/test_requests.py @@ -289,6 +289,17 @@ def test_query_string(app): assert request.args.getlist("test1") == ["1"] assert request.args.get("test3", default="My value") == "My value" +def test_popped_stays_popped(app): + @app.route("/") + async def handler(request): + return text("OK") + + request, response = app.test_client.get( + "/", params=[("test1", "1")] + ) + + assert request.args.pop("test1") == ["1"] + assert "test1" not in request.args @pytest.mark.asyncio async def test_query_string_asgi(app):