From 8494ca357e63d3b969d63f83abf69fe759331bd5 Mon Sep 17 00:00:00 2001 From: Arth Date: Tue, 16 Jun 2026 19:15:56 +0530 Subject: [PATCH] Added persistent HTTP session support with connection pooling and improved retry handling. --- src/pcpi/_session_base.py | 38 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/src/pcpi/_session_base.py b/src/pcpi/_session_base.py index 6947c9c..621ffd9 100644 --- a/src/pcpi/_session_base.py +++ b/src/pcpi/_session_base.py @@ -8,6 +8,8 @@ from urllib3.exceptions import InsecureRequestWarning +from requests.adapters import HTTPAdapter + class Session: def __init__(self,logger): """ @@ -31,6 +33,17 @@ def __init__(self,logger): self.unknown_error_max = 5 self.logger = logger + + self.http_session = requests.Session() + + adapter = HTTPAdapter( + pool_connections=200, + pool_maxsize=200, + pool_block=True + ) + + self.http_session.mount("https://", adapter) + self.http_session.mount("http://", adapter) #============================================================================== def _api_login_wrapper(self): @@ -305,6 +318,7 @@ def __api_call_wrapper(self, method: str, url: str, json: dict=None, data: dict= retries += 1 if res.status_code in self.success_status or res.status_code in status_ignore: + self.retry_timer = 0 try: self.logger.success(f'SUCCESS - {time_completed} seconds') except: @@ -508,7 +522,17 @@ def __request_wrapper(self, method, url, headers, json, data, params, files, ver r = self.empty_res start_time = time.time() - r = requests.request(method, url, headers=headers, json=json, data=data, params=params, files=files, verify=verify, proxies=proxies) + r = self.http_session.request( + method, + url, + headers=headers, + json=json, + data=data, + params=params, + files=files, + verify=verify, + proxies=proxies + ) end_time = time.time() time_completed = 0 time_completed = round(end_time-start_time,3) @@ -516,7 +540,17 @@ def __request_wrapper(self, method, url, headers, json, data, params, files, ver while r == self.empty_res and self.u_count < self.unknown_error_max: try: start_time = time.time() - r = requests.request(method, url, headers=headers, json=json, data=data, params=params, files=files, verify=verify, proxies=proxies) + r = self.http_session.request( + method, + url, + headers=headers, + json=json, + data=data, + params=params, + files=files, + verify=verify, + proxies=proxies + ) end_time = time.time() time_completed = round(end_time-start_time,3)