Skip to content

Commit

Permalink
Define and expose the API from the same place (#3106)
Browse files Browse the repository at this point in the history
* Tidy up imports

* Update tests/test_exported_members.py

---------

Co-authored-by: Tom Christie <[email protected]>
  • Loading branch information
karpetrosyan and tomchristie committed Feb 23, 2024
1 parent 77cb36f commit 87713d2
Show file tree
Hide file tree
Showing 18 changed files with 101 additions and 44 deletions.
55 changes: 11 additions & 44 deletions httpx/__init__.py
Original file line number Diff line number Diff line change
@@ -1,48 +1,15 @@
from .__version__ import __description__, __title__, __version__
from ._api import delete, get, head, options, patch, post, put, request, stream
from ._auth import Auth, BasicAuth, DigestAuth, NetRCAuth
from ._client import USE_CLIENT_DEFAULT, AsyncClient, Client
from ._config import Limits, Proxy, Timeout, create_ssl_context
from ._content import ByteStream
from ._exceptions import (
CloseError,
ConnectError,
ConnectTimeout,
CookieConflict,
DecodingError,
HTTPError,
HTTPStatusError,
InvalidURL,
LocalProtocolError,
NetworkError,
PoolTimeout,
ProtocolError,
ProxyError,
ReadError,
ReadTimeout,
RemoteProtocolError,
RequestError,
RequestNotRead,
ResponseNotRead,
StreamClosed,
StreamConsumed,
StreamError,
TimeoutException,
TooManyRedirects,
TransportError,
UnsupportedProtocol,
WriteError,
WriteTimeout,
)
from ._models import Cookies, Headers, Request, Response
from ._status_codes import codes
from ._transports.asgi import ASGITransport
from ._transports.base import AsyncBaseTransport, BaseTransport
from ._transports.default import AsyncHTTPTransport, HTTPTransport
from ._transports.mock import MockTransport
from ._transports.wsgi import WSGITransport
from ._types import AsyncByteStream, SyncByteStream
from ._urls import URL, QueryParams
from ._api import *
from ._auth import *
from ._client import *
from ._config import *
from ._content import *
from ._exceptions import *
from ._models import *
from ._status_codes import *
from ._transports import *
from ._types import *
from ._urls import *

try:
from ._main import main
Expand Down
12 changes: 12 additions & 0 deletions httpx/_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,18 @@
VerifyTypes,
)

__all__ = [
"delete",
"get",
"head",
"options",
"patch",
"post",
"put",
"request",
"stream",
]


def request(
method: str,
Expand Down
3 changes: 3 additions & 0 deletions httpx/_auth.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@
from hashlib import _Hash


__all__ = ["Auth", "BasicAuth", "DigestAuth", "NetRCAuth"]


class Auth:
"""
Base class for all authentication schemes.
Expand Down
2 changes: 2 additions & 0 deletions httpx/_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,8 @@
same_origin,
)

__all__ = ["USE_CLIENT_DEFAULT", "AsyncClient", "Client"]

# The type annotation for @classmethod and context managers here follows PEP 484
# https://www.python.org/dev/peps/pep-0484/#annotating-instance-and-class-methods
T = typing.TypeVar("T", bound="Client")
Expand Down
2 changes: 2 additions & 0 deletions httpx/_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
from ._urls import URL
from ._utils import get_ca_bundle_from_env

__all__ = ["Limits", "Proxy", "Timeout", "create_ssl_context"]

DEFAULT_CIPHERS = ":".join(
[
"ECDHE+AESGCM",
Expand Down
2 changes: 2 additions & 0 deletions httpx/_content.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@
)
from ._utils import peek_filelike_length, primitive_value_to_str

__all__ = ["ByteStream"]


class ByteStream(AsyncByteStream, SyncByteStream):
def __init__(self, stream: bytes) -> None:
Expand Down
31 changes: 31 additions & 0 deletions httpx/_exceptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,37 @@
if typing.TYPE_CHECKING:
from ._models import Request, Response # pragma: no cover

__all__ = [
"CloseError",
"ConnectError",
"ConnectTimeout",
"CookieConflict",
"DecodingError",
"HTTPError",
"HTTPStatusError",
"InvalidURL",
"LocalProtocolError",
"NetworkError",
"PoolTimeout",
"ProtocolError",
"ProxyError",
"ReadError",
"ReadTimeout",
"RemoteProtocolError",
"RequestError",
"RequestNotRead",
"ResponseNotRead",
"StreamClosed",
"StreamConsumed",
"StreamError",
"TimeoutException",
"TooManyRedirects",
"TransportError",
"UnsupportedProtocol",
"WriteError",
"WriteTimeout",
]


class HTTPError(Exception):
"""
Expand Down
2 changes: 2 additions & 0 deletions httpx/_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@
parse_header_links,
)

__all__ = ["Cookies", "Headers", "Request", "Response"]


class Headers(typing.MutableMapping[str, str]):
"""
Expand Down
2 changes: 2 additions & 0 deletions httpx/_status_codes.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

from enum import IntEnum

__all__ = ["codes"]


class codes(IntEnum):
"""HTTP status codes and reason phrases
Expand Down
15 changes: 15 additions & 0 deletions httpx/_transports/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
from .asgi import *
from .base import *
from .default import *
from .mock import *
from .wsgi import *

__all__ = [
"ASGITransport",
"AsyncBaseTransport",
"BaseTransport",
"AsyncHTTPTransport",
"HTTPTransport",
"MockTransport",
"WSGITransport",
]
2 changes: 2 additions & 0 deletions httpx/_transports/asgi.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@
[typing.Dict[str, typing.Any], _Receive, _Send], typing.Coroutine[None, None, None]
]

__all__ = ["ASGITransport"]


def create_event() -> Event:
if sniffio.current_async_library() == "trio":
Expand Down
2 changes: 2 additions & 0 deletions httpx/_transports/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
T = typing.TypeVar("T", bound="BaseTransport")
A = typing.TypeVar("A", bound="AsyncBaseTransport")

__all__ = ["AsyncBaseTransport", "BaseTransport"]


class BaseTransport:
def __enter__(self: T) -> T:
Expand Down
2 changes: 2 additions & 0 deletions httpx/_transports/default.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,8 @@
typing.Tuple[int, int, None, int],
]

__all__ = ["AsyncHTTPTransport", "HTTPTransport"]


@contextlib.contextmanager
def map_httpcore_exceptions() -> typing.Iterator[None]:
Expand Down
3 changes: 3 additions & 0 deletions httpx/_transports/mock.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@
AsyncHandler = typing.Callable[[Request], typing.Coroutine[None, None, Response]]


__all__ = ["MockTransport"]


class MockTransport(AsyncBaseTransport, BaseTransport):
def __init__(self, handler: SyncHandler | AsyncHandler) -> None:
self.handler = handler
Expand Down
3 changes: 3 additions & 0 deletions httpx/_transports/wsgi.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@
_T = typing.TypeVar("_T")


__all__ = ["WSGITransport"]


def _skip_leading_empty_chunks(body: typing.Iterable[_T]) -> typing.Iterable[_T]:
body = iter(body)
for chunk in body:
Expand Down
2 changes: 2 additions & 0 deletions httpx/_types.py
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,8 @@

RequestExtensions = MutableMapping[str, Any]

__all__ = ["AsyncByteStream", "SyncByteStream"]


class SyncByteStream:
def __iter__(self) -> Iterator[bytes]:
Expand Down
2 changes: 2 additions & 0 deletions httpx/_urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
from ._urlparse import urlencode, urlparse
from ._utils import primitive_value_to_str

__all__ = ["URL", "QueryParams"]


class URL:
"""
Expand Down
3 changes: 3 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,9 @@ ignore = ["B904", "B028"]
[tool.ruff.isort]
combine-as-imports = true

[tool.ruff.lint.per-file-ignores]
"__init__.py" = ["F403", "F405"]

[tool.mypy]
ignore_missing_imports = true
strict = true
Expand Down

0 comments on commit 87713d2

Please sign in to comment.