semantics

This commit is contained in:
2026-05-26 09:30:41 +03:00
parent 1e7bcecaea
commit 9ffa8af1dc
623 changed files with 28045 additions and 26557 deletions

View File

@@ -1,16 +1,16 @@
# #region GitPluginModule [C:4] [TYPE Module] [SEMANTICS git, versioning, deploy, sync, superset, backup, transactional]
#
# @BRIEF Предоставляет плагин для версионирования и развертывания дашбордов Superset.
# @LAYER: Plugin
# @RELATION INHERITS_FROM -> src.core.plugin_base.PluginBase
# @RELATION USES -> src.services.git_service.GitService
# @RELATION USES -> src.core.superset_client.SupersetClient
# @RELATION USES -> src.core.config_manager.ConfigManager
# @RELATION USES -> TaskContext
# @LAYER Plugin
# @RELATION INHERITS -> [EXT:path:src.core.plugin_base.PluginBase]
# @RELATION DEPENDS_ON -> [GitService]
# @RELATION DEPENDS_ON -> [SupersetClient]
# @RELATION DEPENDS_ON -> [ConfigManager]
# @RELATION DEPENDS_ON -> [TaskContext]
#
# @INVARIANT: Все операции с Git должны выполняться через GitService.
# @INVARIANT Все операции с Git должны выполняться через GitService.
# @CONSTRAINT: Плагин работает только с распакованными YAML-экспортами Superset.
# @INVARIANT: _handle_sync сохраняет backup управляемых директорий перед удалением;
# @INVARIANT _handle_sync сохраняет backup управляемых директорий перед удалением;
# при ошибке распаковки backup восстанавливается.
import io
@@ -35,8 +35,8 @@ class GitPlugin(PluginBase):
# region __init__ [TYPE Function]
# @PURPOSE: Инициализирует плагин и его зависимости.
# @PRE: shared config_manager доступен через src.dependencies.
# @POST: Инициализированы git_service и config_manager.
# @PRE shared config_manager доступен через src.dependencies.
# @POST Инициализированы git_service и config_manager.
def __init__(self):
with belief_scope("GitPlugin.__init__"):
app_logger.info("Initializing GitPlugin.")
@@ -85,9 +85,9 @@ class GitPlugin(PluginBase):
# region get_schema [TYPE Function]
# @PURPOSE: Возвращает JSON-схему параметров для выполнения задач плагина.
# @PRE: GitPlugin is initialized.
# @POST: Returns a JSON schema dictionary.
# @RETURN: Dict[str, Any] - Схема параметров.
# @PRE GitPlugin is initialized.
# @POST Returns a JSON schema dictionary.
# @RETURN Dict[str, Any] - Схема параметров.
def get_schema(self) -> dict[str, Any]:
with belief_scope("GitPlugin.get_schema"):
return {
@@ -109,8 +109,8 @@ class GitPlugin(PluginBase):
# region execute [C:3] [TYPE Function]
# @PURPOSE: Main task executor with TaskContext support.
# @RELATION: CALLS -> self._handle_sync
# @RELATION: CALLS -> self._handle_deploy
# @RELATION CALLS -> self._handle_sync
# @RELATION CALLS -> self._handle_deploy
async def execute(self, task_data: dict[str, Any], context: TaskContext | None = None) -> dict[str, Any]:
with belief_scope("GitPlugin.execute"):
operation = task_data.get("operation")
@@ -143,14 +143,14 @@ class GitPlugin(PluginBase):
# region _handle_sync [C:4] [TYPE Function] [SEMANTICS git,sync,backup,transactional]
# @PURPOSE: Экспортирует дашборд из Superset и распаковывает в Git-репозиторий с backup/restore.
# @PRE: Репозиторий для дашборда должен существовать.
# @POST: Файлы в репозитории обновлены до текущего состояния в Superset.
# @PRE Репозиторий для дашборда должен существовать.
# @POST Файлы в репозитории обновлены до текущего состояния в Superset.
# Управляемые директории backup-ируются перед удалением; при ошибке распаковки backup восстанавливается.
# @SIDE_EFFECT: Изменяет файлы в локальной рабочей директории репозитория.
# @SIDE_EFFECT Изменяет файлы в локальной рабочей директории репозитория.
# Создаёт временный backup в /tmp/ss-tools-backup-{dashboard_id}-{timestamp}/.
# @RETURN: Dict[str, str] - Результат синхронизации.
# @RELATION: CALLS -> src.services.git_service.GitService.get_repo
# @RELATION: CALLS -> src.core.superset_client.SupersetClient.export_dashboard
# @RETURN Dict[str, str] - Результат синхронизации.
# @RELATION CALLS -> src.services.git_service.GitService.get_repo
# @RELATION CALLS -> src.core.superset_client.SupersetClient.export_dashboard
async def _handle_sync(self, dashboard_id: int, source_env_id: str | None = None, log=None, git_log=None, superset_log=None) -> dict[str, str]:
with belief_scope("GitPlugin._handle_sync"):
try:
@@ -247,9 +247,9 @@ class GitPlugin(PluginBase):
# region _handle_deploy [C:4] [TYPE Function] [SEMANTICS git,deploy,zip]
# @PURPOSE: Packages repository into ZIP and imports into target Superset environment.
# @POST: Dashboard imported into target Superset.
# @SIDE_EFFECT: Creates and removes temporary ZIP file.
# @RELATION: CALLS -> src.core.superset_client.SupersetClient.import_dashboard
# @POST Dashboard imported into target Superset.
# @SIDE_EFFECT Creates and removes temporary ZIP file.
# @RELATION CALLS -> src.core.superset_client.SupersetClient.import_dashboard
async def _handle_deploy(self, dashboard_id: int, env_id: str, log=None, git_log=None, superset_log=None) -> dict[str, Any]:
with belief_scope("GitPlugin._handle_deploy"):
try:
@@ -297,11 +297,11 @@ class GitPlugin(PluginBase):
# region _get_env [C:4] [TYPE Function] [SEMANTICS env,config,strict]
# @PURPOSE: Вспомогательный метод для получения конфигурации окружения.
# @PARAM: env_id (Optional[str]) - ID окружения.
# @PRE: env_id is a string or None.
# @POST: Returns an Environment object from config or DB.
# @PARAM env_id (Optional[str]) - ID окружения.
# @PRE env_id is a string or None.
# @POST Returns an Environment object from config or DB.
# When env_id is explicitly provided and not found, raises ValueError (no fallback).
# @RETURN: Environment - Объект конфигурации окружения.
# @RETURN Environment - Объект конфигурации окружения.
def _get_env(self, env_id: str | None = None):
with belief_scope("GitPlugin._get_env"):
app_logger.reason(f"Fetching environment for ID: {env_id}", extra={"src": "_get_env"})