Various strategies for sending requests
Project description
aio-request
This library simplifies an interaction between microservices:
- Allows sending requests using various strategies
- Propagates a deadline and a priority of requests
- Exposes client/server metrics
Example:
import aiohttp
import aio_request
async with aiohttp.ClientSession() as client_session:
client = aio_request.setup(
transport=aio_request.AioHttpTransport(client_session),
endpoint="http://endpoint:8080/",
)
response_ctx = client.request(
aio_request.get("thing"),
deadline=aio_request.Deadline.from_timeout(5)
)
async with response_ctx as response:
pass # process response here
Request strategies
The following strategies are supported:
- Single attempt. Only one attempt is sent.
- Sequential. Attempts are sent sequentially with delays between them.
- Parallel. Attempts are sent in parallel one by one with delays between them.
Attempts count and delays are configurable.
Example:
import aiohttp
import aio_request
async with aiohttp.ClientSession() as client_session:
client = aio_request.setup(
transport=aio_request.AioHttpTransport(client_session),
endpoint="http://endpoint:8080/",
)
response_ctx = client.request(
aio_request.get("thing"),
deadline=aio_request.Deadline.from_timeout(5),
strategy=aio_request.parallel_strategy(
attempts_count=3,
delays_provider=aio_request.linear_backoff_delays(min_delay_seconds=0.1, delay_multiplier=0.1)
)
)
async with response_ctx as response:
pass # process response here
Deadline & priority propagation
To enable it for the server side a middleware should be configured:
import aiohttp.web
import aio_request
app = aiohttp.web.Application(middlewares=[aio_request.aiohttp_middleware_factory()])
Expose client/server metrics
To enable client metrics, just install prometheus-client
import aiohttp
import aio_request
async with aiohttp.ClientSession() as client_session:
client = aio_request.setup(
transport=aio_request.AioHttpTransport(
client_session,
),
endpoint="http://endpoint:8080/",
)
It is an example of how it should be done for aiohttp and prometheus.
To enable client metrics just install prometheus-client and use the following code:
import aiohttp.web
import aio_request
app = aiohttp.web.Application(
middlewares=[
aio_request.aiohttp_middleware_factory()
]
)
Circuit breaker
import aiohttp
import aio_request
async with aiohttp.ClientSession() as client_session:
client = aio_request.setup_v2(
transport=aio_request.AioHttpTransport(client_session),
endpoint="http://endpoint:8080/",
circuit_breaker=aio_request.DefaultCircuitBreaker[str, int](
break_duration=1.0,
sampling_duration=1.0,
minimum_throughput=2,
failure_threshold=0.5,
),
)
In the case of requests count >= minimum throughput(>=2) in sampling period(1 second) the circuit breaker will open if failed requests count/total requests count >= failure threshold(50%).
unreleased
- Support httpx transport
- Drop python 3.9/3.10 support, support only 3.11/3.12/3.13. Related PRs: #222, #266, #275
- Deprecation of MetricsProvider interface. For the backward compatibility, prometheus-client is conditionally imported. To use it, install prometheus-client. Related PRs: #271, #218, #268
- Removal of unused Client interface
v0.1.32 (2024-10-18)
v0.1.31 (2024-09-05)
v0.1.30 (2023-07-23)
v0.1.29 (2023-04-27)
v0.1.28 (2023-04-27)
v0.1.27 (2023-02-16)
v0.1.26 (2022-11-02)
v0.1.25 (2022-08-25)
- Reverted: URL-encode path_parameters - let user decide what to do
v0.1.24 (2022-07-04)
v0.1.23 (2022-02-08)
v0.1.22 (2022-01-08)
- Return default json expected content_type to "application/json"
- Release aiohttp response instead of close
- Validate json content-type
v0.1.21 (2022-01-05)
- Content type should be None in Response.json()
v0.1.20 (2022-01-05)
v0.1.19 (2021-11-01)
v0.1.18 (2021-09-08)
v0.1.17 (2021-09-01)
v0.1.16 (2021-09-01)
v0.1.15 (2021-09-01)
v0.1.14 (2021-08-18)
v0.1.13 (2021-08-15)
v0.1.12 (2021-07-21)
v0.1.11 (2021-07-21)
- Fix Request.update_headers, add Request.extend_headers #59
v0.1.10 (2021-07-20)
- Add Response.is_json property to check whether content-type is json compatible #58
- Tracing support #54,
- Configuration of a new pipeline
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file aio-request-0.2.0a3.tar.gz
.
File metadata
- Download URL: aio-request-0.2.0a3.tar.gz
- Upload date:
- Size: 22.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | fadf9fc557f4d20717e63a1a9f7526e7fde8507e48609e81df7924fdb2a9f7d0 |
|
MD5 | 3212b068b25e8a8328fa1047e730eedb |
|
BLAKE2b-256 | be8f74567746913a13692f024232126eb623c75d4a71e9fac7dbcd74a954b468 |
Provenance
File details
Details for the file aio_request-0.2.0a3-py3-none-any.whl
.
File metadata
- Download URL: aio_request-0.2.0a3-py3-none-any.whl
- Upload date:
- Size: 27.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1ab0071367c32f9805021d7a3fad67435592ce07c4983db37f8582e356c389b5 |
|
MD5 | 8950c1d30004dbef4105d558c05196fc |
|
BLAKE2b-256 | c962406a24ddc46aa8abcd0078379179d8e9d2f969b09534388de4bde8e0861c |