Skip to main content

FastAPI Simple Cache

Project description

FastAPI Simple Cache

Tests Coverage Package version Supported Python versions

FastAPI Simple Cache will cache responses from a decorated endpoint if the response is JSON encodable or a FastAPI Response.

Quick start

from fastapi import FastAPI, Request

app = FastAPI()

# Initialize in startup event
from fastapi_simple_cache import FastAPISimpleCache
from fastapi_simple_cache.backends.inmemory import InMemoryBackend
@app.on_event("startup")
async def startup():
    backend = InMemoryBackend()
    FastAPISimpleCache.init(backend=backend)
    pass

# Use the @cache decorator
from fastapi_simple_cache.decorator import cache
@app.get("/")
@cache(expire=3600)  # Set expiration in seconds
def root(request: Request):  # Add a Request typed parameter
    return {"datetime": datetime.utcnow()}

Check here for FastAPI application examples with different backends and features.

Installation

The installation depends on the backend.

  • In memory: pip install fastapi-simple-cache
  • Redis: pip install "fastapi-simple-cache[redis]"
  • Firestore: pip install "fastapi-simple-cache[firestore]"

Backends

In memory

The InMemoryBackend class implements an in-memory backend.

from fastapi_simple_cache.backends.inmemory import InMemoryBackend

@app.on_event("startup")
async def startup():
    backend = InMemoryBackend()
    FastAPISimpleCache.init(backend=backend)

Redis

The RedisBackend class implements a Redis backend.

from redis.asyncio import ConnectionPool, client
from fastapi_simple_cache.backends.redis import RedisBackend


@app.on_event("startup")
async def startup():
    pool = ConnectionPool.from_url(url="redis://localhost:6379")
    backend = RedisBackend(redis=client.Redis(connection_pool=pool))
    FastAPISimpleCache.init(backend=backend)

Firestore

The FirestoreBackend class implements a Google Firestore backend.

import firebase_admin
from firebase_admin import firestore, credentials
from fastapi_simple_cache.backends.firestore import FirestoreBackend

@app.on_event("startup")
async def startup():
    cred = credentials.ApplicationDefault()
    firebase_admin.initialize_app(cred, {"projectId": "gcp_project"})
    db = firestore.client()
    collection = db.collection("cache_collection")
    backend = FirestoreBackend(collection=collection)
    FastAPISimpleCache.init(backend=backend)

Features

Namespaces

You can add the parameter namespace on cache initialization to modify the storage keys. Use this feature if you need to share same cache environment with other applications but with different keys.

@app.on_event("startup")
async def startup():
    backend = InMemoryBackend()
    FastAPISimpleCache.init(
        backend=backend,
        namespace="my-app"
    )
    pass

Multi backends

Use more than one backend to cache responses with the backend parameter on cache initialization. This feature is useful if you want to check an in-memory cache before an external cache.

from fastapi_simple_cache.backends.inmemory import InMemoryBackend
from fastapi_simple_cache.backends.redis import RedisBackend

@app.on_event("startup")
async def startup():
    inmem_backend = InMemoryBackend()
    redis_backend = RedisBackend(...)
    FastAPISimpleCache.init(
        backend=[inmem_backend, redis_backend]
    )
    pass

Valid status codes

Set valid status codes to cache responses in the @cache parameter status_codes (defaults to [200]).

@app.get("/")
@cache(expire=3600, status_codes=[200, 201])
def root(request: Request):
    return {"datetime": datetime.utcnow()}

No cache

Avoid storing a request/response by adding the header cache-control: no-cache to the request. This works both for the client and the server.

License

FastAPI Fire Cache is released under the GNU General Public License v3.0 or later, see here for a description of this license, or see the LICENSE file for the full text.

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

fastapi-simple-cache-0.1.3.tar.gz (23.2 kB view details)

Uploaded Source

Built Distribution

fastapi_simple_cache-0.1.3-py3-none-any.whl (20.3 kB view details)

Uploaded Python 3

File details

Details for the file fastapi-simple-cache-0.1.3.tar.gz.

File metadata

  • Download URL: fastapi-simple-cache-0.1.3.tar.gz
  • Upload date:
  • Size: 23.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.28.1

File hashes

Hashes for fastapi-simple-cache-0.1.3.tar.gz
Algorithm Hash digest
SHA256 025c8b4c64061a88c785a33a249d5d302f58bb8dcccd3bbfa839f6a10b1cf285
MD5 69a7e54f7dc868279871502e88d04d0b
BLAKE2b-256 c58dbc08360973e418ed79f4c119328e4603267a9d6c3bb30216d3f9b66cdefd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fastapi_simple_cache-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 28893efbe35bfbf55dc6a91ac50d20b58b4bdb07cf3913ad5a54a921d87819e9
MD5 f259bce278bb99e641b66a4bef3784c6
BLAKE2b-256 e96bb2412f3ab91c5d1a0eb971938ce56b05445de21a15b66f5e8a6daecfcd5b

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