100 lines
4.7 KiB
Python
100 lines
4.7 KiB
Python
# [MODULE] Superset Init clients
|
||
# @contract: Автоматизирует процесс инициализации клиентов для использования скриптами.
|
||
# @semantic_layers:
|
||
# 1. Инициализация логгера и клиентов Superset.
|
||
# @coherence:
|
||
# - Использует `SupersetClient` для взаимодействия с API Superset.
|
||
# - Использует `SupersetLogger` для централизованного логирования.
|
||
# - Интегрируется с `keyring` для безопасного хранения паролей.
|
||
|
||
# [IMPORTS] Стандартная библиотека
|
||
import logging
|
||
from datetime import datetime
|
||
from pathlib import Path
|
||
|
||
# [IMPORTS] Сторонние библиотеки
|
||
import keyring
|
||
|
||
# [IMPORTS] Локальные модули
|
||
from superset_tool.models import SupersetConfig
|
||
from superset_tool.client import SupersetClient
|
||
from superset_tool.utils.logger import SupersetLogger
|
||
|
||
|
||
# [FUNCTION] setup_clients
|
||
# @contract: Инициализирует и возвращает SupersetClient для каждого заданного окружения.
|
||
# @pre:
|
||
# - `keyring` должен содержать необходимые пароли для "dev migrate", "prod migrate", "sandbox migrate".
|
||
# - `logger` должен быть инициализирован.
|
||
# @post:
|
||
# - Возвращает словарь {env_name: SupersetClient_instance}.
|
||
# - Логирует успешную инициализацию или ошибку.
|
||
# @raise:
|
||
# - `Exception`: При любой ошибке в процессе инициализации клиентов (например, отсутствие пароля в keyring, проблемы с сетью при первой аутентификации).
|
||
def setup_clients(logger: SupersetLogger):
|
||
"""Инициализация клиентов для разных окружений"""
|
||
# [ANCHOR] CLIENTS_INITIALIZATION
|
||
clients = {}
|
||
try:
|
||
# [INFO] Инициализация конфигурации для Dev
|
||
dev_config = SupersetConfig(
|
||
base_url="https://devta.bi.dwh.rusal.com/api/v1",
|
||
auth={
|
||
"provider": "db",
|
||
"username": "migrate_user",
|
||
"password": keyring.get_password("system", "dev migrate"),
|
||
"refresh": True
|
||
},
|
||
verify_ssl=False
|
||
)
|
||
# [DEBUG] Dev config created: {dev_config.base_url}
|
||
|
||
# [INFO] Инициализация конфигурации для Prod
|
||
prod_config = SupersetConfig(
|
||
base_url="https://prodta.bi.dwh.rusal.com/api/v1",
|
||
auth={
|
||
"provider": "db",
|
||
"username": "migrate_user",
|
||
"password": keyring.get_password("system", "prod migrate"),
|
||
"refresh": True
|
||
},
|
||
verify_ssl=False
|
||
)
|
||
# [DEBUG] Prod config created: {prod_config.base_url}
|
||
|
||
# [INFO] Инициализация конфигурации для Sandbox
|
||
sandbox_config = SupersetConfig(
|
||
base_url="https://sandboxta.bi.dwh.rusal.com/api/v1",
|
||
auth={
|
||
"provider": "db",
|
||
"username": "migrate_user",
|
||
"password": keyring.get_password("system", "sandbox migrate"),
|
||
"refresh": True
|
||
},
|
||
verify_ssl=False
|
||
)
|
||
# [DEBUG] Sandbox config created: {sandbox_config.base_url}
|
||
|
||
# [INFO] Инициализация конфигурации для Preprod
|
||
preprod_config = SupersetConfig(
|
||
base_url="https://preprodta.bi.dwh.rusal.com/api/v1",
|
||
auth={
|
||
"provider": "db",
|
||
"username": "migrate_user",
|
||
"password": keyring.get_password("system", "preprod migrate"),
|
||
"refresh": True
|
||
},
|
||
verify_ssl=False
|
||
)
|
||
# [DEBUG] Sandbox config created: {sandbox_config.base_url}
|
||
|
||
# [INFO] Создание экземпляров SupersetClient
|
||
clients['dev'] = SupersetClient(dev_config, logger)
|
||
clients['sbx'] = SupersetClient(sandbox_config,logger)
|
||
clients['prod'] = SupersetClient(prod_config,logger)
|
||
clients['preprod'] = SupersetClient(preprod_config,logger)
|
||
logger.info("[COHERENCE_CHECK_PASSED] Клиенты для окружений успешно инициализированы", extra={"envs": list(clients.keys())})
|
||
return clients
|
||
except Exception as e:
|
||
logger.error(f"[ERROR] Ошибка инициализации клиентов: {str(e)}", exc_info=True)
|
||
raise |