Source code for ebarimt_pos_sdk.factory

"""
Ebarimt api settings factory
"""

from dataclasses import dataclass
from enum import Enum, auto

from ._types import HeaderTypes
from .settings import ApiClientSettings


[docs] class Environment(Enum): PRODUCTION = auto() STAGING = auto()
@dataclass(frozen=True, slots=True) class _ApiPreset: base_url: str token_url: str refresh_url: str | None = None _PRESETS: dict[Environment, _ApiPreset] = { Environment.STAGING: _ApiPreset( base_url="https://st-api.ebarimt.mn", token_url="https://st.auth.itc.gov.mn/auth/realms/Staging/protocol/openid-connect/token", ), Environment.PRODUCTION: _ApiPreset( base_url="https://api.ebarimt.mn", token_url="https://auth.itc.gov.mn/auth/realms/ITC/protocol/openid-connect/token", ), }
[docs] def create_api_settings( env: Environment, *, client_id: str | None = None, username: str | None = None, password: str | None = None, client_secret: str | None = None, scope: str | None = None, timeout_s: float = 10.0, verify_tls: bool = True, headers: HeaderTypes | None = None, skew_seconds: float = 30, ) -> ApiClientSettings: """Ebarimt api settings factory. The public ebarimt info endpoints don't require OAuth2, so credentials are optional. They are preserved for forward-compat with any endpoint that may later require token auth. """ p = _PRESETS[env] return ApiClientSettings( base_url=p.base_url, token_url=p.token_url, refresh_url=p.refresh_url, client_id=client_id, client_secret=client_secret, username=username, password=password, scope=scope, timeout_s=timeout_s, verify_tls=verify_tls, headers=headers, skew_seconds=skew_seconds, )