Update caller Class, backport from github manage script

This commit is contained in:
Clemens Schwaighofer
2026-01-30 17:32:30 +09:00
parent 6322b95068
commit 163b8c4018

View File

@@ -3,32 +3,61 @@ requests lib interface
V2 call type V2 call type
""" """
from typing import Any from typing import Any, TypedDict, cast
import warnings
import requests import requests
# to hide the verfiy warnings because of the bad SSL settings from Netskope, Akamai, etc from requests import exceptions
warnings.filterwarnings('ignore', message='Unverified HTTPS request')
class ErrorResponse:
"""
Error response structure. This is returned if a request could not be completed
"""
def __init__(
self,
code: int,
message: str,
action: str,
url: str,
exception: exceptions.InvalidSchema | exceptions.ReadTimeout | exceptions.ConnectionError | None = None
) -> None:
self.code = code
self.message = message
self.action = action
self.url = url
self.exception_name = type(exception).__name__ if exception is not None else None
self.exception_trace = exception if exception is not None else None
class ProxyConfig(TypedDict):
"""
Socks proxy settings
"""
type: str
host: str
port: str
class Caller: class Caller:
"""_summary_""" """
requests lib interface
"""
def __init__( def __init__(
self, self,
header: dict[str, str], header: dict[str, str],
verify: bool = True, verify: bool = True,
timeout: int = 20, timeout: int = 20,
proxy: dict[str, str] | None = None, proxy: ProxyConfig | None = None,
ca_file: str | None = None cafile: str | None = None
): ):
self.headers = header self.headers = header
self.timeout: int = timeout self.timeout: int = timeout
self.cafile = ca_file self.cafile = cafile
self.verify = verify self.verify = verify
self.proxy = proxy self.proxy = cast(dict[str, str], proxy) if proxy is not None else None
def __timeout(self, timeout: int | None) -> int: def __timeout(self, timeout: int | None) -> int:
if timeout is not None: if timeout is not None and timeout >= 0:
return timeout return timeout
return self.timeout return self.timeout
@@ -39,7 +68,7 @@ class Caller:
data: dict[str, Any] | None = None, data: dict[str, Any] | None = None,
params: dict[str, Any] | None = None, params: dict[str, Any] | None = None,
timeout: int | None = None timeout: int | None = None
) -> requests.Response | None: ) -> requests.Response | ErrorResponse:
""" """
call wrapper, on error returns None call wrapper, on error returns None
@@ -56,67 +85,96 @@ class Caller:
if data is None: if data is None:
data = {} data = {}
try: try:
response = None
if action == "get": if action == "get":
response = requests.get( return requests.get(
url, url,
params=params, params=params,
headers=self.headers, headers=self.headers,
timeout=self.__timeout(timeout), timeout=self.__timeout(timeout),
verify=self.verify, verify=self.verify,
proxies=self.proxy proxies=self.proxy,
cert=self.cafile
) )
elif action == "post": if action == "post":
response = requests.post( return requests.post(
url, url,
params=params, params=params,
json=data, json=data,
headers=self.headers, headers=self.headers,
timeout=self.__timeout(timeout), timeout=self.__timeout(timeout),
verify=self.verify, verify=self.verify,
proxies=self.proxy proxies=self.proxy,
cert=self.cafile
) )
elif action == "put": if action == "put":
response = requests.put( return requests.put(
url, url,
params=params, params=params,
json=data, json=data,
headers=self.headers, headers=self.headers,
timeout=self.__timeout(timeout), timeout=self.__timeout(timeout),
verify=self.verify, verify=self.verify,
proxies=self.proxy proxies=self.proxy,
cert=self.cafile
) )
elif action == "patch": if action == "patch":
response = requests.patch( return requests.patch(
url, url,
params=params, params=params,
json=data, json=data,
headers=self.headers, headers=self.headers,
timeout=self.__timeout(timeout), timeout=self.__timeout(timeout),
verify=self.verify, verify=self.verify,
proxies=self.proxy proxies=self.proxy,
cert=self.cafile
) )
elif action == "delete": if action == "delete":
response = requests.delete( return requests.delete(
url, url,
params=params, params=params,
headers=self.headers, headers=self.headers,
timeout=self.__timeout(timeout), timeout=self.__timeout(timeout),
verify=self.verify, verify=self.verify,
proxies=self.proxy proxies=self.proxy,
cert=self.cafile
) )
return response return ErrorResponse(
except requests.exceptions.InvalidSchema as e: 100,
print(f"Invalid URL during '{action}' for {url}:\n\t{e}") f"Unsupported action '{action}'",
return None action,
except requests.exceptions.ReadTimeout as e: url
print(f"Timeout ({self.timeout}s) during '{action}' for {url}:\n\t{e}") )
return None except exceptions.InvalidSchema as e:
except requests.exceptions.ConnectionError as e: return ErrorResponse(
print(f"Connection error during '{action}' for {url}:\n\t{e}") 200,
return None f"Invalid URL during '{action}' for {url}",
action,
url,
e
)
except exceptions.ReadTimeout as e:
return ErrorResponse(
300,
f"Timeout ({self.timeout}s) during '{action}' for {url}",
action,
url,
e
)
except exceptions.ConnectionError as e:
return ErrorResponse(
400,
f"Connection error during '{action}' for {url}",
action,
url,
e
)
def get(self, url: str, params: dict[str, Any] | None = None) -> requests.Response | None: def get(
self,
url: str,
params: dict[str, Any] | None = None,
timeout: int | None = None
) -> requests.Response | ErrorResponse:
""" """
get data get data
@@ -127,11 +185,15 @@ class Caller:
Returns: Returns:
requests.Response: _description_ requests.Response: _description_
""" """
return self.__call('get', url, params=params) return self.__call('get', url, params=params, timeout=timeout)
def post( def post(
self, url: str, data: dict[str, Any] | None = None, params: dict[str, Any] | None = None self,
) -> requests.Response | None: url: str,
data: dict[str, Any] | None = None,
params: dict[str, Any] | None = None,
timeout: int | None = None
) -> requests.Response | ErrorResponse:
""" """
post data post data
@@ -143,11 +205,15 @@ class Caller:
Returns: Returns:
requests.Response | None: _description_ requests.Response | None: _description_
""" """
return self.__call('post', url, data, params) return self.__call('post', url, data, params, timeout=timeout)
def put( def put(
self, url: str, data: dict[str, Any] | None = None, params: dict[str, Any] | None = None self,
) -> requests.Response | None: url: str,
data: dict[str, Any] | None = None,
params: dict[str, Any] | None = None,
timeout: int | None = None
) -> requests.Response | ErrorResponse:
"""_summary_ """_summary_
Args: Args:
@@ -158,11 +224,15 @@ class Caller:
Returns: Returns:
requests.Response | None: _description_ requests.Response | None: _description_
""" """
return self.__call('put', url, data, params) return self.__call('put', url, data, params, timeout=timeout)
def patch( def patch(
self, url: str, data: dict[str, Any] | None = None, params: dict[str, Any] | None = None self,
) -> requests.Response | None: url: str,
data: dict[str, Any] | None = None,
params: dict[str, Any] | None = None,
timeout: int | None = None
) -> requests.Response | ErrorResponse:
"""_summary_ """_summary_
Args: Args:
@@ -173,9 +243,14 @@ class Caller:
Returns: Returns:
requests.Response | None: _description_ requests.Response | None: _description_
""" """
return self.__call('patch', url, data, params) return self.__call('patch', url, data, params, timeout=timeout)
def delete(self, url: str, params: dict[str, Any] | None = None) -> requests.Response | None: def delete(
self,
url: str,
params: dict[str, Any] | None = None,
timeout: int | None = None
) -> requests.Response | ErrorResponse:
""" """
delete delete
@@ -186,6 +261,6 @@ class Caller:
Returns: Returns:
requests.Response | None: _description_ requests.Response | None: _description_
""" """
return self.__call('delete', url, params=params) return self.__call('delete', url, params=params, timeout=timeout)
# __END__ # __END__