Skip to main content

example workflow codecov Documentation Status License

Falcon-Caching

This library provides cache support for the Falcon web framework.

It is a port of the popular Flask-Caching library.

The library aims to be compatible with CPython 3.7+ and PyPy 3.5+.

You can use this library both with a sync (WSGI) or an async (ASGI) app, by using the matching cache object (Cache or AsyncCache).

Documentation

You can find the documentation of this library on Read the Docs.

Quickstart

Quick example 1 - WSGI, e.g. sync:

import falcon
from falcon_caching import Cache

# setup the cache instance
cache = Cache(
    config=
    {
        'CACHE_EVICTION_STRATEGY': 'time-based',  # how records are evicted
        'CACHE_TYPE': 'simple'  # what backend to use to store the cache
    })

class ThingsResource:
    # mark the method as cached
    @cache.cached(timeout=600)
    def on_get(self, req, resp):
        pass

# add the cache middleware to the Falcon app
# you can use falcon.API() instead of falcon.App() below Falcon 3.0.0
app = falcon.App(middleware=cache.middleware)

things = ThingsResource()

app.add_route('/things', things)

Quick example 2 - ASGI, e.g. async:

import falcon.asgi
from falcon_caching import AsyncCache

# setup the cache instance
cache = AsyncCache(
    config=
    {
        'CACHE_EVICTION_STRATEGY': 'time-based',  # how records are evicted
        'CACHE_TYPE': 'simple'  # what backend to use to store the cache
    })

class ThingsResource:
    # mark the method as cached
    @cache.cached(timeout=600)
    async def on_get(self, req, resp):
        pass

app = falcon.asgi.App(middleware=cache.middleware)

things = ThingsResource()

app.add_route('/things', things)

Alternatively you could cache the whole resource (sync or async):

# mark the whole resource - all its 'on_' methods as cached
@cache.cached(timeout=600)
class ThingsResource:
    def on_get(self, req, resp):
        pass

    def on_post(self, req, resp):
        pass

NOTE:
Be careful with the order of middlewares. The cache.middleware will short-circuit any further processing if a cached version of that resource is found. It will skip any remaining process_request and process_resource methods, as well as the responder method that the request would have been routed to. However, any process_response middleware methods will still be called.

This is why it is suggested that you add the cache.middleware following any authentication / authorization middlewares to avoid unauthorized access of records served from the cache.

Development

For the development environment we use Pipenv and for packaging we use Flit.

Documentation

The documentation is built via Sphinx following the Google docstring style and hosted on Read the Docs.

To review the documentation locally before committing:

$ make docs
$ cd docs
$ python -m http.server 8088

Now you can access the documentation locally under http://127.0.0.1:8088/_build/html/

Development environment

To be able to test memcached the pylibmc library should be installed, which requires the memcached source to compile, so you will need to install libmemcached-dev first:

$ sudo apt-get install libmemcached-dev

You will also need Memcached, Redis and Redis Sentinel to be installed to be able to test against those locally:

$ sudo apt-get install memcached redis-server redis-sentinel

You will also need Python 3.7-3.10 and PyPy3 and its source package installed to run tox in all environments.

We do use type hinting and run MyPy on those, but unfortunately MyPy currently breaks the PyPy tests due to the typed-ast package's "bug" (see https://github.com/python/typed_ast/issues/97). Also with Pipenv you can't have a second Pipfile. This is why for now we don't have mypy listed as a dev package in the Pipfile.

Credits

As this is a port of the popular Flask-Caching library onto the Falcon web framework, parts of the code is copied from the Flask-Caching library.

Release files for falcon-caching 1.1.0

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

Source distribution (sdist)

Source distribution for falcon-caching 1.1.0
File Size Uploaded
falcon-caching-1.1.0.tar.gz 78.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for falcon-caching 1.1.0
File Interpreter ABI Platform
falcon_caching-1.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 134.5 kB

Release files / falcon-caching-1.1.0.tar.gz

Download URL falcon-caching-1.1.0.tar.gz
Size 78.6 kB
Tags Source
SHA-256 checksum
How to use checksums
c9fd02b6d1a6f9524500d92e7c38eab3ffd92858f0de91bb71505bc58aacd25a
BLAKE2b-256 checksum
How to use checksums
c26d3cf2e24eb78090b6bdb128207ee8357bcaaf19678b407b384d542a305f89
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via python-requests/2.27.1

Release files / falcon_caching-1.1.0-py3-none-any.whl

Download URL falcon_caching-1.1.0-py3-none-any.whl
Size 55.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e54bb9436c10c43271fc7dbbbb13cf4a6d3db21f34c52f6b9760ea8bbfc202ba
BLAKE2b-256 checksum
How to use checksums
144c66a59ba945b82e8884e4c1e4eebd53c558a326ae3cfb093d91208dce6ec3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via python-requests/2.27.1

Release history Release notifications | RSS feed

This release

1.1.0 This release

2 release files

1.0.3

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.1

2 release files

0.2.0

2 release files

0.1.1

2 release files

0.1.0

2 release files

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