Tests/config/api_config.py
2026-01-19 23:32:11 +04:00

76 lines
4.4 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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