summaryrefslogtreecommitdiff
path: root/requests_cache
diff options
context:
space:
mode:
authorJordan Cook <JWCook@users.noreply.github.com>2021-04-22 13:27:24 -0500
committerGitHub <noreply@github.com>2021-04-22 13:27:24 -0500
commitf2bf9bbfd8d711e9dfc8ccce83f439d765d484cb (patch)
treefb617be7c7760390b7239899e6522d865956342f /requests_cache
parent38ddcf5425eadc6b174a8b053b2175c4dda00a1f (diff)
parent3ec85f0107caedbe3b3bd8080bd3dac81b7baa17 (diff)
downloadrequests-cache-f2bf9bbfd8d711e9dfc8ccce83f439d765d484cb.tar.gz
Merge pull request #242 from JWCook/integration-tests
Refactor backend integration tests
Diffstat (limited to 'requests_cache')
-rw-r--r--requests_cache/backends/base.py3
-rw-r--r--requests_cache/backends/dynamodb.py3
-rw-r--r--requests_cache/backends/filesystem.py21
-rw-r--r--requests_cache/backends/gridfs.py3
-rw-r--r--requests_cache/backends/mongo.py3
-rw-r--r--requests_cache/backends/redis.py3
-rw-r--r--requests_cache/backends/sqlite.py6
7 files changed, 15 insertions, 27 deletions
diff --git a/requests_cache/backends/base.py b/requests_cache/backends/base.py
index e912879..def4dc1 100644
--- a/requests_cache/backends/base.py
+++ b/requests_cache/backends/base.py
@@ -201,3 +201,6 @@ class BaseStorage(MutableMapping, ABC):
return Serializer(secret_key, salt=salt, serializer=pickle)
else:
return pickle
+
+ def __str__(self):
+ return str(list(self.keys()))
diff --git a/requests_cache/backends/dynamodb.py b/requests_cache/backends/dynamodb.py
index ffb610c..bcd1e26 100644
--- a/requests_cache/backends/dynamodb.py
+++ b/requests_cache/backends/dynamodb.py
@@ -110,9 +110,6 @@ class DynamoDbDict(BaseStorage):
composite_key = {'namespace': v['namespace'], 'key': v['key']}
self._table.delete_item(Key=composite_key)
- def __str__(self):
- return str(dict(self.items()))
-
def __scan_table(self):
expression_attribute_values = {':Namespace': self._self_key}
expression_attribute_names = {'#N': 'namespace'}
diff --git a/requests_cache/backends/filesystem.py b/requests_cache/backends/filesystem.py
index c85751f..c9fc515 100644
--- a/requests_cache/backends/filesystem.py
+++ b/requests_cache/backends/filesystem.py
@@ -1,7 +1,7 @@
# TODO: Add option for compression?
from contextlib import contextmanager
from os import listdir, makedirs, unlink
-from os.path import abspath, expanduser, isabs, join
+from os.path import abspath, dirname, expanduser, isabs, join
from pathlib import Path
from pickle import PickleError
from shutil import rmtree
@@ -13,8 +13,9 @@ from .sqlite import DbDict
class FileCache(BaseCache):
- """Backend that stores cached responses as files on the local filesystem. Response paths will be
- in the format ``<cache_name>/<cache_key>``. Redirects are stored in a SQLite database.
+ """Backend that stores cached responses as files on the local filesystem.
+ Response paths will be in the format ``<cache_name>/responses/<cache_key>``.
+ Redirects are stored in a SQLite database, located at ``<cache_name>/redirects.sqlite``.
Args:
cache_name: Base directory for cache files
@@ -24,18 +25,18 @@ class FileCache(BaseCache):
def __init__(self, cache_name: Union[Path, str] = 'http_cache', use_temp: bool = False, **kwargs):
super().__init__(**kwargs)
- cache_dir = _get_cache_dir(cache_name, use_temp)
- self.responses = FileDict(cache_dir, **kwargs)
- self.redirects = DbDict(join(cache_dir, 'redirects.sqlite'), 'redirects', **kwargs)
+ self.responses = FileDict(cache_name, use_temp=use_temp, **kwargs)
+ db_path = join(dirname(self.responses.cache_dir), 'redirects.sqlite')
+ self.redirects = DbDict(db_path, 'redirects', **kwargs)
class FileDict(BaseStorage):
"""A dictionary-like interface to files on the local filesystem"""
- def __init__(self, cache_dir, **kwargs):
+ def __init__(self, cache_name, use_temp: bool = False, **kwargs):
kwargs.setdefault('suppress_warnings', True)
super().__init__(**kwargs)
- self.cache_dir = cache_dir
+ self.cache_dir = _get_cache_dir(cache_name, use_temp)
makedirs(self.cache_dir, exist_ok=True)
@contextmanager
@@ -70,7 +71,7 @@ class FileDict(BaseStorage):
def clear(self):
with self._try_io(ignore_errors=True):
- rmtree(self.cache_dir)
+ rmtree(self.cache_dir, ignore_errors=True)
makedirs(self.cache_dir)
def paths(self):
@@ -81,7 +82,7 @@ class FileDict(BaseStorage):
def _get_cache_dir(cache_dir: Union[Path, str], use_temp: bool) -> str:
if use_temp and not isabs(cache_dir):
- cache_dir = join(gettempdir(), cache_dir)
+ cache_dir = join(gettempdir(), cache_dir, 'responses')
cache_dir = abspath(expanduser(str(cache_dir)))
makedirs(cache_dir, exist_ok=True)
return cache_dir
diff --git a/requests_cache/backends/gridfs.py b/requests_cache/backends/gridfs.py
index 73f258e..82ca05c 100644
--- a/requests_cache/backends/gridfs.py
+++ b/requests_cache/backends/gridfs.py
@@ -77,6 +77,3 @@ class GridFSPickleDict(BaseStorage):
def clear(self):
self.db['fs.files'].drop()
self.db['fs.chunks'].drop()
-
- def __str__(self):
- return str(dict(self.items()))
diff --git a/requests_cache/backends/mongo.py b/requests_cache/backends/mongo.py
index b479a47..9ebadf4 100644
--- a/requests_cache/backends/mongo.py
+++ b/requests_cache/backends/mongo.py
@@ -70,9 +70,6 @@ class MongoDict(BaseStorage):
def clear(self):
self.collection.drop()
- def __str__(self):
- return str(dict(self.items()))
-
class MongoPickleDict(MongoDict):
"""Same as :class:`MongoDict`, but pickles values before saving"""
diff --git a/requests_cache/backends/redis.py b/requests_cache/backends/redis.py
index 33236d5..5209aa6 100644
--- a/requests_cache/backends/redis.py
+++ b/requests_cache/backends/redis.py
@@ -60,6 +60,3 @@ class RedisDict(BaseStorage):
def clear(self):
self.connection.delete(self._self_key)
-
- def __str__(self):
- return str(dict(self.items()))
diff --git a/requests_cache/backends/sqlite.py b/requests_cache/backends/sqlite.py
index 470d00c..9c98fcd 100644
--- a/requests_cache/backends/sqlite.py
+++ b/requests_cache/backends/sqlite.py
@@ -25,7 +25,6 @@ class DbCache(BaseCache):
def __init__(self, db_path: Union[Path, str] = 'http_cache', fast_save: bool = False, **kwargs):
super().__init__(**kwargs)
- db_path = _get_db_path(db_path)
self.responses = DbPickleDict(db_path, table_name='responses', fast_save=fast_save, **kwargs)
self.redirects = DbDict(db_path, table_name='redirects', **kwargs)
@@ -60,7 +59,7 @@ class DbDict(BaseStorage):
kwargs.setdefault('suppress_warnings', True)
super().__init__(**kwargs)
self.connection_kwargs = get_valid_kwargs(sqlite_template, kwargs)
- self.db_path = db_path
+ self.db_path = _get_db_path(db_path)
self.fast_save = fast_save
self.table_name = table_name
@@ -144,9 +143,6 @@ class DbDict(BaseStorage):
with self.connection(True) as con:
con.execute("vacuum")
- def __str__(self):
- return str(dict(self.items()))
-
class DbPickleDict(DbDict):
"""Same as :class:`DbDict`, but pickles values before saving"""