Add back in URL.raw with NamedTuple (#2481)
* add back in URL.raw with NamedTuple * Update _urls.py * Update _urls.py Co-authored-by: Tom Christie <tom@tomchristie.com>
This commit is contained in:
parent
933551c519
commit
40a0da093b
@ -16,6 +16,7 @@ from typing import (
|
||||
Iterator,
|
||||
List,
|
||||
Mapping,
|
||||
NamedTuple,
|
||||
Optional,
|
||||
Sequence,
|
||||
Tuple,
|
||||
@ -31,6 +32,16 @@ if TYPE_CHECKING: # pragma: no cover
|
||||
|
||||
PrimitiveData = Optional[Union[str, int, float, bool]]
|
||||
|
||||
RawURL = NamedTuple(
|
||||
"RawURL",
|
||||
[
|
||||
("raw_scheme", bytes),
|
||||
("raw_host", bytes),
|
||||
("port", Optional[int]),
|
||||
("raw_path", bytes),
|
||||
],
|
||||
)
|
||||
|
||||
URLTypes = Union["URL", str]
|
||||
|
||||
QueryParamTypes = Union[
|
||||
|
||||
@ -6,7 +6,7 @@ import rfc3986
|
||||
import rfc3986.exceptions
|
||||
|
||||
from ._exceptions import InvalidURL
|
||||
from ._types import PrimitiveData, QueryParamTypes, URLTypes
|
||||
from ._types import PrimitiveData, QueryParamTypes, RawURL, URLTypes
|
||||
from ._utils import primitive_value_to_str
|
||||
|
||||
|
||||
@ -311,6 +311,21 @@ class URL:
|
||||
"""
|
||||
return unquote(self._uri_reference.fragment or "")
|
||||
|
||||
@property
|
||||
def raw(self) -> RawURL:
|
||||
"""
|
||||
Provides the (scheme, host, port, target) for the outgoing request.
|
||||
|
||||
In older versions of `httpx` this was used in the low-level transport API.
|
||||
We no longer use `RawURL`, and this property will be deprecated in a future release.
|
||||
"""
|
||||
return RawURL(
|
||||
self.raw_scheme,
|
||||
self.raw_host,
|
||||
self.port,
|
||||
self.raw_path,
|
||||
)
|
||||
|
||||
@property
|
||||
def is_absolute_url(self) -> bool:
|
||||
"""
|
||||
|
||||
@ -424,3 +424,13 @@ def test_ipv6_url_from_raw_url(host):
|
||||
assert url.host == "::ffff:192.168.0.1"
|
||||
assert url.netloc == b"[::ffff:192.168.0.1]"
|
||||
assert str(url) == "https://[::ffff:192.168.0.1]/"
|
||||
|
||||
|
||||
def test_url_raw_compatibility():
|
||||
url = httpx.URL("https://www.example.com/path")
|
||||
scheme, host, port, raw_path = url.raw
|
||||
|
||||
assert scheme == b"https"
|
||||
assert host == b"www.example.com"
|
||||
assert port is None
|
||||
assert raw_path == b"/path"
|
||||
|
||||
Loading…
Reference in New Issue
Block a user