History#
0.8.1 (2021-09-15)#
Redact
ingored_parametersfromCachedResponse.url(if used for credentials or other sensitive info)Fix an incorrect debug log message about skipping cache write
Add some additional aliases for
DbDict, etc. so fully qualified imports don’t break
0.8.0 (2021-09-07)#
See all issues and PRs for 0.8
Conditional requests & validation:
Add support for conditional requests and cache validation using:
ETag+If-None-MatchheadersLast-Modified+If-Modified-Sinceheaders304 Not Modifiedresponses
If a cached response is expired but contains a validator, a conditional request will by sent, and a new response will be cached and returned only if the remote content has not changed
Backends:
Filesystem:
Add
FileCache.cache_dirwrapper propertyAdd
FileCache.paths()methodAdd
use_cache_diroption to use platform-specific user cache directoryReturn
pathlib.Pathobjects for all file pathsUse shorter hashes for file names
SQLite:
Add
SQLiteCache.db_pathwrapper propertyAdd
use_memoryoption and support for in-memory databasesAdd
use_cache_diroption to use platform-specific user cache directoryReturn
pathlib.Pathobjects for all file paths
Serialization:
Use
cattrsby default for optimized serialization
Other features:
Add
BaseCache.update()method as a shortcut for exporting to a different cache instanceAllow
BaseCache.has_url()anddelete_url()to optionally take parameters forrequests.Requestinstead of just a URLAllow
create_key()to optionally accept parameters forrequests.Requestinstead of a request objectAllow
match_headersto optionally accept a list of specific headers to matchAdd support for custom cache key callbacks with
key_fnparameterBy default use blake2 instead of sha256 for generating cache keys
Slightly reduce size of serialized responses
Backwards-compatible API changes:
The following changes are meant to make certain behaviors more obvious for new users, without breaking existing usage:
For consistency with
Cache-Control: stale-if-error, renameold_data_on_errortostale_if_errorGoing forward, any new options based on a standard HTTP caching feature will be named after that feature
For clarity about matching behavior, rename
include_get_headerstomatch_headersReferences in the docs to cache keys and related behavior are now described as ‘request matching’
For consistency with other backends, rename SQLite backend classes:
backends.sqlite.Db*->SQLiteCache,SQLiteDict,SQLitePickleDictAdd aliases for all previous parameter/class names for backwards-compatibility
Dependencies:
Add
appdirsas a dependency for easier cross-platform usage of user cache directoriesUpdate
cattrsfrom optional to required dependencyUpdate
itsdangerousfrom required to optional (but recommended) dependencyRequire
requests2.22+ andurllib31.25.5+
Deprecations & removals:
Drop support for python 3.6
Note: python 3.6 support in 0.7.x will continue to be maintained at least until it reaches EOL (2021-12-23)
Any bugfixes for 0.8 that also apply to 0.7 will be backported
Remove deprecated
coremoduleRemove deprecated
BaseCache.remove_old_entries()method
0.7.5 (2021-09-15)#
Fix incorrect location of
redirects.sqlitewhen using filesystem backendFix issue in which
redirects.sqlitewould get included in response paths with filesystem backendAdd aliases for forwards-compatibility with 0.8+
Backport fixes from 0.8.1
0.7.4 (2021-08-16)#
Fix an issue with httpdate strings from
Expiresheaders not getting converted to UTCFix a packaging issue with extra files added to top-level wheel directory
Fix some issues with parallelizing tests using pytest-xdist
0.7.3 (2021-08-10)#
SQLite backend:
Update
DbCache.clear()to succeed even if the database is corruptedUpdate
DbDict.bulk_delete()to split the operation into multiple statements to support deleting more items than SQLite’s variable limit (999)
Filesystem backend:
When using JSON serializer, pretty-print JSON by default
Add an appropriate file extension to cache files (
.json,.yaml,.pkl, etc.) by default; can be overridden or disabled with theextensionparameter.
Add a
BaseCache.delete_urls()method to bulk delete multiple responses from the cache based on request URL
0.7.2 (2021-07-21)#
Add support for
Response.next(to get the next request in a redirect chain) when 302 responses are cached directlyAdd a
CachedResponse.cache_keyattributeMake
CachedResponsea non-slotted class to allow client code to set arbitrary attributes on it
0.7.1 (2021-07-09)#
Fix a bug in which Cache-Control headers would be used unexpectedly
0.7.0 (2021-07-07)#
See all issues and PRs for 0.7
Backends:
Add a filesystem backend that stores responses as local files
SQLite and Filesystem: Add
use_tempoption to store files in a temp directorySQLite: Use persistent thread-local connections, and improve performance for bulk operations
DynamoDB: Fix
DynamoDbDict.__iter__to return keys instead of valuesMongoDB: Remove usage of deprecated pymongo
Collection.find_and_modify()Allow passing any backend-specific connection kwargs via
CachedSessionto the underlying connection function or object:SQLite:
sqlite3.connectDynamoDB:
boto3.resourceRedis:
redis.RedisMongoDB and GridFS:
pymongo.MongoClient
Expiration:
Add optional support for the following request headers:
Cache-Control: max-ageCache-Control: no-cacheCache-Control: no-store
Add optional support for the following response headers:
Cache-Control: max-ageCache-Control: no-storeExpires
Add
cache_controloption toCachedSessionto enable usage of cache headersAdd support for HTTP timestamps (RFC 5322) in
expire_afterparametersAdd support for bypassing the cache if
expire_after=0Add support for making a cache allowlist using URL patterns
Serialization:
Add data models for all serialized objects
Add a JSON serializer
Add a YAML serializer
Add a BSON serializer
Add optional support for
cattrsAdd optional support for
ultrajson
Other features:
requests-cache is now fully typed and PEP-561 compliant
Add option to manually cache response objects with
BaseCache.save_response()Add
BaseCache.keys()andvalues()methodsAdd
BaseCache.response_count()method to get an accurate count of responses (excluding invalid and expired)Show summarized response details with
str(CachedResponse)Add more detailed repr methods for
CachedSession,CachedResponse, andBaseCacheAdd support for caching multipart form uploads
Update
BaseCache.urlsto only skip invalid responses, not delete them (for better performance)Update
ignored_parametersto also exclude ignored request params, body params, or headers from cached response data (to avoid storing API keys or other credentials)Update
old_data_on_erroroption to also handle error response codesOnly log request exceptions if
old_data_on_erroris set
Depedencies:
Add minimum
requestsversion of2.17Add
attrsas a dependency for improved serialization modelsAdd
cattrsas an optional dependencyAdd some package extras to install optional dependencies (via
pip install):requests-cache[all](to install everything)requests-cache[bson]requests-cache[json]requests-cache[dynamodb]requests-cache[mongodb]requests-cache[redis]
Compatibility and packaging:
Fix some compatibility issues with
requests 2.17and2.18Run pre-release tests for each supported version of
requestsPackaging is now handled with Poetry. For users, installation still works the same. For developers, see Contributing Guide for details
0.6.4 (2021-06-04)#
Fix a bug in which filter_fn() would get called on response.request instead of response
0.6.3 (2021-04-21)#
Fix false positive warning with
include_get_headersFix handling of
decode_contentparameter forCachedResponse.raw.read()Replace deprecated pymongo
Collection.count()withestimated_document_count()
0.6.2 (2021-04-14)#
Explicitly include docs, tests, and examples in sdist
0.6.1 (2021-04-13)#
Handle errors due to invalid responses in
BaseCache.urlsAdd recently renamed
BaseCache.remove_old_entries()back, as an alias with a DeprecationWarningMake parent dirs for new SQLite databases
Add
aws_access_key_idandaws_secret_access_keykwargs toDynamoDbDictUpdate
GridFSPickleDict.__delitem__to raise a KeyError for missing itemsDemote most
logging.infostatements to debug levelExclude test directory from
find_packages()Make integration tests easier to run and/or fail more quickly in environments where Docker isn’t available
0.6.0 (2021-04-09)#
See all issues and PRs for 0.6
Thanks to Code Shelter and contributors for making this release possible!
Backends:
SQLite: Allow passing user paths (
~/path-to-cache) to database file withdb_pathparamSQLite: Add
timeoutparameterMake default table names consistent across backends (
'http_cache')
Expiration:
Cached responses are now stored with an absolute expiration time, so
CachedSession.expire_afterno longer applies retroactively. To revalidate previously cached items with a new expiration time see below:Add support for overriding original expiration (i.e., revalidating) in
CachedSession.remove_expired_responses()Add support for setting expiration for individual requests
Add support for setting expiration based on URL glob patterns
Add support for setting expiration as a
datetimeAdd support for explicitly disabling expiration with
-1(SinceNonemay be ambiguous in some cases)
Serialization:
Note: Due to the following changes, responses cached with previous versions of requests-cache will be invalid. These old responses will be treated as expired, and will be refreshed the next time they are requested. They can also be manually converted or removed, if needed (see notes below).
Add example script to convert an existing cache from previous serialization format to new one
When running
remove_expired_responses(), also remove responses that are invalid due to updated serialization formatAdd
CachedResponseclass to wrap cachedrequests.Responseobjects, which makes additional cache information available to client codeAdd
CachedHTTPResponseclass to wrapurllib3.response.HTTPResponseobjects, available viaCachedResponse.rawRe-construct the raw response on demand to avoid storing extra data in the cache
Improve emulation of raw request behavior used for iteration, streaming requests, etc.
Add
BaseCache.urlsproperty to get all URLs persisted in the cacheAdd optional support for
itsdangerousfor more secure serialization
Other features:
Add
CacheMixinclass to make the features ofCachedSessionusable as a mixin class, for compatibility with other requests-based libraries.Add
HEADto defaultallowable_methods
Bugfixes:
Fix caching requests with data specified in
jsonparameterFix caching requests with
verifyparameterFix duplicate cached responses due to some unhandled variations in URL format
Fix usage of backend-specific params when used in place of
cache_nameFix potential TypeError with
DbPickleDictinitializationFix usage of
CachedSession.cache_disabledif used within another contextmanagerFix non-thread-safe iteration in
BaseCacheFix
get_cache(),clear(), andremove_expired_responses()so they will do nothing if requests-cache is not installedUpdate usage of deprecated MongoClient
save()methodReplace some old bugs with new and different bugs, just to keep life interesting
Depedencies:
Add
itsdangerousas a dependency for secure serializationAdd
url-normalizeas a dependency for better request normalization and reducing duplications
Deprecations & removals:
Drop support for python 2.7, 3.4, and 3.5
Deprecate
coremodule; all imports should be made from top-level package insteade.g.:
from requests_cache import CachedSessionImports
from requests_cache.corewill raise aDeprecationWarning, and will be removed in a future release
Rename
BaseCache.remove_old_entries()toremove_expired_responses(), to match its wrapper methodCachedSession.remove_expired_responses()
Docs & Tests:
Add type annotations to main functions/methods in public API, and include in documentation on readthedocs
Add Contributing Guide, Security info, and more examples & detailed usage info in User Guide and Advanced Usage sections.
Increase test coverage and rewrite most tests using pytest
Add containerized backends for both local and CI integration testing
0.5.2 (2019-08-14)#
Fix DeprecationWarning from collections #140
0.5.1 (2019-08-13)#
Remove Python 2.6 Testing from travis #133
Fix DeprecationWarning from collections #131
vacuum the sqlite database after clearing a table #134
Fix handling of unpickle errors #128
0.5.0 (2019-04-18)#
Project is now added to Code Shelter
Add gridfs support, thanks to @chengguangnan
Add dynamodb support, thanks to @ar90n
Add response filter #104, thanks to @christopher-dG
Fix bulk_commit #78
Fix remove_expired_responses missed in init.py #93
Fix deprecation warnings #122, thanks to mbarkhau
Drop support for python 2.6
0.4.13 (2016-12-23)#
Support PyMongo3, thanks to @craigls #72
Fix streaming releate issue #68
0.4.12 (2016-03-19)#
Fix ability to pass backend instance in
install_cache#61
0.4.11 (2016-03-07)#
ignore_parametersfeature, thanks to @themiurgo and @YetAnotherNerd (#52, #55)More informative message for missing backend dependencies, thanks to @Garrett-R (#60)
0.4.10 (2015-04-28)#
Better transactional handling in sqlite #50, thanks to @rgant
Compatibility with streaming in requests >= 2.6.x
0.4.9 (2015-01-17)#
expire_afternow also acceptstimedelta, thanks to @femtotraderAdded Ability to include headers to cache key (
include_get_headersoption)Added string representation for
CachedSession
0.4.8 (2014-12-13)#
Fix bug in reading cached streaming response
0.4.7 (2014-12-06)#
Fix compatibility with Requests > 2.4.1 (json arg, response history)
0.4.6 (2014-10-13)#
Monkey patch now uses class instead lambda (compatibility with rauth)
Normalize (sort) parameters passed as builtin dict
0.4.5 (2014-08-22)#
Requests==2.3.0 compatibility, thanks to @gwillem
0.4.4 (2013-10-31)#
Check for backend availability in install_cache(), not at the first request
Default storage fallbacks to memory if
sqliteis not available
0.4.3 (2013-09-12)#
Fix
response.from_cachenot set in hooks
0.4.2 (2013-08-25)#
Fix
UnpickleableErrorfor gzip responses
0.4.1 (2013-08-19)#
requests_cache.enabled()context managerCompatibility with Requests 1.2.3 cookies handling
0.4.0 (2013-04-25)#
Redis backend. Thanks to @michaelbeaumont
Fix for changes in Requests 1.2.0 hooks dispatching
0.3.0 (2013-02-24)#
Support for
Requests1.x.xCachedSessionMany backward incompatible changes
0.2.1 (2013-01-13)#
Fix broken PyPi package
0.2.0 (2013-01-12)#
Last backward compatible version for
Requests0.14.2
0.1.3 (2012-05-04)#
Thread safety for default
sqlitebackendTake into account the POST parameters when cache is configured with ‘POST’ in
allowable_methods
0.1.2 (2012-05-02)#
Reduce number of
sqlitedatabase write operationsfast_saveoption forsqlitebackend
0.1.1 (2012-04-11)#
Fix: restore responses from response.history
Internal refactoring (
MemoryCache->BaseCache,reduce_responseandrestore_responsemoved toBaseCache)connectionoption forMongoCache
0.1.0 (2012-04-10)#
initial PyPI release