Skip to main content

Various strategies for sending requests

Project description

aio-request

This library simplifies an interaction between microservices:

  1. Allows sending requests using various strategies
  2. Propagates a deadline and a priority of requests
  3. 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:

  1. Single attempt. Only one attempt is sent.
  2. Sequential. Attempts are sent sequentially with delays between them.
  3. 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.33 (2024-10-29)

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)

v0.1.24 (2022-07-04)

v0.1.23 (2022-02-08)

v0.1.22 (2022-01-08)

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aio-request-0.1.33.tar.gz (21.8 kB view details)

Uploaded Source

Built Distribution

aio_request-0.1.33-py3-none-any.whl (26.0 kB view details)

Uploaded Python 3

File details

Details for the file aio-request-0.1.33.tar.gz.

File metadata

  • Download URL: aio-request-0.1.33.tar.gz
  • Upload date:
  • Size: 21.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.11.10

File hashes

Hashes for aio-request-0.1.33.tar.gz
Algorithm Hash digest
SHA256 0fc27bc3b8d781b51317fa5c260e484ea3eab0fd01caf4a19149dd0d159eb5ae
MD5 fdf26ecb4c6232ffde4360e846a8f289
BLAKE2b-256 70316f06235d5c80eea2eb569e7b6ebbfa7b07834acffa644bac968981962428

See more details on using hashes here.

File details

Details for the file aio_request-0.1.33-py3-none-any.whl.

File metadata

  • Download URL: aio_request-0.1.33-py3-none-any.whl
  • Upload date:
  • Size: 26.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.11.10

File hashes

Hashes for aio_request-0.1.33-py3-none-any.whl
Algorithm Hash digest
SHA256 0d232791e8ef21c6c02610c16e20c71ba30a5c499ac6810a3241e064afc7f064
MD5 ebe94cd51a6d119477ab05ab7affb8c9
BLAKE2b-256 fc7b5c2f6019d39a035111cba44919bb419592a7a247a43810f1ae4b3e69059f

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page