implemented cache identifier

This commit is contained in:
Hazel Noack 2025-06-11 15:22:45 +02:00
parent a8bcb38618
commit 616c3485de

View File

@ -14,6 +14,7 @@ class Connection:
def __init__( def __init__(
self, self,
session: Optional[requests.Session] = None, session: Optional[requests.Session] = None,
headers: Optional[dict] = None,
cache_enable: bool = True, cache_enable: bool = True,
cache_expires_after: Optional[timedelta] = None, cache_expires_after: Optional[timedelta] = None,
request_delay: float = 0, request_delay: float = 0,
@ -23,6 +24,8 @@ class Connection:
max_retries: Optional[int] = 5, max_retries: Optional[int] = 5,
) -> None: ) -> None:
self.session = session if session is not None else requests.Session() self.session = session if session is not None else requests.Session()
if headers is not None:
self.session.headers.update(**headers)
# cache related config # cache related config
self.cache_enable = cache_enable self.cache_enable = cache_enable
@ -103,12 +106,16 @@ class Connection:
return True return True
def send_request(self, request: requests.Request, attempt: int = 0) -> requests.Response: def send_request(self, request: requests.Request, attempt: int = 0, cache_enable: bool = True, cache_identifier: str = "", **kwargs) -> requests.Response:
url = request.url url = request.url
if url is None: if url is None:
raise ValueError("can't send a request without url") raise ValueError("can't send a request without url")
if self.cache_enable and cache.has_cache(url): cache_url = url + cache_identifier
return cache.get_cache(url)
cache_enable = self.cache_enable and cache_enable
if cache_enable and cache.has_cache(cache_url):
return cache.get_cache(cache_url)
current_delay = self.request_delay + (self.additional_delay_per_try * attempt) current_delay = self.request_delay + (self.additional_delay_per_try * attempt)
elapsed_time = time.time() - self.last_request elapsed_time = time.time() - self.last_request
@ -121,7 +128,7 @@ class Connection:
self.last_request = time.time() self.last_request = time.time()
try: try:
response = self.session.send(request.prepare()) response = self.session.send(self.session.prepare_request(request))
except requests.ConnectionError: except requests.ConnectionError:
if self.max_retries is not None and self.max_retries <= attempt: if self.max_retries is not None and self.max_retries <= attempt:
raise raise
@ -135,27 +142,27 @@ class Connection:
) )
return self.send_request(request, attempt=attempt+1) return self.send_request(request, attempt=attempt+1)
if self.cache_enable: if cache_enable:
cache.write_cache(url, response) cache.write_cache(cache_url, response)
return response return response
def get(self, url: str, headers: Optional[dict] = None, **kwargs) -> requests.Response: def get(self, url: str, headers: Optional[dict] = None, cache_enable: bool = True, cache_identifier: str = "", **kwargs) -> requests.Response:
return self.send_request(requests.Request( return self.send_request(requests.Request(
'GET', 'GET',
url=url, url=url,
headers=headers, headers=headers,
**kwargs **kwargs
)) ), cache_enable=cache_enable, cache_identifier=cache_identifier, **kwargs)
def post(self, url: str, headers: Optional[dict] = None, json: Optional[dict] = None, **kwargs) -> requests.Response: def post(self, url: str, data: Optional[dict] = None, headers: Optional[dict] = None, cache_enable: bool = True, cache_identifier: str = "", **kwargs) -> requests.Response:
return self.send_request(requests.Request( return self.send_request(requests.Request(
'POST', 'POST',
url=url, url=url,
headers=headers, headers=headers,
json=json, data=data,
**kwargs, **kwargs,
)) ), cache_enable=cache_enable, cache_identifier=cache_identifier, **kwargs)
class SilentConnection(Connection): class SilentConnection(Connection):