| (general)= |
| # {fas}`play-circle` General Usage |
| There are two main ways of using requests-cache: |
| - **Sessions:** (recommended) Use {py:class}`.CachedSession` to send your requests |
| - **Patching:** Globally patch `requests` using {py:func}`.install_cache()` |
| |
| ## Sessions |
| {py:class}`.CachedSession` can be used as a drop-in replacement for {py:class}`requests.Session`. |
| Basic usage looks like this: |
| ```python |
| >>> from requests_cache import CachedSession |
| |
| >>> session = CachedSession() |
| >>> session.get('https://httpbin.org/get') |
| ``` |
| |
| Any {py:class}`requests.Session` method can be used (but see {ref}`http-method-filtering` section for |
| options): |
| ```python |
| >>> session.request('GET', 'https://httpbin.org/get') |
| >>> session.head('https://httpbin.org/get') |
| ``` |
| |
| Caching can be temporarily disabled for the session with |
| {py:meth}`.CachedSession.cache_disabled`: |
| ```python |
| >>> with session.cache_disabled(): |
| ... session.get('https://httpbin.org/get') |
| ``` |
| |
| The best way to clean up your cache is through {ref}`expiration` settings, but you can also |
| clear out everything at once with {py:meth}`.BaseCache.clear`: |
| ```python |
| >>> session.cache.clear() |
| ``` |
| |
| (patching)= |
| ## Patching |
| In some situations, it may not be possible or convenient to manage your own session object. In those |
| cases, you can use {py:func}`.install_cache`. This adds fully transparent caching to all `requests` |
| functions, without the need to modify any existing code: |
| ```python |
| >>> import requests |
| >>> import requests_cache |
| |
| >>> requests_cache.install_cache() |
| >>> requests.get('https://httpbin.org/get') |
| ``` |
| |
| As well as session methods: |
| ```python |
| >>> session = requests.Session() |
| >>> session.get('https://httpbin.org/get') |
| ``` |
| |
| {py:func}`.install_cache` accepts all the same parameters as {py:class}`.CachedSession`: |
| ```python |
| >>> requests_cache.install_cache(expire_after=360, allowable_methods=('GET', 'POST')) |
| ``` |
| |
| It can be temporarily {py:func}`.enabled`: |
| ```python |
| >>> with requests_cache.enabled(): |
| ... requests.get('https://httpbin.org/get') # Will be cached |
| ``` |
| |
| Or temporarily {py:func}`.disabled`: |
| ```python |
| >>> requests_cache.install_cache() |
| >>> with requests_cache.disabled(): |
| ... requests.get('https://httpbin.org/get') # Will not be cached |
| ``` |
| |
| Or completely removed with {py:func}`.uninstall_cache`: |
| ```python |
| >>> requests_cache.uninstall_cache() |
| >>> requests.get('https://httpbin.org/get') |
| ``` |
| |
| You can also clear out all responses in the cache with {py:func}`.clear`, and check if |
| requests-cache is currently installed with {py:func}`.is_installed`. |
| |
| (monkeypatch-issues)= |
| ### Patching Limitations & Potential Issues |
| There are some scenarios where patching `requests` with {py:func}`.install_cache` is not ideal: |
| - When using other libraries that patch {py:class}`requests.Session` |
| - In a multi-threaded or multiprocess application |
| - In a library that will be imported by other libraries or applications |
| - In a larger application that makes requests in several different modules, where it may not be |
| obvious what is and isn't being cached |
| |
| In these cases, consider using {py:class}`.CachedSession` instead. |
| |
| (settings)= |
| ## Settings |
| There are a number of settings that affect cache behavior, which are covered in more detail in the following sections: |
| * {ref}`expiration` |
| * {ref}`filtering` |
| * {ref}`matching` |
| |
| These can all be passed as keyword arguments to {py:class}`.CachedSession` or |
| {py:func}`.install_cache`. When using a session object, these can also be safely modified at any |
| time via {py:attr}`.CachedSession.settings`. For example: |
| ```python |
| >>> from requests_cache import CachedSession |
| |
| >>> session = CachedSession() |
| >>> session.settings.expire_after = 360 |
| >>> session.settings.stale_if_error = True |
| ``` |
| |
| Note that this does **not** include backend and serializer settings, which cannot be changed after initialization. |