diff options
| author | Jordan Cook <jordan.cook@pioneer.com> | 2021-04-18 21:46:08 -0500 |
|---|---|---|
| committer | Jordan Cook <jordan.cook@pioneer.com> | 2021-04-19 16:45:34 -0500 |
| commit | f0916900e11778f9ff0a33b148edbf2f51f6f600 (patch) | |
| tree | 36627a6f9c46657bac58d28d2c17ff311c1d679c /requests_cache/backends/mongo.py | |
| parent | 714814d0c23271fb357e9ee094e8754ef9818029 (diff) | |
| download | requests-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.py | 52 |
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}) |
