From 90f15090423d6fa3ef0ad4395956b9e0a37fbd96 Mon Sep 17 00:00:00 2001 From: Muneeb Sheikh Date: Sun, 11 Oct 2026 13:14:42 -0400 Subject: [PATCH] Preserve blank values when extending queries --- src/rfc3986/builder.py | 4 +++- tests/test_builder.py | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/rfc3986/builder.py b/src/rfc3986/builder.py index f8f19aa..d731198 100644 --- a/src/rfc3986/builder.py +++ b/src/rfc3986/builder.py @@ -325,7 +325,9 @@ def extend_query_with(self, query_items: _QueryType) -> "URIBuilder": URIBuilder(scheme=None, userinfo=None, host=None, port=None, path=None, query='a=b+c&a=b+c', fragment=None) """ - original_query_items = parse_qsl(self.query or "") + original_query_items = parse_qsl( + self.query or "", keep_blank_values=True + ) if not isinstance(query_items, list): query_items = list(query_items.items()) diff --git a/tests/test_builder.py b/tests/test_builder.py index eae3ec3..44efb6e 100644 --- a/tests/test_builder.py +++ b/tests/test_builder.py @@ -323,3 +323,19 @@ def test_geturl(): "sigmavirus24/rfc3986" ) assert expected == uri + + +@pytest.mark.parametrize( + "original, expected", + [ + ("a=", "a=&new=value"), + ("a=&a=1", "a=&a=1&new=value"), + ("flag&b=", "flag=&b=&new=value"), + ], +) +def test_extend_query_preserves_existing_blank_values(original, expected): + """Extending a query retains empty values and repeated parameters.""" + original_builder = builder.URIBuilder(query=original) + extended = original_builder.extend_query_with({"new": "value"}) + assert extended.query == expected + assert original_builder.query == original