Skip to main content

Persistent cache for aiohttp requests

Project description

aiohttp-client-cache

Build status Documentation Status PyPI PyPI - Python Versions PyPI - Format

See full documentation at https://aiohttp-client-cache.readthedocs.io

aiohttp-client-cache is an async persistent cache for aiohttp requests, based on requests-cache.

Not to be confused with aiohttp-cache, which is a cache for the aiohttp web server. This package is, as you might guess, specifically for the aiohttp client.

Development Status

This is an early work in progress!

The current state is a mostly working drop-in replacement for aiohttp.ClientSession. However, most cache operations are still synchronous, have had minimal testing, and likely have lots of bugs. Breaking changes should be expected until a 1.0 release.

Installation

Requires python 3.7+

Install the latest stable version with pip:

pip install aiohttp-client-cache

Note: You will need additional dependencies depending on which backend you want to use; See Cache Backends section below for details. To install with extra dependencies for all supported backends:

pip install aiohttp-client-cache[backends]

To set up for local development:

$ git clone https://github.com/JWCook/aiohttp-client-cache
$ cd aiohttp-client-cache
$ pip install -Ue ".[dev]"
$ # Optional but recommended:
$ pre-commit install --config .github/pre-commit.yml

Usage example

See the examples folder for more detailed usage examples.

Here is a simple example using an endpoint that takes 1 second to fetch. After the first request, subsequent requests to the same URL will return near-instantly; so, fetching it 10 times will only take ~1 second instead of 10.

from aiohttp_client_cache import CachedSession, SQLiteBackend

async with CachedSession(cache=SQLiteBackend()) as session:
    for i in range(10):
        await session.get('http://httpbin.org/delay/1')

aiohttp-client-cache can also be used as a mixin, if you happen have other mixin classes that you want to combine with it:

from aiohttp import ClientSession
from aiohttp_client_cache import CacheMixin

class CustomSession(CacheMixin, CustomMixin, ClientSession):
    pass

Cache Backends

Several backends are available. If one isn't specified, a simple in-memory cache will be used.

You can also provide your own backend by subclassing aiohttp_client_cache.backends.BaseCache.

Expiration

If you are using the expire_after parameter, expired responses are removed from the storage the next time the same request is made. If you want to manually purge all expired items, you can use CachedSession.delete_expired_responses. Example:

session = CachedSession(expire_after=3)   # Cached responses expire after 3 hours
await session.remove_expired_responses()  # Remove any responses over 3 hours old

Conditional Caching

Caching behavior can be customized by defining various conditions:

  • Response status codes
  • Request HTTP methods
  • Request headers
  • Specific request parameters
  • Custom filter function

See CacheBackend docs for details.

Credits

Thanks to Roman Haritonov and contributors for the original requests-cache!

This project is licensed under the MIT license, with the exception of storage backend code adapted from requests-cache, which is licensed under the BSD license (copy included).

History

0.1.0 (2020-11-14)

  • Initial PyPI release
  • First pass at a general refactor and conversion from requests to aiohttp
  • Basic features are functional, but some backends do not actually operate asynchronously

requests-cache

See requests-cache development history for details on prior changes.

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

aiohttp-client-cache-0.1.3.tar.gz (20.7 kB view details)

Uploaded Source

Built Distribution

aiohttp_client_cache-0.1.3-py3-none-any.whl (23.0 kB view details)

Uploaded Python 3

File details

Details for the file aiohttp-client-cache-0.1.3.tar.gz.

File metadata

  • Download URL: aiohttp-client-cache-0.1.3.tar.gz
  • Upload date:
  • Size: 20.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.57.0 CPython/3.8.7

File hashes

Hashes for aiohttp-client-cache-0.1.3.tar.gz
Algorithm Hash digest
SHA256 3510de57d18d2c4b2631cde46f64b9f100b186835abd2fd601d39ca9995a2932
MD5 98b813fd7f9dbff7925fe3f56a23e0f7
BLAKE2b-256 9ecd0959e8d40519a48e0c89102405db728eacfb3bc04bf8933edf894964459f

See more details on using hashes here.

File details

Details for the file aiohttp_client_cache-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: aiohttp_client_cache-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 23.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.57.0 CPython/3.8.7

File hashes

Hashes for aiohttp_client_cache-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 306d96ff23a0cf3dd5793e26e279039185134c9bc5d40c485cb33eb32873c0b3
MD5 f6f0dd86f744938915ae9bc0a691c72b
BLAKE2b-256 b656e20b3332f8835d4209dad9548ac5f901e1ea3860f507aa6e967991b1eebe

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