72 lines
4.0 KiB
Python
72 lines
4.0 KiB
Python
# [MODULE] Superset Clients Initializer
|
||
# PURPOSE: Централизованно инициализирует клиенты Superset для различных окружений (DEV, PROD, SBX, PREPROD).
|
||
# COHERENCE:
|
||
# - Использует `SupersetClient` для создания экземпляров клиентов.
|
||
# - Использует `SupersetLogger` для логирования процесса.
|
||
# - Интегрируется с `keyring` для безопасного получения паролей.
|
||
|
||
# [IMPORTS] Сторонние библиотеки
|
||
import keyring
|
||
from typing import Dict
|
||
|
||
# [IMPORTS] Локальные модули
|
||
from superset_tool.models import SupersetConfig
|
||
from superset_tool.client import SupersetClient
|
||
from superset_tool.utils.logger import SupersetLogger
|
||
|
||
# CONTRACT:
|
||
# PURPOSE: Инициализирует и возвращает словарь клиентов `SupersetClient` для всех предопределенных окружений.
|
||
# PRECONDITIONS:
|
||
# - `keyring` должен содержать пароли для систем "dev migrate", "prod migrate", "sandbox migrate", "preprod migrate".
|
||
# - `logger` должен быть инициализированным экземпляром `SupersetLogger`.
|
||
# POSTCONDITIONS:
|
||
# - Возвращает словарь, где ключи - это имена окружений ('dev', 'sbx', 'prod', 'preprod'),
|
||
# а значения - соответствующие экземпляры `SupersetClient`.
|
||
# PARAMETERS:
|
||
# - logger: SupersetLogger - Экземпляр логгера для записи процесса инициализации.
|
||
# RETURN: Dict[str, SupersetClient] - Словарь с инициализированными клиентами.
|
||
# EXCEPTIONS:
|
||
# - Логирует и выбрасывает `Exception` при любой ошибке (например, отсутствие пароля, ошибка подключения).
|
||
def setup_clients(logger: SupersetLogger) -> Dict[str, SupersetClient]:
|
||
"""Инициализирует и настраивает клиенты для всех окружений Superset."""
|
||
# [ANCHOR] CLIENTS_INITIALIZATION
|
||
logger.info("[INFO][INIT_CLIENTS_START] Запуск инициализации клиентов Superset.")
|
||
clients = {}
|
||
|
||
environments = {
|
||
"dev": "https://devta.bi.dwh.rusal.com/api/v1/",
|
||
"prod": "https://prodta.bi.dwh.rusal.com/api/v1/",
|
||
"sbx": "https://sandboxta.bi.dwh.rusal.com/api/v1/",
|
||
"preprod": "https://preprodta.bi.dwh.rusal.com/api/v1/"
|
||
}
|
||
|
||
try:
|
||
for env_name, base_url in environments.items():
|
||
logger.debug(f"[DEBUG][CONFIG_CREATE] Создание конфигурации для окружения: {env_name.upper()}")
|
||
password = keyring.get_password("system", f"{env_name} migrate")
|
||
if not password:
|
||
raise ValueError(f"Пароль для '{env_name} migrate' не найден в keyring.")
|
||
|
||
config = SupersetConfig(
|
||
env=env_name,
|
||
base_url=base_url,
|
||
auth={
|
||
"provider": "db",
|
||
"username": "migrate_user",
|
||
"password": password,
|
||
"refresh": True
|
||
},
|
||
verify_ssl=False
|
||
)
|
||
|
||
clients[env_name] = SupersetClient(config, logger)
|
||
logger.debug(f"[DEBUG][CLIENT_SUCCESS] Клиент для {env_name.upper()} успешно создан.")
|
||
|
||
logger.info(f"[COHERENCE_CHECK_PASSED][INIT_CLIENTS_SUCCESS] Все клиенты ({', '.join(clients.keys())}) успешно инициализированы.")
|
||
return clients
|
||
|
||
except Exception as e:
|
||
logger.error(f"[CRITICAL][INIT_CLIENTS_FAILED] Ошибка при инициализации клиентов: {str(e)}", exc_info=True)
|
||
raise
|
||
# END_FUNCTION_setup_clients
|
||
# END_MODULE_init_clients |