summaryrefslogtreecommitdiff
path: root/requests_cache
diff options
context:
space:
mode:
authorJordan Cook <jordan.cook@pioneer.com>2022-04-18 14:03:18 -0500
committerJordan Cook <jordan.cook@pioneer.com>2022-04-18 14:15:29 -0500
commitf174ce3d0542d3823b93448e4c4ef6c2cef14179 (patch)
treeb0f711885c107c3fbc621c8bfd690b9de6a83842 /requests_cache
parent97a6a19035f4a68e7e4689fc0a1cec6e7781c4a4 (diff)
downloadrequests-cache-f174ce3d0542d3823b93448e4c4ef6c2cef14179.tar.gz
Close database connections (if applicable) on CachedSession.__exit__ and close()
Diffstat (limited to 'requests_cache')
-rw-r--r--requests_cache/backends/base.py9
-rw-r--r--requests_cache/backends/mongodb.py3
-rw-r--r--requests_cache/backends/redis.py3
-rw-r--r--requests_cache/session.py5
4 files changed, 20 insertions, 0 deletions
diff --git a/requests_cache/backends/base.py b/requests_cache/backends/base.py
index 250b5e1..0a551ea 100644
--- a/requests_cache/backends/base.py
+++ b/requests_cache/backends/base.py
@@ -100,6 +100,12 @@ class BaseCache:
self.responses.clear()
self.redirects.clear()
+ def close(self):
+ """Close any open backend connections"""
+ logger.debug('Closing backend connections')
+ self.responses.close()
+ self.redirects.close()
+
def create_key(self, request: PreparedRequest = None, **kwargs) -> str:
"""Create a normalized cache key from a request object"""
key_fn = self._settings.key_fn or create_key
@@ -272,6 +278,9 @@ class BaseStorage(MutableMapping, ABC):
except KeyError:
pass
+ def close(self):
+ """Close any open backend connections"""
+
def __str__(self):
return str(list(self.keys()))
diff --git a/requests_cache/backends/mongodb.py b/requests_cache/backends/mongodb.py
index 7623319..6d4175d 100644
--- a/requests_cache/backends/mongodb.py
+++ b/requests_cache/backends/mongodb.py
@@ -136,6 +136,9 @@ class MongoDict(BaseStorage):
def clear(self):
self.collection.drop()
+ def close(self):
+ self.connection.close()
+
class MongoPickleDict(MongoDict):
"""Same as :class:`MongoDict`, but serializes values before saving.
diff --git a/requests_cache/backends/redis.py b/requests_cache/backends/redis.py
index d79af35..5836714 100644
--- a/requests_cache/backends/redis.py
+++ b/requests_cache/backends/redis.py
@@ -102,6 +102,9 @@ class RedisDict(BaseStorage):
def clear(self):
self.bulk_delete(self.keys())
+ def close(self):
+ self.connection.close()
+
def keys(self):
return [
decode(key).replace(f'{self.namespace}:', '')
diff --git a/requests_cache/session.py b/requests_cache/session.py
index 68d0c68..9f46d0e 100644
--- a/requests_cache/session.py
+++ b/requests_cache/session.py
@@ -292,6 +292,11 @@ class CacheMixin(MIXIN_BASE):
finally:
self.settings.disabled = False
+ def close(self):
+ """Close the session and any open backend connections"""
+ super().close()
+ self.cache.close()
+
def remove_expired_responses(self, expire_after: ExpirationTime = None):
"""Remove expired responses from the cache, optionally with revalidation