| """ |
| Configuration settings for the API client |
| """ |
|
|
| import os |
| from typing import Optional |
|
|
| |
| DEFAULT_BASE_URL = "https://airsltd-ocngx.hf.space" |
| DEFAULT_USERNAME = "admin" |
| DEFAULT_PASSWORD = "admin123" |
| DEFAULT_TIMEOUT = 30 |
|
|
| |
| ENV_BASE_URL = "API_BASE_URL" |
| ENV_USERNAME = "API_USERNAME" |
| ENV_PASSWORD = "API_PASSWORD" |
| ENV_TIMEOUT = "API_TIMEOUT" |
| ENV_LOG_LEVEL = "API_LOG_LEVEL" |
|
|
| |
| HTTP_OK = 200 |
| HTTP_UNAUTHORIZED = 401 |
| HTTP_BAD_REQUEST = 400 |
| HTTP_INTERNAL_ERROR = 500 |
|
|
| |
| CONTENT_TYPE_JSON = "application/json" |
| CONTENT_TYPE_HTML = "text/html" |
| CONTENT_TYPE_TEXT = "text/plain" |
|
|
| |
| DEFAULT_MAX_RETRIES = 3 |
| DEFAULT_RETRY_BACKOFF = 1.0 |
|
|
|
|
| class Config: |
| """Configuration class for API client settings""" |
| |
| def __init__(self): |
| self.base_url = os.getenv(ENV_BASE_URL, DEFAULT_BASE_URL) |
| self.username = os.getenv(ENV_USERNAME, DEFAULT_USERNAME) |
| self.password = os.getenv(ENV_PASSWORD, DEFAULT_PASSWORD) |
| self.timeout = int(os.getenv(ENV_TIMEOUT, DEFAULT_TIMEOUT)) |
| self.log_level = os.getenv(ENV_LOG_LEVEL, "INFO") |
| |
| def __repr__(self): |
| return (f"Config(base_url='{self.base_url}', " |
| f"username='{self.username}', " |
| f"timeout={self.timeout})") |
|
|
|
|
| def get_config() -> Config: |
| """Get configuration instance""" |
| return Config() |
|
|
|
|
| def get_connection_params( |
| base_url: Optional[str] = None, |
| username: Optional[str] = None, |
| password: Optional[str] = None, |
| timeout: Optional[int] = None |
| ) -> dict: |
| """ |
| Get connection parameters with fallback to environment variables and defaults. |
| |
| Args: |
| base_url: Override base URL |
| username: Override username |
| password: Override password |
| timeout: Override timeout |
| |
| Returns: |
| Dictionary with connection parameters |
| """ |
| config = get_config() |
| |
| return { |
| 'base_url': base_url or config.base_url, |
| 'username': username or config.username, |
| 'password': password or config.password, |
| 'timeout': timeout or config.timeout |
| } |