aio-request 0.1.31

Creator: bradpython12

Last updated:

Add to Cart

Description:

aiorequest 0.1.31

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_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 a metrics provider should be passed to the transport:
import aiohttp
import aio_request

async with aiohttp.ClientSession() as client_session:
client = aio_request.setup(
transport=aio_request.AioHttpTransport(
client_session,
metrics_provider=aio_request.PROMETHEUS_METRICS_PROVIDER
),
endpoint="http://endpoint:8080/",
)

It is an example of how it should be done for aiohttp and prometheus.
To enable client metrics a metrics provider should be passed to the middleware:
import aiohttp.web
import aio_request

app = aiohttp.web.Application(
middlewares=[
aio_request.aiohttp_middleware_factory(
metrics_provider=aio_request.PROMETHEUS_METRICS_PROVIDER
)
]
)

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%).
v0.1.31 (2024-09-05)

Only yarl < 1.9.10 is supported

v0.1.30 (2023-07-23)

Removal of tracing support
Drop python 3.8 support

v0.1.29 (2023-04-27)

Stop losing redirects params in headers update

v0.1.28 (2023-04-27)

Add allow_redirects and max_redirects options to request

v0.1.27 (2023-02-16)

Maintenance release

v0.1.26 (2022-11-02)

Add python 3.11 support

v0.1.25 (2022-08-25)

Reverted: URL-encode path_parameters - let user
decide what to do

v0.1.24 (2022-07-04)

URL-encode path_parameters

v0.1.23 (2022-02-08)

Reject throttling(too many requests) status code

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)

Do not expect json content type by default

v0.1.19 (2021-11-01)

Support async-timeout 4.0+

v0.1.18 (2021-09-08)

Reexport explicitly

v0.1.17 (2021-09-01)

Fix patch/patch_json visibility

v0.1.16 (2021-09-01)

Support patch method

v0.1.15 (2021-09-01)

Clean up resources in single shield

v0.1.14 (2021-08-18)

Keys should be materialized if dict is changed in loop

v0.1.13 (2021-08-15)

Circuit breaker

v0.1.12 (2021-07-21)

Basic repr implementation

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

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Customer Reviews

There are no reviews.