summaryrefslogtreecommitdiff
path: root/requests_cache/backends/mongo.py
diff options
context:
space:
mode:
authorJordan Cook <jordan.cook@pioneer.com>2021-04-18 21:46:08 -0500
committerJordan Cook <jordan.cook@pioneer.com>2021-04-19 16:45:34 -0500
commitf0916900e11778f9ff0a33b148edbf2f51f6f600 (patch)
tree36627a6f9c46657bac58d28d2c17ff311c1d679c /requests_cache/backends/mongo.py
parent714814d0c23271fb357e9ee094e8754ef9818029 (diff)
downloadrequests-cache-f0916900e11778f9ff0a33b148edbf2f51f6f600.tar.gz
Allow passing any valid backend connection kwargs via BaseCache
* Pass `**kwargs` to backend storage classes, split out any that are valid for the backend-specific connection function/class, and pass them to the connection * Add intersphinx links to docs for dependencies * Update and format some more backend class docstrings * Remove 'Unrecognized keyword arguments' warning from `BaseStorage` * Turn `warnings.warn` about using secret keys into a `logging.warning` (due to complaints about too many messages)
Diffstat (limited to 'requests_cache/backends/mongo.py')
-rw-r--r--requests_cache/backends/mongo.py52
1 files changed, 28 insertions, 24 deletions
diff --git a/requests_cache/backends/mongo.py b/requests_cache/backends/mongo.py
index 0c9bc61..b479a47 100644
--- a/requests_cache/backends/mongo.py
+++ b/requests_cache/backends/mongo.py
@@ -1,40 +1,44 @@
from pymongo import MongoClient
-from .base import BaseCache, BaseStorage
+from . import BaseCache, BaseStorage, get_valid_kwargs
class MongoCache(BaseCache):
- """MongoDB cache backend"""
+ """MongoDB cache backend
- def __init__(self, db_name='http_cache', **kwargs):
- """
- :param db_name: database name (default: ``'requests-cache'``)
- :param connection: (optional) ``pymongo.Connection``
- """
+ Args:
+ db_name: Database name
+ connection: :py:class:`pymongo.MongoClient` object to reuse instead of creating a new one
+ kwargs: Additional keyword arguments for :py:class:`pymongo.MongoClient`
+ """
+
+ def __init__(self, db_name: str = 'http_cache', connection: MongoClient = None, **kwargs):
+ """"""
super().__init__(**kwargs)
- self.responses = MongoPickleDict(db_name, collection_name='responses', **kwargs)
- kwargs['connection'] = self.responses.connection
- self.redirects = MongoDict(db_name, collection_name='redirects', **kwargs)
+ self.responses = MongoPickleDict(db_name, 'responses', connection=connection, **kwargs)
+ self.redirects = MongoDict(
+ db_name,
+ collection_name='redirects',
+ connection=self.responses.connection,
+ **kwargs,
+ )
class MongoDict(BaseStorage):
- """A dictionary-like interface for a MongoDB collection"""
+ """A dictionary-like interface for a MongoDB collection
+
+ Args:
+ db_name: Database name
+ collection_name: Collection name
+ connection: :py:class:`pymongo.MongoClient` object to reuse instead of creating a new one
+ kwargs: Additional keyword arguments for :py:class:`pymongo.MongoClient`
+ """
def __init__(self, db_name, collection_name='http_cache', connection=None, **kwargs):
- """
- :param db_name: database name (be careful with production databases)
- :param collection_name: collection name (default: mongo_dict_data)
- :param connection: ``pymongo.Connection`` instance. If it's ``None``
- (default) new connection with default options will
- be created
- """
super().__init__(**kwargs)
- if connection is not None:
- self.connection = connection
- else:
- self.connection = MongoClient()
- self.db = self.connection[db_name]
- self.collection = self.db[collection_name]
+ connection_kwargs = get_valid_kwargs(MongoClient, kwargs)
+ self.connection = connection or MongoClient(**connection_kwargs)
+ self.collection = self.connection[db_name][collection_name]
def __getitem__(self, key):
result = self.collection.find_one({'_id': key})