From 33a2e5bb1ff2802906bb3e4f9501d1dc61e5534e Mon Sep 17 00:00:00 2001 From: Arthur Goldberg Date: Mon, 12 Apr 2021 18:26:28 +0200 Subject: [PATCH] fix issue where request.args.pop removed parameters inconsistently (#2111) --- sanic/request.py | 18 ++++++++++++------ tests/test_requests.py | 11 +++++++++++ 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/sanic/request.py b/sanic/request.py index 3c765fa3..be8b4eee 100644 --- a/sanic/request.py +++ b/sanic/request.py @@ -260,9 +260,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) @@ -328,9 +331,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 93516e00..445af110 100644 --- a/tests/test_requests.py +++ b/tests/test_requests.py @@ -244,6 +244,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):