50 lines
1.2 KiB
Python
50 lines
1.2 KiB
Python
from dataclasses import dataclass
|
|
import re
|
|
from typing import Protocol
|
|
|
|
from dynamix_sdk.utils import F_DECORATOR
|
|
|
|
|
|
@dataclass(kw_only=True)
|
|
class Config:
|
|
url: str
|
|
base_api_path: str = ''
|
|
verify_ssl: bool
|
|
http503_attempts: int = 10
|
|
http503_attempts_interval: int = 5
|
|
result_extra_allow: bool = False
|
|
wrap_request_exceptions: bool = False
|
|
f_decorators: list[F_DECORATOR] | None = None
|
|
|
|
def get_api_url(self, api_path: str):
|
|
substitutions = re.findall(r'\[\w+\]', api_path)
|
|
_api_path = api_path[:]
|
|
for s in substitutions:
|
|
attr_name = f'{s.strip("[]")}'
|
|
attr_value = getattr(self, attr_name)
|
|
_api_path = _api_path.replace(s, attr_value)
|
|
|
|
return f'{self.url}{self.base_api_path}{_api_path}'
|
|
|
|
|
|
class AuthenticatorProtocol(Protocol):
|
|
def get_jwt(self) -> str:
|
|
...
|
|
|
|
|
|
@dataclass(kw_only=True)
|
|
class ConfigWithAuth(Config):
|
|
auth: str | AuthenticatorProtocol
|
|
|
|
@property
|
|
def jwt(self):
|
|
if isinstance(self.auth, str):
|
|
return self.auth
|
|
else:
|
|
return self.auth.get_jwt()
|
|
|
|
|
|
@dataclass(kw_only=True)
|
|
class BaseConfigWithDomain(Config):
|
|
domain: str
|