Common patterns
===============
Using pyappcache to provide caching for ``requests``
----------------------------------------------------
Pyappcache provides some added extras to allow it to be used as a cache for the
popular `requests `_ library when
used in conjunction with the `CacheControl
`_ library.
CacheControl provides the HTTP caching logic and Pyappcache provides the cache
backends.
.. autoclass:: pyappcache.util.requests.CacheControlProxy
.. code:: python
import requests
import cachecontrol
from pyappcache.redis import RedisCache
from pyappcache.util.requests import CacheControlProxy
# Create a Cache instance around Redis
cache = RedisCache()
# Create the proxy, which implements CacheControl's desired API
cc_proxy = CacheControlProxy(cache)
# Create the session
cached_session = cachecontrol.CacheControl(
requests.Session(),
cache=cc_proxy
)
# Make the request - first time not cached
cached_session.get("http://calpaterson.com")
# Make the request - seen it before so reads from cache
cached_session.get("http://calpaterson.com")
Storing your cache in a local sqlite file
-----------------------------------------
.. _local sqlite file as cache:
Sometimes it's handy to have the cache stored on disk. This is not as fast as
in-memory but can be handy if you need a way to persist cache entries but
aren't able to run a "proper" cache server like memcache or redis.
.. code:: python
import sqlite3
from pyappcache.sqlite_lru import SqliteCache
sqlite_db = sqlite3.connect("my_cache.sqlite3")
cache = SqliteCache(connection=sqlite_db)