Skip to main content

async-await support for `requests`.

Project description

requests-async

Brings support for async/await syntax to Python's fabulous requests library.

Build Status Coverage Package version

Contributions towards closing off our outstanding issues would be very welcome! ✨ 🍰 ✨

Requirements

  • Python 3.6, 3.7.

Installation

$ pip install requests-async

Usage

Just use the standard requests API, but use await for making requests.

Note: Use ipython to try this from the console, since it supports await.

import requests_async as requests


response = await requests.get('https://example.org')
print(response.status_code)
print(response.text)

Or use explicit sessions, with an async context manager.

import requests_async as requests


async with requests.Session() as session:
    response = await session.get('https://example.org')
    print(response.status_code)
    print(response.text)

The requests_async package subclasses requests, so you're getting all the standard behavior and API you'd expect.

Mock Requests

In some situations, such as when you're testing a web application, you may not want to make actual outgoing network requests, but would prefer instead to mock out the endpoints.

You can do this using the ASGISession, which allows you to plug into any ASGI application, instead of making actual network requests.

import requests_async

# Create a mock service, with Starlette, Responder, Quart, FastAPI, Bocadillo,
# or any other ASGI web framework.
mock_app = ...

if TESTING:
    # Issue requests to the the mock application.
    requests = requests_async.ASGISession(mock_app)
else:
    # Make live network requests.
    requests = requests_async.Session()

Test Client

You can also use ASGISession as a test client for any ASGI application.

You'll probably want to install pytest and pytest-asyncio, or something equivalent, to allow you to write async test cases.

from requests_async import ASGISession
from myproject import app
import pytest

@pytest.mark.asyncio
async def test_homepage():
    client = ASGISession(app)
    response = await client.get("/")
    assert response.status_code == 200

Limitations

  • Streaming uploads and downloads are unsupported.
  • SSL verification is not currently enabled.

See the issues list for more details.

Alternatives

The aiohttp package provides an alternative client for making async HTTP requests.

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

requests-async-0.2.0.tar.gz (11.4 kB view details)

Uploaded Source

File details

Details for the file requests-async-0.2.0.tar.gz.

File metadata

  • Download URL: requests-async-0.2.0.tar.gz
  • Upload date:
  • Size: 11.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.6.1

File hashes

Hashes for requests-async-0.2.0.tar.gz
Algorithm Hash digest
SHA256 e7e81cac0bddc413a0125e144ad8403b11d369d5a99f56e97444785f77222ced
MD5 614afa2b1d03297a4c85069d1e1919b8
BLAKE2b-256 48836a1d0d24bc826e82c1c79380bb1970d70bcbf0ef4a4200aaa6bd85aecc50

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