Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions src/hip/_client.py
Original file line number Diff line number Diff line change
@@ -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"]

Expand Down
10 changes: 0 additions & 10 deletions src/hip/transports.py

This file was deleted.

11 changes: 11 additions & 0 deletions src/hip/transports/__init__.py
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",
]
66 changes: 66 additions & 0 deletions src/hip/transports/base.py
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
Comment on lines +39 to +44

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This reminds me... #114


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)
84 changes: 12 additions & 72 deletions src/hip/_connection.py → src/hip/transports/connection.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The 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"]

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good little reminder here that we should refactor Connection to remove the open_connection helper.

Mentioned in #99.



class Connection(Transport):
Expand Down
9 changes: 5 additions & 4 deletions src/hip/_pool.py → src/hip/transports/pool.py
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
Loading