Files
dynamix-python-sdk/src/dynamix_sdk/config.py
2025-12-02 10:48:38 +03:00

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