Skip to content

Commit

Permalink
Make SimpleQuery, QueryVariable, and Query types available
Browse files Browse the repository at this point in the history
closes #1050
  • Loading branch information
bdraco committed Sep 6, 2024
1 parent f8ba967 commit a8832b3
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 27 deletions.
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.9.12.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 @@ -41,10 +41,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 @@ -255,7 +255,7 @@ def build(
host: str = "",
port: Optional[int] = None,
path: str = "",
query: Optional[_Query] = None,
query: Optional[Query] = None,
query_string: str = "",
fragment: str = "",
encoded: bool = False,
Expand Down Expand Up @@ -394,7 +394,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 @@ -1043,7 +1043,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 @@ -1053,7 +1053,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 @@ -1078,7 +1078,7 @@ def _query_var(v: _QueryVariable) -> str:
)

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

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

Check notice

Code scanning / CodeQL

Statement has no effect Note

This statement has no effect.

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

Check notice

Code scanning / CodeQL

Statement has no effect Note

This statement has no effect.

def with_query(self, *args: Any, **kwargs: Any) -> "URL":
"""Return a new URL with query part replaced.
Expand All @@ -1145,10 +1145,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": ...

Check notice

Code scanning / CodeQL

Statement has no effect Note

This statement has no effect.

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

Check notice

Code scanning / CodeQL

Statement has no effect Note

This statement has no effect.

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

0 comments on commit a8832b3

Please sign in to comment.