Metadata-Version: 1.1
Name: aioresponses
Version: 0.7.2
Summary: Mock out requests made by ClientSession from aiohttp package
Home-page: https://github.com/pnuckowski/aioresponses
Author: Pawel Nuckowski
Author-email: p.nuckowski@gmail.com
License: UNKNOWN
Description: ===============================
        aioresponses
        ===============================
        
        .. image:: https://travis-ci.org/pnuckowski/aioresponses.svg?branch=master
                :target: https://travis-ci.org/pnuckowski/aioresponses
        
        .. image:: https://coveralls.io/repos/github/pnuckowski/aioresponses/badge.svg?branch=master
                :target: https://coveralls.io/github/pnuckowski/aioresponses?branch=master
        
        .. image:: https://landscape.io/github/pnuckowski/aioresponses/master/landscape.svg?style=flat
                :target: https://landscape.io/github/pnuckowski/aioresponses/master
                :alt: Code Health
        
        .. image:: https://pyup.io/repos/github/pnuckowski/aioresponses/shield.svg
                :target: https://pyup.io/repos/github/pnuckowski/aioresponses/
                :alt: Updates
        
        .. image:: https://img.shields.io/pypi/v/aioresponses.svg
                :target: https://pypi.python.org/pypi/aioresponses
        
        .. image:: https://readthedocs.org/projects/aioresponses/badge/?version=latest
                :target: https://aioresponses.readthedocs.io/en/latest/?badge=latest
                :alt: Documentation Status
        
        
        Aioresponses is a helper to mock/fake web requests in python aiohttp package.
        
        For *requests* module there are a lot of packages that help us with testing (eg. *httpretty*, *responses*, *requests-mock*).
        
        When it comes to testing asynchronous HTTP requests it is a bit harder (at least at the beginning).
        The purpose of this package is to provide an easy way to test asynchronous HTTP requests.
        
        Installing
        ----------
        
        .. code:: bash
        
            $ pip install aioresponses
        
        Supported versions
        ------------------
        - Python 3.5.3+
        - aiohttp>=2.0.0,<4.0.0
        
        Usage
        --------
        
        To mock out HTTP request use *aioresponses* as a method decorator or as a context manager.
        
        Response *status* code, *body*, *payload* (for json response) and *headers* can be mocked.
        
        Supported HTTP methods: **GET**, **POST**, **PUT**, **PATCH**, **DELETE** and **OPTIONS**.
        
        .. code:: python
        
            import aiohttp
            import asyncio
            from aioresponses import aioresponses
        
            @aioresponses()
            def test_request(mocked):
                loop = asyncio.get_event_loop()
                mocked.get('http://example.com', status=200, body='test')
                session = aiohttp.ClientSession()
                resp = loop.run_until_complete(session.get('http://example.com'))
        
                assert resp.status == 200
        
        
        for convenience use *payload* argument to mock out json response. Example below.
        
        **as a context manager**
        
        .. code:: python
        
            import asyncio
            import aiohttp
            from aioresponses import aioresponses
        
            def test_ctx():
                loop = asyncio.get_event_loop()
                session = aiohttp.ClientSession()
                with aioresponses() as m:
                    m.get('http://test.example.com', payload=dict(foo='bar'))
        
                    resp = loop.run_until_complete(session.get('http://test.example.com'))
                    data = loop.run_until_complete(resp.json())
        
                    assert dict(foo='bar') == data
        
        **aioresponses allows to mock out any HTTP headers**
        
        .. code:: python
        
            import asyncio
            import aiohttp
            from aioresponses import aioresponses
        
            @aioresponses()
            def test_http_headers(m):
                loop = asyncio.get_event_loop()
                session = aiohttp.ClientSession()
                m.post(
                    'http://example.com',
                    payload=dict(),
                    headers=dict(connection='keep-alive'),
                )
        
                resp = loop.run_until_complete(session.post('http://example.com'))
        
                # note that we pass 'connection' but get 'Connection' (capitalized)
                # under the neath `multidict` is used to work with HTTP headers
                assert resp.headers['Connection'] == 'keep-alive'
        
        **allows to register different responses for the same url**
        
        .. code:: python
        
            import asyncio
            import aiohttp
            from aioresponses import aioresponses
        
            @aioresponses()
            def test_multiple_responses(m):
                loop = asyncio.get_event_loop()
                session = aiohttp.ClientSession()
                m.get('http://example.com', status=500)
                m.get('http://example.com', status=200)
        
                resp1 = loop.run_until_complete(session.get('http://example.com'))
                resp2 = loop.run_until_complete(session.get('http://example.com'))
        
                assert resp1.status == 500
                assert resp2.status == 200
        
        
        **match URLs with regular expressions**
        
        .. code:: python
        
            import asyncio
            import aiohttp
            import re
            from aioresponses import aioresponses
        
            @aioresponses()
            def test_regexp_example(m):
                loop = asyncio.get_event_loop()
                session = aiohttp.ClientSession()
                pattern = re.compile(r'^http://example\.com/api\?foo=.*$')
                m.get(pattern, status=200)
        
                resp = loop.run_until_complete(session.get('http://example.com/api?foo=bar'))
        
                assert resp.status == 200
        
        
        **allows to passthrough to a specified list of servers**
        
        .. code:: python
        
            import asyncio
            import aiohttp
            from aioresponses import aioresponses
        
            @aioresponses(passthrough=['http://backend'])
            def test_passthrough(m, test_client):
                session = aiohttp.ClientSession()
                # this will actually perform a request
                resp = loop.run_until_complete(session.get('http://backend/api'))
        
        
        **aioresponses allows to throw an exception**
        
        .. code:: python
        
            import asyncio
            from aiohttp import ClientSession
            from aiohttp.http_exceptions import HttpProcessingError
            from aioresponses import aioresponses
        
            @aioresponses()
            def test_how_to_throw_an_exception(m, test_client):
                loop = asyncio.get_event_loop()
                session = ClientSession()
                m.get('http://example.com/api', exception=HttpProcessingError('test'))
        
                # calling
                # loop.run_until_complete(session.get('http://example.com/api'))
                # will throw an exception.
        
        
        **aioresponses allows to use callbacks to provide dynamic responses**
        
        .. code:: python
        
            import asyncio
            import aiohttp
            from aioresponses import CallbackResult, aioresponses
        
            def callback(url, **kwargs):
                return CallbackResult(status=418)
        
            @aioresponses()
            def test_callback(m, test_client):
                loop = asyncio.get_event_loop()
                session = ClientSession()
                m.get('http://example.com', callback=callback)
        
                resp = loop.run_until_complete(session.get('http://example.com'))
        
                assert resp.status == 418
        
        
        **aioresponses can be used in a pytest fixture**
        
        .. code:: python
        
            import pytest
            from aioresponses import aioresponses
        
            @pytest.fixture
            def mock_aioresponse():
                with aioresponses() as m:
                    yield m
        
        
        Features
        --------
        * Easy to mock out HTTP requests made by *aiohttp.ClientSession*
        
        
        License
        -------
        * Free software: MIT license
        
        Credits
        -------
        
        This package was created with Cookiecutter_ and the `audreyr/cookiecutter-pypackage`_ project template.
        
        .. _Cookiecutter: https://github.com/audreyr/cookiecutter
        .. _`audreyr/cookiecutter-pypackage`: https://github.com/audreyr/cookiecutter-pypackage
        
        
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Topic :: Software Development :: Testing
Classifier: Topic :: Software Development :: Testing :: Mocking
Classifier: License :: OSI Approved :: MIT License
Classifier: Natural Language :: English
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
