From c84e8f39326bf2af4b131fc8148fdc7c162443d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=87a=C4=9F=C4=B1l=20Ulu=C5=9Fahin?= Date: Fri, 23 Oct 2026 23:31:52 +0100 Subject: [PATCH] Introduce transports as a module --- src/hip/_client.py | 3 +- src/hip/transports.py | 10 --- src/hip/transports/__init__.py | 11 +++ src/hip/transports/base.py | 66 +++++++++++++++ .../connection.py} | 84 +++---------------- src/hip/{_pool.py => transports/pool.py} | 9 +- 6 files changed, 95 insertions(+), 88 deletions(-) delete mode 100644 src/hip/transports.py create mode 100644 src/hip/transports/__init__.py create mode 100644 src/hip/transports/base.py rename src/hip/{_connection.py => transports/connection.py} (69%) rename src/hip/{_pool.py => transports/pool.py} (93%) diff --git a/src/hip/_client.py b/src/hip/_client.py index 740f5bf..127eeff 100644 --- a/src/hip/_client.py +++ b/src/hip/_client.py @@ -1,13 +1,12 @@ import types import typing -from ._connection import ResponseStream, Transport from ._content import HTML, JSON, Binary, Content, Text, select_media from ._headers import Headers -from ._pool import ConnectionPool from ._request import Method, Request from ._response import Response from ._urls import URL +from .transports import ConnectionPool, ResponseStream, Transport __all__ = ["Client"] diff --git a/src/hip/transports.py b/src/hip/transports.py deleted file mode 100644 index e1e24a4..0000000 --- a/src/hip/transports.py +++ /dev/null @@ -1,10 +0,0 @@ -from ._connection import Connection, ResponseStream, Transport, open_connection -from ._pool import ConnectionPool - -__all__ = [ - "Connection", - "ConnectionPool", - "ResponseStream", - "Transport", - "open_connection", -] diff --git a/src/hip/transports/__init__.py b/src/hip/transports/__init__.py new file mode 100644 index 0000000..cd54fdf --- /dev/null +++ b/src/hip/transports/__init__.py @@ -0,0 +1,11 @@ +from .base import ResponseStream, Transport +from .connection import Connection, open_connection +from .pool import ConnectionPool + +__all__ = [ + "Connection", + "ConnectionPool", + "ResponseStream", + "Transport", + "open_connection", +] diff --git a/src/hip/transports/base.py b/src/hip/transports/base.py new file mode 100644 index 0000000..fb23780 --- /dev/null +++ b/src/hip/transports/base.py @@ -0,0 +1,66 @@ +import types + +from .._content import Content +from .._headers import Headers +from .._request import Method, Request +from .._response import Response, StatusCode +from .._streams import Stream +from .._urls import URL + +__all__ = ["ResponseStream", "Transport"] + + +class ResponseStream(Stream): + def __init__( + self, status_code: StatusCode, headers: Headers, stream: Stream + ) -> None: + self.status_code = status_code + self.headers = headers + self.stream = stream + + def read(self, size: int = -1) -> bytes: + return self.stream.read(size) + + def close(self): + self.stream.close() + + def __enter__(self): + return self + + def __exit__( + self, + exc_type: type[BaseException] | None = None, + exc_value: BaseException | None = None, + traceback: types.TracebackType | None = None, + ) -> None: + self.close() + + +class Transport: + def send(self, request: Request) -> ResponseStream: + raise NotImplementedError() + + def close(self): + pass + + def request( + self, + method: Method | str, + url: URL | str, + headers: Headers | dict[str, str] | None = None, + content: Content | bytes | None = None, + ) -> Response: + request = Request(method, url, headers=headers, content=content) + with self.send(request) as stream: + body = stream.read() + return Response(stream.status_code, headers=stream.headers, content=body) + + def stream( + self, + method: Method | str, + url: URL | str, + headers: Headers | dict[str, str] | None = None, + content: Content | bytes | None = None, + ) -> ResponseStream: + request = Request(method, url, headers=headers, content=content) + return self.send(request) diff --git a/src/hip/_connection.py b/src/hip/transports/connection.py similarity index 69% rename from src/hip/_connection.py rename to src/hip/transports/connection.py index 8d1673f..f8d32a7 100644 --- a/src/hip/_connection.py +++ b/src/hip/transports/connection.py @@ -5,78 +5,18 @@ # Once we drop 3.10 support, we can use 'typing.Self'. from typing_extensions import Self -from ._body import GZipStream, HTTPStream -from ._content import Content -from ._headers import Headers -from ._network import Lock, NetworkBackend -from ._parsers import HTTPParser -from ._request import Method, Request -from ._response import Response, StatusCode -from ._streams import Stream -from ._urls import URL - -__all__ = [ - "Connection", - "ResponseStream", - "Transport", - "open_connection", -] - - -class ResponseStream(Stream): - def __init__( - self, status_code: StatusCode, headers: Headers, stream: Stream - ) -> None: - self.status_code = status_code - self.headers = headers - self.stream = stream - - def read(self, size: int = -1) -> bytes: - return self.stream.read(size) - - def close(self): - self.stream.close() - - def __enter__(self): - return self - - def __exit__( - self, - exc_type: type[BaseException] | None = None, - exc_value: BaseException | None = None, - traceback: types.TracebackType | None = None, - ) -> None: - self.close() - - -class Transport: - def send(self, request: Request) -> ResponseStream: - raise NotImplementedError() - - def close(self): - pass - - def request( - self, - method: Method | str, - url: URL | str, - headers: Headers | dict[str, str] | None = None, - content: Content | bytes | None = None, - ) -> Response: - request = Request(method, url, headers=headers, content=content) - with self.send(request) as stream: - body = stream.read() - return Response(stream.status_code, headers=stream.headers, content=body) - - def stream( - self, - method: Method | str, - url: URL | str, - headers: Headers | dict[str, str] | None = None, - content: Content | bytes | None = None, - ) -> ResponseStream: - request = Request(method, url, headers=headers, content=content) - return self.send(request) +from .._body import GZipStream, HTTPStream +from .._content import Content +from .._headers import Headers +from .._network import Lock, NetworkBackend +from .._parsers import HTTPParser +from .._request import Method, Request +from .._response import Response, StatusCode +from .._streams import Stream +from .._urls import URL +from .base import ResponseStream, Transport + +__all__ = ["Connection", "open_connection"] class Connection(Transport): diff --git a/src/hip/_pool.py b/src/hip/transports/pool.py similarity index 93% rename from src/hip/_pool.py rename to src/hip/transports/pool.py index 189232f..b8f2928 100644 --- a/src/hip/_pool.py +++ b/src/hip/transports/pool.py @@ -6,10 +6,11 @@ # Once we drop 3.10 support, we can use 'typing.Self'. from typing_extensions import Self -from ._connection import Connection, ResponseStream, Transport, open_connection -from ._network import NetworkBackend, Semaphore -from ._request import Request -from ._urls import URL +from .._network import NetworkBackend, Semaphore +from .._request import Request +from .._urls import URL +from .base import ResponseStream, Transport +from .connection import Connection, open_connection __all__ = [ "ConnectionPool",