Filesystem¶
Filesystem cache backend. For usage details, see Backends: Filesystem.
Filesystem cache backend. |
|
A dictionary-like interface to files on the local filesystem. |
|
A SQLite db used to track LRU metadata for cached items: |
|
A size-restricted version of FileDict, using LRU eviction. |
- class requests_cache.backends.filesystem.FileCache(cache_name='http_cache', use_temp=False, decode_content=True, serializer=None, **kwargs)[source]¶
Bases:
BaseCacheFilesystem cache backend.
- Parameters:
cache_name (
Union[Path,str]) – Base directory for cache filesuse_cache_dir – Store database in a user cache directory (e.g., ~/.cache/)
use_temp (
bool) – Store cache files in a temp directory (e.g.,/tmp/http_cache/). Note: ifcache_nameis an absolute path, this option will be ignored.decode_content (
bool) – Decode JSON or text response body into a human-readable formatextension – Extension for cache files. If not specified, the serializer default extension will be used.
max_cache_bytes – Enable LRU caching, and set the maximum total size (in bytes) of cached responses on the file system.
max_file_bytes – The maximum size of a single file. By default, this is the same as
max_cache_bytes. Only used ifmax_cache_bytesis set.block_bytes – The size of a block of data on the file system, which will be used when computing total file size on disk. Only used if
max_cache_bytesis set.sync_index – On startup, sync LRU metadata with any changes on disk since last use. Use this if you intend to modify cache files outside of requests-cache. Leave off to reduce startup time for larger caches. Only used if
max_cache_bytesis set.lock – Replace the default
threading.RLockobject without your own. Use this if you want to share the lock between multiple cache instances, and/or use a different lock type (such asmultiprocessing.RLockorfilelock.FileLock).serializer (
Union[str,SerializerPipeline,Stage,None])
- close()¶
Close any open backend connections
- contains(key=None, request=None, url=None, verify=True)¶
Check if the specified request is cached
- Parameters:
request (
Union[Request,PreparedRequest,CachedRequest,None]) – Check for a matching request, according to current request matching settingsurl (
Optional[str]) – Check for a matching GET request with the specified URLverify (
bool) – Check for requests with or without SSL verification
- create_key(request, match_headers=None, **kwargs)¶
Create a normalized cache key from a request object
- Parameters:
request (
Union[Request,PreparedRequest,CachedRequest])
- Return type:
- property db_path: str | Path¶
Path to the cache database file.
- Raises:
NotImplementedError – For backends that do not use a file-based database.
- delete(*args, **kwargs)[source]¶
Remove responses from the cache according one or more conditions.
- Parameters:
keys – Remove responses with these cache keys
expired – Remove all expired responses
invalid – Remove all invalid responses (that can’t be deserialized with current settings)
older_than – Remove responses older than this value, relative to
response.created_atrequests – Remove matching responses, according to current request matching settings
urls – Remove matching GET requests for the specified URL(s)
verify – Set to
Falseto remove responses without SSL verification
- filter(valid=True, expired=True, invalid=False, older_than=None)¶
Get responses from the cache, with optional filters for which responses to include:
- Parameters:
valid (
bool) – Include valid and unexpired responses; set toFalseto get only expired/invalid/old responsesexpired (
bool) – Include expired responsesinvalid (
bool) – Include invalid responses (as an emptyCachedResponse)older_than (
Union[None,int,float,str,datetime,timedelta]) – Get responses older than this value, relative toresponse.created_at
- Return type:
- get_response(key, default=None)¶
Retrieve a response from the cache, if it exists
- Parameters:
key (
str) – Cache key for the responsedefault – Value to return if key is not in the cache
- Return type:
- recreate_keys()¶
Recreate cache keys for all previously cached responses
- remove_expired_responses(expire_after=None)¶
- reset_expiration(expire_after=None)¶
Set a new expiration value to set on existing cache items
- save_response(response, cache_key=None, expires=None)¶
Save a response to the cache
- class requests_cache.backends.filesystem.FileDict(cache_name, use_temp=False, use_cache_dir=False, extension=None, serializer=<requests_cache.serializers.pipeline.SerializerPipeline object>, lock=None, **kwargs)[source]¶
Bases:
BaseStorageA dictionary-like interface to files on the local filesystem.
The cache directory will be created if it doesn’t already exist.
- Parameters:
- bulk_delete(keys)¶
Delete multiple keys from the cache, without raising errors for missing keys.
This is a naive, generic implementation that subclasses should override with a more efficient backend-specific implementation, if possible.
- close()¶
Close any open backend connections
- deserialize(key, value)¶
Deserialize a value, if a serializer is available.
If deserialization fails (usually due to a value saved in an older requests-cache version),
Nonewill be returned.- Parameters:
value (
TypeVar(VT))
- get(k[, d]) D[k] if k in D, else d. d defaults to None.¶
- items() a set-like object providing a view on D's items¶
- pop(k[, d]) v, remove specified key and return the corresponding value.¶
If key is not found, d is returned if given, otherwise KeyError is raised.
- popitem() (k, v), remove and return some (key, value) pair¶
as a 2-tuple; but raise KeyError if D is empty.
- setdefault(k[, d]) D.get(k,d), also set D[k]=d if k not in D¶
- update([E, ]**F) None. Update D from mapping/iterable E and F.¶
If E present and has a .keys() method, does: for k in E.keys(): D[k] = E[k] If E present and lacks .keys() method, does: for (k, v) in E: D[k] = v In either case, this is followed by: for k, v in F.items(): D[k] = v
- values() an object providing a view on D's values¶
- class requests_cache.backends.filesystem.LRUDict(*args, **kwargs)[source]¶
Bases:
SQLiteDictA SQLite db used to track LRU metadata for cached items:
key: The cache keyaccess_time: The last access time, as a UNIX timestamp in nanosecondssize: The size of the cached item, in bytestotal_sizeCombined size of all cache items in bytes, accessed withtotal_size().
Implementation Notes:
total_sizeis managed by triggers and stored in a separate single-row table.As a dict-like interface,
sizeis treated as the main value andaccess_timeis set automatically and updated withupdate_access_time().get_lru()Can select multiple keys to evict, up to an arbitrary total size, within a single query using a window function.
- bulk_commit()¶
Insert a large number of records within a single transaction
Example
>>> d1 = SQLiteDict('test') >>> with d1.bulk_commit(): ... for i in range(1000): ... d1[i] = i * 2
- bulk_delete(keys=None, values=None)¶
Delete multiple items from the cache, without raising errors for any missing items. Supports deleting by either key or by value.
- close()¶
Close any active connections
- connection(commit=False)¶
Get a thread-local database connection
- Return type:
- deserialize(key, value)¶
Deserialize a value, if a serializer is available.
If deserialization fails (usually due to a value saved in an older requests-cache version),
Nonewill be returned.- Parameters:
value (
TypeVar(VT))
- get(k[, d]) D[k] if k in D, else d. d defaults to None.¶
- get_lru(total_size)[source]¶
Get the least recently used keys with a combined size >= total_size
- Parameters:
total_size (
int)
- items() a set-like object providing a view on D's items¶
- keys() a set-like object providing a view on D's keys¶
- pop(k[, d]) v, remove specified key and return the corresponding value.¶
If key is not found, d is returned if given, otherwise KeyError is raised.
- popitem() (k, v), remove and return some (key, value) pair¶
as a 2-tuple; but raise KeyError if D is empty.
- setdefault(k[, d]) D.get(k,d), also set D[k]=d if k not in D¶
- size()¶
Return the size of the database, in bytes. For an in-memory database, this will be an estimate based on page size.
- Return type:
- sorted(key='access_time', reversed=False, limit=None, **kwargs)[source]¶
Get LRU entries in sorted order, by either
access_timeorsize
- update([E, ]**F) None. Update D from mapping/iterable E and F.¶
If E present and has a .keys() method, does: for k in E.keys(): D[k] = E[k] If E present and lacks .keys() method, does: for (k, v) in E: D[k] = v In either case, this is followed by: for k, v in F.items(): D[k] = v
- vacuum()¶
- values() an object providing a view on D's values¶
- class requests_cache.backends.filesystem.LRUFileDict(*args, block_bytes=1, max_cache_bytes=104857600, max_file_bytes=None, sync_index=False, **kwargs)[source]¶
Bases:
FileDictA size-restricted version of FileDict, using LRU eviction.
- Parameters:
block_bytes (
int) – The size of a block of data on the file system. File sizes will be aligned with this.max_cache_bytes (
int) – The maximum total size of all files in the cache.max_file_bytes (
Optional[int]) – The maximum size of a single file. By default, this is the same asmax_cache_bytes.sync_index (
bool) – Check for filesystem changes since last use. Use this if you intend to modify cache files outside of requests-cache. Leave off to reduce startup time for larger caches.
- bulk_delete(keys)¶
Delete multiple keys from the cache, without raising errors for missing keys.
This is a naive, generic implementation that subclasses should override with a more efficient backend-specific implementation, if possible.
- close()¶
Close any open backend connections
- deserialize(key, value)¶
Deserialize a value, if a serializer is available.
If deserialization fails (usually due to a value saved in an older requests-cache version),
Nonewill be returned.- Parameters:
value (
TypeVar(VT))
- get(k[, d]) D[k] if k in D, else d. d defaults to None.¶
- items() a set-like object providing a view on D's items¶
- keys() a set-like object providing a view on D's keys¶
- pop(k[, d]) v, remove specified key and return the corresponding value.¶
If key is not found, d is returned if given, otherwise KeyError is raised.
- popitem() (k, v), remove and return some (key, value) pair¶
as a 2-tuple; but raise KeyError if D is empty.
- setdefault(k[, d]) D.get(k,d), also set D[k]=d if k not in D¶
- update([E, ]**F) None. Update D from mapping/iterable E and F.¶
If E present and has a .keys() method, does: for k in E.keys(): D[k] = E[k] If E present and lacks .keys() method, does: for (k, v) in E: D[k] = v In either case, this is followed by: for k, v in F.items(): D[k] = v
- values() an object providing a view on D's values¶