From 2220c31c5f4d3cdb4439ae8ba8cfb9fd1cd02d1b Mon Sep 17 00:00:00 2001 From: Jon Michael Aanes Date: Mon, 11 Mar 2024 21:32:48 +0100 Subject: [PATCH] Provide session initialization with cache --- requests_util/__init__.py | 47 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 44 insertions(+), 3 deletions(-) diff --git a/requests_util/__init__.py b/requests_util/__init__.py index 087f8cd..5875ccc 100644 --- a/requests_util/__init__.py +++ b/requests_util/__init__.py @@ -1,20 +1,61 @@ """Utility module for setting up ratelimiting on third-party sessions.""" -from _version import __version__ - import logging +import pathlib +import os +import datetime + +import requests + +from ._version import __version__ logger = logging.getLogger(__name__) +try: + import requests_cache +except ImportError: + requests_cache = None + logger.warning( + 'Library requests_cache could not be loaded. Automatic cache configuration will not be used.', + ) + + try: import requests_ratelimiter except ImportError: requests_ratelimiter = None logger.warning( - 'Requests ratelimiter could not be loaded. Automatic ratelimit configuration have not be set up.', + 'Library requests_ratelimiter could not be loaded. Automatic ratelimit configuration will not be used.', ) +CACHE_PATH_FROM_HOME = '.local/share/usagi-keiretsu/fin_data/http_cache' + +def initialize_session() -> requests.Session: + ''' + Creates Session with or without caching depending upon current + capabilities. + ''' + logger.info('Setting up session') + + # Setup cache if it can be loaded. + if requests_cache: + home = pathlib.Path(os.environ['HOME']) + cache_path = home / CACHE_PATH_FROM_HOME + cache_path.mkdir(parents=True, exist_ok=True) + session = requests_cache.CachedSession( + cache_path, + expire_after=datetime.timedelta(days=1), + stale_if_error=True, + cache_control=False, + ) + else: + session = requests.Session() + + # Return initialized session. + return session + + def setup_limiter( session: requests.Session, url_prefix: str, **limiter_args ) -> requests.Session: