76 lines
4.4 KiB
Python
76 lines
4.4 KiB
Python
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
|