ds_protocol_http_py_lib.utils.http.provider

File: provider.py Region: ds_protocol_http_py_lib/utils/http/provider

HTTP Provider

This module implements a synchronous HTTP client with: - requests.Session + urllib3.Retry (429/5xx, backoff, Retry-After) - optional TokenBucket for simple RPS throttling - context-managed lifetime - tiny API: request/get/post/close

Example

>>> with Http() as client:
...     response = client.get("https://api.example.com/data")
...     data = response.json()

Attributes

logger

Classes

Http

Minimal synchronous HTTP client with:

Module Contents

ds_protocol_http_py_lib.utils.http.provider.logger
class ds_protocol_http_py_lib.utils.http.provider.Http(*, config: ds_protocol_http_py_lib.utils.http.config.HttpConfig | None = None, bucket: ds_protocol_http_py_lib.utils.http.token_bucket.TokenBucket | None = None, session: requests.Session | None = None)[source]
Minimal synchronous HTTP client with:
  • requests.Session + urllib3.Retry (429/5xx, backoff, Retry-After)

  • optional TokenBucket for simple RPS throttling

  • context-managed lifetime

  • tiny API: request/get/post/close

_cfg
_bucket
_session
_build_session() requests.Session[source]

Build the session. :returns: The session. :rtype: requests.Session

_response_info(response: requests.Response) dict[str, Any][source]

Get information about a response. Extracts safe metadata only (no request/response bodies).

Parameters:

response – The HTTP response object to extract info from.

Returns:

Dictionary containing the response information.

Return type:

dict[str, Any]

property session: requests.Session

Get the underlying requests session for direct use. Allows direct access to session properties like headers.

Returns:

The requests session.

Return type:

requests.Session

Example

>>> http = Http()
>>> http.session.headers.update({"Authorization": "Bearer token"})
__enter__() Http[source]
__exit__(exc_type: Any, exc: Any, tb: Any) None[source]
close() None[source]
request(method: str, url: str, **kwargs: Any) requests.Response[source]

Send an HTTP request with rate limiting, retry logic, and comprehensive logging.

Parameters:
  • method – HTTP method (GET, POST, PUT, DELETE, etc.).

  • url – Target URL for the request.

  • **kwargs – Additional keyword arguments passed to requests (timeout, headers, data, etc.).

Returns:

The HTTP response object.

Return type:

requests.Response

Raises:
  • requests.HTTPError – If the response status code indicates an error.

  • requests.RequestException – For other request-related errors.

Example

>>> with Http() as client:
...     response = client.request('GET', 'https://api.example.com/data', timeout=30)
...     data = response.json()
get(url: str, **kwargs: Any) requests.Response[source]

Send a GET request with enhanced logging.

Parameters:
  • url – Target URL for the GET request.

  • **kwargs – Additional keyword arguments passed to requests.

Returns:

The HTTP response object.

Return type:

requests.Response

Example

>>> with Http() as client:
...     response = client.get("https://api.example.com/data")
post(url: str, **kwargs: Any) requests.Response[source]

Send a POST request with enhanced logging.

Parameters:
  • url – Target URL for the POST request.

  • **kwargs – Additional keyword arguments passed to requests.

Returns:

The HTTP response object.

Return type:

requests.Response

Example

>>> with Http() as client:
...     response = client.post("https://api.example.com/data", json={"key": "value"})
put(url: str, **kwargs: Any) requests.Response[source]

Send a PUT request with enhanced logging.

Parameters:
  • url – Target URL for the PUT request.

  • **kwargs – Additional keyword arguments passed to requests.

Returns:

The HTTP response object.

Return type:

requests.Response

Example

>>> with Http() as client:
...     response = client.put("https://api.example.com/data/1", json={"key": "value"})
delete(url: str, **kwargs: Any) requests.Response[source]

Send a DELETE request with enhanced logging.

Parameters:
  • url – Target URL for the DELETE request.

  • **kwargs – Additional keyword arguments passed to requests.

Returns:

The HTTP response object.

Return type:

requests.Response

Example

>>> with Http() as client:
...     response = client.delete("https://api.example.com/data/1")