Skip to content
Closed
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
58 changes: 27 additions & 31 deletions src/vws/transports.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"""HTTP transport implementations for VWS clients."""

from collections.abc import Awaitable
from typing import Protocol, Self, runtime_checkable
from typing import Protocol, Self, assert_never, runtime_checkable

import httpx
import requests
Expand All @@ -10,6 +10,30 @@
from vws.response import Response


@beartype(conf=BeartypeConf(is_pep484_tower=True))
def _httpx_timeout(
request_timeout: float | tuple[float, float],
) -> httpx.Timeout:
"""Build an ``httpx.Timeout`` from a request timeout value."""
match request_timeout:
case (connect, read):
return httpx.Timeout(
connect=connect,
read=read,
write=None,
pool=None,
)
case float() | int() as timeout:
return httpx.Timeout(
connect=timeout,
read=timeout,
write=None,
pool=None,
)
case _ as unreachable:
assert_never(unreachable) # pyrefly: ignore[bad-argument-type] # ty: ignore[type-assertion-failure]


@runtime_checkable
class Transport(Protocol):
"""Protocol for HTTP transports used by VWS clients.
Expand Down Expand Up @@ -149,21 +173,7 @@ def __call__(
Returns:
A Response populated from the httpx response.
"""
if isinstance(request_timeout, tuple):
connect_timeout, read_timeout = request_timeout
httpx_timeout = httpx.Timeout(
connect=connect_timeout,
read=read_timeout,
write=None,
pool=None,
)
else:
httpx_timeout = httpx.Timeout(
connect=request_timeout,
read=request_timeout,
write=None,
pool=None,
)
httpx_timeout = _httpx_timeout(request_timeout=request_timeout)

httpx_response = self._client.request(
method=method,
Expand Down Expand Up @@ -272,21 +282,7 @@ async def __call__(
Returns:
A Response populated from the httpx response.
"""
if isinstance(request_timeout, tuple):
connect_timeout, read_timeout = request_timeout
httpx_timeout = httpx.Timeout(
connect=connect_timeout,
read=read_timeout,
write=None,
pool=None,
)
else:
httpx_timeout = httpx.Timeout(
connect=request_timeout,
read=request_timeout,
write=None,
pool=None,
)
httpx_timeout = _httpx_timeout(request_timeout=request_timeout)

httpx_response = await self._client.request(
method=method,
Expand Down
Loading