From 71d171e4c6b7f1e369ab2eb266eee791bfdc8314 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Wed, 30 Oct 2024 13:54:54 -0500 Subject: [PATCH] Add a fast path to `get_str_query` for `dict` and `str` (#1401) --- CHANGES/1401.misc.rst | 1 + yarl/_query.py | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 CHANGES/1401.misc.rst diff --git a/CHANGES/1401.misc.rst b/CHANGES/1401.misc.rst new file mode 100644 index 000000000..96670eb95 --- /dev/null +++ b/CHANGES/1401.misc.rst @@ -0,0 +1 @@ +Improved performance of passing a `dict` or `str` to :py:meth:`~yarl.URL.extend_query` -- by :user:`bdraco`. diff --git a/yarl/_query.py b/yarl/_query.py index 65420356e..6a663fc99 100644 --- a/yarl/_query.py +++ b/yarl/_query.py @@ -97,10 +97,12 @@ def get_str_query(*args: Any, **kwargs: Any) -> Union[str, None]: return None if not query: return "" - if isinstance(query, Mapping): + if type(query) is dict: return get_str_query_from_sequence_iterable(query.items()) - if isinstance(query, str): + if type(query) is str or isinstance(query, str): return QUERY_QUOTER(query) + if isinstance(query, Mapping): + return get_str_query_from_sequence_iterable(query.items()) if isinstance(query, (bytes, bytearray, memoryview)): msg = "Invalid query type: bytes, bytearray and memoryview are forbidden" raise TypeError(msg)