Skip to main content

cached_requests

Build Status PyPI version

cached_requests is a Python library that provides a simple and effective caching layer for your web requests. It's built on top of the popular requests library and is designed to be a drop-in replacement for requests.Session.

Features

  • Persistent Caching: Save responses to disk to speed up repeated requests.
  • Automatic Cache Invalidation: Set a time-to-live (TTL) for your cached responses.
  • Customizable: Configure cache directories, refresh policies, and more.
  • Easy to Use: A simple, intuitive API that gets out of your way.

Installation

Install CacheFlow using pip:

pip install cached_requests

Quick Start

Here's a simple example of how to use cached_requests:

from cached_requests import CacheSession
from datetime import timedelta

# Create a new session with a cache directory
requests = CacheSession(cache_dir='.cache', refresh_after=timedelta(hours=1)) # or use `from cached_requests import requests`

# Make a request
response = requests.get('https://api.github.com')

# The response is now cached. Subsequent requests to the same URL will be served from the cache.
cached_response = requests.get('https://api.github.com')

print(response.json())

Advanced Usage

Configuration

You can configure the behavior of cached_requests by passing arguments to the CacheSession constructor:

  • cache_dir: The directory where cached responses will be stored.
  • force_refresh: If True, the cache will be ignored and all requests will be made to the network.
  • refresh_after: A timedelta object that specifies how long a cached response is valid.
  • refresh_on_error: If True, the cache will be refreshed if a cached response resulted in an error.

Context Manager

You can also use a context manager to temporarily change the configuration:

with requests.configure(force_refresh=True):
    # This request will bypass the cache
    response = requests.get('https://api.github.com')

Deleting Cache Entries

CacheFlow provides multiple ways to manage your cache.

Deleting by URL

You can delete cache entries based on a URL pattern:

from cached_requests import delete_cache_by_function
def should_delete(url: str):
    return 'github.com' in url

delete_cache_by_function(requests, should_delete)

Deleting by Expiration

You can delete cache entries that are older than a specified timedelta:

from cached_requests import delete_cache_by_expiration
from datetime import timedelta
# Delete all cache entries older than 7 days
delete_cache_by_expiration(requests, timedelta(days=7))

Contributing

Contributions are welcome! If you have a feature request, bug report, or pull request, please open an issue on GitHub.

License

cached_requests is licensed under the MIT License. See the LICENSE file for more details.

Metadata

Release files for cached-requests 0.2.2

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

Source distribution (sdist)

Source distribution for cached-requests 0.2.2
File Size Uploaded
cached_requests-0.2.2.tar.gz 10.4 kB Details

Release files / cached_requests-0.2.2.tar.gz

Download URL cached_requests-0.2.2.tar.gz
Size 10.4 kB
Tags Source
SHA-256 checksum
How to use checksums
e739dcff5fce04b64830be5699791de7c48575db60b0d202199bdf0913b84592
BLAKE2b-256 checksum
How to use checksums
5740c0c6748f1fe1ca3f3266628e760183515ebfaa4d04336a431f391d929de1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.9.23

Release history Release notifications | RSS feed

This release

0.2.2 This release

1 release file

0.2.1

1 release file

0.2.0

1 release file

0.1.5

1 release file

0.1.4

1 release file

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