Skip to main content

Async Responses

Documentation Status codecov Python package Upload Python Package

Async Responses is a library providing an easy way to mock aiohttp responses inspired by aioresponses.

Installation

Library is available on PyPi, you can simply install it using pip.

$ pip install async-responses

Usage

As an instance

ar = AsyncResponses()
ar.get(...)

As a context manager

with AsyncResponses() as ar:
    ar.get(...)

With dict as handler

Passing dict as handler argument to async-responses would result in it being returned as a JSON payload.

import aiohttp
from async_responses import AsyncResponses


async def test_response():
    ar = AsyncResponses()
    payload = {'status': 'ok'}
    ar.get('http://mock.url', '/v1/status', handler=payload)
    async with aiohttp.ClientSession() as session:
        response = await session.get('http://mock.url/v1/status')
        assert await response.json() == payload

With exception as handler

Calling Async Responses with an exception as handler argument would result in it being raised.

import aiohttp
from async_responses import AsyncResponses
import pytest


async def test_response():
    ar = AsyncResponses()
    ar.get('http://mock.url', '/v1/status', handler=ZeroDivisionError)
    with pytest.raises(ZeroDivisionError):
        async with aiohttp.ClientSession() as session:
            await session.get('http://mock.url/v1/status')

With string as handler

import aiohttp
from async_responses import AsyncResponses

async def test_response():
    ar = AsyncResponses()
    payload = 'ok'
    ar.get('http://mock.url', '/v1/status', handler=payload)
    async with aiohttp.ClientSession() as session:
        response = await session.get('http://mock.url/v1/status')
        assert await response.text() == payload

With callable as handler

import aiohttp
from async_responses import AsyncResponses


async def test_response():
    def handler(data, **kwargs):
        return {'status': 'ok'}

    ar = AsyncResponses()
    ar.get('http://mock.url', '/v1/status', handler=payload)
    async with aiohttp.ClientSession() as session:
        response = await session.get('http://mock.url/v1/status')
        assert await response.json() == {'status': 'ok'}

With a custom status code

import aiohttp
from async_responses import AsyncResponses


async def test_response():
    payload = {'status': 'not good'}
    ar = AsyncResponses()
    ar.get('http://mock.url', '/v1/status', handler=payload, status=500)
    async with aiohttp.ClientSession() as session:
        response = await session.get('http://mock.url/v1/status')
        assert response.status == 500
        assert await response.json() == payload

With a custom response class

async-responses will make use of a response class passed as an argument to ClientSession, so you can use things like custom JSON serializer.

import aiohttp

async def test_response():
    class CustomResponse(aiohttp.ClientResponse):
        async def json(self, *args, **kwargs):
            return {'hello': 'world'}

    ar = AsyncResponses()
    ar.get('http://mock.url', '/v1/status', handler='')
    async with aiohttp.ClientSession(response_class=CustomResponse) as session:
        response = await session.get('http://mock.url/v1/status')
        assert await response.json() == {'hello': 'world'}
        assert isinstance(response, CustomResponse)

Metadata

Release files for async-responses 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for async-responses 1.0.0
File Size Uploaded
async-responses-1.0.0_2.tar.gz 5.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for async-responses 1.0.0
File Interpreter ABI Platform
async_responses-1.0.0_2-py3-none-any.whl Details

Total release size: 10.7 kB

Release files / async-responses-1.0.0_2.tar.gz

Download URL async-responses-1.0.0_2.tar.gz
Size 5.3 kB
Tags Source
SHA-256 checksum
How to use checksums
7669ea9765aba429406f61ec196b7cf016448e1285dc3adb8431d7182ce92055
BLAKE2b-256 checksum
How to use checksums
f34d42303987b6c9a9e861d1d9b219289cc61e387613dd84af2f0228ab0a29a4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/40.8.0 requests-toolbelt/0.8.0 tqdm/4.44.1 CPython/3.7.4

Release files / async_responses-1.0.0_2-py3-none-any.whl

Download URL async_responses-1.0.0_2-py3-none-any.whl
Size 5.3 kB
SHA-256 checksum
How to use checksums
e6c9fe6f38b634c63eb79b6148a31e9a852f0ab77790d7549205aa89fa7f90a7
BLAKE2b-256 checksum
How to use checksums
2446ab394d59d743220a681b77d231b3daee055af4200bc795ff124531bf017f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/40.8.0 requests-toolbelt/0.8.0 tqdm/4.44.1 CPython/3.7.4

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page