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:
Demetri 2022-12-02 08:20:05 -08:00 committed by GitHub
parent 933551c519
commit 40a0da093b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 37 additions and 1 deletions

View File

@ -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[

View File

@ -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:
"""

View File

@ -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"