diff --git a/backup_script.py b/backup_script.py index d5d0079..7c72981 100644 --- a/backup_script.py +++ b/backup_script.py @@ -25,85 +25,10 @@ from superset_tool.models import SupersetConfig from superset_tool.client import SupersetClient from superset_tool.utils.logger import SupersetLogger from superset_tool.utils.fileio import save_and_unpack_dashboard, archive_exports, sanitize_filename,consolidate_archive_folders,remove_empty_directories +from superset_tool.utils.init_clients import setup_clients # [COHERENCE_CHECK_PASSED] Все необходимые модули импортированы и согласованы. -# [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 # [FUNCTION] backup_dashboards def backup_dashboards(client: SupersetClient, diff --git a/search_script.py b/search_script.py index 196c2ad..941bca1 100644 --- a/search_script.py +++ b/search_script.py @@ -14,6 +14,7 @@ import logging from superset_tool.client import SupersetClient from superset_tool.models import SupersetConfig from superset_tool.utils.logger import SupersetLogger +from superset_tool.utils.init_clients import setup_clients # [IMPORTS] Сторонние библиотеки import keyring @@ -22,77 +23,6 @@ import keyring SearchResult = Dict[str, List[Dict[str, str]]] SearchPattern = str -def setup_clients(logger: SupersetLogger): - # [FUNCTION] setup_clients - # [CONTRACT] - """ - Инициализация клиентов SupersetClient для разных окружений (dev, sbx, prod). - - @pre: - - `logger` является инициализированным экземпляром SupersetLogger. - - Учетные данные для каждого окружения доступны через `keyring`. - @post: - - Возвращает словарь с инициализированными экземплярами SupersetClient для 'dev', 'sbx', 'prod'. - - Каждый клиент аутентифицирован. - @side_effects: - - Выполняет запросы к Superset API для аутентификации. - - Использует `keyring` для получения паролей. - - Логирует процесс инициализации и ошибки. - @raise: - - Exception: При ошибке инициализации клиента или аутентификации. - """ - # [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] Создание экземпляров SupersetClient - clients['dev'] = SupersetClient(dev_config, logger) - clients['sbx'] = SupersetClient(sandbox_config,logger) - clients['prod'] = SupersetClient(prod_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 - def search_datasets( client: SupersetClient, search_pattern: str,