import os from typing import Dict, Any, List from config.environment import EnvironmentLoader class APIConfig: """Настройки API""" # Базовые настройки API API_BASE_URL = EnvironmentLoader.get_env_variable('API_BASE_URL', 'http://localhost:8080/api/v1') API_VERSION = EnvironmentLoader.get_env_variable('API_VERSION', 'v1') API_TIMEOUT = EnvironmentLoader.get_env_variable('API_TIMEOUT', 30) # секунды # Настройки запросов MAX_RETRIES = EnvironmentLoader.get_env_variable('MAX_RETRIES', 3) RETRY_DELAY = EnvironmentLoader.get_env_variable('RETRY_DELAY', 1) # секунды RETRY_BACKOFF_FACTOR = EnvironmentLoader.get_env_variable('RETRY_BACKOFF_FACTOR', 2) # Настройки валидации VALIDATE_SCHEMAS = EnvironmentLoader.get_env_variable('VALIDATE_SCHEMAS', True) STRICT_VALIDATION = EnvironmentLoader.get_env_variable('STRICT_VALIDATION', False) # Настройки тестовых данных TEST_DATA_PREFIX = EnvironmentLoader.get_env_variable('TEST_DATA_PREFIX', 'test_') CLEANUP_AFTER_TESTS = EnvironmentLoader.get_env_variable('CLEANUP_AFTER_TESTS', True) CLEANUP_ONLY_FAILED = EnvironmentLoader.get_env_variable('CLEANUP_ONLY_FAILED', False) # Endpoints (можно переопределить через окружение) ENDPOINTS = { 'auth_login': EnvironmentLoader.get_env_variable('ENDPOINT_AUTH_LOGIN', '/login'), 'auth_logout': EnvironmentLoader.get_env_variable('ENDPOINT_AUTH_LOGOUT', '/logout'), 'users_create': EnvironmentLoader.get_env_variable('ENDPOINT_USERS_CREATE', '/team/'), 'users_get_all': EnvironmentLoader.get_env_variable('ENDPOINT_USERS_GET_ALL', '/members/'), 'users_get_by_id': EnvironmentLoader.get_env_variable('ENDPOINT_USERS_GET_BY_ID', '/members/{id}'), 'users_get_by_name': EnvironmentLoader.get_env_variable('ENDPOINT_USERS_GET_BY_NAME', '/members/name/{name}'), 'users_update': EnvironmentLoader.get_env_variable('ENDPOINT_USERS_UPDATE', '/team/{id}'), 'users_delete': EnvironmentLoader.get_env_variable('ENDPOINT_USERS_DELETE', '/team/{id}'), 'posts_create': EnvironmentLoader.get_env_variable('ENDPOINT_POSTS_CREATE', '/post'), 'posts_get_all': EnvironmentLoader.get_env_variable('ENDPOINT_POSTS_GET_ALL', '/post'), 'posts_get_by_id': EnvironmentLoader.get_env_variable('ENDPOINT_POSTS_GET_BY_ID', '/post/{id}'), 'posts_get_by_offset': EnvironmentLoader.get_env_variable('ENDPOINT_POSTS_GET_BY_OFFSET', '/post/offset/{offset}'), 'posts_update': EnvironmentLoader.get_env_variable('ENDPOINT_POSTS_UPDATE', '/post/{id}'), 'posts_delete': EnvironmentLoader.get_env_variable('ENDPOINT_POSTS_DELETE', '/post/{id}'), 'images_upload': EnvironmentLoader.get_env_variable('ENDPOINT_IMAGES_UPLOAD', '/images/'), 'images_get': EnvironmentLoader.get_env_variable('ENDPOINT_IMAGES_GET', '/images/{path}'), 'images_delete': EnvironmentLoader.get_env_variable('ENDPOINT_IMAGES_DELETE', '/images/{path}'), 'images_list': EnvironmentLoader.get_env_variable('ENDPOINT_IMAGES_LIST', '/images'), } # Настройки по умолчанию для запросов DEFAULT_HEADERS = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:139.0) Gecko/20100101 Firefox/139.0', 'Accept': 'application/json', 'Accept-Language': EnvironmentLoader.get_env_variable('API_ACCEPT_LANGUAGE', 'en-US,en;q=0.9'), } # Настройки прокси (если нужно) PROXY_ENABLED = EnvironmentLoader.get_env_variable('PROXY_ENABLED', False) PROXY_HTTP = EnvironmentLoader.get_env_variable('PROXY_HTTP', None) PROXY_HTTPS = EnvironmentLoader.get_env_variable('PROXY_HTTPS', None) @classmethod def get_endpoint(cls, endpoint_name: str, **kwargs) -> str: """Получение endpoint с подстановкой параметров""" endpoint_template = cls.ENDPOINTS.get(endpoint_name) if not endpoint_template: raise ValueError(f"Endpoint '{endpoint_name}' not found in configuration") return cls.API_BASE_URL + endpoint_template.format(**kwargs) @classmethod def get_all_endpoints(cls) -> Dict[str, str]: """Получение всех endpoints""" return cls.ENDPOINTS.copy() # Экспорт конфигурации api_config = APIConfig