Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make SimpleQuery, QueryVariable, and Query types available #1113

Merged
merged 5 commits into from
Sep 6, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGES/1050.contrib.rst
1 change: 1 addition & 0 deletions CHANGES/1113.contrib.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
The previously protected types ``_SimpleQuery``, ``_QueryVariable``, and ``_Query`` are now available for use externally as ``SimpleQuery``, ``QueryVariable``, and ``Query`` -- by :user:`bdraco`.
24 changes: 12 additions & 12 deletions tests/test_url_query.py
Original file line number Diff line number Diff line change
Expand Up @@ -134,10 +134,10 @@ def test_query_separators_from_parsing(
URLS_WITH_RESERVED_CHARS_IN_QUERY_VALUES_W_XFAIL,
)
def test_query_separators_from_update_query(
original_url,
expected_query_len,
expected_value_a,
):
original_url: URL,
expected_query_len: int,
expected_value_a: str,
) -> None:
new_url = original_url.update_query({"c": expected_value_a})
assert new_url.query["a"] == expected_value_a
assert new_url.query["c"] == expected_value_a
Expand All @@ -148,10 +148,10 @@ def test_query_separators_from_update_query(
URLS_WITH_RESERVED_CHARS_IN_QUERY_VALUES,
)
def test_query_separators_from_with_query(
original_url,
expected_query_len,
expected_value_a,
):
original_url: URL,
expected_query_len: int,
expected_value_a: int,
) -> None:
new_url = original_url.with_query({"c": expected_value_a})
assert new_url.query["c"] == expected_value_a

Expand All @@ -161,10 +161,10 @@ def test_query_separators_from_with_query(
URLS_WITH_RESERVED_CHARS_IN_QUERY_VALUES,
)
def test_query_from_empty_update_query(
original_url,
expected_query_len,
expected_value_a,
):
original_url: URL,
expected_query_len: int,
expected_value_a: str,
) -> None:
new_url = original_url.update_query({})

assert new_url.query["a"] == original_url.query["a"]
Expand Down
20 changes: 18 additions & 2 deletions yarl/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,21 @@
from ._url import URL, cache_clear, cache_configure, cache_info
from ._url import (
URL,
Query,
QueryVariable,
SimpleQuery,
cache_clear,
cache_configure,
cache_info,
)

__version__ = "1.10.0.dev0"

__all__ = ("URL", "cache_clear", "cache_configure", "cache_info")
__all__ = (
"URL",
"SimpleQuery",
"QueryVariable",
"Query",
"cache_clear",
"cache_configure",
"cache_info",
)
26 changes: 13 additions & 13 deletions yarl/_url.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,10 @@

sentinel = object()

_SimpleQuery = Union[str, int, float]
_QueryVariable = Union[_SimpleQuery, "Sequence[_SimpleQuery]"]
_Query = Union[
None, str, "Mapping[str, _QueryVariable]", "Sequence[Tuple[str, _QueryVariable]]"
SimpleQuery = Union[str, int, float]
QueryVariable = Union[SimpleQuery, "Sequence[SimpleQuery]"]
Query = Union[
None, str, "Mapping[str, QueryVariable]", "Sequence[Tuple[str, QueryVariable]]"
]
_T = TypeVar("_T")

Expand Down Expand Up @@ -254,7 +254,7 @@ def build(
host: str = "",
port: Union[int, None] = None,
path: str = "",
query: Union[_Query, None] = None,
query: Union[Query, None] = None,
query_string: str = "",
fragment: str = "",
encoded: bool = False,
Expand Down Expand Up @@ -393,7 +393,7 @@ def __truediv__(self, name: str) -> "URL":
return NotImplemented
return self._make_child((str(name),))

def __mod__(self, query: _Query) -> "URL":
def __mod__(self, query: Query) -> "URL":
return self.update_query(query)

def __bool__(self) -> bool:
Expand Down Expand Up @@ -1042,7 +1042,7 @@ def with_path(self, path: str, *, encoded: bool = False) -> "URL":

@classmethod
def _query_seq_pairs(
cls, quoter: Callable[[str], str], pairs: Iterable[Tuple[str, _QueryVariable]]
cls, quoter: Callable[[str], str], pairs: Iterable[Tuple[str, QueryVariable]]
) -> Iterator[str]:
for key, val in pairs:
if isinstance(val, (list, tuple)):
Expand All @@ -1052,7 +1052,7 @@ def _query_seq_pairs(
yield quoter(key) + "=" + quoter(cls._query_var(val))

@staticmethod
def _query_var(v: _QueryVariable) -> str:
def _query_var(v: QueryVariable) -> str:
cls = type(v)
if issubclass(cls, str):
if TYPE_CHECKING:
Expand All @@ -1077,7 +1077,7 @@ def _query_var(v: _QueryVariable) -> str:
)

def _get_str_query(self, *args: Any, **kwargs: Any) -> Union[str, None]:
query: Union[str, Mapping[str, _QueryVariable], None]
query: Union[str, Mapping[str, QueryVariable], None]
if kwargs:
if len(args) > 0:
raise ValueError(
Expand Down Expand Up @@ -1118,10 +1118,10 @@ def _get_str_query(self, *args: Any, **kwargs: Any) -> Union[str, None]:
return query

@overload
def with_query(self, query: _Query) -> "URL": ...
def with_query(self, query: Query) -> "URL": ...
Dismissed Show dismissed Hide dismissed

@overload
def with_query(self, **kwargs: _QueryVariable) -> "URL": ...
def with_query(self, **kwargs: QueryVariable) -> "URL": ...
Dismissed Show dismissed Hide dismissed

def with_query(self, *args: Any, **kwargs: Any) -> "URL":
"""Return a new URL with query part replaced.
Expand All @@ -1144,10 +1144,10 @@ def with_query(self, *args: Any, **kwargs: Any) -> "URL":
)

@overload
def update_query(self, query: _Query) -> "URL": ...
def update_query(self, query: Query) -> "URL": ...
Dismissed Show dismissed Hide dismissed

@overload
def update_query(self, **kwargs: _QueryVariable) -> "URL": ...
def update_query(self, **kwargs: QueryVariable) -> "URL": ...
Dismissed Show dismissed Hide dismissed

def update_query(self, *args: Any, **kwargs: Any) -> "URL":
"""Return a new URL with query part updated."""
Expand Down
Loading