# [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