generated from Hazel/python-project
implemented cache identifier
This commit is contained in:
parent
a8bcb38618
commit
616c3485de
@ -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):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user