Repository navigation
Introduce transports as a module #121
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
This file was deleted.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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", | ||
| ] |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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) | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -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 | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Observation... Not sure these are in the right place. (Not part of this PR, just a reminder) |
||
| 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"] | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Good little reminder here that we should refactor Mentioned in #99. |
||
|
|
||
|
|
||
| class Connection(Transport): | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This reminds me... #114