diff --git a/.gitignore b/.gitignore
index d49fa99..733b192 100755
--- a/.gitignore
+++ b/.gitignore
@@ -65,3 +65,4 @@ dashboards
backend/mappings.db
+backend/tasks.db
diff --git a/backend/src/api/routes/mappings.py b/backend/src/api/routes/mappings.py
index f6976a6..60b10c0 100644
--- a/backend/src/api/routes/mappings.py
+++ b/backend/src/api/routes/mappings.py
@@ -13,6 +13,7 @@
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from typing import List, Optional
+from ...core.logger import belief_scope
from ...dependencies import get_config_manager
from ...core.database import get_db
from ...models.mapping import DatabaseMapping
diff --git a/backend/src/api/routes/migration.py b/backend/src/api/routes/migration.py
index 9e0fcf4..12e050c 100644
--- a/backend/src/api/routes/migration.py
+++ b/backend/src/api/routes/migration.py
@@ -10,6 +10,7 @@ from typing import List, Dict
from ...dependencies import get_config_manager, get_task_manager
from ...models.dashboard import DashboardMetadata, DashboardSelection
from ...core.superset_client import SupersetClient
+from ...core.logger import belief_scope
router = APIRouter(prefix="/api", tags=["migration"])
@@ -21,7 +22,8 @@ router = APIRouter(prefix="/api", tags=["migration"])
# @RETURN: List[DashboardMetadata]
@router.get("/environments/{env_id}/dashboards", response_model=List[DashboardMetadata])
async def get_dashboards(env_id: str, config_manager=Depends(get_config_manager)):
- environments = config_manager.get_environments()
+ with belief_scope("get_dashboards", f"env_id={env_id}"):
+ environments = config_manager.get_environments()
env = next((e for e in environments if e.id == env_id), None)
if not env:
raise HTTPException(status_code=404, detail="Environment not found")
@@ -39,8 +41,9 @@ async def get_dashboards(env_id: str, config_manager=Depends(get_config_manager)
# @RETURN: Dict - {"task_id": str, "message": str}
@router.post("/migration/execute")
async def execute_migration(selection: DashboardSelection, config_manager=Depends(get_config_manager), task_manager=Depends(get_task_manager)):
- # Validate environments exist
- environments = config_manager.get_environments()
+ with belief_scope("execute_migration"):
+ # Validate environments exist
+ environments = config_manager.get_environments()
env_ids = {e.id for e in environments}
if selection.source_env_id not in env_ids or selection.target_env_id not in env_ids:
raise HTTPException(status_code=400, detail="Invalid source or target environment")
diff --git a/backend/tasks.db b/backend/tasks.db
index 38eb237..049d28f 100644
Binary files a/backend/tasks.db and b/backend/tasks.db differ
diff --git a/frontend/index.html b/frontend/index.html
deleted file mode 100755
index 7d082ee..0000000
--- a/frontend/index.html
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
- frontend
-
-
-
-
-
-
diff --git a/frontend/jsconfig.json b/frontend/jsconfig.json
index c7a0b10..ed7b5f1 100755
--- a/frontend/jsconfig.json
+++ b/frontend/jsconfig.json
@@ -1,4 +1,5 @@
{
+ "extends": "./.svelte-kit/tsconfig.json",
"compilerOptions": {
"moduleResolution": "bundler",
"target": "ESNext",
diff --git a/frontend/src/App.svelte b/frontend/src/App.svelte
deleted file mode 100755
index b733b61..0000000
--- a/frontend/src/App.svelte
+++ /dev/null
@@ -1,117 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {#if $currentPage === 'settings'}
-
- {:else if $selectedTask}
-
-
- {:else if $selectedPlugin}
-
{$selectedPlugin.name}
-
-
- {:else}
-
- {/if}
-
-
-
-
-
diff --git a/frontend/src/main.js b/frontend/src/main.js
deleted file mode 100755
index 2afa121..0000000
--- a/frontend/src/main.js
+++ /dev/null
@@ -1,18 +0,0 @@
-// [DEF:main:Module]
-// @SEMANTICS: entrypoint, svelte, init
-// @PURPOSE: Entry point for the Svelte application.
-// @LAYER: UI-Entry
-
-import './app.css'
-import App from './App.svelte'
-
-// [DEF:app_instance:Data]
-// @PURPOSE: Initialized Svelte app instance.
-const app = new App({
- target: document.getElementById('app'),
- props: {}
-})
-// [/DEF:app_instance:Data]
-
-export default app
-// [/DEF:main:Module]
diff --git a/semantics/reports/semantic_report_20260122_175153.md b/semantics/reports/semantic_report_20260122_175153.md
new file mode 100644
index 0000000..a339a30
--- /dev/null
+++ b/semantics/reports/semantic_report_20260122_175153.md
@@ -0,0 +1,103 @@
+# Semantic Compliance Report
+
+**Generated At:** 2026-01-22T17:51:53.374174
+**Global Compliance Score:** 97.7%
+**Scanned Files:** 80
+
+## Critical Parsing Errors
+- 🔴 backend/delete_running_tasks.py:8 Function 'delete_running_tasks' implementation found without matching [DEF:delete_running_tasks:Function] contract.
+- 🔴 backend/src/core/logger.py:200 Function 'decorator' implementation found without matching [DEF:decorator:Function] contract.
+- 🔴 backend/src/core/logger.py:201 Function 'wrapper' implementation found without matching [DEF:wrapper:Function] contract.
+- 🔴 backend/src/core/utils/fileio.py:486 Mismatched closing anchor. Expected [/DEF:InvalidZipFormatError:Class], found [/DEF:backend.core.utils.fileio:Module].
+- 🔴 backend/src/core/utils/network.py:24 Function '__init__' implementation found without matching [DEF:__init__:Function] contract.
+- 🔴 backend/src/core/utils/network.py:30 Function '__init__' implementation found without matching [DEF:__init__:Function] contract.
+- 🔴 backend/src/core/utils/network.py:35 Function '__init__' implementation found without matching [DEF:__init__:Function] contract.
+- 🔴 backend/src/core/utils/network.py:40 Function '__init__' implementation found without matching [DEF:__init__:Function] contract.
+- 🔴 backend/src/core/utils/network.py:45 Function '__init__' implementation found without matching [DEF:__init__:Function] contract.
+- 🔴 backend/src/core/utils/network.py:286 Mismatched closing anchor. Expected [/DEF:NetworkError:Class], found [/DEF:backend.core.utils.network:Module].
+- 🔴 backend/tests/test_models.py:21 Mismatched closing anchor. Expected [/DEF:test_environment_model:Function], found [/DEF:test_superset_config_url_normalization:Function].
+- 🔴 backend/tests/test_models.py:23 Mismatched closing anchor. Expected [/DEF:test_environment_model:Function], found [/DEF:test_superset_config_invalid_url:Function].
+
+## File Compliance Status
+| File | Score | Issues |
+|------|-------|--------|
+| backend/tests/test_models.py | 🔴 0% | [test_environment_model] Unclosed Anchor at end of file (started line 5)
[test_environment_model] Unclosed Anchor: [DEF:test_environment_model:Function] started at line 5 |
+| backend/src/core/superset_client.py | 🟡 67% | [headers] Missing Mandatory Tag: @PRE
[headers] Missing Mandatory Tag: @POST
[headers] Missing Mandatory Tag: @PRE
[headers] Missing Mandatory Tag: @POST
[headers] Missing Mandatory Tag: @PRE
[headers] Missing Mandatory Tag: @POST
[get_dashboards] Missing Mandatory Tag: @PRE
[get_dashboards] Missing Mandatory Tag: @POST
[get_dashboards] Missing Mandatory Tag: @PRE
[get_dashboards] Missing Mandatory Tag: @POST
[get_dashboards] Missing Mandatory Tag: @PRE
[get_dashboards] Missing Mandatory Tag: @POST
[get_dashboards_summary] Missing Mandatory Tag: @PRE
[get_dashboards_summary] Missing Mandatory Tag: @POST
[get_dashboards_summary] Missing Mandatory Tag: @PRE
[get_dashboards_summary] Missing Mandatory Tag: @POST
[get_dashboards_summary] Missing Mandatory Tag: @PRE
[get_dashboards_summary] Missing Mandatory Tag: @POST
[export_dashboard] Missing Mandatory Tag: @PRE
[export_dashboard] Missing Mandatory Tag: @POST
[export_dashboard] Missing Mandatory Tag: @PRE
[export_dashboard] Missing Mandatory Tag: @POST
[export_dashboard] Missing Mandatory Tag: @PRE
[export_dashboard] Missing Mandatory Tag: @POST
[import_dashboard] Missing Mandatory Tag: @PRE
[import_dashboard] Missing Mandatory Tag: @POST
[import_dashboard] Missing Mandatory Tag: @PRE
[import_dashboard] Missing Mandatory Tag: @POST
[import_dashboard] Missing Mandatory Tag: @PRE
[import_dashboard] Missing Mandatory Tag: @POST
[delete_dashboard] Missing Mandatory Tag: @PRE
[delete_dashboard] Missing Mandatory Tag: @POST
[delete_dashboard] Missing Mandatory Tag: @PRE
[delete_dashboard] Missing Mandatory Tag: @POST
[delete_dashboard] Missing Mandatory Tag: @PRE
[delete_dashboard] Missing Mandatory Tag: @POST
[get_datasets] Missing Mandatory Tag: @PRE
[get_datasets] Missing Mandatory Tag: @POST
[get_datasets] Missing Mandatory Tag: @PRE
[get_datasets] Missing Mandatory Tag: @POST
[get_datasets] Missing Mandatory Tag: @PRE
[get_datasets] Missing Mandatory Tag: @POST
[get_dataset] Missing Mandatory Tag: @PRE
[get_dataset] Missing Mandatory Tag: @POST
[get_dataset] Missing Mandatory Tag: @PRE
[get_dataset] Missing Mandatory Tag: @POST
[get_dataset] Missing Mandatory Tag: @PRE
[get_dataset] Missing Mandatory Tag: @POST
[update_dataset] Missing Mandatory Tag: @PRE
[update_dataset] Missing Mandatory Tag: @POST
[update_dataset] Missing Mandatory Tag: @PRE
[update_dataset] Missing Mandatory Tag: @POST
[update_dataset] Missing Mandatory Tag: @PRE
[update_dataset] Missing Mandatory Tag: @POST
[get_databases] Missing Mandatory Tag: @PRE
[get_databases] Missing Mandatory Tag: @POST
[get_databases] Missing Mandatory Tag: @PRE
[get_databases] Missing Mandatory Tag: @POST
[get_databases] Missing Mandatory Tag: @PRE
[get_databases] Missing Mandatory Tag: @POST
[get_database] Missing Mandatory Tag: @PRE
[get_database] Missing Mandatory Tag: @POST
[get_database] Missing Mandatory Tag: @PRE
[get_database] Missing Mandatory Tag: @POST
[get_database] Missing Mandatory Tag: @PRE
[get_database] Missing Mandatory Tag: @POST
[get_databases_summary] Missing Mandatory Tag: @PRE
[get_databases_summary] Missing Mandatory Tag: @POST
[get_databases_summary] Missing Mandatory Tag: @PRE
[get_databases_summary] Missing Mandatory Tag: @POST
[get_databases_summary] Missing Mandatory Tag: @PRE
[get_databases_summary] Missing Mandatory Tag: @POST
[get_database_by_uuid] Missing Mandatory Tag: @PRE
[get_database_by_uuid] Missing Mandatory Tag: @POST
[get_database_by_uuid] Missing Mandatory Tag: @PRE
[get_database_by_uuid] Missing Mandatory Tag: @POST
[get_database_by_uuid] Missing Mandatory Tag: @PRE
[get_database_by_uuid] Missing Mandatory Tag: @POST
[_resolve_target_id_for_delete] Missing Mandatory Tag: @PURPOSE
[_resolve_target_id_for_delete] Missing Mandatory Tag: @PRE
[_resolve_target_id_for_delete] Missing Mandatory Tag: @POST
[_resolve_target_id_for_delete] Missing Mandatory Tag: @PURPOSE
[_resolve_target_id_for_delete] Missing Mandatory Tag: @PRE
[_resolve_target_id_for_delete] Missing Mandatory Tag: @POST
[_resolve_target_id_for_delete] Missing Mandatory Tag: @PURPOSE
[_resolve_target_id_for_delete] Missing Mandatory Tag: @PRE
[_resolve_target_id_for_delete] Missing Mandatory Tag: @POST
[_do_import] Missing Mandatory Tag: @PURPOSE
[_do_import] Missing Mandatory Tag: @PRE
[_do_import] Missing Mandatory Tag: @POST
[_do_import] Missing Mandatory Tag: @PURPOSE
[_do_import] Missing Mandatory Tag: @PRE
[_do_import] Missing Mandatory Tag: @POST
[_do_import] Missing Mandatory Tag: @PURPOSE
[_do_import] Missing Mandatory Tag: @PRE
[_do_import] Missing Mandatory Tag: @POST
[_validate_export_response] Missing Mandatory Tag: @PURPOSE
[_validate_export_response] Missing Mandatory Tag: @PRE
[_validate_export_response] Missing Mandatory Tag: @POST
[_validate_export_response] Missing Mandatory Tag: @PURPOSE
[_validate_export_response] Missing Mandatory Tag: @PRE
[_validate_export_response] Missing Mandatory Tag: @POST
[_validate_export_response] Missing Mandatory Tag: @PURPOSE
[_validate_export_response] Missing Mandatory Tag: @PRE
[_validate_export_response] Missing Mandatory Tag: @POST
[_resolve_export_filename] Missing Mandatory Tag: @PURPOSE
[_resolve_export_filename] Missing Mandatory Tag: @PRE
[_resolve_export_filename] Missing Mandatory Tag: @POST
[_resolve_export_filename] Missing Mandatory Tag: @PURPOSE
[_resolve_export_filename] Missing Mandatory Tag: @PRE
[_resolve_export_filename] Missing Mandatory Tag: @POST
[_resolve_export_filename] Missing Mandatory Tag: @PURPOSE
[_resolve_export_filename] Missing Mandatory Tag: @PRE
[_resolve_export_filename] Missing Mandatory Tag: @POST
[_validate_query_params] Missing Mandatory Tag: @PURPOSE
[_validate_query_params] Missing Mandatory Tag: @PRE
[_validate_query_params] Missing Mandatory Tag: @POST
[_validate_query_params] Missing Mandatory Tag: @PURPOSE
[_validate_query_params] Missing Mandatory Tag: @PRE
[_validate_query_params] Missing Mandatory Tag: @POST
[_validate_query_params] Missing Mandatory Tag: @PURPOSE
[_validate_query_params] Missing Mandatory Tag: @PRE
[_validate_query_params] Missing Mandatory Tag: @POST
[_fetch_total_object_count] Missing Mandatory Tag: @PURPOSE
[_fetch_total_object_count] Missing Mandatory Tag: @PRE
[_fetch_total_object_count] Missing Mandatory Tag: @POST
[_fetch_total_object_count] Missing Mandatory Tag: @PURPOSE
[_fetch_total_object_count] Missing Mandatory Tag: @PRE
[_fetch_total_object_count] Missing Mandatory Tag: @POST
[_fetch_total_object_count] Missing Mandatory Tag: @PURPOSE
[_fetch_total_object_count] Missing Mandatory Tag: @PRE
[_fetch_total_object_count] Missing Mandatory Tag: @POST
[_fetch_all_pages] Missing Mandatory Tag: @PURPOSE
[_fetch_all_pages] Missing Mandatory Tag: @PRE
[_fetch_all_pages] Missing Mandatory Tag: @POST
[_fetch_all_pages] Missing Mandatory Tag: @PURPOSE
[_fetch_all_pages] Missing Mandatory Tag: @PRE
[_fetch_all_pages] Missing Mandatory Tag: @POST
[_fetch_all_pages] Missing Mandatory Tag: @PURPOSE
[_fetch_all_pages] Missing Mandatory Tag: @PRE
[_fetch_all_pages] Missing Mandatory Tag: @POST
[_validate_import_file] Missing Mandatory Tag: @PURPOSE
[_validate_import_file] Missing Mandatory Tag: @PRE
[_validate_import_file] Missing Mandatory Tag: @POST
[_validate_import_file] Missing Mandatory Tag: @PURPOSE
[_validate_import_file] Missing Mandatory Tag: @PRE
[_validate_import_file] Missing Mandatory Tag: @POST
[_validate_import_file] Missing Mandatory Tag: @PURPOSE
[_validate_import_file] Missing Mandatory Tag: @PRE
[_validate_import_file] Missing Mandatory Tag: @POST |
+| backend/src/core/utils/network.py | 🟡 67% | [backend.core.utils.network] Unclosed Anchor at end of file (started line 1)
[backend.core.utils.network] Unclosed Anchor: [DEF:backend.core.utils.network:Module] started at line 1
[SupersetAPIError] Unclosed Anchor at end of file (started line 22)
[SupersetAPIError] Unclosed Anchor: [DEF:SupersetAPIError:Class] started at line 22
[SupersetAPIError] Missing Mandatory Tag: @PURPOSE
[SupersetAPIError] Unclosed Anchor: [DEF:SupersetAPIError:Class] started at line 22
[SupersetAPIError] Missing Mandatory Tag: @PURPOSE
[AuthenticationError] Unclosed Anchor at end of file (started line 28)
[AuthenticationError] Unclosed Anchor: [DEF:AuthenticationError:Class] started at line 28
[AuthenticationError] Missing Mandatory Tag: @PURPOSE
[AuthenticationError] Unclosed Anchor: [DEF:AuthenticationError:Class] started at line 28
[AuthenticationError] Missing Mandatory Tag: @PURPOSE
[AuthenticationError] Unclosed Anchor: [DEF:AuthenticationError:Class] started at line 28
[AuthenticationError] Missing Mandatory Tag: @PURPOSE
[PermissionDeniedError] Unclosed Anchor at end of file (started line 33)
[PermissionDeniedError] Unclosed Anchor: [DEF:PermissionDeniedError:Class] started at line 33
[PermissionDeniedError] Missing Mandatory Tag: @PURPOSE
[PermissionDeniedError] Unclosed Anchor: [DEF:PermissionDeniedError:Class] started at line 33
[PermissionDeniedError] Missing Mandatory Tag: @PURPOSE
[PermissionDeniedError] Unclosed Anchor: [DEF:PermissionDeniedError:Class] started at line 33
[PermissionDeniedError] Missing Mandatory Tag: @PURPOSE
[PermissionDeniedError] Unclosed Anchor: [DEF:PermissionDeniedError:Class] started at line 33
[PermissionDeniedError] Missing Mandatory Tag: @PURPOSE
[DashboardNotFoundError] Unclosed Anchor at end of file (started line 38)
[DashboardNotFoundError] Unclosed Anchor: [DEF:DashboardNotFoundError:Class] started at line 38
[DashboardNotFoundError] Missing Mandatory Tag: @PURPOSE
[DashboardNotFoundError] Unclosed Anchor: [DEF:DashboardNotFoundError:Class] started at line 38
[DashboardNotFoundError] Missing Mandatory Tag: @PURPOSE
[DashboardNotFoundError] Unclosed Anchor: [DEF:DashboardNotFoundError:Class] started at line 38
[DashboardNotFoundError] Missing Mandatory Tag: @PURPOSE
[DashboardNotFoundError] Unclosed Anchor: [DEF:DashboardNotFoundError:Class] started at line 38
[DashboardNotFoundError] Missing Mandatory Tag: @PURPOSE
[DashboardNotFoundError] Unclosed Anchor: [DEF:DashboardNotFoundError:Class] started at line 38
[DashboardNotFoundError] Missing Mandatory Tag: @PURPOSE
[NetworkError] Unclosed Anchor at end of file (started line 43)
[NetworkError] Unclosed Anchor: [DEF:NetworkError:Class] started at line 43
[NetworkError] Missing Mandatory Tag: @PURPOSE
[NetworkError] Unclosed Anchor: [DEF:NetworkError:Class] started at line 43
[NetworkError] Missing Mandatory Tag: @PURPOSE
[NetworkError] Unclosed Anchor: [DEF:NetworkError:Class] started at line 43
[NetworkError] Missing Mandatory Tag: @PURPOSE
[NetworkError] Unclosed Anchor: [DEF:NetworkError:Class] started at line 43
[NetworkError] Missing Mandatory Tag: @PURPOSE
[NetworkError] Unclosed Anchor: [DEF:NetworkError:Class] started at line 43
[NetworkError] Missing Mandatory Tag: @PURPOSE
[NetworkError] Unclosed Anchor: [DEF:NetworkError:Class] started at line 43
[NetworkError] Missing Mandatory Tag: @PURPOSE |
+| backend/src/core/utils/fileio.py | 🟡 88% | [backend.core.utils.fileio] Unclosed Anchor at end of file (started line 1)
[backend.core.utils.fileio] Unclosed Anchor: [DEF:backend.core.utils.fileio:Module] started at line 1
[InvalidZipFormatError] Unclosed Anchor at end of file (started line 26)
[InvalidZipFormatError] Unclosed Anchor: [DEF:InvalidZipFormatError:Class] started at line 26
[InvalidZipFormatError] Missing Mandatory Tag: @PURPOSE
[InvalidZipFormatError] Unclosed Anchor: [DEF:InvalidZipFormatError:Class] started at line 26
[InvalidZipFormatError] Missing Mandatory Tag: @PURPOSE
[replacer] Missing Belief State Logging: Function should use belief_scope context manager.
[replacer] Missing Belief State Logging: Function should use belief_scope context manager.
[replacer] Missing Belief State Logging: Function should use belief_scope context manager.
[replacer] Missing Belief State Logging: Function should use belief_scope context manager. |
+| backend/src/core/logger.py | 🟡 97% | [format] Missing Belief State Logging: Function should use belief_scope context manager.
[format] Missing Belief State Logging: Function should use belief_scope context manager.
[format] Missing Belief State Logging: Function should use belief_scope context manager.
[belief_scope] Missing Belief State Logging: Function should use belief_scope context manager.
[belief_scope] Missing Belief State Logging: Function should use belief_scope context manager.
[configure_logger] Missing Belief State Logging: Function should use belief_scope context manager.
[configure_logger] Missing Belief State Logging: Function should use belief_scope context manager.
[__init__] Missing Belief State Logging: Function should use belief_scope context manager.
[__init__] Missing Belief State Logging: Function should use belief_scope context manager.
[__init__] Missing Belief State Logging: Function should use belief_scope context manager.
[emit] Missing Belief State Logging: Function should use belief_scope context manager.
[emit] Missing Belief State Logging: Function should use belief_scope context manager.
[emit] Missing Belief State Logging: Function should use belief_scope context manager.
[get_recent_logs] Missing Belief State Logging: Function should use belief_scope context manager.
[get_recent_logs] Missing Belief State Logging: Function should use belief_scope context manager.
[get_recent_logs] Missing Belief State Logging: Function should use belief_scope context manager.
[believed] Missing Mandatory Tag: @PRE
[believed] Missing Mandatory Tag: @POST
[believed] Missing Mandatory Tag: @PRE
[believed] Missing Mandatory Tag: @POST
[believed] Missing Mandatory Tag: @PRE
[believed] Missing Mandatory Tag: @POST |
+| backend/src/core/utils/dataset_mapper.py | 🟡 97% | [__init__] Missing Mandatory Tag: @PRE
[__init__] Missing Belief State Logging: Function should use belief_scope context manager.
[__init__] Missing Mandatory Tag: @PRE
[__init__] Missing Belief State Logging: Function should use belief_scope context manager.
[__init__] Missing Mandatory Tag: @PRE
[__init__] Missing Belief State Logging: Function should use belief_scope context manager. |
+| generate_semantic_map.py | 🟢 100% | [__init__] Missing Belief State Logging: Function should use belief_scope context manager.
[__init__] Missing Belief State Logging: Function should use belief_scope context manager.
[__enter__] Missing Belief State Logging: Function should use belief_scope context manager.
[__enter__] Missing Belief State Logging: Function should use belief_scope context manager.
[__exit__] Missing Belief State Logging: Function should use belief_scope context manager.
[__exit__] Missing Belief State Logging: Function should use belief_scope context manager. |
+| frontend/src/main.js | 🟢 100% | OK |
+| frontend/src/App.svelte | 🟢 100% | OK |
+| frontend/src/lib/stores.js | 🟢 100% | OK |
+| frontend/src/lib/toasts.js | 🟢 100% | OK |
+| frontend/src/lib/api.js | 🟢 100% | OK |
+| frontend/src/routes/+page.svelte | 🟢 100% | OK |
+| frontend/src/routes/+page.ts | 🟢 100% | OK |
+| frontend/src/routes/tasks/+page.svelte | 🟢 100% | OK |
+| frontend/src/routes/migration/+page.svelte | 🟢 100% | OK |
+| frontend/src/routes/migration/mappings/+page.svelte | 🟢 100% | OK |
+| frontend/src/routes/tools/search/+page.svelte | 🟢 100% | OK |
+| frontend/src/routes/tools/mapper/+page.svelte | 🟢 100% | OK |
+| frontend/src/routes/tools/debug/+page.svelte | 🟢 100% | OK |
+| frontend/src/routes/settings/+page.svelte | 🟢 100% | OK |
+| frontend/src/routes/settings/+page.ts | 🟢 100% | OK |
+| frontend/src/routes/settings/connections/+page.svelte | 🟢 100% | OK |
+| frontend/src/pages/Dashboard.svelte | 🟢 100% | OK |
+| frontend/src/pages/Settings.svelte | 🟢 100% | OK |
+| frontend/src/services/connectionService.js | 🟢 100% | OK |
+| frontend/src/services/toolsService.js | 🟢 100% | OK |
+| frontend/src/services/taskService.js | 🟢 100% | OK |
+| frontend/src/components/PasswordPrompt.svelte | 🟢 100% | OK |
+| frontend/src/components/MappingTable.svelte | 🟢 100% | OK |
+| frontend/src/components/TaskLogViewer.svelte | 🟢 100% | OK |
+| frontend/src/components/Footer.svelte | 🟢 100% | OK |
+| frontend/src/components/MissingMappingModal.svelte | 🟢 100% | OK |
+| frontend/src/components/DashboardGrid.svelte | 🟢 100% | OK |
+| frontend/src/components/Navbar.svelte | 🟢 100% | OK |
+| frontend/src/components/TaskHistory.svelte | 🟢 100% | OK |
+| frontend/src/components/Toast.svelte | 🟢 100% | OK |
+| frontend/src/components/TaskRunner.svelte | 🟢 100% | OK |
+| frontend/src/components/TaskList.svelte | 🟢 100% | OK |
+| frontend/src/components/DynamicForm.svelte | 🟢 100% | OK |
+| frontend/src/components/EnvSelector.svelte | 🟢 100% | OK |
+| frontend/src/components/tools/ConnectionForm.svelte | 🟢 100% | OK |
+| frontend/src/components/tools/ConnectionList.svelte | 🟢 100% | OK |
+| frontend/src/components/tools/MapperTool.svelte | 🟢 100% | OK |
+| frontend/src/components/tools/DebugTool.svelte | 🟢 100% | OK |
+| frontend/src/components/tools/SearchTool.svelte | 🟢 100% | OK |
+| backend/src/app.py | 🟢 100% | OK |
+| backend/src/dependencies.py | 🟢 100% | OK |
+| backend/src/core/config_manager.py | 🟢 100% | OK |
+| backend/src/core/scheduler.py | 🟢 100% | OK |
+| backend/src/core/config_models.py | 🟢 100% | OK |
+| backend/src/core/database.py | 🟢 100% | OK |
+| backend/src/core/plugin_loader.py | 🟢 100% | OK |
+| backend/src/core/migration_engine.py | 🟢 100% | [_transform_yaml] Missing Belief State Logging: Function should use belief_scope context manager.
[_transform_yaml] Missing Belief State Logging: Function should use belief_scope context manager.
[_transform_yaml] Missing Belief State Logging: Function should use belief_scope context manager. |
+| backend/src/core/plugin_base.py | 🟢 100% | OK |
+| backend/src/core/utils/matching.py | 🟢 100% | [suggest_mappings] Missing Belief State Logging: Function should use belief_scope context manager.
[suggest_mappings] Missing Belief State Logging: Function should use belief_scope context manager. |
+| backend/src/core/task_manager/persistence.py | 🟢 100% | OK |
+| backend/src/core/task_manager/manager.py | 🟢 100% | OK |
+| backend/src/core/task_manager/models.py | 🟢 100% | [__init__] Missing Belief State Logging: Function should use belief_scope context manager.
[__init__] Missing Belief State Logging: Function should use belief_scope context manager.
[__init__] Missing Belief State Logging: Function should use belief_scope context manager. |
+| backend/src/core/task_manager/cleanup.py | 🟢 100% | [__init__] Missing Belief State Logging: Function should use belief_scope context manager.
[__init__] Missing Belief State Logging: Function should use belief_scope context manager.
[__init__] Missing Belief State Logging: Function should use belief_scope context manager. |
+| backend/src/core/task_manager/__init__.py | 🟢 100% | OK |
+| backend/src/api/auth.py | 🟢 100% | [get_current_user] Missing Belief State Logging: Function should use belief_scope context manager.
[get_current_user] Missing Belief State Logging: Function should use belief_scope context manager. |
+| backend/src/api/routes/connections.py | 🟢 100% | OK |
+| backend/src/api/routes/environments.py | 🟢 100% | OK |
+| backend/src/api/routes/migration.py | 🟢 100% | [get_dashboards] Missing Belief State Logging: Function should use belief_scope context manager.
[get_dashboards] Missing Belief State Logging: Function should use belief_scope context manager.
[execute_migration] Missing Belief State Logging: Function should use belief_scope context manager.
[execute_migration] Missing Belief State Logging: Function should use belief_scope context manager. |
+| backend/src/api/routes/plugins.py | 🟢 100% | OK |
+| backend/src/api/routes/mappings.py | 🟢 100% | OK |
+| backend/src/api/routes/settings.py | 🟢 100% | OK |
+| backend/src/api/routes/tasks.py | 🟢 100% | OK |
+| backend/src/models/task.py | 🟢 100% | OK |
+| backend/src/models/connection.py | 🟢 100% | OK |
+| backend/src/models/mapping.py | 🟢 100% | OK |
+| backend/src/models/dashboard.py | 🟢 100% | OK |
+| backend/src/services/mapping_service.py | 🟢 100% | OK |
+| backend/src/plugins/backup.py | 🟢 100% | OK |
+| backend/src/plugins/debug.py | 🟢 100% | OK |
+| backend/src/plugins/search.py | 🟢 100% | OK |
+| backend/src/plugins/mapper.py | 🟢 100% | OK |
+| backend/src/plugins/migration.py | 🟢 100% | OK |
+| backend/tests/test_logger.py | 🟢 100% | OK |
diff --git a/semantics/semantic_map.json b/semantics/semantic_map.json
index ed22310..ebad97a 100644
--- a/semantics/semantic_map.json
+++ b/semantics/semantic_map.json
@@ -1,6 +1,6 @@
{
"project_root": ".",
- "generated_at": "2026-01-16T14:37:30.265701",
+ "generated_at": "2026-01-22T17:51:53.368228",
"modules": [
{
"name": "generate_semantic_map",
@@ -455,2801 +455,6 @@
"issues": []
}
},
- {
- "name": "migration_script",
- "type": "Module",
- "start_line": 1,
- "end_line": 413,
- "tags": {
- "SEMANTICS": "migration, cli, superset, ui, logging, error-recovery, batch-delete",
- "PURPOSE": "\u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 CLI \u0434\u043b\u044f \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u043e\u0432 Superset \u043c\u0435\u0436\u0434\u0443 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f\u043c\u0438 \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0441\u043b\u0435 \u043e\u0448\u0438\u0431\u043e\u043a.",
- "LAYER": "App",
- "PUBLIC_API": "Migration"
- },
- "relations": [
- {
- "type": "DEPENDS_ON",
- "target": "superset_tool.client"
- },
- {
- "type": "DEPENDS_ON",
- "target": "superset_tool.utils"
- }
- ],
- "children": [
- {
- "name": "Migration",
- "type": "Class",
- "start_line": 25,
- "end_line": 408,
- "tags": {
- "PURPOSE": "\u0418\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u0438\u0440\u0443\u0435\u0442 \u043b\u043e\u0433\u0438\u043a\u0443 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u043e\u0432 \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u00ab\u0443\u0434\u0430\u043b\u0438\u0442\u044c\u2011\u0438\u2011\u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c\u00bb \u043f\u0440\u0438 \u043e\u0448\u0438\u0431\u043a\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0430."
- },
- "relations": [
- {
- "type": "CREATES_INSTANCE_OF",
- "target": "SupersetLogger"
- },
- {
- "type": "USES",
- "target": "SupersetClient"
- }
- ],
- "children": [
- {
- "name": "__init__",
- "type": "Function",
- "start_line": 33,
- "end_line": 51,
- "tags": {
- "PURPOSE": "\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0441\u0435\u0440\u0432\u0438\u0441 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438, \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 \u043b\u043e\u0433\u0433\u0435\u0440 \u0438 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f.",
- "PRE": "None.",
- "POST": "`self.logger` \u0433\u043e\u0442\u043e\u0432 \u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e; `enable_delete_on_failure` = `False`."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": false,
- "issues": [
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager."
- ]
- }
- },
- {
- "name": "run",
- "type": "Function",
- "start_line": 53,
- "end_line": 71,
- "tags": {
- "PURPOSE": "\u0422\u043e\u0447\u043a\u0430 \u0432\u0445\u043e\u0434\u0430 \u2013 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u0432\u0441\u0435\u0445 \u0448\u0430\u0433\u043e\u0432 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438.",
- "PRE": "\u041b\u043e\u0433\u0433\u0435\u0440 \u0433\u043e\u0442\u043e\u0432.",
- "POST": "\u0421\u043a\u0440\u0438\u043f\u0442 \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0432\u044b\u0432\u0435\u0434\u0435\u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435."
- },
- "relations": [
- {
- "type": "CALLS",
- "target": "self.ask_delete_on_failure"
- },
- {
- "type": "CALLS",
- "target": "self.select_environments"
- },
- {
- "type": "CALLS",
- "target": "self.select_dashboards"
- },
- {
- "type": "CALLS",
- "target": "self.confirm_db_config_replacement"
- },
- {
- "type": "CALLS",
- "target": "self.execute_migration"
- }
- ],
- "children": [],
- "compliance": {
- "valid": false,
- "issues": [
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager."
- ]
- }
- },
- {
- "name": "ask_delete_on_failure",
- "type": "Function",
- "start_line": 73,
- "end_line": 88,
- "tags": {
- "PURPOSE": "\u0417\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043b\u0438 \u0443\u0434\u0430\u043b\u044f\u0442\u044c \u0434\u0430\u0448\u0431\u043e\u0440\u0434 \u043f\u0440\u0438 \u043e\u0448\u0438\u0431\u043a\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0430.",
- "PRE": "None.",
- "POST": "`self.enable_delete_on_failure` \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d."
- },
- "relations": [
- {
- "type": "CALLS",
- "target": "yesno"
- }
- ],
- "children": [],
- "compliance": {
- "valid": false,
- "issues": [
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager."
- ]
- }
- },
- {
- "name": "select_environments",
- "type": "Function",
- "start_line": 90,
- "end_line": 130,
- "tags": {
- "PURPOSE": "\u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0435 \u0438 \u0446\u0435\u043b\u0435\u0432\u043e\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f Superset.",
- "PRE": "`setup_clients` \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0432\u0441\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u044b.",
- "POST": "`self.from_c` \u0438 `self.to_c` \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b."
- },
- "relations": [
- {
- "type": "CALLS",
- "target": "setup_clients"
- },
- {
- "type": "CALLS",
- "target": "menu"
- }
- ],
- "children": [],
- "compliance": {
- "valid": false,
- "issues": [
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager."
- ]
- }
- },
- {
- "name": "select_dashboards",
- "type": "Function",
- "start_line": 132,
- "end_line": 188,
- "tags": {
- "PURPOSE": "\u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043d\u0430\u0431\u043e\u0440 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u043e\u0432 \u0434\u043b\u044f \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438.",
- "PRE": "`self.from_c` \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d.",
- "POST": "`self.dashboards_to_migrate` \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d."
- },
- "relations": [
- {
- "type": "CALLS",
- "target": "self.from_c.get_dashboards"
- },
- {
- "type": "CALLS",
- "target": "checklist"
- }
- ],
- "children": [],
- "compliance": {
- "valid": false,
- "issues": [
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager."
- ]
- }
- },
- {
- "name": "confirm_db_config_replacement",
- "type": "Function",
- "start_line": 190,
- "end_line": 225,
- "tags": {
- "PURPOSE": "\u0417\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043b\u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0438\u043c\u0435\u043d\u0430 \u0411\u0414 \u0432 YAML-\u0444\u0430\u0439\u043b\u0430\u0445.",
- "PRE": "None.",
- "POST": "`self.db_config_replacement` \u043b\u0438\u0431\u043e `None`, \u043b\u0438\u0431\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d."
- },
- "relations": [
- {
- "type": "CALLS",
- "target": "yesno"
- },
- {
- "type": "CALLS",
- "target": "self._select_databases"
- }
- ],
- "children": [],
- "compliance": {
- "valid": false,
- "issues": [
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager."
- ]
- }
- },
- {
- "name": "_select_databases",
- "type": "Function",
- "start_line": 227,
- "end_line": 306,
- "tags": {
- "PURPOSE": "\u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0443\u044e \u0438 \u0446\u0435\u043b\u0435\u0432\u0443\u044e \u0411\u0414 \u0447\u0435\u0440\u0435\u0437 API.",
- "PRE": "Clients are initialized.",
- "POST": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043a\u043e\u0440\u0442\u0435\u0436 (\u0441\u0442\u0430\u0440\u0430\u044f \u0411\u0414, \u043d\u043e\u0432\u0430\u044f \u0411\u0414) \u0438\u043b\u0438 (None, None) \u043f\u0440\u0438 \u043e\u0442\u043c\u0435\u043d\u0435."
- },
- "relations": [
- {
- "type": "CALLS",
- "target": "self.from_c.get_databases"
- },
- {
- "type": "CALLS",
- "target": "self.to_c.get_databases"
- },
- {
- "type": "CALLS",
- "target": "self.from_c.get_database"
- },
- {
- "type": "CALLS",
- "target": "self.to_c.get_database"
- },
- {
- "type": "CALLS",
- "target": "menu"
- }
- ],
- "children": [],
- "compliance": {
- "valid": false,
- "issues": [
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager."
- ]
- }
- },
- {
- "name": "_batch_delete_by_ids",
- "type": "Function",
- "start_line": 308,
- "end_line": 333,
- "tags": {
- "PURPOSE": "\u0423\u0434\u0430\u043b\u044f\u0435\u0442 \u043d\u0430\u0431\u043e\u0440 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u043e\u0432 \u043f\u043e \u0438\u0445 ID \u0435\u0434\u0438\u043d\u044b\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c.",
- "PRE": "`ids` \u2013 \u043d\u0435\u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0446\u0435\u043b\u044b\u0445 \u0447\u0438\u0441\u0435\u043b.",
- "POST": "\u0412\u0441\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u044b \u0443\u0434\u0430\u043b\u0435\u043d\u044b (\u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0438).",
- "PARAM": "ids (List[int]) - \u0421\u043f\u0438\u0441\u043e\u043a ID \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u043e\u0432 \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f."
- },
- "relations": [
- {
- "type": "CALLS",
- "target": "self.to_c.network.request"
- }
- ],
- "children": [],
- "compliance": {
- "valid": false,
- "issues": [
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager."
- ]
- }
- },
- {
- "name": "execute_migration",
- "type": "Function",
- "start_line": 335,
- "end_line": 406,
- "tags": {
- "PURPOSE": "\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u044d\u043a\u0441\u043f\u043e\u0440\u0442-\u0438\u043c\u043f\u043e\u0440\u0442 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u043e\u0432, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0438 \u0438, \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f.",
- "PRE": "`self.dashboards_to_migrate` \u043d\u0435 \u043f\u0443\u0441\u0442; `self.from_c` \u0438 `self.to_c` \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u044b.",
- "POST": "\u0423\u0441\u043f\u0435\u0448\u043d\u044b\u0435 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u044b \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b; \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u044b\u0435 - \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u0438\u043b\u0438 \u0437\u0430\u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u044b."
- },
- "relations": [
- {
- "type": "CALLS",
- "target": "self.from_c.export_dashboard"
- },
- {
- "type": "CALLS",
- "target": "create_temp_file"
- },
- {
- "type": "CALLS",
- "target": "update_yamls"
- },
- {
- "type": "CALLS",
- "target": "create_dashboard_export"
- },
- {
- "type": "CALLS",
- "target": "self.to_c.import_dashboard"
- },
- {
- "type": "CALLS",
- "target": "self._batch_delete_by_ids"
- }
- ],
- "children": [],
- "compliance": {
- "valid": false,
- "issues": [
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager."
- ]
- }
- }
- ],
- "compliance": {
- "valid": true,
- "issues": []
- }
- }
- ],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "superset_tool.exceptions",
- "type": "Module",
- "start_line": 1,
- "end_line": 173,
- "tags": {
- "PURPOSE": "\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u044e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u0432\u0441\u0435\u0433\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044f \u0435\u0434\u0438\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043e\u0448\u0438\u0431\u043e\u043a.",
- "SEMANTICS": "exception, error, hierarchy",
- "LAYER": "Infra"
- },
- "relations": [],
- "children": [
- {
- "name": "SupersetToolError",
- "type": "Class",
- "start_line": 11,
- "end_line": 25,
- "tags": {
- "PURPOSE": "\u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043e\u0448\u0438\u0431\u043e\u043a, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c.",
- "PARAM": "context (Optional[Dict[str, Any]]) - \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043e\u0448\u0438\u0431\u043a\u0438."
- },
- "relations": [
- {
- "type": "INHERITS_FROM",
- "target": "Exception"
- }
- ],
- "children": [
- {
- "name": "__init__",
- "type": "Function",
- "start_line": 17,
- "end_line": 24,
- "tags": {
- "PURPOSE": "Initializes the base tool error.",
- "PRE": "message is a string, context is optional dict.",
- "POST": "Error is initialized with combined message and context."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": false,
- "issues": [
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager."
- ]
- }
- }
- ],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "AuthenticationError",
- "type": "Class",
- "start_line": 27,
- "end_line": 40,
- "tags": {
- "PURPOSE": "\u041e\u0448\u0438\u0431\u043a\u0438, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0435\u0439 \u0438\u043b\u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0435\u0439.",
- "PARAM": "context (Any) - \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043e\u0448\u0438\u0431\u043a\u0438."
- },
- "relations": [
- {
- "type": "INHERITS_FROM",
- "target": "SupersetToolError"
- }
- ],
- "children": [
- {
- "name": "__init__",
- "type": "Function",
- "start_line": 33,
- "end_line": 39,
- "tags": {
- "PURPOSE": "Initializes an authentication error.",
- "PRE": "Optional message and context.",
- "POST": "Error is initialized with authentication context."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": false,
- "issues": [
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager."
- ]
- }
- }
- ],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "PermissionDeniedError",
- "type": "Class",
- "start_line": 42,
- "end_line": 57,
- "tags": {
- "PURPOSE": "\u041e\u0448\u0438\u0431\u043a\u0430, \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0449\u0430\u044f \u043f\u0440\u0438 \u043e\u0442\u043a\u0430\u0437\u0435 \u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u043a \u0440\u0435\u0441\u0443\u0440\u0441\u0443.",
- "PARAM": "context (Any) - \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043e\u0448\u0438\u0431\u043a\u0438."
- },
- "relations": [
- {
- "type": "INHERITS_FROM",
- "target": "AuthenticationError"
- }
- ],
- "children": [
- {
- "name": "__init__",
- "type": "Function",
- "start_line": 49,
- "end_line": 56,
- "tags": {
- "PURPOSE": "Initializes a permission denied error.",
- "PRE": "Optional message, permission string, and context.",
- "POST": "Error is initialized with permission details."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": false,
- "issues": [
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager."
- ]
- }
- }
- ],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "SupersetAPIError",
- "type": "Class",
- "start_line": 59,
- "end_line": 72,
- "tags": {
- "PURPOSE": "\u041e\u0431\u0449\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u0440\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438 \u0441 Superset API.",
- "PARAM": "context (Any) - \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043e\u0448\u0438\u0431\u043a\u0438."
- },
- "relations": [
- {
- "type": "INHERITS_FROM",
- "target": "SupersetToolError"
- }
- ],
- "children": [
- {
- "name": "__init__",
- "type": "Function",
- "start_line": 65,
- "end_line": 71,
- "tags": {
- "PURPOSE": "Initializes a Superset API error.",
- "PRE": "Optional message and context.",
- "POST": "Error is initialized with API failure context."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": false,
- "issues": [
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager."
- ]
- }
- }
- ],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "ExportError",
- "type": "Class",
- "start_line": 74,
- "end_line": 87,
- "tags": {
- "PURPOSE": "\u041e\u0448\u0438\u0431\u043a\u0438, \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0435 \u0434\u043b\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430.",
- "PARAM": "context (Any) - \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043e\u0448\u0438\u0431\u043a\u0438."
- },
- "relations": [
- {
- "type": "INHERITS_FROM",
- "target": "SupersetAPIError"
- }
- ],
- "children": [
- {
- "name": "__init__",
- "type": "Function",
- "start_line": 80,
- "end_line": 86,
- "tags": {
- "PURPOSE": "Initializes an export error.",
- "PRE": "Optional message and context.",
- "POST": "Error is initialized with export failure subtype."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": false,
- "issues": [
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager."
- ]
- }
- }
- ],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "DashboardNotFoundError",
- "type": "Class",
- "start_line": 89,
- "end_line": 103,
- "tags": {
- "PURPOSE": "\u041e\u0448\u0438\u0431\u043a\u0430, \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u043f\u0440\u043e\u0448\u0435\u043d\u043d\u044b\u0439 \u0434\u0430\u0448\u0431\u043e\u0440\u0434 \u0438\u043b\u0438 \u0440\u0435\u0441\u0443\u0440\u0441 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d (404).",
- "PARAM": "context (Any) - \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043e\u0448\u0438\u0431\u043a\u0438."
- },
- "relations": [
- {
- "type": "INHERITS_FROM",
- "target": "SupersetAPIError"
- }
- ],
- "children": [
- {
- "name": "__init__",
- "type": "Function",
- "start_line": 96,
- "end_line": 102,
- "tags": {
- "PURPOSE": "Initializes a dashboard not found error.",
- "PRE": "dashboard_id_or_slug is provided.",
- "POST": "Error is initialized with resource identification."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": false,
- "issues": [
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager."
- ]
- }
- }
- ],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "DatasetNotFoundError",
- "type": "Class",
- "start_line": 105,
- "end_line": 119,
- "tags": {
- "PURPOSE": "\u041e\u0448\u0438\u0431\u043a\u0430, \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 (404).",
- "PARAM": "context (Any) - \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043e\u0448\u0438\u0431\u043a\u0438."
- },
- "relations": [
- {
- "type": "INHERITS_FROM",
- "target": "SupersetAPIError"
- }
- ],
- "children": [
- {
- "name": "__init__",
- "type": "Function",
- "start_line": 112,
- "end_line": 118,
- "tags": {
- "PURPOSE": "Initializes a dataset not found error.",
- "PRE": "dataset_id_or_slug is provided.",
- "POST": "Error is initialized with resource identification."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": false,
- "issues": [
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager."
- ]
- }
- }
- ],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "InvalidZipFormatError",
- "type": "Class",
- "start_line": 121,
- "end_line": 135,
- "tags": {
- "PURPOSE": "\u041e\u0448\u0438\u0431\u043a\u0430, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u043d\u0430 \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0438\u043b\u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 ZIP-\u0430\u0440\u0445\u0438\u0432\u0430.",
- "PARAM": "context (Any) - \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043e\u0448\u0438\u0431\u043a\u0438."
- },
- "relations": [
- {
- "type": "INHERITS_FROM",
- "target": "SupersetToolError"
- }
- ],
- "children": [
- {
- "name": "__init__",
- "type": "Function",
- "start_line": 128,
- "end_line": 134,
- "tags": {
- "PURPOSE": "Initializes an invalid ZIP format error.",
- "PRE": "Optional message, file path, and context.",
- "POST": "Error is initialized with file validation context."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": false,
- "issues": [
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager."
- ]
- }
- }
- ],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "NetworkError",
- "type": "Class",
- "start_line": 137,
- "end_line": 150,
- "tags": {
- "PURPOSE": "\u041e\u0448\u0438\u0431\u043a\u0438, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u0441\u0435\u0442\u0435\u0432\u044b\u043c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435\u043c.",
- "PARAM": "context (Any) - \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043e\u0448\u0438\u0431\u043a\u0438."
- },
- "relations": [
- {
- "type": "INHERITS_FROM",
- "target": "SupersetToolError"
- }
- ],
- "children": [
- {
- "name": "__init__",
- "type": "Function",
- "start_line": 143,
- "end_line": 149,
- "tags": {
- "PURPOSE": "Initializes a network error.",
- "PRE": "Optional message and context.",
- "POST": "Error is initialized with network failure context."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": false,
- "issues": [
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager."
- ]
- }
- }
- ],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "FileOperationError",
- "type": "Class",
- "start_line": 152,
- "end_line": 157,
- "tags": {
- "PURPOSE": "\u041e\u0431\u0449\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 (I/O)."
- },
- "relations": [
- {
- "type": "INHERITS_FROM",
- "target": "SupersetToolError"
- }
- ],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "InvalidFileStructureError",
- "type": "Class",
- "start_line": 159,
- "end_line": 164,
- "tags": {
- "PURPOSE": "\u041e\u0448\u0438\u0431\u043a\u0430, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u043d\u0430 \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0444\u0430\u0439\u043b\u043e\u0432 \u0438\u043b\u0438 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0439."
- },
- "relations": [
- {
- "type": "INHERITS_FROM",
- "target": "FileOperationError"
- }
- ],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "ConfigurationError",
- "type": "Class",
- "start_line": 166,
- "end_line": 171,
- "tags": {
- "PURPOSE": "\u041e\u0448\u0438\u0431\u043a\u0438, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u043d\u0435\u0432\u0435\u0440\u043d\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430."
- },
- "relations": [
- {
- "type": "INHERITS_FROM",
- "target": "SupersetToolError"
- }
- ],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- }
- ],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "superset_tool.models",
- "type": "Module",
- "start_line": 1,
- "end_line": 87,
- "tags": {
- "SEMANTICS": "pydantic, model, config, validation, data-structure",
- "PURPOSE": "\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 Pydantic-\u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u043b\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044f \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044e \u0434\u0430\u043d\u043d\u044b\u0445.",
- "LAYER": "Infra",
- "PUBLIC_API": "SupersetConfig, DatabaseConfig"
- },
- "relations": [
- {
- "type": "DEPENDS_ON",
- "target": "pydantic"
- },
- {
- "type": "DEPENDS_ON",
- "target": "superset_tool.utils.logger"
- }
- ],
- "children": [
- {
- "name": "SupersetConfig",
- "type": "Class",
- "start_line": 17,
- "end_line": 61,
- "tags": {
- "PURPOSE": "\u041c\u043e\u0434\u0435\u043b\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u043e\u0434\u043d\u043e\u043c\u0443 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0443 Superset API."
- },
- "relations": [
- {
- "type": "INHERITS_FROM",
- "target": "pydantic.BaseModel"
- }
- ],
- "children": [
- {
- "name": "validate_auth",
- "type": "Function",
- "start_line": 28,
- "end_line": 40,
- "tags": {
- "PURPOSE": "\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0447\u0442\u043e \u0441\u043b\u043e\u0432\u0430\u0440\u044c `auth` \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u043b\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u044f.",
- "PRE": "`v` \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u043b\u043e\u0432\u0430\u0440\u0435\u043c.",
- "POST": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 `v`, \u0435\u0441\u043b\u0438 \u0432\u0441\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043b\u044f (`provider`, `username`, `password`, `refresh`) \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442.",
- "THROW": "ValueError - \u0415\u0441\u043b\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043b\u044f.",
- "PARAM": "v (Dict[str, str]) - \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044f auth."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": false,
- "issues": [
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager."
- ]
- }
- },
- {
- "name": "normalize_base_url",
- "type": "Function",
- "start_line": 42,
- "end_line": 57,
- "tags": {
- "PURPOSE": "\u041d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0443\u0435\u0442 `base_url`, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044f `/api/v1`, \u0435\u0441\u043b\u0438 \u043e\u043d \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442.",
- "PRE": "`v` \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u043e\u0439.",
- "POST": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 `v`.",
- "THROW": "ValueError - \u0415\u0441\u043b\u0438 \u0444\u043e\u0440\u043c\u0430\u0442 URL \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u0435\u043d.",
- "PARAM": "v (str) - \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044f base_url."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": false,
- "issues": [
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager."
- ]
- }
- }
- ],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "DatabaseConfig",
- "type": "Class",
- "start_line": 63,
- "end_line": 85,
- "tags": {
- "PURPOSE": "\u041c\u043e\u0434\u0435\u043b\u044c \u0434\u043b\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0438 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u043e\u0432."
- },
- "relations": [
- {
- "type": "INHERITS_FROM",
- "target": "pydantic.BaseModel"
- }
- ],
- "children": [
- {
- "name": "validate_config",
- "type": "Function",
- "start_line": 70,
- "end_line": 81,
- "tags": {
- "PURPOSE": "\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0447\u0442\u043e \u0441\u043b\u043e\u0432\u0430\u0440\u044c `database_config` \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043a\u043b\u044e\u0447\u0438 'old' \u0438 'new'.",
- "PRE": "`v` \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u043b\u043e\u0432\u0430\u0440\u0435\u043c.",
- "POST": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 `v`, \u0435\u0441\u043b\u0438 \u043a\u043b\u044e\u0447\u0438 'old' \u0438 'new' \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442.",
- "THROW": "ValueError - \u0415\u0441\u043b\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u043b\u044e\u0447\u0438.",
- "PARAM": "v (Dict[str, Dict[str, Any]]) - \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044f database_config."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": false,
- "issues": [
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager."
- ]
- }
- }
- ],
- "compliance": {
- "valid": true,
- "issues": []
- }
- }
- ],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "superset_tool.client",
- "type": "Module",
- "start_line": 1,
- "end_line": 508,
- "tags": {
- "SEMANTICS": "superset, api, client, rest, http, dashboard, dataset, import, export",
- "PURPOSE": "\u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0439 \u043a\u043b\u0438\u0435\u043d\u0442 \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 Superset REST API, \u0438\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u0438\u0440\u0443\u044f \u043b\u043e\u0433\u0438\u043a\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043e\u0448\u0438\u0431\u043e\u043a \u0438 \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u044e.",
- "LAYER": "Domain",
- "INVARIANT": "All network operations must use the internal APIClient instance.",
- "CONSTRAINT": "No direct use of 'requests' library outside of APIClient.",
- "PUBLIC_API": "SupersetClient"
- },
- "relations": [
- {
- "type": "DEPENDS_ON",
- "target": "superset_tool.models"
- },
- {
- "type": "DEPENDS_ON",
- "target": "superset_tool.exceptions"
- },
- {
- "type": "DEPENDS_ON",
- "target": "superset_tool.utils"
- }
- ],
- "children": [
- {
- "name": "SupersetClient",
- "type": "Class",
- "start_line": 27,
- "end_line": 506,
- "tags": {
- "PURPOSE": "\u041a\u043b\u0430\u0441\u0441-\u043e\u0431\u0451\u0440\u0442\u043a\u0430 \u043d\u0430\u0434 Superset REST API, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0430\u043c\u0438 \u0438 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430\u043c\u0438."
- },
- "relations": [
- {
- "type": "CREATES_INSTANCE_OF",
- "target": "APIClient"
- },
- {
- "type": "USES",
- "target": "SupersetConfig"
- }
- ],
- "children": [
- {
- "name": "__init__",
- "type": "Function",
- "start_line": 32,
- "end_line": 52,
- "tags": {
- "PURPOSE": "\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043a\u043b\u0438\u0435\u043d\u0442, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u043a\u043b\u0438\u0435\u043d\u0442.",
- "PRE": "`config` \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c SupersetConfig.",
- "POST": "\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044b `logger`, `config`, \u0438 `network` \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u0438 \u0433\u043e\u0442\u043e\u0432\u044b \u043a \u0440\u0430\u0431\u043e\u0442\u0435.",
- "PARAM": "logger (Optional[SupersetLogger]) - \u042d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043b\u043e\u0433\u0433\u0435\u0440\u0430."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "_validate_config",
- "type": "Function",
- "start_line": 54,
- "end_line": 65,
- "tags": {
- "PURPOSE": "\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0438\u043c\u0435\u0435\u0442 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439 \u0442\u0438\u043f.",
- "PRE": "`config` \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u043d.",
- "POST": "\u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u0430, \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442\u0441\u044f.",
- "THROW": "TypeError - \u0415\u0441\u043b\u0438 `config` \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u043c `SupersetConfig`.",
- "PARAM": "config (SupersetConfig) - \u041e\u0431\u044a\u0435\u043a\u0442 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "headers",
- "type": "Function",
- "start_line": 68,
- "end_line": 75,
- "tags": {
- "PURPOSE": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0431\u0430\u0437\u043e\u0432\u044b\u0435 HTTP-\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0441\u0435\u0442\u0435\u0432\u044b\u043c \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c.",
- "PRE": "self.network \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d.",
- "POST": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0439 \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0442\u043e\u043a\u0435\u043d \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "get_dashboards",
- "type": "Function",
- "start_line": 77,
- "end_line": 108,
- "tags": {
- "PURPOSE": "\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043f\u043e\u043b\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u043e\u0432, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044f \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u044e.",
- "PRE": "self.network \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d.",
- "POST": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u0441\u0435 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u044b, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043f\u043e API.",
- "THROW": "APIError - \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430.",
- "PARAM": "query (Optional[Dict]) - \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0434\u043b\u044f API.",
- "RETURN": "Tuple[int, List[Dict]] - \u041a\u043e\u0440\u0442\u0435\u0436 (\u043e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e, \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u043e\u0432)."
- },
- "relations": [
- {
- "type": "CALLS",
- "target": "self._fetch_total_object_count"
- },
- {
- "type": "CALLS",
- "target": "self._fetch_all_pages"
- }
- ],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "export_dashboard",
- "type": "Function",
- "start_line": 110,
- "end_line": 134,
- "tags": {
- "PURPOSE": "\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u0434\u0430\u0448\u0431\u043e\u0440\u0434 \u0432 \u0432\u0438\u0434\u0435 ZIP-\u0430\u0440\u0445\u0438\u0432\u0430.",
- "PRE": "dashboard_id \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0446\u0435\u043b\u044b\u043c \u0447\u0438\u0441\u043b\u043e\u043c.",
- "POST": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 ZIP-\u0430\u0440\u0445\u0438\u0432\u0430 \u0438 \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430.",
- "THROW": "ExportError - \u0415\u0441\u043b\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0441\u044f \u043d\u0435\u0443\u0434\u0430\u0447\u0435\u0439.",
- "PARAM": "dashboard_id (int) - ID \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0430 \u0434\u043b\u044f \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430.",
- "RETURN": "Tuple[bytes, str] - \u0411\u0438\u043d\u0430\u0440\u043d\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 ZIP-\u0430\u0440\u0445\u0438\u0432\u0430 \u0438 \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430."
- },
- "relations": [
- {
- "type": "CALLS",
- "target": "self.network.request"
- }
- ],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "import_dashboard",
- "type": "Function",
- "start_line": 136,
- "end_line": 169,
- "tags": {
- "PURPOSE": "\u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u0434\u0430\u0448\u0431\u043e\u0440\u0434 \u0438\u0437 ZIP-\u0444\u0430\u0439\u043b\u0430 \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0439 \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u043f\u0440\u0438 \u043e\u0448\u0438\u0431\u043a\u0435.",
- "PRE": "\u0424\u0430\u0439\u043b, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0432 `file_name`, \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0438 \u0431\u044b\u0442\u044c \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c ZIP-\u0430\u0440\u0445\u0438\u0432\u043e\u043c Superset.",
- "POST": "\u0414\u0430\u0448\u0431\u043e\u0440\u0434 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d \u043e\u0442\u0432\u0435\u0442 API.",
- "THROW": "InvalidZipFormatError - \u0415\u0441\u043b\u0438 \u0444\u0430\u0439\u043b \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c ZIP-\u0430\u0440\u0445\u0438\u0432\u043e\u043c Superset.",
- "PARAM": "dash_slug (Optional[str]) - Slug \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0430 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 ID, \u0435\u0441\u043b\u0438 ID \u043d\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d.",
- "RETURN": "Dict - \u041e\u0442\u0432\u0435\u0442 API \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0441\u043f\u0435\u0445\u0430."
- },
- "relations": [
- {
- "type": "CALLS",
- "target": "self._do_import"
- },
- {
- "type": "CALLS",
- "target": "self.delete_dashboard"
- },
- {
- "type": "CALLS",
- "target": "self.get_dashboards"
- }
- ],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "_resolve_target_id_for_delete",
- "type": "Function",
- "start_line": 171,
- "end_line": 205,
- "tags": {
- "PURPOSE": "\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 ID \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0430 \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f ID \u0438\u043b\u0438 slug.",
- "PARAM": "dash_slug (Optional[str]) - Slug \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0430.",
- "PRE": "\u041f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435 \u043e\u0434\u0438\u043d \u0438\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 (dash_id \u0438\u043b\u0438 dash_slug) \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d.",
- "POST": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 ID \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0430, \u0435\u0441\u043b\u0438 \u043d\u0430\u0439\u0434\u0435\u043d, \u0438\u043d\u0430\u0447\u0435 None.",
- "THROW": "APIError - \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043f\u0440\u0438 \u043f\u043e\u0438\u0441\u043a\u0435 \u043f\u043e slug.",
- "RETURN": "Optional[int] - \u041d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0439 ID \u0438\u043b\u0438 None."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "_do_import",
- "type": "Function",
- "start_line": 207,
- "end_line": 229,
- "tags": {
- "PURPOSE": "\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043e\u0434\u0438\u043d \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0438\u043c\u043f\u043e\u0440\u0442 \u0431\u0435\u0437 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439.",
- "PRE": "\u0424\u0430\u0439\u043b \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c.",
- "POST": "\u0424\u0430\u0439\u043b \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d \u043e\u0442\u0432\u0435\u0442 API.",
- "THROW": "FileNotFoundError - \u0415\u0441\u043b\u0438 \u0444\u0430\u0439\u043b \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.",
- "PARAM": "file_name (Union[str, Path]) - \u041f\u0443\u0442\u044c \u043a \u0444\u0430\u0439\u043b\u0443.",
- "RETURN": "Dict - \u041e\u0442\u0432\u0435\u0442 API."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "delete_dashboard",
- "type": "Function",
- "start_line": 231,
- "end_line": 248,
- "tags": {
- "PURPOSE": "\u0423\u0434\u0430\u043b\u044f\u0435\u0442 \u0434\u0430\u0448\u0431\u043e\u0440\u0434 \u043f\u043e \u0435\u0433\u043e ID \u0438\u043b\u0438 slug.",
- "PRE": "dashboard_id \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d.",
- "POST": "\u0414\u0430\u0448\u0431\u043e\u0440\u0434 \u0443\u0434\u0430\u043b\u0435\u043d \u0438\u043b\u0438 \u0437\u0430\u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435.",
- "THROW": "APIError - \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430.",
- "PARAM": "dashboard_id (Union[int, str]) - ID \u0438\u043b\u0438 slug \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0430."
- },
- "relations": [
- {
- "type": "CALLS",
- "target": "self.network.request"
- }
- ],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "_extract_dashboard_id_from_zip",
- "type": "Function",
- "start_line": 250,
- "end_line": 272,
- "tags": {
- "PURPOSE": "\u0418\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442 ID \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0430 \u0438\u0437 `metadata.yaml` \u0432\u043d\u0443\u0442\u0440\u0438 ZIP-\u0430\u0440\u0445\u0438\u0432\u0430.",
- "PARAM": "file_name (Union[str, Path]) - \u041f\u0443\u0442\u044c \u043a ZIP-\u0444\u0430\u0439\u043b\u0443.",
- "PRE": "\u0424\u0430\u0439\u043b, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0432 `file_name`, \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c ZIP-\u0430\u0440\u0445\u0438\u0432\u043e\u043c.",
- "POST": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 ID \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0430, \u0435\u0441\u043b\u0438 \u043d\u0430\u0439\u0434\u0435\u043d \u0432 metadata.yaml, \u0438\u043d\u0430\u0447\u0435 None.",
- "THROW": "ImportError - \u0415\u0441\u043b\u0438 \u043d\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d `yaml`.",
- "RETURN": "Optional[int] - ID \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0430 \u0438\u043b\u0438 None."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "_extract_dashboard_slug_from_zip",
- "type": "Function",
- "start_line": 274,
- "end_line": 296,
- "tags": {
- "PURPOSE": "\u0418\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442 slug \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0430 \u0438\u0437 `metadata.yaml` \u0432\u043d\u0443\u0442\u0440\u0438 ZIP-\u0430\u0440\u0445\u0438\u0432\u0430.",
- "PARAM": "file_name (Union[str, Path]) - \u041f\u0443\u0442\u044c \u043a ZIP-\u0444\u0430\u0439\u043b\u0443.",
- "PRE": "\u0424\u0430\u0439\u043b, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0432 `file_name`, \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c ZIP-\u0430\u0440\u0445\u0438\u0432\u043e\u043c.",
- "POST": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 slug \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0430, \u0435\u0441\u043b\u0438 \u043d\u0430\u0439\u0434\u0435\u043d \u0432 metadata.yaml, \u0438\u043d\u0430\u0447\u0435 None.",
- "THROW": "ImportError - \u0415\u0441\u043b\u0438 \u043d\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d `yaml`.",
- "RETURN": "Optional[str] - Slug \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0430 \u0438\u043b\u0438 None."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "_validate_export_response",
- "type": "Function",
- "start_line": 298,
- "end_line": 313,
- "tags": {
- "PURPOSE": "\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0447\u0442\u043e HTTP-\u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u044d\u043a\u0441\u043f\u043e\u0440\u0442 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c ZIP-\u0430\u0440\u0445\u0438\u0432\u043e\u043c.",
- "PRE": "response \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c requests.Response.",
- "POST": "\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u0430, \u0435\u0441\u043b\u0438 \u043e\u0442\u0432\u0435\u0442 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u043f\u0443\u0441\u0442\u044b\u043c ZIP-\u0430\u0440\u0445\u0438\u0432\u043e\u043c.",
- "THROW": "ExportError - \u0415\u0441\u043b\u0438 \u043e\u0442\u0432\u0435\u0442 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f ZIP-\u0430\u0440\u0445\u0438\u0432\u043e\u043c \u0438\u043b\u0438 \u043f\u0443\u0441\u0442.",
- "PARAM": "dashboard_id (int) - ID \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0430."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "_resolve_export_filename",
- "type": "Function",
- "start_line": 315,
- "end_line": 332,
- "tags": {
- "PURPOSE": "\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u0434\u043b\u044f \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u0438\u0437 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 \u0438\u043b\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0435\u0433\u043e.",
- "PRE": "response \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c requests.Response.",
- "POST": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u0435\u043f\u0443\u0441\u0442\u043e\u0435 \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430.",
- "PARAM": "dashboard_id (int) - ID \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0430.",
- "RETURN": "str - \u0418\u043c\u044f \u0444\u0430\u0439\u043b\u0430."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "_validate_query_params",
- "type": "Function",
- "start_line": 334,
- "end_line": 345,
- "tags": {
- "PURPOSE": "\u0424\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0441 \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u0435\u0439.",
- "PARAM": "query (Optional[Dict]) - \u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b.",
- "PRE": "query, \u0435\u0441\u043b\u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d, \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u043b\u043e\u0432\u0430\u0440\u0435\u043c.",
- "POST": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043b\u043e\u0432\u0430\u0440\u044c, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u0438, \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u043d\u044b\u0435 \u0441 `query`.",
- "RETURN": "Dict - \u0412\u0430\u043b\u0438\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "_fetch_total_object_count",
- "type": "Function",
- "start_line": 347,
- "end_line": 362,
- "tags": {
- "PURPOSE": "\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043f\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c\u0443 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u0443 \u0434\u043b\u044f \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u0438.",
- "PARAM": "endpoint (str) - API \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442.",
- "PRE": "endpoint \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043d\u0435\u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439.",
- "POST": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 (>= 0).",
- "THROW": "APIError - \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430.",
- "RETURN": "int - \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "_fetch_all_pages",
- "type": "Function",
- "start_line": 364,
- "end_line": 377,
- "tags": {
- "PURPOSE": "\u0418\u0442\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u043e \u0432\u0441\u0435\u043c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u043c \u043f\u0430\u0433\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e API \u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.",
- "PARAM": "pagination_options (Dict) - \u041e\u043f\u0446\u0438\u0438 \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u0438.",
- "PRE": "endpoint \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043d\u0435\u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439, pagination_options - \u0441\u043b\u043e\u0432\u0430\u0440\u0435\u043c.",
- "POST": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u043e\u043b\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432.",
- "THROW": "APIError - \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430.",
- "RETURN": "List[Dict] - \u0421\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "_validate_import_file",
- "type": "Function",
- "start_line": 379,
- "end_line": 394,
- "tags": {
- "PURPOSE": "\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0447\u0442\u043e \u0444\u0430\u0439\u043b \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f ZIP-\u0430\u0440\u0445\u0438\u0432\u043e\u043c \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 `metadata.yaml`.",
- "PRE": "zip_path \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d.",
- "POST": "\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u0430, \u0435\u0441\u043b\u0438 \u0444\u0430\u0439\u043b \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f ZIP \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 `metadata.yaml`.",
- "THROW": "InvalidZipFormatError - \u0415\u0441\u043b\u0438 \u0444\u0430\u0439\u043b \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f ZIP \u0438\u043b\u0438 \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 `metadata.yaml`.",
- "PARAM": "zip_path (Union[str, Path]) - \u041f\u0443\u0442\u044c \u043a \u0444\u0430\u0439\u043b\u0443."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "get_datasets",
- "type": "Function",
- "start_line": 396,
- "end_line": 418,
- "tags": {
- "PURPOSE": "\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043f\u043e\u043b\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u043e\u0432, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044f \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u044e.",
- "PARAM": "query (Optional[Dict]) - \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u0430.",
- "PRE": "self.network \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d.",
- "POST": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u0441\u0435 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u044b, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043f\u043e API.",
- "THROW": "APIError - \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430.",
- "RETURN": "Tuple[int, List[Dict]] - \u041a\u043e\u0440\u0442\u0435\u0436 (\u043e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e, \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u043e\u0432)."
- },
- "relations": [
- {
- "type": "CALLS",
- "target": "self._fetch_total_object_count"
- },
- {
- "type": "CALLS",
- "target": "self._fetch_all_pages"
- }
- ],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "get_databases",
- "type": "Function",
- "start_line": 420,
- "end_line": 443,
- "tags": {
- "PURPOSE": "\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043f\u043e\u043b\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044f \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u044e.",
- "PARAM": "query (Optional[Dict]) - \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u0430.",
- "PRE": "self.network \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d.",
- "POST": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u0441\u0435 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043f\u043e API.",
- "THROW": "APIError - \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430.",
- "RETURN": "Tuple[int, List[Dict]] - \u041a\u043e\u0440\u0442\u0435\u0436 (\u043e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e, \u0441\u043f\u0438\u0441\u043e\u043a \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445)."
- },
- "relations": [
- {
- "type": "CALLS",
- "target": "self._fetch_total_object_count"
- },
- {
- "type": "CALLS",
- "target": "self._fetch_all_pages"
- }
- ],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "get_dataset",
- "type": "Function",
- "start_line": 445,
- "end_line": 461,
- "tags": {
- "PURPOSE": "\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0435 \u043f\u043e \u0435\u0433\u043e ID.",
- "PARAM": "dataset_id (int) - ID \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430.",
- "PRE": "dataset_id \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0446\u0435\u043b\u044b\u043c \u0447\u0438\u0441\u043b\u043e\u043c.",
- "POST": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0441 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u043e \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0435.",
- "THROW": "APIError - \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0438\u043b\u0438 \u0435\u0441\u043b\u0438 \u0434\u0430\u0442\u0430\u0441\u0435\u0442 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d.",
- "RETURN": "Dict - \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0435."
- },
- "relations": [
- {
- "type": "CALLS",
- "target": "self.network.request"
- }
- ],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "get_database",
- "type": "Function",
- "start_line": 463,
- "end_line": 479,
- "tags": {
- "PURPOSE": "\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e \u0435\u0451 ID.",
- "PARAM": "database_id (int) - ID \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445.",
- "PRE": "database_id \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0446\u0435\u043b\u044b\u043c \u0447\u0438\u0441\u043b\u043e\u043c.",
- "POST": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0441 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u043e \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445.",
- "THROW": "APIError - \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0438\u043b\u0438 \u0435\u0441\u043b\u0438 \u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430.",
- "RETURN": "Dict - \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445."
- },
- "relations": [
- {
- "type": "CALLS",
- "target": "self.network.request"
- }
- ],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "update_dataset",
- "type": "Function",
- "start_line": 481,
- "end_line": 504,
- "tags": {
- "PURPOSE": "\u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430 \u043f\u043e \u0435\u0433\u043e ID.",
- "PARAM": "data (Dict) - \u0414\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f.",
- "PRE": "dataset_id \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0446\u0435\u043b\u044b\u043c \u0447\u0438\u0441\u043b\u043e\u043c, data - \u043d\u0435\u043f\u0443\u0441\u0442\u044b\u043c \u0441\u043b\u043e\u0432\u0430\u0440\u0435\u043c.",
- "POST": "\u0414\u0430\u0442\u0430\u0441\u0435\u0442 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d \u043e\u0442\u0432\u0435\u0442 API.",
- "THROW": "APIError - \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430.",
- "RETURN": "Dict - \u041e\u0442\u0432\u0435\u0442 API."
- },
- "relations": [
- {
- "type": "CALLS",
- "target": "self.network.request"
- }
- ],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- }
- ],
- "compliance": {
- "valid": true,
- "issues": []
- }
- }
- ],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "superset_tool",
- "type": "Module",
- "start_line": 1,
- "end_line": 14,
- "tags": {
- "SEMANTICS": "package, root",
- "PURPOSE": "Root package for superset_tool.",
- "LAYER": "Domain",
- "PUBLIC_API": "SupersetClient, SupersetConfig"
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "superset_tool.utils.init_clients",
- "type": "Module",
- "start_line": 1,
- "end_line": 110,
- "tags": {
- "SEMANTICS": "utility, factory, client, initialization, configuration",
- "PURPOSE": "\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u044b Superset \u0434\u043b\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0439 (DEV, PROD, SBX, PREPROD), \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f `keyring` \u0434\u043b\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043f\u0430\u0440\u043e\u043b\u044f\u043c.",
- "LAYER": "Infra",
- "PUBLIC_API": "setup_clients"
- },
- "relations": [
- {
- "type": "DEPENDS_ON",
- "target": "superset_tool.models"
- },
- {
- "type": "DEPENDS_ON",
- "target": "superset_tool.client"
- },
- {
- "type": "DEPENDS_ON",
- "target": "keyring"
- }
- ],
- "children": [
- {
- "name": "setup_clients",
- "type": "Function",
- "start_line": 20,
- "end_line": 108,
- "tags": {
- "PURPOSE": "\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 `SupersetClient`.",
- "PRE": "`logger` \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u043c `SupersetLogger`.",
- "POST": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0441 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c\u0438.",
- "THROW": "Exception - \u041f\u0440\u0438 \u043b\u044e\u0431\u044b\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.",
- "PARAM": "custom_envs (List[Dict[str, Any]]) - \u0421\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0439.",
- "RETURN": "Dict[str, SupersetClient] - \u0421\u043b\u043e\u0432\u0430\u0440\u044c, \u0433\u0434\u0435 \u043a\u043b\u044e\u0447 - \u0438\u043c\u044f \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 - `SupersetClient`."
- },
- "relations": [
- {
- "type": "CREATES_INSTANCE_OF",
- "target": "SupersetConfig"
- },
- {
- "type": "CREATES_INSTANCE_OF",
- "target": "SupersetClient"
- }
- ],
- "children": [],
- "compliance": {
- "valid": false,
- "issues": [
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager."
- ]
- }
- }
- ],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "superset_tool.utils.logger",
- "type": "Module",
- "start_line": 1,
- "end_line": 156,
- "tags": {
- "SEMANTICS": "logging, utility, infrastructure, wrapper",
- "PURPOSE": "\u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u0443\u044e \u043e\u0431\u0451\u0440\u0442\u043a\u0443 \u043d\u0430\u0434 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c `logging.Logger` \u0434\u043b\u044f \u0443\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043b\u043e\u0433\u0433\u0435\u0440\u0430\u043c\u0438 \u0441 \u0432\u044b\u0432\u043e\u0434\u043e\u043c \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0438/\u0438\u043b\u0438 \u0444\u0430\u0439\u043b.",
- "LAYER": "Infra",
- "INVARIANT": "\u041b\u043e\u0433\u0433\u0435\u0440 \u0432\u0441\u0435\u0433\u0434\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u043c\u0435\u0442\u044c \u0438\u043c\u044f.",
- "PUBLIC_API": "SupersetLogger"
- },
- "relations": [
- {
- "type": "WRAPS",
- "target": "logging.Logger"
- }
- ],
- "children": [
- {
- "name": "belief_scope",
- "type": "Function",
- "start_line": 20,
- "end_line": 34,
- "tags": {
- "PURPOSE": "Context manager for belief state logging to maintain execution coherence.",
- "PRE": "scope_id must be a string.",
- "POST": "Entry and exit actions are logged.",
- "PARAM": "scope_id (str) - Identifier for the logical scope."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": false,
- "issues": [
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager."
- ]
- }
- },
- {
- "name": "SupersetLogger",
- "type": "Class",
- "start_line": 36,
- "end_line": 154,
- "tags": {
- "PURPOSE": "\u041e\u0431\u0451\u0440\u0442\u043a\u0430 \u043d\u0430\u0434 `logging.Logger`, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043b\u043e\u0433\u0433\u0435\u0440\u043e\u0432."
- },
- "relations": [
- {
- "type": "WRAPS",
- "target": "logging.Logger"
- }
- ],
- "children": [
- {
- "name": "__init__",
- "type": "Function",
- "start_line": 40,
- "end_line": 74,
- "tags": {
- "PURPOSE": "\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u0442 \u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043b\u043e\u0433\u0433\u0435\u0440, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0434\u043b\u044f \u0444\u0430\u0439\u043b\u0430 \u0438/\u0438\u043b\u0438 \u043a\u043e\u043d\u0441\u043e\u043b\u0438.",
- "PRE": "\u0415\u0441\u043b\u0438 log_dir \u0443\u043a\u0430\u0437\u0430\u043d, \u043f\u0443\u0442\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c (\u0438\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u043c).",
- "POST": "`self.logger` \u0433\u043e\u0442\u043e\u0432 \u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438.",
- "PARAM": "console (bool) - \u0424\u043b\u0430\u0433 \u0434\u043b\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "_log",
- "type": "Function",
- "start_line": 76,
- "end_line": 88,
- "tags": {
- "PURPOSE": "(Helper) \u0423\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u0432\u044b\u0437\u043e\u0432\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.",
- "PRE": "level_method \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u043b\u043e\u0433\u0433\u0435\u0440\u0430. msg must be a string.",
- "POST": "\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0432 \u043b\u043e\u0433.",
- "PARAM": "exc_info (bool) - \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043b\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u0431 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "info",
- "type": "Function",
- "start_line": 90,
- "end_line": 97,
- "tags": {
- "PURPOSE": "\u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0443\u0440\u043e\u0432\u043d\u044f INFO.",
- "PRE": "msg \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u043e\u0439.",
- "POST": "\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0443\u0440\u043e\u0432\u043d\u044f INFO \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043e."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "debug",
- "type": "Function",
- "start_line": 99,
- "end_line": 106,
- "tags": {
- "PURPOSE": "\u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0443\u0440\u043e\u0432\u043d\u044f DEBUG.",
- "PRE": "msg \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u043e\u0439.",
- "POST": "\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0443\u0440\u043e\u0432\u043d\u044f DEBUG \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043e."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "warning",
- "type": "Function",
- "start_line": 108,
- "end_line": 115,
- "tags": {
- "PURPOSE": "\u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0443\u0440\u043e\u0432\u043d\u044f WARNING.",
- "PRE": "msg \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u043e\u0439.",
- "POST": "\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0443\u0440\u043e\u0432\u043d\u044f WARNING \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043e."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "error",
- "type": "Function",
- "start_line": 117,
- "end_line": 124,
- "tags": {
- "PURPOSE": "\u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0443\u0440\u043e\u0432\u043d\u044f ERROR.",
- "PRE": "msg \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u043e\u0439.",
- "POST": "\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0443\u0440\u043e\u0432\u043d\u044f ERROR \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043e."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "critical",
- "type": "Function",
- "start_line": 126,
- "end_line": 133,
- "tags": {
- "PURPOSE": "\u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0443\u0440\u043e\u0432\u043d\u044f CRITICAL.",
- "PRE": "msg \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u043e\u0439.",
- "POST": "\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0443\u0440\u043e\u0432\u043d\u044f CRITICAL \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043e."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "exception",
- "type": "Function",
- "start_line": 135,
- "end_line": 142,
- "tags": {
- "PURPOSE": "\u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0443\u0440\u043e\u0432\u043d\u044f ERROR \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u043e\u0439 \u0441\u0442\u0435\u043a\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f.",
- "PRE": "msg \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u043e\u0439.",
- "POST": "\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435 \u0441 traceback \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043e."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "belief_scope",
- "type": "Method",
- "start_line": 144,
- "end_line": 152,
- "tags": {
- "PURPOSE": "Instance method wrapper for belief_scope context manager.",
- "PRE": "scope_id must be a string.",
- "POST": "Enters the belief scope."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- }
- ],
- "compliance": {
- "valid": true,
- "issues": []
- }
- }
- ],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "superset_tool.utils.fileio",
- "type": "Module",
- "start_line": 1,
- "end_line": 507,
- "tags": {
- "SEMANTICS": "file, io, zip, yaml, temp, archive, utility",
- "PURPOSE": "\u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430\u0431\u043e\u0440 \u0443\u0442\u0438\u043b\u0438\u0442 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u043c\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u043c\u0438, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438, \u0430\u0440\u0445\u0438\u0432\u0430\u043c\u0438 ZIP, \u0444\u0430\u0439\u043b\u0430\u043c\u0438 YAML \u0438 \u043e\u0447\u0438\u0441\u0442\u043a\u0443 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0439.",
- "LAYER": "Infra",
- "PUBLIC_API": "create_temp_file, remove_empty_directories, read_dashboard_from_disk, calculate_crc32, RetentionPolicy, archive_exports, save_and_unpack_dashboard, update_yamls, create_dashboard_export, sanitize_filename, get_filename_from_headers, consolidate_archive_folders"
- },
- "relations": [
- {
- "type": "DEPENDS_ON",
- "target": "superset_tool.exceptions"
- },
- {
- "type": "DEPENDS_ON",
- "target": "superset_tool.utils.logger"
- },
- {
- "type": "DEPENDS_ON",
- "target": "pyyaml"
- }
- ],
- "children": [
- {
- "name": "create_temp_file",
- "type": "Function",
- "start_line": 29,
- "end_line": 70,
- "tags": {
- "PURPOSE": "\u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u044b\u0439 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0438\u043b\u0438 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0441 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435\u043c.",
- "PRE": "suffix \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u043e\u0439, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0449\u0435\u0439 \u0442\u0438\u043f \u0440\u0435\u0441\u0443\u0440\u0441\u0430.",
- "POST": "\u0412\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441 \u0441\u043e\u0437\u0434\u0430\u043d \u0438 \u043f\u0443\u0442\u044c \u043a \u043d\u0435\u043c\u0443 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d; \u0440\u0435\u0441\u0443\u0440\u0441 \u0443\u0434\u0430\u043b\u0435\u043d \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u0445\u043e\u0434\u0430 \u0438\u0437 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430.",
- "PARAM": "logger (Optional[SupersetLogger]) - \u042d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043b\u043e\u0433\u0433\u0435\u0440\u0430.",
- "YIELDS": "Path - \u041f\u0443\u0442\u044c \u043a \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c\u0443 \u0440\u0435\u0441\u0443\u0440\u0441\u0443.",
- "THROW": "IOError - \u041f\u0440\u0438 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u0430."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "remove_empty_directories",
- "type": "Function",
- "start_line": 72,
- "end_line": 97,
- "tags": {
- "PURPOSE": "\u0420\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u0432\u0441\u0435 \u043f\u0443\u0441\u0442\u044b\u0435 \u043f\u043e\u0434\u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0443\u0442\u0438.",
- "PRE": "root_dir \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u0443\u0442\u0435\u043c \u043a \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438.",
- "POST": "\u0412\u0441\u0435 \u043f\u0443\u0441\u0442\u044b\u0435 \u043f\u043e\u0434\u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u044b, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u043e \u0438\u0445 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e.",
- "PARAM": "logger (Optional[SupersetLogger]) - \u042d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043b\u043e\u0433\u0433\u0435\u0440\u0430.",
- "RETURN": "int - \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0445 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0439."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "read_dashboard_from_disk",
- "type": "Function",
- "start_line": 99,
- "end_line": 117,
- "tags": {
- "PURPOSE": "\u0427\u0438\u0442\u0430\u0435\u0442 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0430\u0439\u043b\u0430 \u0441 \u0434\u0438\u0441\u043a\u0430.",
- "PRE": "file_path \u0434\u043e\u043b\u0436\u0435\u043d \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0444\u0430\u0439\u043b.",
- "POST": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0431\u0430\u0439\u0442\u044b \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u0438 \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430.",
- "PARAM": "logger (Optional[SupersetLogger]) - \u042d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043b\u043e\u0433\u0433\u0435\u0440\u0430.",
- "RETURN": "Tuple[bytes, str] - \u041a\u043e\u0440\u0442\u0435\u0436 (\u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435, \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430).",
- "THROW": "FileNotFoundError - \u0415\u0441\u043b\u0438 \u0444\u0430\u0439\u043b \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "calculate_crc32",
- "type": "Function",
- "start_line": 119,
- "end_line": 132,
- "tags": {
- "PURPOSE": "\u0412\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0443\u044e \u0441\u0443\u043c\u043c\u0443 CRC32 \u0434\u043b\u044f \u0444\u0430\u0439\u043b\u0430.",
- "PRE": "file_path \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c Path \u043a \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c\u0443 \u0444\u0430\u0439\u043b\u0443.",
- "POST": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 8-\u0437\u043d\u0430\u0447\u043d\u0443\u044e hex-\u0441\u0442\u0440\u043e\u043a\u0443 CRC32.",
- "PARAM": "file_path (Path) - \u041f\u0443\u0442\u044c \u043a \u0444\u0430\u0439\u043b\u0443.",
- "RETURN": "str - 8-\u0437\u043d\u0430\u0447\u043d\u043e\u0435 \u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 CRC32.",
- "THROW": "IOError - \u041f\u0440\u0438 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u0447\u0442\u0435\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u0430."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "RetentionPolicy",
- "type": "DataClass",
- "start_line": 135,
- "end_line": 142,
- "tags": {
- "PURPOSE": "\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0443 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0430\u0440\u0445\u0438\u0432\u043e\u0432 (\u0435\u0436\u0435\u0434\u043d\u0435\u0432\u043d\u044b\u0435, \u0435\u0436\u0435\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u044b\u0435, \u0435\u0436\u0435\u043c\u0435\u0441\u044f\u0447\u043d\u044b\u0435)."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "archive_exports",
- "type": "Function",
- "start_line": 145,
- "end_line": 228,
- "tags": {
- "PURPOSE": "\u0423\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0430\u0440\u0445\u0438\u0432\u043e\u043c \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044f \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0443 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438 \u0434\u0435\u0434\u0443\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u044e.",
- "PRE": "output_dir \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u0443\u0442\u0435\u043c \u043a \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438.",
- "POST": "\u0421\u0442\u0430\u0440\u044b\u0435 \u0438\u043b\u0438 \u0434\u0443\u0431\u043b\u0438\u0440\u0443\u044e\u0449\u0438\u0435\u0441\u044f \u0430\u0440\u0445\u0438\u0432\u044b \u0443\u0434\u0430\u043b\u0435\u043d\u044b \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0435.",
- "PARAM": "logger (Optional[SupersetLogger]) - \u042d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043b\u043e\u0433\u0433\u0435\u0440\u0430."
- },
- "relations": [
- {
- "type": "CALLS",
- "target": "apply_retention_policy"
- },
- {
- "type": "CALLS",
- "target": "calculate_crc32"
- }
- ],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "apply_retention_policy",
- "type": "Function",
- "start_line": 230,
- "end_line": 264,
- "tags": {
- "PURPOSE": "(Helper) \u041f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0443 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043a \u0441\u043f\u0438\u0441\u043a\u0443 \u0444\u0430\u0439\u043b\u043e\u0432, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044f \u0442\u0435, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c.",
- "PRE": "files_with_dates is a list of (Path, date) tuples.",
- "POST": "Returns a set of files to keep.",
- "PARAM": "logger (SupersetLogger) - \u041b\u043e\u0433\u0433\u0435\u0440.",
- "RETURN": "set - \u041c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u0443\u0442\u0435\u0439 \u043a \u0444\u0430\u0439\u043b\u0430\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "save_and_unpack_dashboard",
- "type": "Function",
- "start_line": 266,
- "end_line": 297,
- "tags": {
- "PURPOSE": "\u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 ZIP-\u0430\u0440\u0445\u0438\u0432\u0430 \u043d\u0430 \u0434\u0438\u0441\u043a \u0438 \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u0435\u0433\u043e.",
- "PRE": "zip_content \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0431\u0430\u0439\u0442\u0430\u043c\u0438 \u0432\u0430\u043b\u0438\u0434\u043d\u043e\u0433\u043e ZIP-\u0430\u0440\u0445\u0438\u0432\u0430.",
- "POST": "ZIP-\u0444\u0430\u0439\u043b \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d, \u0438 \u0435\u0441\u043b\u0438 unpack=True, \u043e\u043d \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u043d \u0432 output_dir.",
- "PARAM": "logger (Optional[SupersetLogger]) - \u042d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043b\u043e\u0433\u0433\u0435\u0440\u0430.",
- "RETURN": "Tuple[Path, Optional[Path]] - \u041f\u0443\u0442\u044c \u043a ZIP-\u0444\u0430\u0439\u043b\u0443 \u0438, \u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e, \u043f\u0443\u0442\u044c \u043a \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0441 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u043e\u0439.",
- "THROW": "InvalidZipFormatError - \u041f\u0440\u0438 \u043e\u0448\u0438\u0431\u043a\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 ZIP."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "update_yamls",
- "type": "Function",
- "start_line": 299,
- "end_line": 321,
- "tags": {
- "PURPOSE": "\u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0432 YAML-\u0444\u0430\u0439\u043b\u0430\u0445, \u0437\u0430\u043c\u0435\u043d\u044f\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044f regex.",
- "PRE": "path \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0435\u0439.",
- "POST": "\u0412\u0441\u0435 YAML \u0444\u0430\u0439\u043b\u044b \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c.",
- "THROW": "FileNotFoundError - \u0415\u0441\u043b\u0438 `path` \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.",
- "PARAM": "logger (Optional[SupersetLogger]) - \u042d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043b\u043e\u0433\u0433\u0435\u0440\u0430."
- },
- "relations": [
- {
- "type": "CALLS",
- "target": "_update_yaml_file"
- }
- ],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "_update_yaml_file",
- "type": "Function",
- "start_line": 323,
- "end_line": 390,
- "tags": {
- "PURPOSE": "(Helper) \u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u043e\u0434\u0438\u043d YAML \u0444\u0430\u0439\u043b.",
- "PRE": "file_path \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c Path \u043a \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c\u0443 YAML \u0444\u0430\u0439\u043b\u0443.",
- "POST": "\u0424\u0430\u0439\u043b \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u043c \u0438\u043b\u0438 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u043c\u0443 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044e.",
- "PARAM": "logger (SupersetLogger) - \u041b\u043e\u0433\u0433\u0435\u0440."
- },
- "relations": [],
- "children": [
- {
- "name": "replacer",
- "type": "Function",
- "start_line": 371,
- "end_line": 381,
- "tags": {
- "PURPOSE": "\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0437\u0430\u043c\u0435\u043d\u044b, \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0449\u0430\u044f \u043a\u0430\u0432\u044b\u0447\u043a\u0438 \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0431\u044b\u043b\u0438.",
- "PRE": "match \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f.",
- "POST": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 \u0441 \u043d\u043e\u0432\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c, \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044f \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u0438 \u043a\u0430\u0432\u044b\u0447\u043a\u0438."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- }
- ],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "create_dashboard_export",
- "type": "Function",
- "start_line": 392,
- "end_line": 420,
- "tags": {
- "PURPOSE": "\u0421\u043e\u0437\u0434\u0430\u0435\u0442 ZIP-\u0430\u0440\u0445\u0438\u0432 \u0438\u0437 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u043f\u0443\u0442\u0435\u0439.",
- "PRE": "source_paths \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043f\u0443\u0442\u0438.",
- "POST": "ZIP-\u0430\u0440\u0445\u0438\u0432 \u0441\u043e\u0437\u0434\u0430\u043d \u043f\u043e \u043f\u0443\u0442\u0438 zip_path.",
- "PARAM": "logger (Optional[SupersetLogger]) - \u042d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043b\u043e\u0433\u0433\u0435\u0440\u0430.",
- "RETURN": "bool - `True` \u043f\u0440\u0438 \u0443\u0441\u043f\u0435\u0445\u0435, `False` \u043f\u0440\u0438 \u043e\u0448\u0438\u0431\u043a\u0435."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "sanitize_filename",
- "type": "Function",
- "start_line": 422,
- "end_line": 432,
- "tags": {
- "PURPOSE": "\u041e\u0447\u0438\u0449\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 \u043e\u0442 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u043d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0445 \u0432 \u0438\u043c\u0435\u043d\u0430\u0445 \u0444\u0430\u0439\u043b\u043e\u0432.",
- "PRE": "filename \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u043e\u0439.",
- "POST": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 \u0431\u0435\u0437 \u0441\u043f\u0435\u0446\u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432.",
- "PARAM": "filename (str) - \u0418\u0441\u0445\u043e\u0434\u043d\u043e\u0435 \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430.",
- "RETURN": "str - \u041e\u0447\u0438\u0449\u0435\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "get_filename_from_headers",
- "type": "Function",
- "start_line": 434,
- "end_line": 447,
- "tags": {
- "PURPOSE": "\u0418\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442 \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u0438\u0437 HTTP \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 'Content-Disposition'.",
- "PRE": "headers \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u043b\u043e\u0432\u0430\u0440\u0435\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432.",
- "POST": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u0438\u043b\u0438 None, \u0435\u0441\u043b\u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442.",
- "PARAM": "headers (dict) - \u0421\u043b\u043e\u0432\u0430\u0440\u044c HTTP \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432.",
- "RETURN": "Optional[str] - \u0418\u043c\u044f \u0444\u0430\u0439\u043b\u0430 or `None`."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "consolidate_archive_folders",
- "type": "Function",
- "start_line": 449,
- "end_line": 505,
- "tags": {
- "PURPOSE": "\u041a\u043e\u043d\u0441\u043e\u043b\u0438\u0434\u0438\u0440\u0443\u0435\u0442 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0430\u0440\u0445\u0438\u0432\u043e\u0432 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043e\u0431\u0449\u0435\u0433\u043e \u0441\u043b\u0430\u0433\u0430 \u0432 \u0438\u043c\u0435\u043d\u0438.",
- "PRE": "root_directory \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c Path \u043a \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438.",
- "POST": "\u0414\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0441 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043e\u043c \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u044b \u0432 \u043e\u0434\u043d\u0443.",
- "THROW": "TypeError, ValueError - \u0415\u0441\u043b\u0438 `root_directory` \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u0435\u043d.",
- "PARAM": "logger (Optional[SupersetLogger]) - \u042d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043b\u043e\u0433\u0433\u0435\u0440\u0430."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- }
- ],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "superset_tool.utils.network",
- "type": "Module",
- "start_line": 1,
- "end_line": 265,
- "tags": {
- "SEMANTICS": "network, http, client, api, requests, session, authentication",
- "PURPOSE": "\u0418\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u0438\u0440\u0443\u0435\u0442 \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u0443\u044e HTTP-\u043b\u043e\u0433\u0438\u043a\u0443 \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 Superset API, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e, \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0435\u0441\u0441\u0438\u0435\u0439, retry-\u043b\u043e\u0433\u0438\u043a\u0443 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043e\u0448\u0438\u0431\u043e\u043a.",
- "LAYER": "Infra",
- "PUBLIC_API": "APIClient"
- },
- "relations": [
- {
- "type": "DEPENDS_ON",
- "target": "superset_tool.exceptions"
- },
- {
- "type": "DEPENDS_ON",
- "target": "superset_tool.utils.logger"
- },
- {
- "type": "DEPENDS_ON",
- "target": "requests"
- }
- ],
- "children": [
- {
- "name": "APIClient",
- "type": "Class",
- "start_line": 25,
- "end_line": 263,
- "tags": {
- "PURPOSE": "\u0418\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u0438\u0440\u0443\u0435\u0442 HTTP-\u043b\u043e\u0433\u0438\u043a\u0443 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 API, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0441\u0435\u0441\u0441\u0438\u0438, \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e, \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432."
- },
- "relations": [],
- "children": [
- {
- "name": "__init__",
- "type": "Function",
- "start_line": 30,
- "end_line": 49,
- "tags": {
- "PURPOSE": "\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 API \u043a\u043b\u0438\u0435\u043d\u0442 \u0441 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439, \u0441\u0435\u0441\u0441\u0438\u0435\u0439 \u0438 \u043b\u043e\u0433\u0433\u0435\u0440\u043e\u043c.",
- "PARAM": "logger (Optional[SupersetLogger]) - \u041b\u043e\u0433\u0433\u0435\u0440.",
- "PRE": "config must contain 'base_url' and 'auth'.",
- "POST": "APIClient instance is initialized with a session."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "_init_session",
- "type": "Function",
- "start_line": 51,
- "end_line": 68,
- "tags": {
- "PURPOSE": "\u0421\u043e\u0437\u0434\u0430\u0435\u0442 \u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 `requests.Session` \u0441 retry-\u043b\u043e\u0433\u0438\u043a\u043e\u0439.",
- "PRE": "self.request_settings must be initialized.",
- "POST": "Returns a configured requests.Session instance.",
- "RETURN": "requests.Session - \u041d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0430\u044f \u0441\u0435\u0441\u0441\u0438\u044f."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "authenticate",
- "type": "Function",
- "start_line": 70,
- "end_line": 97,
- "tags": {
- "PURPOSE": "\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u0432 Superset API \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 access \u0438 CSRF \u0442\u043e\u043a\u0435\u043d\u044b.",
- "PRE": "self.auth and self.base_url must be valid.",
- "POST": "`self._tokens` \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d, `self._authenticated` \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0432 `True`.",
- "RETURN": "Dict[str, str] - \u0421\u043b\u043e\u0432\u0430\u0440\u044c \u0441 \u0442\u043e\u043a\u0435\u043d\u0430\u043c\u0438.",
- "THROW": "AuthenticationError, NetworkError - \u043f\u0440\u0438 \u043e\u0448\u0438\u0431\u043a\u0430\u0445."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "headers",
- "type": "Function",
- "start_line": 100,
- "end_line": 113,
- "tags": {
- "PURPOSE": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 HTTP-\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u0434\u043b\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432.",
- "PRE": "APIClient is initialized and authenticated or can be authenticated.",
- "POST": "Returns headers including auth tokens."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "request",
- "type": "Function",
- "start_line": 115,
- "end_line": 139,
- "tags": {
- "PURPOSE": "\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439 HTTP-\u0437\u0430\u043f\u0440\u043e\u0441 \u043a API.",
- "PARAM": "raw_response (bool) - \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043b\u0438 \u0441\u044b\u0440\u043e\u0439 \u043e\u0442\u0432\u0435\u0442.",
- "PRE": "method and endpoint must be strings.",
- "POST": "Returns response content or raw Response object.",
- "RETURN": "`requests.Response` \u0435\u0441\u043b\u0438 `raw_response=True`, \u0438\u043d\u0430\u0447\u0435 `dict`.",
- "THROW": "SupersetAPIError, NetworkError \u0438 \u0438\u0445 \u043f\u043e\u0434\u043a\u043b\u0430\u0441\u0441\u044b."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "_handle_http_error",
- "type": "Function",
- "start_line": 141,
- "end_line": 154,
- "tags": {
- "PURPOSE": "(Helper) \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 HTTP \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f.",
- "PARAM": "endpoint (str) - \u042d\u043d\u0434\u043f\u043e\u0438\u043d\u0442.",
- "PRE": "e must be a valid HTTPError with a response.",
- "POST": "Raises a specific SupersetAPIError or subclass."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "_handle_network_error",
- "type": "Function",
- "start_line": 156,
- "end_line": 168,
- "tags": {
- "PURPOSE": "(Helper) \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 `NetworkError`.",
- "PARAM": "url (str) - URL.",
- "PRE": "e must be a RequestException.",
- "POST": "Raises a NetworkError."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "upload_file",
- "type": "Function",
- "start_line": 170,
- "end_line": 197,
- "tags": {
- "PURPOSE": "\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0444\u0430\u0439\u043b \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0447\u0435\u0440\u0435\u0437 multipart/form-data.",
- "PARAM": "timeout (Optional[int]) - \u0422\u0430\u0439\u043c\u0430\u0443\u0442.",
- "PRE": "file_info must contain 'file_obj' and 'file_name'.",
- "POST": "File is uploaded and response returned.",
- "RETURN": "\u041e\u0442\u0432\u0435\u0442 API \u0432 \u0432\u0438\u0434\u0435 \u0441\u043b\u043e\u0432\u0430\u0440\u044f.",
- "THROW": "SupersetAPIError, NetworkError, TypeError."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "_perform_upload",
- "type": "Function",
- "start_line": 199,
- "end_line": 226,
- "tags": {
- "PURPOSE": "(Helper) \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 POST \u0437\u0430\u043f\u0440\u043e\u0441 \u0441 \u0444\u0430\u0439\u043b\u043e\u043c.",
- "PARAM": "timeout (Optional[int]) - \u0422\u0430\u0439\u043c\u0430\u0443\u0442.",
- "PRE": "url, files, and headers must be provided.",
- "POST": "POST request is performed and JSON response returned.",
- "RETURN": "Dict - \u041e\u0442\u0432\u0435\u0442."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "fetch_paginated_count",
- "type": "Function",
- "start_line": 228,
- "end_line": 240,
- "tags": {
- "PURPOSE": "\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u0438.",
- "PARAM": "count_field (str) - \u041f\u043e\u043b\u0435 \u0441 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c.",
- "PRE": "query_params must be a dictionary.",
- "POST": "Returns total count of items.",
- "RETURN": "int - \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "fetch_paginated_data",
- "type": "Function",
- "start_line": 242,
- "end_line": 261,
- "tags": {
- "PURPOSE": "\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u043e \u0432\u0441\u0435\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u043f\u0430\u0433\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u0430.",
- "PARAM": "pagination_options (Dict[str, Any]) - \u041e\u043f\u0446\u0438\u0438 \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u0438.",
- "PRE": "pagination_options must contain 'base_query', 'total_count', 'results_field'.",
- "POST": "Returns all items across all pages.",
- "RETURN": "List[Any] - \u0421\u043f\u0438\u0441\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- }
- ],
- "compliance": {
- "valid": true,
- "issues": []
- }
- }
- ],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "superset_tool.utils.whiptail_fallback",
- "type": "Module",
- "start_line": 1,
- "end_line": 157,
- "tags": {
- "SEMANTICS": "ui, fallback, console, utility, interactive",
- "PURPOSE": "\u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u043b\u043e\u0442\u043d\u044b\u0439 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u0439 UI-fallback \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0434\u0438\u0430\u043b\u043e\u0433\u043e\u0432, \u0438\u043c\u0438\u0442\u0438\u0440\u0443\u044f `whiptail` \u0434\u043b\u044f \u0441\u0438\u0441\u0442\u0435\u043c, \u0433\u0434\u0435 \u043e\u043d \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d.",
- "LAYER": "UI",
- "PUBLIC_API": "menu, checklist, yesno, msgbox, inputbox, gauge"
- },
- "relations": [],
- "children": [
- {
- "name": "menu",
- "type": "Function",
- "start_line": 14,
- "end_line": 33,
- "tags": {
- "PURPOSE": "\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u043c\u0435\u043d\u044e \u0432\u044b\u0431\u043e\u0440\u0430 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442.",
- "PARAM": "choices (List[str]) - \u0421\u043f\u0438\u0441\u043e\u043a \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430.",
- "PRE": "choices must be a non-empty list of strings.",
- "POST": "Returns a tuple with return code and selected choice.",
- "RETURN": "Tuple[int, Optional[str]] - \u041a\u043e\u0440\u0442\u0435\u0436 (\u043a\u043e\u0434 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430, \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442). rc=0 - \u0443\u0441\u043f\u0435\u0445."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "checklist",
- "type": "Function",
- "start_line": 35,
- "end_line": 56,
- "tags": {
- "PURPOSE": "\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u0431\u043e\u0440\u0430.",
- "PARAM": "options (List[Tuple[str, str]]) - \u0421\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u0440\u0442\u0435\u0436\u0435\u0439 (\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043c\u0435\u0442\u043a\u0430).",
- "PRE": "options must be a list of (value, label) tuples.",
- "POST": "Returns a list of selected values.",
- "RETURN": "Tuple[int, List[str]] - \u041a\u043e\u0440\u0442\u0435\u0436 (\u043a\u043e\u0434 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430, \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439)."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "yesno",
- "type": "Function",
- "start_line": 58,
- "end_line": 69,
- "tags": {
- "PURPOSE": "\u0417\u0430\u0434\u0430\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u0441 \u043e\u0442\u0432\u0435\u0442\u043e\u043c \u0434\u0430/\u043d\u0435\u0442.",
- "PARAM": "question (str) - \u0412\u043e\u043f\u0440\u043e\u0441 \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.",
- "PRE": "question must be a string.",
- "POST": "Returns boolean based on user input.",
- "RETURN": "bool - `True`, \u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043e\u0442\u0432\u0435\u0442\u0438\u043b \"\u0434\u0430\"."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "msgbox",
- "type": "Function",
- "start_line": 71,
- "end_line": 80,
- "tags": {
- "PURPOSE": "\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435.",
- "PARAM": "msg (str) - \u0422\u0435\u043a\u0441\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f.",
- "PRE": "msg must be a string.",
- "POST": "Message is printed to console."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "inputbox",
- "type": "Function",
- "start_line": 82,
- "end_line": 94,
- "tags": {
- "PURPOSE": "\u0417\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0432\u0432\u043e\u0434.",
- "PARAM": "prompt (str) - \u041f\u0440\u0438\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u0435 \u043a \u0432\u0432\u043e\u0434\u0443.",
- "PRE": "prompt must be a string.",
- "POST": "Returns user input string.",
- "RETURN": "Tuple[int, Optional[str]] - \u041a\u043e\u0440\u0442\u0435\u0436 (\u043a\u043e\u0434 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430, \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430)."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "_ConsoleGauge",
- "type": "Class",
- "start_line": 96,
- "end_line": 144,
- "tags": {
- "PURPOSE": "\u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u044b\u0439 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0434\u043b\u044f \u0438\u043c\u0438\u0442\u0430\u0446\u0438\u0438 `whiptail gauge` \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438."
- },
- "relations": [],
- "children": [
- {
- "name": "__init__",
- "type": "Function",
- "start_line": 99,
- "end_line": 106,
- "tags": {
- "PURPOSE": "Initializes the gauge.",
- "PRE": "title must be a string.",
- "POST": "Instance initialized."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "__enter__",
- "type": "Function",
- "start_line": 108,
- "end_line": 116,
- "tags": {
- "PURPOSE": "Enters the context.",
- "PRE": "Instance initialized.",
- "POST": "Header printed, returns self."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "__exit__",
- "type": "Function",
- "start_line": 118,
- "end_line": 125,
- "tags": {
- "PURPOSE": "Exits the context.",
- "PRE": "Context entered.",
- "POST": "Newline printed."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "set_text",
- "type": "Function",
- "start_line": 127,
- "end_line": 134,
- "tags": {
- "PURPOSE": "Sets the gauge text.",
- "PRE": "txt must be a string.",
- "POST": "Text written to stdout."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "set_percent",
- "type": "Function",
- "start_line": 136,
- "end_line": 143,
- "tags": {
- "PURPOSE": "Sets the gauge percentage.",
- "PRE": "percent must be an integer.",
- "POST": "Percentage written to stdout."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- }
- ],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "gauge",
- "type": "Function",
- "start_line": 146,
- "end_line": 155,
- "tags": {
- "PURPOSE": "\u0421\u043e\u0437\u0434\u0430\u0435\u0442 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 `_ConsoleGauge`.",
- "PRE": "title must be a string.",
- "POST": "Returns an instance of _ConsoleGauge.",
- "PARAM": "title (str) - \u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0434\u043b\u044f \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0430.",
- "RETURN": "_ConsoleGauge - \u042d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- }
- ],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "superset_tool.utils.dataset_mapper",
- "type": "Module",
- "start_line": 1,
- "end_line": 240,
- "tags": {
- "SEMANTICS": "dataset, mapping, postgresql, xlsx, superset",
- "PURPOSE": "\u042d\u0442\u043e\u0442 \u043c\u043e\u0434\u0443\u043b\u044c \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 (verbose_map) \u0432 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430\u0445 Superset, \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u044f \u0438\u0445 \u0438\u0437 PostgreSQL \u0438\u043b\u0438 XLSX-\u0444\u0430\u0439\u043b\u043e\u0432.",
- "LAYER": "Domain",
- "PUBLIC_API": "DatasetMapper"
- },
- "relations": [
- {
- "type": "DEPENDS_ON",
- "target": "superset_tool.client"
- },
- {
- "type": "DEPENDS_ON",
- "target": "pandas"
- },
- {
- "type": "DEPENDS_ON",
- "target": "psycopg2"
- }
- ],
- "children": [
- {
- "name": "DatasetMapper",
- "type": "Class",
- "start_line": 20,
- "end_line": 238,
- "tags": {
- "PURPOSE": "\u041a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f \u043c\u0435\u043f\u043f\u0438\u043d\u0433\u0430 \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f verbose_map \u0432 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430\u0445 Superset."
- },
- "relations": [],
- "children": [
- {
- "name": "__init__",
- "type": "Function",
- "start_line": 23,
- "end_line": 29,
- "tags": {
- "PURPOSE": "Initializes the mapper.",
- "PRE": "logger \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u043c SupersetLogger.",
- "POST": "\u041e\u0431\u044a\u0435\u043a\u0442 DatasetMapper \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": false,
- "issues": [
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager."
- ]
- }
- },
- {
- "name": "get_postgres_comments",
- "type": "Function",
- "start_line": 31,
- "end_line": 94,
- "tags": {
- "PURPOSE": "\u0418\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u043a \u043a\u043e\u043b\u043e\u043d\u043a\u0430\u043c \u0438\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 PostgreSQL.",
- "PRE": "table_name \u0438 table_schema \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438.",
- "POST": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0441\u043b\u043e\u0432\u0430\u0440\u044c, \u0433\u0434\u0435 \u043a\u043b\u044e\u0447\u0438 - \u0438\u043c\u0435\u043d\u0430 \u043a\u043e\u043b\u043e\u043d\u043e\u043a, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f - \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u0438\u0437 \u0411\u0414.",
- "THROW": "Exception - \u041f\u0440\u0438 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043a \u0411\u0414.",
- "PARAM": "table_schema (str) - \u0421\u0445\u0435\u043c\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b.",
- "RETURN": "Dict[str, str] - \u0421\u043b\u043e\u0432\u0430\u0440\u044c \u0441 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438 \u043a \u043a\u043e\u043b\u043e\u043d\u043a\u0430\u043c."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": false,
- "issues": [
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager."
- ]
- }
- },
- {
- "name": "load_excel_mappings",
- "type": "Function",
- "start_line": 96,
- "end_line": 114,
- "tags": {
- "PURPOSE": "\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u043c\u0435\u043f\u043f\u0438\u043d\u0433\u0438 'column_name' -> 'column_comment' \u0438\u0437 XLSX \u0444\u0430\u0439\u043b\u0430.",
- "PRE": "file_path \u0434\u043e\u043b\u0436\u0435\u043d \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 XLSX \u0444\u0430\u0439\u043b.",
- "POST": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0441 \u043c\u0435\u043f\u043f\u0438\u043d\u0433\u0430\u043c\u0438 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430.",
- "THROW": "Exception - \u041f\u0440\u0438 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u0447\u0442\u0435\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u0430 \u0438\u043b\u0438 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430.",
- "PARAM": "file_path (str) - \u041f\u0443\u0442\u044c \u043a XLSX \u0444\u0430\u0439\u043b\u0443.",
- "RETURN": "Dict[str, str] - \u0421\u043b\u043e\u0432\u0430\u0440\u044c \u0441 \u043c\u0435\u043f\u043f\u0438\u043d\u0433\u0430\u043c\u0438."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": false,
- "issues": [
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager."
- ]
- }
- },
- {
- "name": "run_mapping",
- "type": "Function",
- "start_line": 116,
- "end_line": 237,
- "tags": {
- "PURPOSE": "\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043c\u0435\u043f\u043f\u0438\u043d\u0433\u0430 \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f verbose_map \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430 \u0432 Superset.",
- "PRE": "dataset_id \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c ID \u0432 Superset.",
- "POST": "\u0415\u0441\u043b\u0438 \u043d\u0430\u0439\u0434\u0435\u043d\u044b \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u0434\u0430\u0442\u0430\u0441\u0435\u0442 \u0432 Superset \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d \u0447\u0435\u0440\u0435\u0437 API.",
- "PARAM": "table_schema (Optional[str]) - \u0421\u0445\u0435\u043c\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432 PostgreSQL."
- },
- "relations": [
- {
- "type": "CALLS",
- "target": "self.get_postgres_comments"
- },
- {
- "type": "CALLS",
- "target": "self.load_excel_mappings"
- },
- {
- "type": "CALLS",
- "target": "superset_client.get_dataset"
- },
- {
- "type": "CALLS",
- "target": "superset_client.update_dataset"
- }
- ],
- "children": [],
- "compliance": {
- "valid": false,
- "issues": [
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager.",
- "Missing Belief State Logging: Function should use belief_scope context manager."
- ]
- }
- }
- ],
- "compliance": {
- "valid": true,
- "issues": []
- }
- }
- ],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "superset_tool.utils",
- "type": "Module",
- "start_line": 1,
- "end_line": 5,
- "tags": {
- "SEMANTICS": "package, utils",
- "PURPOSE": "Utility package for superset_tool.",
- "LAYER": "Infra"
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
{
"name": "main",
"type": "Module",
@@ -3710,68 +915,87 @@
}
},
{
- "name": "loadInitialData",
- "type": "Function",
- "start_line": 16,
- "end_line": 36,
+ "name": "TaskManagementPage",
+ "type": "Component",
+ "start_line": 1,
+ "end_line": 187,
"tags": {
- "PURPOSE": "Loads tasks and environments on page initialization.",
- "PRE": "API must be reachable.",
- "POST": "tasks and environments variables are populated."
+ "SEMANTICS": "tasks, management, history, logs",
+ "PURPOSE": "Page for managing and monitoring tasks.",
+ "LAYER": "Page",
+ "RELATION": "USES -> TaskLogViewer"
},
"relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "refreshTasks",
- "type": "Function",
- "start_line": 38,
- "end_line": 54,
- "tags": {
- "PURPOSE": "Periodically refreshes the task list.",
- "PRE": "API must be reachable.",
- "POST": "tasks variable is updated if data is valid."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "handleSelectTask",
- "type": "Function",
- "start_line": 56,
- "end_line": 64,
- "tags": {
- "PURPOSE": "Updates the selected task ID when a task is clicked.",
- "PRE": "event.detail.id must be provided.",
- "POST": "selectedTaskId is updated."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "handleRunBackup",
- "type": "Function",
- "start_line": 66,
- "end_line": 87,
- "tags": {
- "PURPOSE": "Triggers a manual backup task for the selected environment.",
- "PRE": "selectedEnvId must not be empty.",
- "POST": "Backup task is created and task list is refreshed."
- },
- "relations": [],
- "children": [],
+ "children": [
+ {
+ "name": "loadInitialData",
+ "type": "Function",
+ "start_line": 24,
+ "end_line": 47,
+ "tags": {
+ "PURPOSE": "Loads tasks and environments on page initialization.",
+ "PRE": "API must be reachable.",
+ "POST": "tasks and environments variables are populated."
+ },
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": true,
+ "issues": []
+ }
+ },
+ {
+ "name": "refreshTasks",
+ "type": "Function",
+ "start_line": 49,
+ "end_line": 66,
+ "tags": {
+ "PURPOSE": "Periodically refreshes the task list.",
+ "PRE": "API must be reachable.",
+ "POST": "tasks variable is updated if data is valid."
+ },
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": true,
+ "issues": []
+ }
+ },
+ {
+ "name": "handleSelectTask",
+ "type": "Function",
+ "start_line": 68,
+ "end_line": 78,
+ "tags": {
+ "PURPOSE": "Updates the selected task ID when a task is clicked.",
+ "PRE": "event.detail.id must be provided.",
+ "POST": "selectedTaskId is updated."
+ },
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": true,
+ "issues": []
+ }
+ },
+ {
+ "name": "handleRunBackup",
+ "type": "Function",
+ "start_line": 80,
+ "end_line": 104,
+ "tags": {
+ "PURPOSE": "Triggers a manual backup task for the selected environment.",
+ "PRE": "selectedEnvId must not be empty.",
+ "POST": "Backup task is created and task list is refreshed."
+ },
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": true,
+ "issues": []
+ }
+ }
+ ],
"compliance": {
"valid": true,
"issues": []
@@ -4728,20 +1952,20 @@
"name": "TaskLogViewer",
"type": "Component",
"start_line": 1,
- "end_line": 183,
+ "end_line": 246,
"tags": {
- "SEMANTICS": "task, log, viewer, modal",
- "PURPOSE": "Displays detailed logs for a specific task in a modal.",
+ "SEMANTICS": "task, log, viewer, modal, inline",
+ "PURPOSE": "Displays detailed logs for a specific task in a modal or inline.",
"LAYER": "UI",
- "RELATION": "USES -> frontend/src/lib/api.js (inferred)"
+ "RELATION": "USES -> frontend/src/services/taskService.js"
},
"relations": [],
"children": [
{
"name": "fetchLogs",
"type": "Function",
- "start_line": 25,
- "end_line": 42,
+ "start_line": 28,
+ "end_line": 51,
"tags": {
"PURPOSE": "Fetches logs for the current task.",
"PRE": "taskId must be set.",
@@ -4757,8 +1981,8 @@
{
"name": "scrollToBottom",
"type": "Function",
- "start_line": 44,
- "end_line": 55,
+ "start_line": 53,
+ "end_line": 66,
"tags": {
"PURPOSE": "Scrolls the log container to the bottom.",
"PRE": "logContainer element must be bound.",
@@ -4774,8 +1998,8 @@
{
"name": "handleScroll",
"type": "Function",
- "start_line": 57,
- "end_line": 68,
+ "start_line": 68,
+ "end_line": 81,
"tags": {
"PURPOSE": "Updates auto-scroll preference based on scroll position.",
"PRE": "logContainer scroll event fired.",
@@ -4791,8 +2015,8 @@
{
"name": "close",
"type": "Function",
- "start_line": 70,
- "end_line": 78,
+ "start_line": 83,
+ "end_line": 93,
"tags": {
"PURPOSE": "Closes the log viewer modal.",
"PRE": "Modal is open.",
@@ -4808,8 +2032,8 @@
{
"name": "getLogLevelColor",
"type": "Function",
- "start_line": 80,
- "end_line": 93,
+ "start_line": 95,
+ "end_line": 110,
"tags": {
"PURPOSE": "Returns the CSS color class for a given log level.",
"PRE": "level string is provided.",
@@ -4825,8 +2049,8 @@
{
"name": "onDestroy",
"type": "Function",
- "start_line": 110,
- "end_line": 117,
+ "start_line": 129,
+ "end_line": 138,
"tags": {
"PURPOSE": "Cleans up the polling interval.",
"PRE": "Component is being destroyed.",
@@ -5790,7 +3014,7 @@
"name": "AppModule",
"type": "Module",
"start_line": 1,
- "end_line": 189,
+ "end_line": 188,
"tags": {
"SEMANTICS": "app, main, entrypoint, fastapi",
"PURPOSE": "The main entry point for the FastAPI application. It initializes the app, configures CORS, sets up dependencies, includes API routers, and defines the WebSocket endpoint for log streaming.",
@@ -5802,8 +3026,8 @@
{
"name": "App",
"type": "Global",
- "start_line": 26,
- "end_line": 34,
+ "start_line": 24,
+ "end_line": 32,
"tags": {
"SEMANTICS": "app, fastapi, instance",
"PURPOSE": "The global FastAPI application instance."
@@ -5818,8 +3042,8 @@
{
"name": "startup_event",
"type": "Function",
- "start_line": 36,
- "end_line": 46,
+ "start_line": 34,
+ "end_line": 44,
"tags": {
"PURPOSE": "Handles application startup tasks, such as starting the scheduler.",
"PRE": "None.",
@@ -5835,8 +3059,8 @@
{
"name": "shutdown_event",
"type": "Function",
- "start_line": 48,
- "end_line": 58,
+ "start_line": 46,
+ "end_line": 56,
"tags": {
"PURPOSE": "Handles application shutdown tasks, such as stopping the scheduler.",
"PRE": "None.",
@@ -5852,8 +3076,8 @@
{
"name": "log_requests",
"type": "Function",
- "start_line": 70,
- "end_line": 83,
+ "start_line": 68,
+ "end_line": 81,
"tags": {
"PURPOSE": "Middleware to log incoming HTTP requests and their response status.",
"PRE": "request is a FastAPI Request object.",
@@ -5870,8 +3094,8 @@
{
"name": "websocket_endpoint",
"type": "Function",
- "start_line": 94,
- "end_line": 151,
+ "start_line": 92,
+ "end_line": 149,
"tags": {
"PURPOSE": "Provides a WebSocket endpoint for real-time log streaming of a task.",
"PRE": "task_id must be a valid task ID.",
@@ -5887,8 +3111,8 @@
{
"name": "StaticFiles",
"type": "Mount",
- "start_line": 153,
- "end_line": 188,
+ "start_line": 151,
+ "end_line": 187,
"tags": {
"SEMANTICS": "static, frontend, spa",
"PURPOSE": "Mounts the frontend build directory to serve static assets."
@@ -5898,8 +3122,8 @@
{
"name": "serve_spa",
"type": "Function",
- "start_line": 161,
- "end_line": 177,
+ "start_line": 159,
+ "end_line": 176,
"tags": {
"PURPOSE": "Serves frontend static files or index.html for SPA routing.",
"PRE": "file_path is requested by the client.",
@@ -5915,8 +3139,8 @@
{
"name": "read_root",
"type": "Function",
- "start_line": 179,
- "end_line": 187,
+ "start_line": 178,
+ "end_line": 186,
"tags": {
"PURPOSE": "A simple root endpoint to confirm that the API is running when frontend is missing.",
"PRE": "None.",
@@ -6036,40 +3260,45 @@
"name": "backend.src.core.superset_client",
"type": "Module",
"start_line": 1,
- "end_line": 119,
+ "end_line": 400,
"tags": {
- "SEMANTICS": "superset, api, client, database, metadata",
- "PURPOSE": "Extends the base SupersetClient with database-specific metadata fetching.",
+ "SEMANTICS": "superset, api, client, rest, http, dashboard, dataset, import, export",
+ "PURPOSE": "\u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0439 \u043a\u043b\u0438\u0435\u043d\u0442 \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 Superset REST API, \u0438\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u0438\u0440\u0443\u044f \u043b\u043e\u0433\u0438\u043a\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043e\u0448\u0438\u0431\u043e\u043a \u0438 \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u044e.",
"LAYER": "Core",
- "INVARIANT": "All database metadata requests must include UUID and name."
+ "INVARIANT": "All network operations must use the internal APIClient instance.",
+ "PUBLIC_API": "SupersetClient"
},
"relations": [
{
- "type": "INHERITS_FROM",
- "target": "superset_tool.client.SupersetClient"
+ "type": "USES",
+ "target": "backend.src.core.utils.network.APIClient"
+ },
+ {
+ "type": "USES",
+ "target": "backend.src.core.config_models.Environment"
}
],
"children": [
{
"name": "SupersetClient",
"type": "Class",
- "start_line": 17,
- "end_line": 117,
+ "start_line": 24,
+ "end_line": 398,
"tags": {
- "PURPOSE": "Extended SupersetClient for migration-specific operations."
+ "PURPOSE": "\u041a\u043b\u0430\u0441\u0441-\u043e\u0431\u0451\u0440\u0442\u043a\u0430 \u043d\u0430\u0434 Superset REST API, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0430\u043c\u0438 \u0438 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430\u043c\u0438."
},
"relations": [],
"children": [
{
- "name": "get_databases_summary",
+ "name": "__init__",
"type": "Function",
- "start_line": 21,
- "end_line": 41,
+ "start_line": 27,
+ "end_line": 53,
"tags": {
- "PURPOSE": "Fetch a summary of databases including uuid, name, and engine.",
- "PRE": "self.network must be initialized and authenticated.",
- "POST": "Returns a list of database dictionaries with 'engine' field.",
- "RETURN": "List[Dict] - Summary of databases."
+ "PURPOSE": "\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043a\u043b\u0438\u0435\u043d\u0442, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u043a\u043b\u0438\u0435\u043d\u0442.",
+ "PRE": "`env` \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c Environment.",
+ "POST": "\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044b `env` \u0438 `network` \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u0438 \u0433\u043e\u0442\u043e\u0432\u044b \u043a \u0440\u0430\u0431\u043e\u0442\u0435.",
+ "PARAM": "env (Environment) - \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f."
},
"relations": [],
"children": [],
@@ -6078,78 +3307,513 @@
"issues": []
}
},
+ {
+ "name": "authenticate",
+ "type": "Function",
+ "start_line": 55,
+ "end_line": 63,
+ "tags": {
+ "PURPOSE": "Authenticates the client using the configured credentials.",
+ "PRE": "self.network must be initialized with valid auth configuration.",
+ "POST": "Client is authenticated and tokens are stored.",
+ "RETURN": "Dict[str, str] - Authentication tokens."
+ },
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": true,
+ "issues": []
+ }
+ },
+ {
+ "name": "headers",
+ "type": "Function",
+ "start_line": 66,
+ "end_line": 71,
+ "tags": {
+ "PURPOSE": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0431\u0430\u0437\u043e\u0432\u044b\u0435 HTTP-\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0441\u0435\u0442\u0435\u0432\u044b\u043c \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c."
+ },
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": false,
+ "issues": [
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST"
+ ]
+ }
+ },
+ {
+ "name": "get_dashboards",
+ "type": "Function",
+ "start_line": 75,
+ "end_line": 93,
+ "tags": {
+ "PURPOSE": "\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043f\u043e\u043b\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u043e\u0432, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044f \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u044e.",
+ "PARAM": "query (Optional[Dict]) - \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0434\u043b\u044f API.",
+ "RETURN": "Tuple[int, List[Dict]] - \u041a\u043e\u0440\u0442\u0435\u0436 (\u043e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e, \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u043e\u0432)."
+ },
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": false,
+ "issues": [
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST"
+ ]
+ }
+ },
+ {
+ "name": "get_dashboards_summary",
+ "type": "Function",
+ "start_line": 95,
+ "end_line": 115,
+ "tags": {
+ "PURPOSE": "Fetches dashboard metadata optimized for the grid.",
+ "RETURN": "List[Dict]"
+ },
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": false,
+ "issues": [
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST"
+ ]
+ }
+ },
+ {
+ "name": "export_dashboard",
+ "type": "Function",
+ "start_line": 117,
+ "end_line": 136,
+ "tags": {
+ "PURPOSE": "\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u0434\u0430\u0448\u0431\u043e\u0440\u0434 \u0432 \u0432\u0438\u0434\u0435 ZIP-\u0430\u0440\u0445\u0438\u0432\u0430.",
+ "PARAM": "dashboard_id (int) - ID \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0430 \u0434\u043b\u044f \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430.",
+ "RETURN": "Tuple[bytes, str] - \u0411\u0438\u043d\u0430\u0440\u043d\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 ZIP-\u0430\u0440\u0445\u0438\u0432\u0430 \u0438 \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430."
+ },
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": false,
+ "issues": [
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST"
+ ]
+ }
+ },
+ {
+ "name": "import_dashboard",
+ "type": "Function",
+ "start_line": 138,
+ "end_line": 163,
+ "tags": {
+ "PURPOSE": "\u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u0434\u0430\u0448\u0431\u043e\u0440\u0434 \u0438\u0437 ZIP-\u0444\u0430\u0439\u043b\u0430.",
+ "PARAM": "dash_slug (Optional[str]) - Slug \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0430 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 ID.",
+ "RETURN": "Dict - \u041e\u0442\u0432\u0435\u0442 API \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0441\u043f\u0435\u0445\u0430."
+ },
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": false,
+ "issues": [
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST"
+ ]
+ }
+ },
+ {
+ "name": "delete_dashboard",
+ "type": "Function",
+ "start_line": 165,
+ "end_line": 177,
+ "tags": {
+ "PURPOSE": "\u0423\u0434\u0430\u043b\u044f\u0435\u0442 \u0434\u0430\u0448\u0431\u043e\u0440\u0434 \u043f\u043e \u0435\u0433\u043e ID \u0438\u043b\u0438 slug.",
+ "PARAM": "dashboard_id (Union[int, str]) - ID \u0438\u043b\u0438 slug \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0430."
+ },
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": false,
+ "issues": [
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST"
+ ]
+ }
+ },
+ {
+ "name": "get_datasets",
+ "type": "Function",
+ "start_line": 183,
+ "end_line": 199,
+ "tags": {
+ "PURPOSE": "\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043f\u043e\u043b\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u043e\u0432, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044f \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u044e.",
+ "PARAM": "query (Optional[Dict]) - \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u0430.",
+ "RETURN": "Tuple[int, List[Dict]] - \u041a\u043e\u0440\u0442\u0435\u0436 (\u043e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e, \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u043e\u0432)."
+ },
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": false,
+ "issues": [
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST"
+ ]
+ }
+ },
+ {
+ "name": "get_dataset",
+ "type": "Function",
+ "start_line": 201,
+ "end_line": 212,
+ "tags": {
+ "PURPOSE": "\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0435 \u043f\u043e \u0435\u0433\u043e ID.",
+ "PARAM": "dataset_id (int) - ID \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430.",
+ "RETURN": "Dict - \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0435."
+ },
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": false,
+ "issues": [
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST"
+ ]
+ }
+ },
+ {
+ "name": "update_dataset",
+ "type": "Function",
+ "start_line": 214,
+ "end_line": 231,
+ "tags": {
+ "PURPOSE": "\u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430 \u043f\u043e \u0435\u0433\u043e ID.",
+ "PARAM": "data (Dict) - \u0414\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f.",
+ "RETURN": "Dict - \u041e\u0442\u0432\u0435\u0442 API."
+ },
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": false,
+ "issues": [
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST"
+ ]
+ }
+ },
+ {
+ "name": "get_databases",
+ "type": "Function",
+ "start_line": 237,
+ "end_line": 254,
+ "tags": {
+ "PURPOSE": "\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043f\u043e\u043b\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445.",
+ "PARAM": "query (Optional[Dict]) - \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u0430.",
+ "RETURN": "Tuple[int, List[Dict]] - \u041a\u043e\u0440\u0442\u0435\u0436 (\u043e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e, \u0441\u043f\u0438\u0441\u043e\u043a \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445)."
+ },
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": false,
+ "issues": [
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST"
+ ]
+ }
+ },
+ {
+ "name": "get_database",
+ "type": "Function",
+ "start_line": 256,
+ "end_line": 267,
+ "tags": {
+ "PURPOSE": "\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e \u0435\u0451 ID.",
+ "PARAM": "database_id (int) - ID \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445.",
+ "RETURN": "Dict - \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445."
+ },
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": false,
+ "issues": [
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST"
+ ]
+ }
+ },
+ {
+ "name": "get_databases_summary",
+ "type": "Function",
+ "start_line": 269,
+ "end_line": 284,
+ "tags": {
+ "PURPOSE": "Fetch a summary of databases including uuid, name, and engine.",
+ "RETURN": "List[Dict] - Summary of databases."
+ },
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": false,
+ "issues": [
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST"
+ ]
+ }
+ },
{
"name": "get_database_by_uuid",
"type": "Function",
- "start_line": 43,
- "end_line": 59,
+ "start_line": 286,
+ "end_line": 297,
"tags": {
"PURPOSE": "Find a database by its UUID.",
- "PRE": "db_uuid must be a string.",
- "POST": "Returns database metadata if found.",
"PARAM": "db_uuid (str) - The UUID of the database.",
"RETURN": "Optional[Dict] - Database info if found, else None."
},
"relations": [],
"children": [],
"compliance": {
- "valid": true,
- "issues": []
+ "valid": false,
+ "issues": [
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST"
+ ]
}
},
{
- "name": "get_dashboards_summary",
+ "name": "_resolve_target_id_for_delete",
"type": "Function",
- "start_line": 61,
- "end_line": 87,
- "tags": {
- "PURPOSE": "Fetches dashboard metadata optimized for the grid.",
- "PRE": "self.network must be authenticated.",
- "POST": "Returns a list of dashboard dictionaries mapped to the grid schema.",
- "RETURN": "List[Dict]"
- },
+ "start_line": 303,
+ "end_line": 319,
+ "tags": {},
"relations": [],
"children": [],
"compliance": {
- "valid": true,
- "issues": []
+ "valid": false,
+ "issues": [
+ "Missing Mandatory Tag: @PURPOSE",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST",
+ "Missing Mandatory Tag: @PURPOSE",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST",
+ "Missing Mandatory Tag: @PURPOSE",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST"
+ ]
}
},
{
- "name": "get_dataset",
+ "name": "_do_import",
"type": "Function",
- "start_line": 89,
- "end_line": 101,
- "tags": {
- "PURPOSE": "Fetch full dataset structure including columns and metrics.",
- "PRE": "dataset_id must be a valid integer.",
- "POST": "Returns full dataset metadata from Superset API.",
- "PARAM": "dataset_id (int) - The ID of the dataset.",
- "RETURN": "Dict - The dataset metadata."
- },
+ "start_line": 321,
+ "end_line": 336,
+ "tags": {},
"relations": [],
"children": [],
"compliance": {
- "valid": true,
- "issues": []
+ "valid": false,
+ "issues": [
+ "Missing Mandatory Tag: @PURPOSE",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST",
+ "Missing Mandatory Tag: @PURPOSE",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST",
+ "Missing Mandatory Tag: @PURPOSE",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST"
+ ]
}
},
{
- "name": "update_dataset",
+ "name": "_validate_export_response",
"type": "Function",
- "start_line": 103,
- "end_line": 115,
- "tags": {
- "PURPOSE": "Update dataset metadata.",
- "PRE": "dataset_id must be valid, data must be a valid Superset dataset payload.",
- "POST": "Dataset is updated in Superset.",
- "PARAM": "data (Dict) - The payload for update."
- },
+ "start_line": 338,
+ "end_line": 346,
+ "tags": {},
"relations": [],
"children": [],
"compliance": {
- "valid": true,
- "issues": []
+ "valid": false,
+ "issues": [
+ "Missing Mandatory Tag: @PURPOSE",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST",
+ "Missing Mandatory Tag: @PURPOSE",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST",
+ "Missing Mandatory Tag: @PURPOSE",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST"
+ ]
+ }
+ },
+ {
+ "name": "_resolve_export_filename",
+ "type": "Function",
+ "start_line": 348,
+ "end_line": 358,
+ "tags": {},
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": false,
+ "issues": [
+ "Missing Mandatory Tag: @PURPOSE",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST",
+ "Missing Mandatory Tag: @PURPOSE",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST",
+ "Missing Mandatory Tag: @PURPOSE",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST"
+ ]
+ }
+ },
+ {
+ "name": "_validate_query_params",
+ "type": "Function",
+ "start_line": 360,
+ "end_line": 365,
+ "tags": {},
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": false,
+ "issues": [
+ "Missing Mandatory Tag: @PURPOSE",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST",
+ "Missing Mandatory Tag: @PURPOSE",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST",
+ "Missing Mandatory Tag: @PURPOSE",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST"
+ ]
+ }
+ },
+ {
+ "name": "_fetch_total_object_count",
+ "type": "Function",
+ "start_line": 367,
+ "end_line": 375,
+ "tags": {},
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": false,
+ "issues": [
+ "Missing Mandatory Tag: @PURPOSE",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST",
+ "Missing Mandatory Tag: @PURPOSE",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST",
+ "Missing Mandatory Tag: @PURPOSE",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST"
+ ]
+ }
+ },
+ {
+ "name": "_fetch_all_pages",
+ "type": "Function",
+ "start_line": 377,
+ "end_line": 381,
+ "tags": {},
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": false,
+ "issues": [
+ "Missing Mandatory Tag: @PURPOSE",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST",
+ "Missing Mandatory Tag: @PURPOSE",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST",
+ "Missing Mandatory Tag: @PURPOSE",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST"
+ ]
+ }
+ },
+ {
+ "name": "_validate_import_file",
+ "type": "Function",
+ "start_line": 383,
+ "end_line": 394,
+ "tags": {},
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": false,
+ "issues": [
+ "Missing Mandatory Tag: @PURPOSE",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST",
+ "Missing Mandatory Tag: @PURPOSE",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST",
+ "Missing Mandatory Tag: @PURPOSE",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST"
+ ]
}
}
],
@@ -6168,7 +3832,7 @@
"name": "ConfigManagerModule",
"type": "Module",
"start_line": 1,
- "end_line": 266,
+ "end_line": 280,
"tags": {
"SEMANTICS": "config, manager, persistence, json",
"PURPOSE": "Manages application configuration, including loading/saving to JSON and CRUD for environments.",
@@ -6195,7 +3859,7 @@
"name": "ConfigManager",
"type": "Class",
"start_line": 22,
- "end_line": 264,
+ "end_line": 278,
"tags": {
"PURPOSE": "A class to handle application configuration persistence and management."
},
@@ -6369,10 +4033,29 @@
}
},
{
- "name": "add_environment",
+ "name": "get_environment",
"type": "Function",
"start_line": 189,
- "end_line": 208,
+ "end_line": 201,
+ "tags": {
+ "PURPOSE": "Returns a single environment by ID.",
+ "PRE": "self.config is set and isinstance(env_id, str) and len(env_id) > 0.",
+ "POST": "Returns Environment object if found, None otherwise.",
+ "PARAM": "env_id (str) - The ID of the environment to retrieve.",
+ "RETURN": "Optional[Environment] - The environment with the given ID, or None."
+ },
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": true,
+ "issues": []
+ }
+ },
+ {
+ "name": "add_environment",
+ "type": "Function",
+ "start_line": 203,
+ "end_line": 222,
"tags": {
"PURPOSE": "Adds a new environment to the configuration.",
"PRE": "isinstance(env, Environment)",
@@ -6389,8 +4072,8 @@
{
"name": "update_environment",
"type": "Function",
- "start_line": 210,
- "end_line": 239,
+ "start_line": 224,
+ "end_line": 253,
"tags": {
"PURPOSE": "Updates an existing environment.",
"PRE": "isinstance(env_id, str) and len(env_id) > 0 and isinstance(updated_env, Environment)",
@@ -6408,8 +4091,8 @@
{
"name": "delete_environment",
"type": "Function",
- "start_line": 241,
- "end_line": 262,
+ "start_line": 255,
+ "end_line": 276,
"tags": {
"PURPOSE": "Deletes an environment by ID.",
"PRE": "isinstance(env_id, str) and len(env_id) > 0",
@@ -6579,7 +4262,7 @@
"name": "ConfigModels",
"type": "Module",
"start_line": 1,
- "end_line": 60,
+ "end_line": 62,
"tags": {
"SEMANTICS": "config, models, pydantic",
"PURPOSE": "Defines the data models for application configuration using Pydantic.",
@@ -6615,7 +4298,7 @@
"name": "Environment",
"type": "DataClass",
"start_line": 18,
- "end_line": 28,
+ "end_line": 30,
"tags": {
"PURPOSE": "Represents a Superset environment configuration."
},
@@ -6629,8 +4312,8 @@
{
"name": "LoggingConfig",
"type": "DataClass",
- "start_line": 30,
- "end_line": 38,
+ "start_line": 32,
+ "end_line": 40,
"tags": {
"PURPOSE": "Defines the configuration for the application's logging system."
},
@@ -6644,8 +4327,8 @@
{
"name": "GlobalSettings",
"type": "DataClass",
- "start_line": 40,
- "end_line": 51,
+ "start_line": 42,
+ "end_line": 53,
"tags": {
"PURPOSE": "Represents global application settings."
},
@@ -6659,8 +4342,8 @@
{
"name": "AppConfig",
"type": "DataClass",
- "start_line": 53,
- "end_line": 58,
+ "start_line": 55,
+ "end_line": 60,
"tags": {
"PURPOSE": "The root configuration model containing all application settings."
},
@@ -6681,7 +4364,7 @@
"name": "backend.src.core.database",
"type": "Module",
"start_line": 1,
- "end_line": 85,
+ "end_line": 86,
"tags": {
"SEMANTICS": "database, sqlite, sqlalchemy, session, persistence",
"PURPOSE": "Configures the SQLite database connection and session management.",
@@ -6702,8 +4385,8 @@
{
"name": "DATABASE_URL",
"type": "Constant",
- "start_line": 21,
- "end_line": 23,
+ "start_line": 22,
+ "end_line": 24,
"tags": {},
"relations": [],
"children": [],
@@ -6715,8 +4398,8 @@
{
"name": "TASKS_DATABASE_URL",
"type": "Constant",
- "start_line": 25,
- "end_line": 27,
+ "start_line": 26,
+ "end_line": 28,
"tags": {},
"relations": [],
"children": [],
@@ -6728,8 +4411,8 @@
{
"name": "engine",
"type": "Variable",
- "start_line": 29,
- "end_line": 31,
+ "start_line": 30,
+ "end_line": 32,
"tags": {},
"relations": [],
"children": [],
@@ -6741,8 +4424,8 @@
{
"name": "tasks_engine",
"type": "Variable",
- "start_line": 33,
- "end_line": 35,
+ "start_line": 34,
+ "end_line": 36,
"tags": {},
"relations": [],
"children": [],
@@ -6754,8 +4437,8 @@
{
"name": "SessionLocal",
"type": "Class",
- "start_line": 37,
- "end_line": 40,
+ "start_line": 38,
+ "end_line": 41,
"tags": {
"PURPOSE": "A session factory for the main mappings database."
},
@@ -6769,8 +4452,8 @@
{
"name": "TasksSessionLocal",
"type": "Class",
- "start_line": 42,
- "end_line": 45,
+ "start_line": 43,
+ "end_line": 46,
"tags": {
"PURPOSE": "A session factory for the tasks execution database."
},
@@ -6784,8 +4467,8 @@
{
"name": "init_db",
"type": "Function",
- "start_line": 47,
- "end_line": 55,
+ "start_line": 48,
+ "end_line": 56,
"tags": {
"PURPOSE": "Initializes the database by creating all tables.",
"PRE": "engine and tasks_engine are initialized.",
@@ -6801,8 +4484,8 @@
{
"name": "get_db",
"type": "Function",
- "start_line": 57,
- "end_line": 69,
+ "start_line": 58,
+ "end_line": 70,
"tags": {
"PURPOSE": "Dependency for getting a database session.",
"PRE": "SessionLocal is initialized.",
@@ -6819,8 +4502,8 @@
{
"name": "get_tasks_db",
"type": "Function",
- "start_line": 71,
- "end_line": 83,
+ "start_line": 72,
+ "end_line": 84,
"tags": {
"PURPOSE": "Dependency for getting a tasks database session.",
"PRE": "TasksSessionLocal is initialized.",
@@ -6844,7 +4527,7 @@
"name": "LoggerModule",
"type": "Module",
"start_line": 1,
- "end_line": 220,
+ "end_line": 228,
"tags": {
"SEMANTICS": "logging, websocket, streaming, handler",
"PURPOSE": "Configures the application's logging system, including a custom handler for buffering logs and streaming them over WebSockets.",
@@ -6857,7 +4540,7 @@
"name": "BeliefFormatter",
"type": "Class",
"start_line": 22,
- "end_line": 38,
+ "end_line": 37,
"tags": {
"PURPOSE": "Custom logging formatter that adds belief state prefixes to log messages."
},
@@ -6867,7 +4550,7 @@
"name": "format",
"type": "Function",
"start_line": 25,
- "end_line": 37,
+ "end_line": 36,
"tags": {
"PURPOSE": "Formats the log record, adding belief state context if available.",
"PRE": "record is a logging.LogRecord.",
@@ -6895,8 +4578,8 @@
{
"name": "LogEntry",
"type": "Class",
- "start_line": 41,
- "end_line": 50,
+ "start_line": 40,
+ "end_line": 49,
"tags": {
"SEMANTICS": "log, entry, record, pydantic",
"PURPOSE": "A Pydantic model representing a single, structured log entry. This is a re-definition for consistency, as it's also defined in task_manager.py."
@@ -6911,8 +4594,8 @@
{
"name": "belief_scope",
"type": "Function",
- "start_line": 52,
- "end_line": 85,
+ "start_line": 51,
+ "end_line": 84,
"tags": {
"PURPOSE": "Context manager for structured Belief State logging.",
"PARAM": "message (str) - Optional entry message.",
@@ -6932,8 +4615,8 @@
{
"name": "configure_logger",
"type": "Function",
- "start_line": 87,
- "end_line": 129,
+ "start_line": 86,
+ "end_line": 128,
"tags": {
"PURPOSE": "Configures the logger with the provided logging settings.",
"PRE": "config is a valid LoggingConfig instance.",
@@ -6953,8 +4636,8 @@
{
"name": "WebSocketLogHandler",
"type": "Class",
- "start_line": 131,
- "end_line": 193,
+ "start_line": 130,
+ "end_line": 189,
"tags": {
"SEMANTICS": "logging, handler, websocket, buffer",
"PURPOSE": "A custom logging handler that captures log records into a buffer. It is designed to be extended for real-time log streaming over WebSockets."
@@ -6964,8 +4647,8 @@
{
"name": "__init__",
"type": "Function",
- "start_line": 139,
- "end_line": 150,
+ "start_line": 138,
+ "end_line": 148,
"tags": {
"PURPOSE": "Initializes the handler with a fixed-capacity buffer.",
"PRE": "capacity is an integer.",
@@ -6975,15 +4658,19 @@
"relations": [],
"children": [],
"compliance": {
- "valid": true,
- "issues": []
+ "valid": false,
+ "issues": [
+ "Missing Belief State Logging: Function should use belief_scope context manager.",
+ "Missing Belief State Logging: Function should use belief_scope context manager.",
+ "Missing Belief State Logging: Function should use belief_scope context manager."
+ ]
}
},
{
"name": "emit",
"type": "Function",
- "start_line": 152,
- "end_line": 178,
+ "start_line": 150,
+ "end_line": 175,
"tags": {
"PURPOSE": "Captures a log record, formats it, and stores it in the buffer.",
"PRE": "record is a logging.LogRecord.",
@@ -6993,15 +4680,19 @@
"relations": [],
"children": [],
"compliance": {
- "valid": true,
- "issues": []
+ "valid": false,
+ "issues": [
+ "Missing Belief State Logging: Function should use belief_scope context manager.",
+ "Missing Belief State Logging: Function should use belief_scope context manager.",
+ "Missing Belief State Logging: Function should use belief_scope context manager."
+ ]
}
},
{
"name": "get_recent_logs",
"type": "Function",
- "start_line": 180,
- "end_line": 191,
+ "start_line": 177,
+ "end_line": 187,
"tags": {
"PURPOSE": "Returns a list of recent log entries from the buffer.",
"PRE": "None.",
@@ -7011,8 +4702,12 @@
"relations": [],
"children": [],
"compliance": {
- "valid": true,
- "issues": []
+ "valid": false,
+ "issues": [
+ "Missing Belief State Logging: Function should use belief_scope context manager.",
+ "Missing Belief State Logging: Function should use belief_scope context manager.",
+ "Missing Belief State Logging: Function should use belief_scope context manager."
+ ]
}
}
],
@@ -7024,14 +4719,38 @@
{
"name": "Logger",
"type": "Global",
- "start_line": 195,
- "end_line": 219,
+ "start_line": 191,
+ "end_line": 227,
"tags": {
"SEMANTICS": "logger, global, instance",
"PURPOSE": "The global logger instance for the application, configured with both a console handler and the custom WebSocket handler."
},
"relations": [],
- "children": [],
+ "children": [
+ {
+ "name": "believed",
+ "type": "Function",
+ "start_line": 196,
+ "end_line": 206,
+ "tags": {
+ "PURPOSE": "A decorator that wraps a function in a belief scope.",
+ "PARAM": "anchor_id (str) - The identifier for the semantic block."
+ },
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": false,
+ "issues": [
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Mandatory Tag: @POST"
+ ]
+ }
+ }
+ ],
"compliance": {
"valid": true,
"issues": []
@@ -7416,6 +5135,730 @@
"issues": []
}
},
+ {
+ "name": "backend.core.utils.fileio",
+ "type": "Module",
+ "start_line": 1,
+ "end_line": null,
+ "tags": {
+ "SEMANTICS": "file, io, zip, yaml, temp, archive, utility",
+ "PURPOSE": "\u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430\u0431\u043e\u0440 \u0443\u0442\u0438\u043b\u0438\u0442 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u043c\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u043c\u0438, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438, \u0430\u0440\u0445\u0438\u0432\u0430\u043c\u0438 ZIP, \u0444\u0430\u0439\u043b\u0430\u043c\u0438 YAML \u0438 \u043e\u0447\u0438\u0441\u0442\u043a\u0443 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0439.",
+ "LAYER": "Infra",
+ "PUBLIC_API": "create_temp_file, remove_empty_directories, read_dashboard_from_disk, calculate_crc32, RetentionPolicy, archive_exports, save_and_unpack_dashboard, update_yamls, create_dashboard_export, sanitize_filename, get_filename_from_headers, consolidate_archive_folders"
+ },
+ "relations": [
+ {
+ "type": "DEPENDS_ON",
+ "target": "backend.src.core.logger"
+ },
+ {
+ "type": "DEPENDS_ON",
+ "target": "pyyaml"
+ }
+ ],
+ "children": [
+ {
+ "name": "InvalidZipFormatError",
+ "type": "Class",
+ "start_line": 26,
+ "end_line": null,
+ "tags": {},
+ "relations": [],
+ "children": [
+ {
+ "name": "create_temp_file",
+ "type": "Function",
+ "start_line": 30,
+ "end_line": 69,
+ "tags": {
+ "PURPOSE": "\u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u044b\u0439 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0438\u043b\u0438 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0441 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435\u043c.",
+ "PRE": "suffix \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u043e\u0439, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0449\u0435\u0439 \u0442\u0438\u043f \u0440\u0435\u0441\u0443\u0440\u0441\u0430.",
+ "POST": "\u0412\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441 \u0441\u043e\u0437\u0434\u0430\u043d \u0438 \u043f\u0443\u0442\u044c \u043a \u043d\u0435\u043c\u0443 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d; \u0440\u0435\u0441\u0443\u0440\u0441 \u0443\u0434\u0430\u043b\u0435\u043d \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u0445\u043e\u0434\u0430 \u0438\u0437 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430.",
+ "PARAM": "mode (str) - \u0420\u0435\u0436\u0438\u043c \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u0444\u0430\u0439\u043b (e.g., 'wb').",
+ "YIELDS": "Path - \u041f\u0443\u0442\u044c \u043a \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c\u0443 \u0440\u0435\u0441\u0443\u0440\u0441\u0443.",
+ "THROW": "IOError - \u041f\u0440\u0438 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u0430."
+ },
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": true,
+ "issues": []
+ }
+ },
+ {
+ "name": "remove_empty_directories",
+ "type": "Function",
+ "start_line": 71,
+ "end_line": 94,
+ "tags": {
+ "PURPOSE": "\u0420\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u0432\u0441\u0435 \u043f\u0443\u0441\u0442\u044b\u0435 \u043f\u043e\u0434\u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0443\u0442\u0438.",
+ "PRE": "root_dir \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u0443\u0442\u0435\u043c \u043a \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438.",
+ "POST": "\u0412\u0441\u0435 \u043f\u0443\u0441\u0442\u044b\u0435 \u043f\u043e\u0434\u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u044b, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u043e \u0438\u0445 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e.",
+ "PARAM": "root_dir (str) - \u041f\u0443\u0442\u044c \u043a \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0434\u043b\u044f \u043e\u0447\u0438\u0441\u0442\u043a\u0438.",
+ "RETURN": "int - \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0445 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0439."
+ },
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": true,
+ "issues": []
+ }
+ },
+ {
+ "name": "read_dashboard_from_disk",
+ "type": "Function",
+ "start_line": 96,
+ "end_line": 112,
+ "tags": {
+ "PURPOSE": "\u0427\u0438\u0442\u0430\u0435\u0442 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0430\u0439\u043b\u0430 \u0441 \u0434\u0438\u0441\u043a\u0430.",
+ "PRE": "file_path \u0434\u043e\u043b\u0436\u0435\u043d \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0444\u0430\u0439\u043b.",
+ "POST": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0431\u0430\u0439\u0442\u044b \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u0438 \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430.",
+ "PARAM": "file_path (str) - \u041f\u0443\u0442\u044c \u043a \u0444\u0430\u0439\u043b\u0443.",
+ "RETURN": "Tuple[bytes, str] - \u041a\u043e\u0440\u0442\u0435\u0436 (\u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435, \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430).",
+ "THROW": "FileNotFoundError - \u0415\u0441\u043b\u0438 \u0444\u0430\u0439\u043b \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d."
+ },
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": true,
+ "issues": []
+ }
+ },
+ {
+ "name": "calculate_crc32",
+ "type": "Function",
+ "start_line": 114,
+ "end_line": 126,
+ "tags": {
+ "PURPOSE": "\u0412\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0443\u044e \u0441\u0443\u043c\u043c\u0443 CRC32 \u0434\u043b\u044f \u0444\u0430\u0439\u043b\u0430.",
+ "PRE": "file_path \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c Path \u043a \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c\u0443 \u0444\u0430\u0439\u043b\u0443.",
+ "POST": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 8-\u0437\u043d\u0430\u0447\u043d\u0443\u044e hex-\u0441\u0442\u0440\u043e\u043a\u0443 CRC32.",
+ "PARAM": "file_path (Path) - \u041f\u0443\u0442\u044c \u043a \u0444\u0430\u0439\u043b\u0443.",
+ "RETURN": "str - 8-\u0437\u043d\u0430\u0447\u043d\u043e\u0435 \u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 CRC32.",
+ "THROW": "IOError - \u041f\u0440\u0438 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u0447\u0442\u0435\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u0430."
+ },
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": true,
+ "issues": []
+ }
+ },
+ {
+ "name": "RetentionPolicy",
+ "type": "DataClass",
+ "start_line": 129,
+ "end_line": 136,
+ "tags": {
+ "PURPOSE": "\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0443 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0430\u0440\u0445\u0438\u0432\u043e\u0432 (\u0435\u0436\u0435\u0434\u043d\u0435\u0432\u043d\u044b\u0435, \u0435\u0436\u0435\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u044b\u0435, \u0435\u0436\u0435\u043c\u0435\u0441\u044f\u0447\u043d\u044b\u0435)."
+ },
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": true,
+ "issues": []
+ }
+ },
+ {
+ "name": "archive_exports",
+ "type": "Function",
+ "start_line": 139,
+ "end_line": 220,
+ "tags": {
+ "PURPOSE": "\u0423\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0430\u0440\u0445\u0438\u0432\u043e\u043c \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044f \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0443 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438 \u0434\u0435\u0434\u0443\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u044e.",
+ "PRE": "output_dir \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u0443\u0442\u0435\u043c \u043a \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438.",
+ "POST": "\u0421\u0442\u0430\u0440\u044b\u0435 \u0438\u043b\u0438 \u0434\u0443\u0431\u043b\u0438\u0440\u0443\u044e\u0449\u0438\u0435\u0441\u044f \u0430\u0440\u0445\u0438\u0432\u044b \u0443\u0434\u0430\u043b\u0435\u043d\u044b \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0435.",
+ "PARAM": "deduplicate (bool) - \u0424\u043b\u0430\u0433 \u0434\u043b\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u043e\u0432 \u043f\u043e CRC32."
+ },
+ "relations": [
+ {
+ "type": "CALLS",
+ "target": "apply_retention_policy"
+ },
+ {
+ "type": "CALLS",
+ "target": "calculate_crc32"
+ }
+ ],
+ "children": [],
+ "compliance": {
+ "valid": true,
+ "issues": []
+ }
+ },
+ {
+ "name": "apply_retention_policy",
+ "type": "Function",
+ "start_line": 222,
+ "end_line": 255,
+ "tags": {
+ "PURPOSE": "(Helper) \u041f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0443 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043a \u0441\u043f\u0438\u0441\u043a\u0443 \u0444\u0430\u0439\u043b\u043e\u0432, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044f \u0442\u0435, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c.",
+ "PRE": "files_with_dates is a list of (Path, date) tuples.",
+ "POST": "Returns a set of files to keep.",
+ "PARAM": "policy (RetentionPolicy) - \u041f\u043e\u043b\u0438\u0442\u0438\u043a\u0430 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f.",
+ "RETURN": "set - \u041c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u0443\u0442\u0435\u0439 \u043a \u0444\u0430\u0439\u043b\u0430\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b."
+ },
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": true,
+ "issues": []
+ }
+ },
+ {
+ "name": "save_and_unpack_dashboard",
+ "type": "Function",
+ "start_line": 257,
+ "end_line": 286,
+ "tags": {
+ "PURPOSE": "\u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 ZIP-\u0430\u0440\u0445\u0438\u0432\u0430 \u043d\u0430 \u0434\u0438\u0441\u043a \u0438 \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u0435\u0433\u043e.",
+ "PRE": "zip_content \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0431\u0430\u0439\u0442\u0430\u043c\u0438 \u0432\u0430\u043b\u0438\u0434\u043d\u043e\u0433\u043e ZIP-\u0430\u0440\u0445\u0438\u0432\u0430.",
+ "POST": "ZIP-\u0444\u0430\u0439\u043b \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d, \u0438 \u0435\u0441\u043b\u0438 unpack=True, \u043e\u043d \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u043d \u0432 output_dir.",
+ "PARAM": "original_filename (Optional[str]) - \u0418\u0441\u0445\u043e\u0434\u043d\u043e\u0435 \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u0434\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f.",
+ "RETURN": "Tuple[Path, Optional[Path]] - \u041f\u0443\u0442\u044c \u043a ZIP-\u0444\u0430\u0439\u043b\u0443 \u0438, \u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e, \u043f\u0443\u0442\u044c \u043a \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0441 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u043e\u0439.",
+ "THROW": "InvalidZipFormatError - \u041f\u0440\u0438 \u043e\u0448\u0438\u0431\u043a\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 ZIP."
+ },
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": true,
+ "issues": []
+ }
+ },
+ {
+ "name": "update_yamls",
+ "type": "Function",
+ "start_line": 288,
+ "end_line": 308,
+ "tags": {
+ "PURPOSE": "\u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0432 YAML-\u0444\u0430\u0439\u043b\u0430\u0445, \u0437\u0430\u043c\u0435\u043d\u044f\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044f regex.",
+ "PRE": "path \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0435\u0439.",
+ "POST": "\u0412\u0441\u0435 YAML \u0444\u0430\u0439\u043b\u044b \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c.",
+ "THROW": "FileNotFoundError - \u0415\u0441\u043b\u0438 `path` \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.",
+ "PARAM": "replace_string (Optional[LiteralString]) - \u0421\u0442\u0440\u043e\u043a\u0430 \u0434\u043b\u044f \u0437\u0430\u043c\u0435\u043d\u044b."
+ },
+ "relations": [
+ {
+ "type": "CALLS",
+ "target": "_update_yaml_file"
+ }
+ ],
+ "children": [],
+ "compliance": {
+ "valid": true,
+ "issues": []
+ }
+ },
+ {
+ "name": "_update_yaml_file",
+ "type": "Function",
+ "start_line": 310,
+ "end_line": 375,
+ "tags": {
+ "PURPOSE": "(Helper) \u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u043e\u0434\u0438\u043d YAML \u0444\u0430\u0439\u043b.",
+ "PRE": "file_path \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c Path \u043a \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c\u0443 YAML \u0444\u0430\u0439\u043b\u0443.",
+ "POST": "\u0424\u0430\u0439\u043b \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u043c \u0438\u043b\u0438 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u043c\u0443 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044e.",
+ "PARAM": "replace_string (Optional[str]) - \u0417\u0430\u043c\u0435\u043d\u0430."
+ },
+ "relations": [],
+ "children": [
+ {
+ "name": "replacer",
+ "type": "Function",
+ "start_line": 357,
+ "end_line": 366,
+ "tags": {
+ "PURPOSE": "\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0437\u0430\u043c\u0435\u043d\u044b, \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0449\u0430\u044f \u043a\u0430\u0432\u044b\u0447\u043a\u0438 \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0431\u044b\u043b\u0438.",
+ "PRE": "match \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f.",
+ "POST": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 \u0441 \u043d\u043e\u0432\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c, \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044f \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u0438 \u043a\u0430\u0432\u044b\u0447\u043a\u0438."
+ },
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": false,
+ "issues": [
+ "Missing Belief State Logging: Function should use belief_scope context manager.",
+ "Missing Belief State Logging: Function should use belief_scope context manager.",
+ "Missing Belief State Logging: Function should use belief_scope context manager.",
+ "Missing Belief State Logging: Function should use belief_scope context manager."
+ ]
+ }
+ }
+ ],
+ "compliance": {
+ "valid": true,
+ "issues": []
+ }
+ },
+ {
+ "name": "create_dashboard_export",
+ "type": "Function",
+ "start_line": 377,
+ "end_line": 403,
+ "tags": {
+ "PURPOSE": "\u0421\u043e\u0437\u0434\u0430\u0435\u0442 ZIP-\u0430\u0440\u0445\u0438\u0432 \u0438\u0437 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u043f\u0443\u0442\u0435\u0439.",
+ "PRE": "source_paths \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043f\u0443\u0442\u0438.",
+ "POST": "ZIP-\u0430\u0440\u0445\u0438\u0432 \u0441\u043e\u0437\u0434\u0430\u043d \u043f\u043e \u043f\u0443\u0442\u0438 zip_path.",
+ "PARAM": "exclude_extensions (Optional[List[str]]) - \u0421\u043f\u0438\u0441\u043e\u043a \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f.",
+ "RETURN": "bool - `True` \u043f\u0440\u0438 \u0443\u0441\u043f\u0435\u0445\u0435, `False` \u043f\u0440\u0438 \u043e\u0448\u0438\u0431\u043a\u0435."
+ },
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": true,
+ "issues": []
+ }
+ },
+ {
+ "name": "sanitize_filename",
+ "type": "Function",
+ "start_line": 405,
+ "end_line": 414,
+ "tags": {
+ "PURPOSE": "\u041e\u0447\u0438\u0449\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 \u043e\u0442 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u043d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0445 \u0432 \u0438\u043c\u0435\u043d\u0430\u0445 \u0444\u0430\u0439\u043b\u043e\u0432.",
+ "PRE": "filename \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u043e\u0439.",
+ "POST": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 \u0431\u0435\u0437 \u0441\u043f\u0435\u0446\u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432.",
+ "PARAM": "filename (str) - \u0418\u0441\u0445\u043e\u0434\u043d\u043e\u0435 \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430.",
+ "RETURN": "str - \u041e\u0447\u0438\u0449\u0435\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430."
+ },
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": true,
+ "issues": []
+ }
+ },
+ {
+ "name": "get_filename_from_headers",
+ "type": "Function",
+ "start_line": 416,
+ "end_line": 428,
+ "tags": {
+ "PURPOSE": "\u0418\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442 \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u0438\u0437 HTTP \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 'Content-Disposition'.",
+ "PRE": "headers \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u043b\u043e\u0432\u0430\u0440\u0435\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432.",
+ "POST": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u0438\u043b\u0438 None, \u0435\u0441\u043b\u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442.",
+ "PARAM": "headers (dict) - \u0421\u043b\u043e\u0432\u0430\u0440\u044c HTTP \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432.",
+ "RETURN": "Optional[str] - \u0418\u043c\u044f \u0444\u0430\u0439\u043b\u0430 or `None`."
+ },
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": true,
+ "issues": []
+ }
+ },
+ {
+ "name": "consolidate_archive_folders",
+ "type": "Function",
+ "start_line": 430,
+ "end_line": 484,
+ "tags": {
+ "PURPOSE": "\u041a\u043e\u043d\u0441\u043e\u043b\u0438\u0434\u0438\u0440\u0443\u0435\u0442 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0430\u0440\u0445\u0438\u0432\u043e\u0432 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043e\u0431\u0449\u0435\u0433\u043e \u0441\u043b\u0430\u0433\u0430 \u0432 \u0438\u043c\u0435\u043d\u0438.",
+ "PRE": "root_directory \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c Path \u043a \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438.",
+ "POST": "\u0414\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0441 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043e\u043c \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u044b \u0432 \u043e\u0434\u043d\u0443.",
+ "THROW": "TypeError, ValueError - \u0415\u0441\u043b\u0438 `root_directory` \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u0435\u043d.",
+ "PARAM": "root_directory (Path) - \u041a\u043e\u0440\u043d\u0435\u0432\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u0434\u043b\u044f \u043a\u043e\u043d\u0441\u043e\u043b\u0438\u0434\u0430\u0446\u0438\u0438."
+ },
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": true,
+ "issues": []
+ }
+ }
+ ],
+ "compliance": {
+ "valid": false,
+ "issues": [
+ "Unclosed Anchor at end of file (started line 26)",
+ "Unclosed Anchor: [DEF:InvalidZipFormatError:Class] started at line 26",
+ "Missing Mandatory Tag: @PURPOSE",
+ "Unclosed Anchor: [DEF:InvalidZipFormatError:Class] started at line 26",
+ "Missing Mandatory Tag: @PURPOSE"
+ ]
+ }
+ }
+ ],
+ "compliance": {
+ "valid": false,
+ "issues": [
+ "Unclosed Anchor at end of file (started line 1)",
+ "Unclosed Anchor: [DEF:backend.core.utils.fileio:Module] started at line 1"
+ ]
+ }
+ },
+ {
+ "name": "backend.core.utils.network",
+ "type": "Module",
+ "start_line": 1,
+ "end_line": null,
+ "tags": {
+ "SEMANTICS": "network, http, client, api, requests, session, authentication",
+ "PURPOSE": "\u0418\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u0438\u0440\u0443\u0435\u0442 \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u0443\u044e HTTP-\u043b\u043e\u0433\u0438\u043a\u0443 \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 Superset API, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e, \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0435\u0441\u0441\u0438\u0435\u0439, retry-\u043b\u043e\u0433\u0438\u043a\u0443 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043e\u0448\u0438\u0431\u043e\u043a.",
+ "LAYER": "Infra",
+ "PUBLIC_API": "APIClient"
+ },
+ "relations": [
+ {
+ "type": "DEPENDS_ON",
+ "target": "backend.src.core.logger"
+ },
+ {
+ "type": "DEPENDS_ON",
+ "target": "requests"
+ }
+ ],
+ "children": [
+ {
+ "name": "SupersetAPIError",
+ "type": "Class",
+ "start_line": 22,
+ "end_line": null,
+ "tags": {},
+ "relations": [],
+ "children": [
+ {
+ "name": "AuthenticationError",
+ "type": "Class",
+ "start_line": 28,
+ "end_line": null,
+ "tags": {},
+ "relations": [],
+ "children": [
+ {
+ "name": "PermissionDeniedError",
+ "type": "Class",
+ "start_line": 33,
+ "end_line": null,
+ "tags": {},
+ "relations": [],
+ "children": [
+ {
+ "name": "DashboardNotFoundError",
+ "type": "Class",
+ "start_line": 38,
+ "end_line": null,
+ "tags": {},
+ "relations": [],
+ "children": [
+ {
+ "name": "NetworkError",
+ "type": "Class",
+ "start_line": 43,
+ "end_line": null,
+ "tags": {},
+ "relations": [],
+ "children": [
+ {
+ "name": "APIClient",
+ "type": "Class",
+ "start_line": 49,
+ "end_line": 284,
+ "tags": {
+ "PURPOSE": "\u0418\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u0438\u0440\u0443\u0435\u0442 HTTP-\u043b\u043e\u0433\u0438\u043a\u0443 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 API, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0441\u0435\u0441\u0441\u0438\u0438, \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e, \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432."
+ },
+ "relations": [],
+ "children": [
+ {
+ "name": "__init__",
+ "type": "Function",
+ "start_line": 54,
+ "end_line": 71,
+ "tags": {
+ "PURPOSE": "\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 API \u043a\u043b\u0438\u0435\u043d\u0442 \u0441 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439, \u0441\u0435\u0441\u0441\u0438\u0435\u0439 \u0438 \u043b\u043e\u0433\u0433\u0435\u0440\u043e\u043c.",
+ "PARAM": "timeout (int) - \u0422\u0430\u0439\u043c\u0430\u0443\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432.",
+ "PRE": "config must contain 'base_url' and 'auth'.",
+ "POST": "APIClient instance is initialized with a session."
+ },
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": true,
+ "issues": []
+ }
+ },
+ {
+ "name": "_init_session",
+ "type": "Function",
+ "start_line": 73,
+ "end_line": 90,
+ "tags": {
+ "PURPOSE": "\u0421\u043e\u0437\u0434\u0430\u0435\u0442 \u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 `requests.Session` \u0441 retry-\u043b\u043e\u0433\u0438\u043a\u043e\u0439.",
+ "PRE": "self.request_settings must be initialized.",
+ "POST": "Returns a configured requests.Session instance.",
+ "RETURN": "requests.Session - \u041d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0430\u044f \u0441\u0435\u0441\u0441\u0438\u044f."
+ },
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": true,
+ "issues": []
+ }
+ },
+ {
+ "name": "authenticate",
+ "type": "Function",
+ "start_line": 92,
+ "end_line": 119,
+ "tags": {
+ "PURPOSE": "\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u0432 Superset API \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 access \u0438 CSRF \u0442\u043e\u043a\u0435\u043d\u044b.",
+ "PRE": "self.auth and self.base_url must be valid.",
+ "POST": "`self._tokens` \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d, `self._authenticated` \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0432 `True`.",
+ "RETURN": "Dict[str, str] - \u0421\u043b\u043e\u0432\u0430\u0440\u044c \u0441 \u0442\u043e\u043a\u0435\u043d\u0430\u043c\u0438.",
+ "THROW": "AuthenticationError, NetworkError - \u043f\u0440\u0438 \u043e\u0448\u0438\u0431\u043a\u0430\u0445."
+ },
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": true,
+ "issues": []
+ }
+ },
+ {
+ "name": "headers",
+ "type": "Function",
+ "start_line": 122,
+ "end_line": 135,
+ "tags": {
+ "PURPOSE": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 HTTP-\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u0434\u043b\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432.",
+ "PRE": "APIClient is initialized and authenticated or can be authenticated.",
+ "POST": "Returns headers including auth tokens."
+ },
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": true,
+ "issues": []
+ }
+ },
+ {
+ "name": "request",
+ "type": "Function",
+ "start_line": 137,
+ "end_line": 161,
+ "tags": {
+ "PURPOSE": "\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439 HTTP-\u0437\u0430\u043f\u0440\u043e\u0441 \u043a API.",
+ "PARAM": "raw_response (bool) - \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043b\u0438 \u0441\u044b\u0440\u043e\u0439 \u043e\u0442\u0432\u0435\u0442.",
+ "PRE": "method and endpoint must be strings.",
+ "POST": "Returns response content or raw Response object.",
+ "RETURN": "`requests.Response` \u0435\u0441\u043b\u0438 `raw_response=True`, \u0438\u043d\u0430\u0447\u0435 `dict`.",
+ "THROW": "SupersetAPIError, NetworkError \u0438 \u0438\u0445 \u043f\u043e\u0434\u043a\u043b\u0430\u0441\u0441\u044b."
+ },
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": true,
+ "issues": []
+ }
+ },
+ {
+ "name": "_handle_http_error",
+ "type": "Function",
+ "start_line": 163,
+ "end_line": 176,
+ "tags": {
+ "PURPOSE": "(Helper) \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 HTTP \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f.",
+ "PARAM": "endpoint (str) - \u042d\u043d\u0434\u043f\u043e\u0438\u043d\u0442.",
+ "PRE": "e must be a valid HTTPError with a response.",
+ "POST": "Raises a specific SupersetAPIError or subclass."
+ },
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": true,
+ "issues": []
+ }
+ },
+ {
+ "name": "_handle_network_error",
+ "type": "Function",
+ "start_line": 178,
+ "end_line": 190,
+ "tags": {
+ "PURPOSE": "(Helper) \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 `NetworkError`.",
+ "PARAM": "url (str) - URL.",
+ "PRE": "e must be a RequestException.",
+ "POST": "Raises a NetworkError."
+ },
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": true,
+ "issues": []
+ }
+ },
+ {
+ "name": "upload_file",
+ "type": "Function",
+ "start_line": 192,
+ "end_line": 219,
+ "tags": {
+ "PURPOSE": "\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0444\u0430\u0439\u043b \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0447\u0435\u0440\u0435\u0437 multipart/form-data.",
+ "PARAM": "timeout (Optional[int]) - \u0422\u0430\u0439\u043c\u0430\u0443\u0442.",
+ "PRE": "file_info must contain 'file_obj' and 'file_name'.",
+ "POST": "File is uploaded and response returned.",
+ "RETURN": "\u041e\u0442\u0432\u0435\u0442 API \u0432 \u0432\u0438\u0434\u0435 \u0441\u043b\u043e\u0432\u0430\u0440\u044f.",
+ "THROW": "SupersetAPIError, NetworkError, TypeError."
+ },
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": true,
+ "issues": []
+ }
+ },
+ {
+ "name": "_perform_upload",
+ "type": "Function",
+ "start_line": 221,
+ "end_line": 247,
+ "tags": {
+ "PURPOSE": "(Helper) \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 POST \u0437\u0430\u043f\u0440\u043e\u0441 \u0441 \u0444\u0430\u0439\u043b\u043e\u043c.",
+ "PARAM": "timeout (Optional[int]) - \u0422\u0430\u0439\u043c\u0430\u0443\u0442.",
+ "PRE": "url, files, and headers must be provided.",
+ "POST": "POST request is performed and JSON response returned.",
+ "RETURN": "Dict - \u041e\u0442\u0432\u0435\u0442."
+ },
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": true,
+ "issues": []
+ }
+ },
+ {
+ "name": "fetch_paginated_count",
+ "type": "Function",
+ "start_line": 249,
+ "end_line": 261,
+ "tags": {
+ "PURPOSE": "\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u0438.",
+ "PARAM": "count_field (str) - \u041f\u043e\u043b\u0435 \u0441 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c.",
+ "PRE": "query_params must be a dictionary.",
+ "POST": "Returns total count of items.",
+ "RETURN": "int - \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e."
+ },
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": true,
+ "issues": []
+ }
+ },
+ {
+ "name": "fetch_paginated_data",
+ "type": "Function",
+ "start_line": 263,
+ "end_line": 282,
+ "tags": {
+ "PURPOSE": "\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u043e \u0432\u0441\u0435\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u043f\u0430\u0433\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u0430.",
+ "PARAM": "pagination_options (Dict[str, Any]) - \u041e\u043f\u0446\u0438\u0438 \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u0438.",
+ "PRE": "pagination_options must contain 'base_query', 'total_count', 'results_field'.",
+ "POST": "Returns all items across all pages.",
+ "RETURN": "List[Any] - \u0421\u043f\u0438\u0441\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445."
+ },
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": true,
+ "issues": []
+ }
+ }
+ ],
+ "compliance": {
+ "valid": true,
+ "issues": []
+ }
+ }
+ ],
+ "compliance": {
+ "valid": false,
+ "issues": [
+ "Unclosed Anchor at end of file (started line 43)",
+ "Unclosed Anchor: [DEF:NetworkError:Class] started at line 43",
+ "Missing Mandatory Tag: @PURPOSE",
+ "Unclosed Anchor: [DEF:NetworkError:Class] started at line 43",
+ "Missing Mandatory Tag: @PURPOSE",
+ "Unclosed Anchor: [DEF:NetworkError:Class] started at line 43",
+ "Missing Mandatory Tag: @PURPOSE",
+ "Unclosed Anchor: [DEF:NetworkError:Class] started at line 43",
+ "Missing Mandatory Tag: @PURPOSE",
+ "Unclosed Anchor: [DEF:NetworkError:Class] started at line 43",
+ "Missing Mandatory Tag: @PURPOSE",
+ "Unclosed Anchor: [DEF:NetworkError:Class] started at line 43",
+ "Missing Mandatory Tag: @PURPOSE"
+ ]
+ }
+ }
+ ],
+ "compliance": {
+ "valid": false,
+ "issues": [
+ "Unclosed Anchor at end of file (started line 38)",
+ "Unclosed Anchor: [DEF:DashboardNotFoundError:Class] started at line 38",
+ "Missing Mandatory Tag: @PURPOSE",
+ "Unclosed Anchor: [DEF:DashboardNotFoundError:Class] started at line 38",
+ "Missing Mandatory Tag: @PURPOSE",
+ "Unclosed Anchor: [DEF:DashboardNotFoundError:Class] started at line 38",
+ "Missing Mandatory Tag: @PURPOSE",
+ "Unclosed Anchor: [DEF:DashboardNotFoundError:Class] started at line 38",
+ "Missing Mandatory Tag: @PURPOSE",
+ "Unclosed Anchor: [DEF:DashboardNotFoundError:Class] started at line 38",
+ "Missing Mandatory Tag: @PURPOSE"
+ ]
+ }
+ }
+ ],
+ "compliance": {
+ "valid": false,
+ "issues": [
+ "Unclosed Anchor at end of file (started line 33)",
+ "Unclosed Anchor: [DEF:PermissionDeniedError:Class] started at line 33",
+ "Missing Mandatory Tag: @PURPOSE",
+ "Unclosed Anchor: [DEF:PermissionDeniedError:Class] started at line 33",
+ "Missing Mandatory Tag: @PURPOSE",
+ "Unclosed Anchor: [DEF:PermissionDeniedError:Class] started at line 33",
+ "Missing Mandatory Tag: @PURPOSE",
+ "Unclosed Anchor: [DEF:PermissionDeniedError:Class] started at line 33",
+ "Missing Mandatory Tag: @PURPOSE"
+ ]
+ }
+ }
+ ],
+ "compliance": {
+ "valid": false,
+ "issues": [
+ "Unclosed Anchor at end of file (started line 28)",
+ "Unclosed Anchor: [DEF:AuthenticationError:Class] started at line 28",
+ "Missing Mandatory Tag: @PURPOSE",
+ "Unclosed Anchor: [DEF:AuthenticationError:Class] started at line 28",
+ "Missing Mandatory Tag: @PURPOSE",
+ "Unclosed Anchor: [DEF:AuthenticationError:Class] started at line 28",
+ "Missing Mandatory Tag: @PURPOSE"
+ ]
+ }
+ }
+ ],
+ "compliance": {
+ "valid": false,
+ "issues": [
+ "Unclosed Anchor at end of file (started line 22)",
+ "Unclosed Anchor: [DEF:SupersetAPIError:Class] started at line 22",
+ "Missing Mandatory Tag: @PURPOSE",
+ "Unclosed Anchor: [DEF:SupersetAPIError:Class] started at line 22",
+ "Missing Mandatory Tag: @PURPOSE"
+ ]
+ }
+ }
+ ],
+ "compliance": {
+ "valid": false,
+ "issues": [
+ "Unclosed Anchor at end of file (started line 1)",
+ "Unclosed Anchor: [DEF:backend.core.utils.network:Module] started at line 1"
+ ]
+ }
+ },
{
"name": "backend.src.core.utils.matching",
"type": "Module",
@@ -7462,6 +5905,152 @@
"issues": []
}
},
+ {
+ "name": "backend.core.utils.dataset_mapper",
+ "type": "Module",
+ "start_line": 1,
+ "end_line": 237,
+ "tags": {
+ "SEMANTICS": "dataset, mapping, postgresql, xlsx, superset",
+ "PURPOSE": "\u042d\u0442\u043e\u0442 \u043c\u043e\u0434\u0443\u043b\u044c \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 (verbose_map) \u0432 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430\u0445 Superset, \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u044f \u0438\u0445 \u0438\u0437 PostgreSQL \u0438\u043b\u0438 XLSX-\u0444\u0430\u0439\u043b\u043e\u0432.",
+ "LAYER": "Domain",
+ "PUBLIC_API": "DatasetMapper"
+ },
+ "relations": [
+ {
+ "type": "DEPENDS_ON",
+ "target": "backend.core.superset_client"
+ },
+ {
+ "type": "DEPENDS_ON",
+ "target": "pandas"
+ },
+ {
+ "type": "DEPENDS_ON",
+ "target": "psycopg2"
+ }
+ ],
+ "children": [
+ {
+ "name": "DatasetMapper",
+ "type": "Class",
+ "start_line": 18,
+ "end_line": 235,
+ "tags": {
+ "PURPOSE": "\u041a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f \u043c\u0435\u043f\u043f\u0438\u043d\u0433\u0430 \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f verbose_map \u0432 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430\u0445 Superset."
+ },
+ "relations": [],
+ "children": [
+ {
+ "name": "__init__",
+ "type": "Function",
+ "start_line": 21,
+ "end_line": 26,
+ "tags": {
+ "PURPOSE": "Initializes the mapper.",
+ "POST": "\u041e\u0431\u044a\u0435\u043a\u0442 DatasetMapper \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d."
+ },
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": false,
+ "issues": [
+ "Missing Mandatory Tag: @PRE",
+ "Missing Belief State Logging: Function should use belief_scope context manager.",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Belief State Logging: Function should use belief_scope context manager.",
+ "Missing Mandatory Tag: @PRE",
+ "Missing Belief State Logging: Function should use belief_scope context manager."
+ ]
+ }
+ },
+ {
+ "name": "get_postgres_comments",
+ "type": "Function",
+ "start_line": 28,
+ "end_line": 91,
+ "tags": {
+ "PURPOSE": "\u0418\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u043a \u043a\u043e\u043b\u043e\u043d\u043a\u0430\u043c \u0438\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 PostgreSQL.",
+ "PRE": "table_name \u0438 table_schema \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438.",
+ "POST": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0441\u043b\u043e\u0432\u0430\u0440\u044c, \u0433\u0434\u0435 \u043a\u043b\u044e\u0447\u0438 - \u0438\u043c\u0435\u043d\u0430 \u043a\u043e\u043b\u043e\u043d\u043e\u043a, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f - \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u0438\u0437 \u0411\u0414.",
+ "THROW": "Exception - \u041f\u0440\u0438 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043a \u0411\u0414.",
+ "PARAM": "table_schema (str) - \u0421\u0445\u0435\u043c\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b.",
+ "RETURN": "Dict[str, str] - \u0421\u043b\u043e\u0432\u0430\u0440\u044c \u0441 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438 \u043a \u043a\u043e\u043b\u043e\u043d\u043a\u0430\u043c."
+ },
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": true,
+ "issues": []
+ }
+ },
+ {
+ "name": "load_excel_mappings",
+ "type": "Function",
+ "start_line": 93,
+ "end_line": 111,
+ "tags": {
+ "PURPOSE": "\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u043c\u0435\u043f\u043f\u0438\u043d\u0433\u0438 'column_name' -> 'column_comment' \u0438\u0437 XLSX \u0444\u0430\u0439\u043b\u0430.",
+ "PRE": "file_path \u0434\u043e\u043b\u0436\u0435\u043d \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 XLSX \u0444\u0430\u0439\u043b.",
+ "POST": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0441 \u043c\u0435\u043f\u043f\u0438\u043d\u0433\u0430\u043c\u0438 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430.",
+ "THROW": "Exception - \u041f\u0440\u0438 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u0447\u0442\u0435\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u0430 \u0438\u043b\u0438 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430.",
+ "PARAM": "file_path (str) - \u041f\u0443\u0442\u044c \u043a XLSX \u0444\u0430\u0439\u043b\u0443.",
+ "RETURN": "Dict[str, str] - \u0421\u043b\u043e\u0432\u0430\u0440\u044c \u0441 \u043c\u0435\u043f\u043f\u0438\u043d\u0433\u0430\u043c\u0438."
+ },
+ "relations": [],
+ "children": [],
+ "compliance": {
+ "valid": true,
+ "issues": []
+ }
+ },
+ {
+ "name": "run_mapping",
+ "type": "Function",
+ "start_line": 113,
+ "end_line": 234,
+ "tags": {
+ "PURPOSE": "\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043c\u0435\u043f\u043f\u0438\u043d\u0433\u0430 \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f verbose_map \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430 \u0432 Superset.",
+ "PRE": "dataset_id \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c ID \u0432 Superset.",
+ "POST": "\u0415\u0441\u043b\u0438 \u043d\u0430\u0439\u0434\u0435\u043d\u044b \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u0434\u0430\u0442\u0430\u0441\u0435\u0442 \u0432 Superset \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d \u0447\u0435\u0440\u0435\u0437 API.",
+ "PARAM": "table_schema (Optional[str]) - \u0421\u0445\u0435\u043c\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432 PostgreSQL."
+ },
+ "relations": [
+ {
+ "type": "CALLS",
+ "target": "self.get_postgres_comments"
+ },
+ {
+ "type": "CALLS",
+ "target": "self.load_excel_mappings"
+ },
+ {
+ "type": "CALLS",
+ "target": "superset_client.get_dataset"
+ },
+ {
+ "type": "CALLS",
+ "target": "superset_client.update_dataset"
+ }
+ ],
+ "children": [],
+ "compliance": {
+ "valid": true,
+ "issues": []
+ }
+ }
+ ],
+ "compliance": {
+ "valid": true,
+ "issues": []
+ }
+ }
+ ],
+ "compliance": {
+ "valid": true,
+ "issues": []
+ }
+ },
{
"name": "TaskPersistenceModule",
"type": "Module",
@@ -8277,7 +6866,7 @@
"name": "backend.src.api.routes.environments",
"type": "Module",
"start_line": 1,
- "end_line": 133,
+ "end_line": 122,
"tags": {
"SEMANTICS": "api, environments, superset, databases",
"PURPOSE": "API endpoints for listing environments and their databases.",
@@ -8374,7 +6963,7 @@
"name": "get_environment_databases",
"type": "Function",
"start_line": 100,
- "end_line": 131,
+ "end_line": 120,
"tags": {
"PURPOSE": "Fetch the list of databases from a specific environment.",
"PRE": "Environment id exists.",
@@ -8399,7 +6988,7 @@
"name": "backend.src.api.routes.migration",
"type": "Module",
"start_line": 1,
- "end_line": 76,
+ "end_line": 68,
"tags": {
"SEMANTICS": "api, migration, dashboards",
"PURPOSE": "API endpoints for migration operations.",
@@ -8419,8 +7008,8 @@
{
"name": "get_dashboards",
"type": "Function",
- "start_line": 17,
- "end_line": 40,
+ "start_line": 16,
+ "end_line": 32,
"tags": {
"PURPOSE": "Fetch all dashboards from the specified environment for the grid.",
"PRE": "Environment ID must be valid.",
@@ -8441,8 +7030,8 @@
{
"name": "execute_migration",
"type": "Function",
- "start_line": 42,
- "end_line": 74,
+ "start_line": 34,
+ "end_line": 66,
"tags": {
"PURPOSE": "Execute the migration of selected dashboards.",
"PRE": "Selection must be valid and environments must exist.",
@@ -8470,7 +7059,7 @@
"name": "PluginsRouter",
"type": "Module",
"start_line": 1,
- "end_line": 29,
+ "end_line": 30,
"tags": {
"SEMANTICS": "api, router, plugins, list",
"PURPOSE": "Defines the FastAPI router for plugin-related endpoints, allowing clients to list available plugins.",
@@ -8482,8 +7071,8 @@
{
"name": "list_plugins",
"type": "Function",
- "start_line": 14,
- "end_line": 28,
+ "start_line": 15,
+ "end_line": 29,
"tags": {
"PURPOSE": "Retrieve a list of all available plugins.",
"PRE": "plugin_loader is injected via Depends.",
@@ -8629,7 +7218,7 @@
"name": "SettingsRouter",
"type": "Module",
"start_line": 1,
- "end_line": 242,
+ "end_line": 208,
"tags": {
"SEMANTICS": "settings, api, router, fastapi",
"PURPOSE": "Provides API endpoints for managing application settings and Superset environments.",
@@ -8651,8 +7240,8 @@
{
"name": "get_settings",
"type": "Function",
- "start_line": 26,
- "end_line": 41,
+ "start_line": 25,
+ "end_line": 40,
"tags": {
"PURPOSE": "Retrieves all application settings.",
"PRE": "Config manager is available.",
@@ -8669,8 +7258,8 @@
{
"name": "update_global_settings",
"type": "Function",
- "start_line": 43,
- "end_line": 58,
+ "start_line": 42,
+ "end_line": 57,
"tags": {
"PURPOSE": "Updates global application settings.",
"PRE": "New settings are provided.",
@@ -8688,8 +7277,8 @@
{
"name": "get_environments",
"type": "Function",
- "start_line": 60,
- "end_line": 70,
+ "start_line": 59,
+ "end_line": 69,
"tags": {
"PURPOSE": "Lists all configured Superset environments.",
"PRE": "Config manager is available.",
@@ -8706,8 +7295,8 @@
{
"name": "add_environment",
"type": "Function",
- "start_line": 72,
- "end_line": 106,
+ "start_line": 71,
+ "end_line": 95,
"tags": {
"PURPOSE": "Adds a new Superset environment.",
"PRE": "Environment data is valid and reachable.",
@@ -8725,8 +7314,8 @@
{
"name": "update_environment",
"type": "Function",
- "start_line": 108,
- "end_line": 152,
+ "start_line": 97,
+ "end_line": 131,
"tags": {
"PURPOSE": "Updates an existing Superset environment.",
"PRE": "ID and valid environment data are provided.",
@@ -8744,8 +7333,8 @@
{
"name": "delete_environment",
"type": "Function",
- "start_line": 154,
- "end_line": 168,
+ "start_line": 133,
+ "end_line": 147,
"tags": {
"PURPOSE": "Deletes a Superset environment.",
"PRE": "ID is provided.",
@@ -8762,8 +7351,8 @@
{
"name": "test_environment_connection",
"type": "Function",
- "start_line": 170,
- "end_line": 214,
+ "start_line": 149,
+ "end_line": 180,
"tags": {
"PURPOSE": "Tests the connection to a Superset environment.",
"PRE": "ID is provided.",
@@ -8781,8 +7370,8 @@
{
"name": "validate_backup_path",
"type": "Function",
- "start_line": 216,
- "end_line": 240,
+ "start_line": 182,
+ "end_line": 206,
"tags": {
"PURPOSE": "Validates if a backup path exists and is writable.",
"PRE": "Path is provided in path_data.",
@@ -9174,7 +7763,7 @@
"name": "backend.src.services.mapping_service",
"type": "Module",
"start_line": 1,
- "end_line": 82,
+ "end_line": 71,
"tags": {
"SEMANTICS": "service, mapping, fuzzy-matching, superset",
"PURPOSE": "Orchestrates database fetching and fuzzy matching suggestions.",
@@ -9195,8 +7784,8 @@
{
"name": "MappingService",
"type": "Class",
- "start_line": 19,
- "end_line": 80,
+ "start_line": 18,
+ "end_line": 69,
"tags": {
"PURPOSE": "Service for handling database mapping logic."
},
@@ -9205,8 +7794,8 @@
{
"name": "__init__",
"type": "Function",
- "start_line": 23,
- "end_line": 31,
+ "start_line": 22,
+ "end_line": 30,
"tags": {
"PURPOSE": "Initializes the mapping service with a config manager.",
"PRE": "config_manager is provided.",
@@ -9223,8 +7812,8 @@
{
"name": "_get_client",
"type": "Function",
- "start_line": 33,
- "end_line": 57,
+ "start_line": 32,
+ "end_line": 46,
"tags": {
"PURPOSE": "Helper to get an initialized SupersetClient for an environment.",
"PARAM": "env_id (str) - The ID of the environment.",
@@ -9242,8 +7831,8 @@
{
"name": "get_suggestions",
"type": "Function",
- "start_line": 59,
- "end_line": 78,
+ "start_line": 48,
+ "end_line": 67,
"tags": {
"PURPOSE": "Fetches databases from both environments and returns fuzzy matching suggestions.",
"PARAM": "target_env_id (str) - Target environment ID.",
@@ -9274,7 +7863,7 @@
"name": "BackupPlugin",
"type": "Module",
"start_line": 1,
- "end_line": 192,
+ "end_line": 189,
"tags": {
"SEMANTICS": "backup, superset, automation, dashboard, plugin",
"PURPOSE": "A plugin that provides functionality to back up Superset dashboards.",
@@ -9298,8 +7887,8 @@
{
"name": "BackupPlugin",
"type": "Class",
- "start_line": 29,
- "end_line": 191,
+ "start_line": 27,
+ "end_line": 188,
"tags": {
"PURPOSE": "Implementation of the backup plugin logic."
},
@@ -9308,8 +7897,8 @@
{
"name": "id",
"type": "Function",
- "start_line": 37,
- "end_line": 45,
+ "start_line": 35,
+ "end_line": 43,
"tags": {
"PURPOSE": "Returns the unique identifier for the backup plugin.",
"PRE": "Plugin instance exists.",
@@ -9326,8 +7915,8 @@
{
"name": "name",
"type": "Function",
- "start_line": 48,
- "end_line": 56,
+ "start_line": 46,
+ "end_line": 54,
"tags": {
"PURPOSE": "Returns the human-readable name of the backup plugin.",
"PRE": "Plugin instance exists.",
@@ -9344,8 +7933,8 @@
{
"name": "description",
"type": "Function",
- "start_line": 59,
- "end_line": 67,
+ "start_line": 57,
+ "end_line": 65,
"tags": {
"PURPOSE": "Returns a description of the backup plugin.",
"PRE": "Plugin instance exists.",
@@ -9362,8 +7951,8 @@
{
"name": "version",
"type": "Function",
- "start_line": 70,
- "end_line": 78,
+ "start_line": 68,
+ "end_line": 76,
"tags": {
"PURPOSE": "Returns the version of the backup plugin.",
"PRE": "Plugin instance exists.",
@@ -9380,8 +7969,8 @@
{
"name": "get_schema",
"type": "Function",
- "start_line": 80,
- "end_line": 109,
+ "start_line": 78,
+ "end_line": 107,
"tags": {
"PURPOSE": "Returns the JSON schema for backup plugin parameters.",
"PRE": "Plugin instance exists.",
@@ -9398,8 +7987,8 @@
{
"name": "execute",
"type": "Function",
- "start_line": 111,
- "end_line": 190,
+ "start_line": 109,
+ "end_line": 187,
"tags": {
"PURPOSE": "Executes the dashboard backup logic.",
"PARAM": "params (Dict[str, Any]) - Backup parameters (env, backup_path).",
@@ -9776,7 +8365,7 @@
"name": "MapperPluginModule",
"type": "Module",
"start_line": 1,
- "end_line": 198,
+ "end_line": 195,
"tags": {
"SEMANTICS": "plugin, mapper, datasets, postgresql, excel",
"PURPOSE": "Implements a plugin for mapping dataset columns using external database connections or Excel files.",
@@ -9789,8 +8378,8 @@
{
"name": "MapperPlugin",
"type": "Class",
- "start_line": 19,
- "end_line": 197,
+ "start_line": 18,
+ "end_line": 194,
"tags": {
"PURPOSE": "Plugin for mapping dataset columns verbose names."
},
@@ -9799,8 +8388,8 @@
{
"name": "id",
"type": "Function",
- "start_line": 27,
- "end_line": 35,
+ "start_line": 26,
+ "end_line": 34,
"tags": {
"PURPOSE": "Returns the unique identifier for the mapper plugin.",
"PRE": "Plugin instance exists.",
@@ -9817,8 +8406,8 @@
{
"name": "name",
"type": "Function",
- "start_line": 38,
- "end_line": 46,
+ "start_line": 37,
+ "end_line": 45,
"tags": {
"PURPOSE": "Returns the human-readable name of the mapper plugin.",
"PRE": "Plugin instance exists.",
@@ -9835,8 +8424,8 @@
{
"name": "description",
"type": "Function",
- "start_line": 49,
- "end_line": 57,
+ "start_line": 48,
+ "end_line": 56,
"tags": {
"PURPOSE": "Returns a description of the mapper plugin.",
"PRE": "Plugin instance exists.",
@@ -9853,8 +8442,8 @@
{
"name": "version",
"type": "Function",
- "start_line": 60,
- "end_line": 68,
+ "start_line": 59,
+ "end_line": 67,
"tags": {
"PURPOSE": "Returns the version of the mapper plugin.",
"PRE": "Plugin instance exists.",
@@ -9871,8 +8460,8 @@
{
"name": "get_schema",
"type": "Function",
- "start_line": 70,
- "end_line": 120,
+ "start_line": 69,
+ "end_line": 119,
"tags": {
"PURPOSE": "Returns the JSON schema for the mapper plugin parameters.",
"PRE": "Plugin instance exists.",
@@ -9889,8 +8478,8 @@
{
"name": "execute",
"type": "Function",
- "start_line": 122,
- "end_line": 195,
+ "start_line": 121,
+ "end_line": 192,
"tags": {
"PURPOSE": "Executes the dataset mapping logic.",
"PARAM": "params (Dict[str, Any]) - Mapping parameters.",
@@ -9921,7 +8510,7 @@
"name": "MigrationPlugin",
"type": "Module",
"start_line": 1,
- "end_line": 390,
+ "end_line": 387,
"tags": {
"SEMANTICS": "migration, superset, automation, dashboard, plugin",
"PURPOSE": "A plugin that provides functionality to migrate Superset dashboards between environments.",
@@ -9945,8 +8534,8 @@
{
"name": "MigrationPlugin",
"type": "Class",
- "start_line": 25,
- "end_line": 389,
+ "start_line": 23,
+ "end_line": 386,
"tags": {
"PURPOSE": "Implementation of the migration plugin logic."
},
@@ -9955,8 +8544,8 @@
{
"name": "id",
"type": "Function",
- "start_line": 33,
- "end_line": 41,
+ "start_line": 31,
+ "end_line": 39,
"tags": {
"PURPOSE": "Returns the unique identifier for the migration plugin.",
"PRE": "None.",
@@ -9973,8 +8562,8 @@
{
"name": "name",
"type": "Function",
- "start_line": 44,
- "end_line": 52,
+ "start_line": 42,
+ "end_line": 50,
"tags": {
"PURPOSE": "Returns the human-readable name of the migration plugin.",
"PRE": "None.",
@@ -9991,8 +8580,8 @@
{
"name": "description",
"type": "Function",
- "start_line": 55,
- "end_line": 63,
+ "start_line": 53,
+ "end_line": 61,
"tags": {
"PURPOSE": "Returns a description of the migration plugin.",
"PRE": "None.",
@@ -10009,8 +8598,8 @@
{
"name": "version",
"type": "Function",
- "start_line": 66,
- "end_line": 74,
+ "start_line": 64,
+ "end_line": 72,
"tags": {
"PURPOSE": "Returns the version of the migration plugin.",
"PRE": "None.",
@@ -10027,8 +8616,8 @@
{
"name": "get_schema",
"type": "Function",
- "start_line": 76,
- "end_line": 125,
+ "start_line": 74,
+ "end_line": 123,
"tags": {
"PURPOSE": "Returns the JSON schema for migration plugin parameters.",
"PRE": "Config manager is available.",
@@ -10045,8 +8634,8 @@
{
"name": "execute",
"type": "Function",
- "start_line": 127,
- "end_line": 388,
+ "start_line": 125,
+ "end_line": 385,
"tags": {
"PURPOSE": "Executes the dashboard migration logic.",
"PARAM": "params (Dict[str, Any]) - Migration parameters.",
@@ -10058,8 +8647,8 @@
{
"name": "MigrationPlugin.execute",
"type": "Action",
- "start_line": 147,
- "end_line": 387,
+ "start_line": 145,
+ "end_line": 384,
"tags": {
"PURPOSE": "Execute the migration logic with proper task logging."
},
@@ -10068,8 +8657,8 @@
{
"name": "__init__",
"type": "Function",
- "start_line": 154,
- "end_line": 162,
+ "start_line": 152,
+ "end_line": 160,
"tags": {
"PURPOSE": "Initializes the proxy logger.",
"PRE": "None.",
@@ -10085,8 +8674,8 @@
{
"name": "debug",
"type": "Function",
- "start_line": 164,
- "end_line": 171,
+ "start_line": 162,
+ "end_line": 169,
"tags": {
"PURPOSE": "Logs a debug message to the task manager.",
"PRE": "msg is a string.",
@@ -10102,8 +8691,8 @@
{
"name": "info",
"type": "Function",
- "start_line": 173,
- "end_line": 180,
+ "start_line": 171,
+ "end_line": 178,
"tags": {
"PURPOSE": "Logs an info message to the task manager.",
"PRE": "msg is a string.",
@@ -10119,8 +8708,8 @@
{
"name": "warning",
"type": "Function",
- "start_line": 182,
- "end_line": 189,
+ "start_line": 180,
+ "end_line": 187,
"tags": {
"PURPOSE": "Logs a warning message to the task manager.",
"PRE": "msg is a string.",
@@ -10136,8 +8725,8 @@
{
"name": "error",
"type": "Function",
- "start_line": 191,
- "end_line": 198,
+ "start_line": 189,
+ "end_line": 196,
"tags": {
"PURPOSE": "Logs an error message to the task manager.",
"PRE": "msg is a string.",
@@ -10153,8 +8742,8 @@
{
"name": "critical",
"type": "Function",
- "start_line": 200,
- "end_line": 207,
+ "start_line": 198,
+ "end_line": 205,
"tags": {
"PURPOSE": "Logs a critical message to the task manager.",
"PRE": "msg is a string.",
@@ -10170,8 +8759,8 @@
{
"name": "exception",
"type": "Function",
- "start_line": 209,
- "end_line": 216,
+ "start_line": 207,
+ "end_line": 214,
"tags": {
"PURPOSE": "Logs an exception message to the task manager.",
"PRE": "msg is a string.",
@@ -10209,37 +8798,23 @@
}
},
{
- "name": "test_superset_config_url_normalization",
+ "name": "test_environment_model",
"type": "Function",
"start_line": 5,
- "end_line": 41,
+ "end_line": null,
"tags": {
- "PURPOSE": "Tests that SupersetConfig correctly normalizes the base URL.",
- "PRE": "SupersetConfig class is available.",
- "POST": "URL normalization is verified."
+ "PURPOSE": "Tests that Environment model correctly stores values.",
+ "PRE": "Environment class is available.",
+ "POST": "Values are verified."
},
"relations": [],
"children": [],
"compliance": {
- "valid": true,
- "issues": []
- }
- },
- {
- "name": "test_superset_config_invalid_url",
- "type": "Function",
- "start_line": 43,
- "end_line": 62,
- "tags": {
- "PURPOSE": "Tests that SupersetConfig raises ValueError for invalid URLs.",
- "PRE": "SupersetConfig class is available.",
- "POST": "ValueError is raised for invalid URLs."
- },
- "relations": [],
- "children": [],
- "compliance": {
- "valid": true,
- "issues": []
+ "valid": false,
+ "issues": [
+ "Unclosed Anchor at end of file (started line 5)",
+ "Unclosed Anchor: [DEF:test_environment_model:Function] started at line 5"
+ ]
}
},
{
diff --git a/specs/012-remove-superset-tool/spec.md b/specs/012-remove-superset-tool/spec.md
index 2d7756c..7c11eae 100644
--- a/specs/012-remove-superset-tool/spec.md
+++ b/specs/012-remove-superset-tool/spec.md
@@ -2,7 +2,7 @@
**Feature Branch**: `012-remove-superset-tool`
**Created**: 2026-01-22
-**Status**: Draft
+**Status**: Completed
**Input**: User description: "нужен рефакторинг бека - я хочу исключить модуль superset_tool, пусть останется только backend"
## Clarifications
diff --git a/specs/project_map.md b/specs/project_map.md
index 4d5af6c..1b70aa9 100644
--- a/specs/project_map.md
+++ b/specs/project_map.md
@@ -51,350 +51,6 @@
- 📝 Generates the token-optimized project map.
- ƒ **_write_entity_md** (`Function`)
- 📝 Recursive helper to write entity tree to Markdown.
-- 📦 **migration_script** (`Module`)
- - 📝 Предоставляет интерактивный CLI для миграции дашбордов Superset между окружениями с возможностью восстановления после ошибок.
- - 🏗️ Layer: App
- - 🔗 DEPENDS_ON -> `superset_tool.client`
- - 🔗 DEPENDS_ON -> `superset_tool.utils`
- - ℂ **Migration** (`Class`)
- - 📝 Инкапсулирует логику интерактивной миграции дашбордов с возможностью «удалить‑и‑перезаписать» при ошибке импорта.
- - ƒ **__init__** (`Function`)
- - 📝 Инициализирует сервис миграции, настраивает логгер и начальные состояния.
- - ƒ **run** (`Function`)
- - 📝 Точка входа – последовательный запуск всех шагов миграции.
- - 🔗 CALLS -> `self.ask_delete_on_failure`
- - 🔗 CALLS -> `self.select_environments`
- - 🔗 CALLS -> `self.select_dashboards`
- - 🔗 CALLS -> `self.confirm_db_config_replacement`
- - 🔗 CALLS -> `self.execute_migration`
- - ƒ **ask_delete_on_failure** (`Function`)
- - 📝 Запрашивает у пользователя, следует ли удалять дашборд при ошибке импорта.
- - 🔗 CALLS -> `yesno`
- - ƒ **select_environments** (`Function`)
- - 📝 Позволяет пользователю выбрать исходное и целевое окружения Superset.
- - 🔗 CALLS -> `setup_clients`
- - 🔗 CALLS -> `menu`
- - ƒ **select_dashboards** (`Function`)
- - 📝 Позволяет пользователю выбрать набор дашбордов для миграции.
- - 🔗 CALLS -> `self.from_c.get_dashboards`
- - 🔗 CALLS -> `checklist`
- - ƒ **confirm_db_config_replacement** (`Function`)
- - 📝 Запрашивает у пользователя, требуется ли заменить имена БД в YAML-файлах.
- - 🔗 CALLS -> `yesno`
- - 🔗 CALLS -> `self._select_databases`
- - ƒ **_select_databases** (`Function`)
- - 📝 Позволяет пользователю выбрать исходную и целевую БД через API.
- - 🔗 CALLS -> `self.from_c.get_databases`
- - 🔗 CALLS -> `self.to_c.get_databases`
- - 🔗 CALLS -> `self.from_c.get_database`
- - 🔗 CALLS -> `self.to_c.get_database`
- - 🔗 CALLS -> `menu`
- - ƒ **_batch_delete_by_ids** (`Function`)
- - 📝 Удаляет набор дашбордов по их ID единым запросом.
- - 🔗 CALLS -> `self.to_c.network.request`
- - ƒ **execute_migration** (`Function`)
- - 📝 Выполняет экспорт-импорт дашбордов, обрабатывает ошибки и, при необходимости, выполняет процедуру восстановления.
- - 🔗 CALLS -> `self.from_c.export_dashboard`
- - 🔗 CALLS -> `create_temp_file`
- - 🔗 CALLS -> `update_yamls`
- - 🔗 CALLS -> `create_dashboard_export`
- - 🔗 CALLS -> `self.to_c.import_dashboard`
- - 🔗 CALLS -> `self._batch_delete_by_ids`
-- 📦 **superset_tool.exceptions** (`Module`)
- - 📝 Определяет иерархию пользовательских исключений для всего инструмента, обеспечивая единую точку обработки ошибок.
- - 🏗️ Layer: Infra
- - ℂ **SupersetToolError** (`Class`)
- - 📝 Базовый класс для всех ошибок, генерируемых инструментом.
- - 🔗 INHERITS_FROM -> `Exception`
- - ƒ **__init__** (`Function`)
- - 📝 Initializes the base tool error.
- - ℂ **AuthenticationError** (`Class`)
- - 📝 Ошибки, связанные с аутентификацией или авторизацией.
- - 🔗 INHERITS_FROM -> `SupersetToolError`
- - ƒ **__init__** (`Function`)
- - 📝 Initializes an authentication error.
- - ℂ **PermissionDeniedError** (`Class`)
- - 📝 Ошибка, возникающая при отказе в доступе к ресурсу.
- - 🔗 INHERITS_FROM -> `AuthenticationError`
- - ƒ **__init__** (`Function`)
- - 📝 Initializes a permission denied error.
- - ℂ **SupersetAPIError** (`Class`)
- - 📝 Общие ошибки при взаимодействии с Superset API.
- - 🔗 INHERITS_FROM -> `SupersetToolError`
- - ƒ **__init__** (`Function`)
- - 📝 Initializes a Superset API error.
- - ℂ **ExportError** (`Class`)
- - 📝 Ошибки, специфичные для операций экспорта.
- - 🔗 INHERITS_FROM -> `SupersetAPIError`
- - ƒ **__init__** (`Function`)
- - 📝 Initializes an export error.
- - ℂ **DashboardNotFoundError** (`Class`)
- - 📝 Ошибка, когда запрошенный дашборд или ресурс не найден (404).
- - 🔗 INHERITS_FROM -> `SupersetAPIError`
- - ƒ **__init__** (`Function`)
- - 📝 Initializes a dashboard not found error.
- - ℂ **DatasetNotFoundError** (`Class`)
- - 📝 Ошибка, когда запрашиваемый набор данных не существует (404).
- - 🔗 INHERITS_FROM -> `SupersetAPIError`
- - ƒ **__init__** (`Function`)
- - 📝 Initializes a dataset not found error.
- - ℂ **InvalidZipFormatError** (`Class`)
- - 📝 Ошибка, указывающая на некорректный формат или содержимое ZIP-архива.
- - 🔗 INHERITS_FROM -> `SupersetToolError`
- - ƒ **__init__** (`Function`)
- - 📝 Initializes an invalid ZIP format error.
- - ℂ **NetworkError** (`Class`)
- - 📝 Ошибки, связанные с сетевым соединением.
- - 🔗 INHERITS_FROM -> `SupersetToolError`
- - ƒ **__init__** (`Function`)
- - 📝 Initializes a network error.
- - ℂ **FileOperationError** (`Class`)
- - 📝 Общие ошибки файловых операций (I/O).
- - 🔗 INHERITS_FROM -> `SupersetToolError`
- - ℂ **InvalidFileStructureError** (`Class`)
- - 📝 Ошибка, указывающая на некорректную структуру файлов или директорий.
- - 🔗 INHERITS_FROM -> `FileOperationError`
- - ℂ **ConfigurationError** (`Class`)
- - 📝 Ошибки, связанные с неверной конфигурацией инструмента.
- - 🔗 INHERITS_FROM -> `SupersetToolError`
-- 📦 **superset_tool.models** (`Module`)
- - 📝 Определяет Pydantic-модели для конфигурации инструмента, обеспечивая валидацию данных.
- - 🏗️ Layer: Infra
- - 🔗 DEPENDS_ON -> `pydantic`
- - 🔗 DEPENDS_ON -> `superset_tool.utils.logger`
- - ℂ **SupersetConfig** (`Class`)
- - 📝 Модель конфигурации для подключения к одному экземпляру Superset API.
- - 🔗 INHERITS_FROM -> `pydantic.BaseModel`
- - ƒ **validate_auth** (`Function`)
- - 📝 Проверяет, что словарь `auth` содержит все необходимые для аутентификации поля.
- - ƒ **normalize_base_url** (`Function`)
- - 📝 Нормализует `base_url`, добавляя `/api/v1`, если он отсутствует.
- - ℂ **DatabaseConfig** (`Class`)
- - 📝 Модель для параметров трансформации баз данных при миграции дашбордов.
- - 🔗 INHERITS_FROM -> `pydantic.BaseModel`
- - ƒ **validate_config** (`Function`)
- - 📝 Проверяет, что словарь `database_config` содержит ключи 'old' и 'new'.
-- 📦 **superset_tool.client** (`Module`)
- - 📝 Предоставляет высокоуровневый клиент для взаимодействия с Superset REST API, инкапсулируя логику запросов, обработку ошибок и пагинацию.
- - 🏗️ Layer: Domain
- - 🔗 DEPENDS_ON -> `superset_tool.models`
- - 🔗 DEPENDS_ON -> `superset_tool.exceptions`
- - 🔗 DEPENDS_ON -> `superset_tool.utils`
- - ℂ **SupersetClient** (`Class`)
- - 📝 Класс-обёртка над Superset REST API, предоставляющий методы для работы с дашбордами и датасетами.
- - ƒ **__init__** (`Function`)
- - 📝 Инициализирует клиент, проверяет конфигурацию и создает сетевой клиент.
- - ƒ **_validate_config** (`Function`)
- - 📝 Проверяет, что переданный объект конфигурации имеет корректный тип.
- - ƒ **headers** (`Function`)
- - 📝 Возвращает базовые HTTP-заголовки, используемые сетевым клиентом.
- - ƒ **get_dashboards** (`Function`)
- - 📝 Получает полный список дашбордов, автоматически обрабатывая пагинацию.
- - 🔗 CALLS -> `self._fetch_total_object_count`
- - 🔗 CALLS -> `self._fetch_all_pages`
- - ƒ **export_dashboard** (`Function`)
- - 📝 Экспортирует дашборд в виде ZIP-архива.
- - 🔗 CALLS -> `self.network.request`
- - ƒ **import_dashboard** (`Function`)
- - 📝 Импортирует дашборд из ZIP-файла с возможностью автоматического удаления и повторной попытки при ошибке.
- - 🔗 CALLS -> `self._do_import`
- - 🔗 CALLS -> `self.delete_dashboard`
- - 🔗 CALLS -> `self.get_dashboards`
- - ƒ **_resolve_target_id_for_delete** (`Function`)
- - 📝 Определяет ID дашборда для удаления, используя ID или slug.
- - ƒ **_do_import** (`Function`)
- - 📝 Выполняет один запрос на импорт без обработки исключений.
- - ƒ **delete_dashboard** (`Function`)
- - 📝 Удаляет дашборд по его ID или slug.
- - 🔗 CALLS -> `self.network.request`
- - ƒ **_extract_dashboard_id_from_zip** (`Function`)
- - 📝 Извлекает ID дашборда из `metadata.yaml` внутри ZIP-архива.
- - ƒ **_extract_dashboard_slug_from_zip** (`Function`)
- - 📝 Извлекает slug дашборда из `metadata.yaml` внутри ZIP-архива.
- - ƒ **_validate_export_response** (`Function`)
- - 📝 Проверяет, что HTTP-ответ на экспорт является валидным ZIP-архивом.
- - ƒ **_resolve_export_filename** (`Function`)
- - 📝 Определяет имя файла для экспорта из заголовков или генерирует его.
- - ƒ **_validate_query_params** (`Function`)
- - 📝 Формирует корректный набор параметров запроса с пагинацией.
- - ƒ **_fetch_total_object_count** (`Function`)
- - 📝 Получает общее количество объектов по указанному эндпоинту для пагинации.
- - ƒ **_fetch_all_pages** (`Function`)
- - 📝 Итерируется по всем страницам пагинированного API и собирает все данные.
- - ƒ **_validate_import_file** (`Function`)
- - 📝 Проверяет, что файл существует, является ZIP-архивом и содержит `metadata.yaml`.
- - ƒ **get_datasets** (`Function`)
- - 📝 Получает полный список датасетов, автоматически обрабатывая пагинацию.
- - 🔗 CALLS -> `self._fetch_total_object_count`
- - 🔗 CALLS -> `self._fetch_all_pages`
- - ƒ **get_databases** (`Function`)
- - 📝 Получает полный список баз данных, автоматически обрабатывая пагинацию.
- - 🔗 CALLS -> `self._fetch_total_object_count`
- - 🔗 CALLS -> `self._fetch_all_pages`
- - ƒ **get_dataset** (`Function`)
- - 📝 Получает информацию о конкретном датасете по его ID.
- - 🔗 CALLS -> `self.network.request`
- - ƒ **get_database** (`Function`)
- - 📝 Получает информацию о конкретной базе данных по её ID.
- - 🔗 CALLS -> `self.network.request`
- - ƒ **update_dataset** (`Function`)
- - 📝 Обновляет данные датасета по его ID.
- - 🔗 CALLS -> `self.network.request`
-- 📦 **superset_tool** (`Module`)
- - 📝 Root package for superset_tool.
- - 🏗️ Layer: Domain
-- 📦 **superset_tool.utils.init_clients** (`Module`)
- - 📝 Централизованно инициализирует клиенты Superset для различных окружений (DEV, PROD, SBX, PREPROD), используя `keyring` для безопасного доступа к паролям.
- - 🏗️ Layer: Infra
- - 🔗 DEPENDS_ON -> `superset_tool.models`
- - 🔗 DEPENDS_ON -> `superset_tool.client`
- - 🔗 DEPENDS_ON -> `keyring`
- - ƒ **setup_clients** (`Function`)
- - 📝 Инициализирует и возвращает словарь клиентов `SupersetClient`.
-- 📦 **superset_tool.utils.logger** (`Module`)
- - 📝 Предоставляет универсальную обёртку над стандартным `logging.Logger` для унифицированного создания и управления логгерами с выводом в консоль и/или файл.
- - 🏗️ Layer: Infra
- - ƒ **belief_scope** (`Function`)
- - 📝 Context manager for belief state logging to maintain execution coherence.
- - ℂ **SupersetLogger** (`Class`)
- - 📝 Обёртка над `logging.Logger`, которая упрощает конфигурацию и использование логгеров.
- - ƒ **__init__** (`Function`)
- - 📝 Конфигурирует и инициализирует логгер, добавляя обработчики для файла и/или консоли.
- - ƒ **_log** (`Function`)
- - 📝 (Helper) Универсальный метод для вызова соответствующего уровня логирования.
- - ƒ **info** (`Function`)
- - 📝 Записывает сообщение уровня INFO.
- - ƒ **debug** (`Function`)
- - 📝 Записывает сообщение уровня DEBUG.
- - ƒ **warning** (`Function`)
- - 📝 Записывает сообщение уровня WARNING.
- - ƒ **error** (`Function`)
- - 📝 Записывает сообщение уровня ERROR.
- - ƒ **critical** (`Function`)
- - 📝 Записывает сообщение уровня CRITICAL.
- - ƒ **exception** (`Function`)
- - 📝 Записывает сообщение уровня ERROR вместе с трассировкой стека текущего исключения.
- - 📦 **belief_scope** (`Method`)
- - 📝 Instance method wrapper for belief_scope context manager.
-- 📦 **superset_tool.utils.fileio** (`Module`)
- - 📝 Предоставляет набор утилит для управления файловыми операциями, включая работу с временными файлами, архивами ZIP, файлами YAML и очистку директорий.
- - 🏗️ Layer: Infra
- - 🔗 DEPENDS_ON -> `superset_tool.exceptions`
- - 🔗 DEPENDS_ON -> `superset_tool.utils.logger`
- - 🔗 DEPENDS_ON -> `pyyaml`
- - ƒ **create_temp_file** (`Function`)
- - 📝 Контекстный менеджер для создания временного файла или директории с гарантированным удалением.
- - ƒ **remove_empty_directories** (`Function`)
- - 📝 Рекурсивно удаляет все пустые поддиректории, начиная с указанного пути.
- - ƒ **read_dashboard_from_disk** (`Function`)
- - 📝 Читает бинарное содержимое файла с диска.
- - ƒ **calculate_crc32** (`Function`)
- - 📝 Вычисляет контрольную сумму CRC32 для файла.
- - 📦 **RetentionPolicy** (`DataClass`)
- - 📝 Определяет политику хранения для архивов (ежедневные, еженедельные, ежемесячные).
- - ƒ **archive_exports** (`Function`)
- - 📝 Управляет архивом экспортированных файлов, применяя политику хранения и дедупликацию.
- - 🔗 CALLS -> `apply_retention_policy`
- - 🔗 CALLS -> `calculate_crc32`
- - ƒ **apply_retention_policy** (`Function`)
- - 📝 (Helper) Применяет политику хранения к списку файлов, возвращая те, что нужно сохранить.
- - ƒ **save_and_unpack_dashboard** (`Function`)
- - 📝 Сохраняет бинарное содержимое ZIP-архива на диск и опционально распаковывает его.
- - ƒ **update_yamls** (`Function`)
- - 📝 Обновляет конфигурации в YAML-файлах, заменяя значения или применяя regex.
- - 🔗 CALLS -> `_update_yaml_file`
- - ƒ **_update_yaml_file** (`Function`)
- - 📝 (Helper) Обновляет один YAML файл.
- - ƒ **replacer** (`Function`)
- - 📝 Функция замены, сохраняющая кавычки если они были.
- - ƒ **create_dashboard_export** (`Function`)
- - 📝 Создает ZIP-архив из указанных исходных путей.
- - ƒ **sanitize_filename** (`Function`)
- - 📝 Очищает строку от символов, недопустимых в именах файлов.
- - ƒ **get_filename_from_headers** (`Function`)
- - 📝 Извлекает имя файла из HTTP заголовка 'Content-Disposition'.
- - ƒ **consolidate_archive_folders** (`Function`)
- - 📝 Консолидирует директории архивов на основе общего слага в имени.
-- 📦 **superset_tool.utils.network** (`Module`)
- - 📝 Инкапсулирует низкоуровневую HTTP-логику для взаимодействия с Superset API, включая аутентификацию, управление сессией, retry-логику и обработку ошибок.
- - 🏗️ Layer: Infra
- - 🔗 DEPENDS_ON -> `superset_tool.exceptions`
- - 🔗 DEPENDS_ON -> `superset_tool.utils.logger`
- - 🔗 DEPENDS_ON -> `requests`
- - ℂ **APIClient** (`Class`)
- - 📝 Инкапсулирует HTTP-логику для работы с API, включая сессии, аутентификацию, и обработку запросов.
- - ƒ **__init__** (`Function`)
- - 📝 Инициализирует API клиент с конфигурацией, сессией и логгером.
- - ƒ **_init_session** (`Function`)
- - 📝 Создает и настраивает `requests.Session` с retry-логикой.
- - ƒ **authenticate** (`Function`)
- - 📝 Выполняет аутентификацию в Superset API и получает access и CSRF токены.
- - ƒ **headers** (`Function`)
- - 📝 Возвращает HTTP-заголовки для аутентифицированных запросов.
- - ƒ **request** (`Function`)
- - 📝 Выполняет универсальный HTTP-запрос к API.
- - ƒ **_handle_http_error** (`Function`)
- - 📝 (Helper) Преобразует HTTP ошибки в кастомные исключения.
- - ƒ **_handle_network_error** (`Function`)
- - 📝 (Helper) Преобразует сетевые ошибки в `NetworkError`.
- - ƒ **upload_file** (`Function`)
- - 📝 Загружает файл на сервер через multipart/form-data.
- - ƒ **_perform_upload** (`Function`)
- - 📝 (Helper) Выполняет POST запрос с файлом.
- - ƒ **fetch_paginated_count** (`Function`)
- - 📝 Получает общее количество элементов для пагинации.
- - ƒ **fetch_paginated_data** (`Function`)
- - 📝 Автоматически собирает данные со всех страниц пагинированного эндпоинта.
-- 📦 **superset_tool.utils.whiptail_fallback** (`Module`)
- - 📝 Предоставляет плотный консольный UI-fallback для интерактивных диалогов, имитируя `whiptail` для систем, где он недоступен.
- - 🏗️ Layer: UI
- - ƒ **menu** (`Function`)
- - 📝 Отображает меню выбора и возвращает выбранный элемент.
- - ƒ **checklist** (`Function`)
- - 📝 Отображает список с возможностью множественного выбора.
- - ƒ **yesno** (`Function`)
- - 📝 Задает вопрос с ответом да/нет.
- - ƒ **msgbox** (`Function`)
- - 📝 Отображает информационное сообщение.
- - ƒ **inputbox** (`Function`)
- - 📝 Запрашивает у пользователя текстовый ввод.
- - ℂ **_ConsoleGauge** (`Class`)
- - 📝 Контекстный менеджер для имитации `whiptail gauge` в консоли.
- - ƒ **__init__** (`Function`)
- - 📝 Initializes the gauge.
- - ƒ **__enter__** (`Function`)
- - 📝 Enters the context.
- - ƒ **__exit__** (`Function`)
- - 📝 Exits the context.
- - ƒ **set_text** (`Function`)
- - 📝 Sets the gauge text.
- - ƒ **set_percent** (`Function`)
- - 📝 Sets the gauge percentage.
- - ƒ **gauge** (`Function`)
- - 📝 Создает и возвращает экземпляр `_ConsoleGauge`.
-- 📦 **superset_tool.utils.dataset_mapper** (`Module`)
- - 📝 Этот модуль отвечает за обновление метаданных (verbose_map) в датасетах Superset, извлекая их из PostgreSQL или XLSX-файлов.
- - 🏗️ Layer: Domain
- - 🔗 DEPENDS_ON -> `superset_tool.client`
- - 🔗 DEPENDS_ON -> `pandas`
- - 🔗 DEPENDS_ON -> `psycopg2`
- - ℂ **DatasetMapper** (`Class`)
- - 📝 Класс для меппинга и обновления verbose_map в датасетах Superset.
- - ƒ **__init__** (`Function`)
- - 📝 Initializes the mapper.
- - ƒ **get_postgres_comments** (`Function`)
- - 📝 Извлекает комментарии к колонкам из системного каталога PostgreSQL.
- - ƒ **load_excel_mappings** (`Function`)
- - 📝 Загружает меппинги 'column_name' -> 'column_comment' из XLSX файла.
- - ƒ **run_mapping** (`Function`)
- - 📝 Основная функция для выполнения меппинга и обновления verbose_map датасета в Superset.
- - 🔗 CALLS -> `self.get_postgres_comments`
- - 🔗 CALLS -> `self.load_excel_mappings`
- - 🔗 CALLS -> `superset_client.get_dataset`
- - 🔗 CALLS -> `superset_client.update_dataset`
-- 📦 **superset_tool.utils** (`Module`)
- - 📝 Utility package for superset_tool.
- - 🏗️ Layer: Infra
- 📦 **main** (`Module`)
- 📝 Entry point for the Svelte application.
- 🏗️ Layer: UI-Entry
@@ -454,14 +110,17 @@
- 📝 Handles task creation from dynamic form submission.
- ƒ **load** (`Function`)
- 📝 Loads initial plugin data for the dashboard.
-- ƒ **loadInitialData** (`Function`)
- - 📝 Loads tasks and environments on page initialization.
-- ƒ **refreshTasks** (`Function`)
- - 📝 Periodically refreshes the task list.
-- ƒ **handleSelectTask** (`Function`)
- - 📝 Updates the selected task ID when a task is clicked.
-- ƒ **handleRunBackup** (`Function`)
- - 📝 Triggers a manual backup task for the selected environment.
+- 🧩 **TaskManagementPage** (`Component`)
+ - 📝 Page for managing and monitoring tasks.
+ - 🏗️ Layer: Page
+ - ƒ **loadInitialData** (`Function`)
+ - 📝 Loads tasks and environments on page initialization.
+ - ƒ **refreshTasks** (`Function`)
+ - 📝 Periodically refreshes the task list.
+ - ƒ **handleSelectTask** (`Function`)
+ - 📝 Updates the selected task ID when a task is clicked.
+ - ƒ **handleRunBackup** (`Function`)
+ - 📝 Triggers a manual backup task for the selected environment.
- 🧩 **MigrationDashboard** (`Component`)
- 📝 Main dashboard for configuring and starting migrations.
- 🏗️ Layer: Page
@@ -579,7 +238,7 @@
- ƒ **getSuggestion** (`Function`)
- 📝 Finds a suggestion for a source database.
- 🧩 **TaskLogViewer** (`Component`)
- - 📝 Displays detailed logs for a specific task in a modal.
+ - 📝 Displays detailed logs for a specific task in a modal or inline.
- 🏗️ Layer: UI
- ƒ **fetchLogs** (`Function`)
- 📝 Fetches logs for the current task.
@@ -745,21 +404,48 @@
- ƒ **get_scheduler_service** (`Function`)
- 📝 Dependency injector for the SchedulerService.
- 📦 **backend.src.core.superset_client** (`Module`)
- - 📝 Extends the base SupersetClient with database-specific metadata fetching.
+ - 📝 Предоставляет высокоуровневый клиент для взаимодействия с Superset REST API, инкапсулируя логику запросов, обработку ошибок и пагинацию.
- 🏗️ Layer: Core
- - 🔗 INHERITS_FROM -> `superset_tool.client.SupersetClient`
- ℂ **SupersetClient** (`Class`)
- - 📝 Extended SupersetClient for migration-specific operations.
+ - 📝 Класс-обёртка над Superset REST API, предоставляющий методы для работы с дашбордами и датасетами.
+ - ƒ **__init__** (`Function`)
+ - 📝 Инициализирует клиент, проверяет конфигурацию и создает сетевой клиент.
+ - ƒ **authenticate** (`Function`)
+ - 📝 Authenticates the client using the configured credentials.
+ - ƒ **headers** (`Function`)
+ - 📝 Возвращает базовые HTTP-заголовки, используемые сетевым клиентом.
+ - ƒ **get_dashboards** (`Function`)
+ - 📝 Получает полный список дашбордов, автоматически обрабатывая пагинацию.
+ - ƒ **get_dashboards_summary** (`Function`)
+ - 📝 Fetches dashboard metadata optimized for the grid.
+ - ƒ **export_dashboard** (`Function`)
+ - 📝 Экспортирует дашборд в виде ZIP-архива.
+ - ƒ **import_dashboard** (`Function`)
+ - 📝 Импортирует дашборд из ZIP-файла.
+ - ƒ **delete_dashboard** (`Function`)
+ - 📝 Удаляет дашборд по его ID или slug.
+ - ƒ **get_datasets** (`Function`)
+ - 📝 Получает полный список датасетов, автоматически обрабатывая пагинацию.
+ - ƒ **get_dataset** (`Function`)
+ - 📝 Получает информацию о конкретном датасете по его ID.
+ - ƒ **update_dataset** (`Function`)
+ - 📝 Обновляет данные датасета по его ID.
+ - ƒ **get_databases** (`Function`)
+ - 📝 Получает полный список баз данных.
+ - ƒ **get_database** (`Function`)
+ - 📝 Получает информацию о конкретной базе данных по её ID.
- ƒ **get_databases_summary** (`Function`)
- 📝 Fetch a summary of databases including uuid, name, and engine.
- ƒ **get_database_by_uuid** (`Function`)
- 📝 Find a database by its UUID.
- - ƒ **get_dashboards_summary** (`Function`)
- - 📝 Fetches dashboard metadata optimized for the grid.
- - ƒ **get_dataset** (`Function`)
- - 📝 Fetch full dataset structure including columns and metrics.
- - ƒ **update_dataset** (`Function`)
- - 📝 Update dataset metadata.
+ - ƒ **_resolve_target_id_for_delete** (`Function`)
+ - ƒ **_do_import** (`Function`)
+ - ƒ **_validate_export_response** (`Function`)
+ - ƒ **_resolve_export_filename** (`Function`)
+ - ƒ **_validate_query_params** (`Function`)
+ - ƒ **_fetch_total_object_count** (`Function`)
+ - ƒ **_fetch_all_pages** (`Function`)
+ - ƒ **_validate_import_file** (`Function`)
- 📦 **ConfigManagerModule** (`Module`)
- 📝 Manages application configuration, including loading/saving to JSON and CRUD for environments.
- 🏗️ Layer: Core
@@ -785,6 +471,8 @@
- 📝 Returns the list of configured environments.
- ƒ **has_environments** (`Function`)
- 📝 Checks if at least one environment is configured.
+ - ƒ **get_environment** (`Function`)
+ - 📝 Returns a single environment by ID.
- ƒ **add_environment** (`Function`)
- 📝 Adds a new environment to the configuration.
- ƒ **update_environment** (`Function`)
@@ -862,6 +550,8 @@
- 📝 Returns a list of recent log entries from the buffer.
- 📦 **Logger** (`Global`)
- 📝 The global logger instance for the application, configured with both a console handler and the custom WebSocket handler.
+ - ƒ **believed** (`Function`)
+ - 📝 A decorator that wraps a function in a belief scope.
- ℂ **PluginLoader** (`Class`)
- 📝 Scans a specified directory for Python modules, dynamically loads them, and registers any classes that are valid implementations of the PluginBase interface.
- 🏗️ Layer: Core
@@ -907,12 +597,76 @@
- ℂ **PluginConfig** (`Class`)
- 📝 A Pydantic model used to represent the validated configuration and metadata of a loaded plugin. This object is what gets exposed to the API layer.
- 🏗️ Layer: Core
+- 📦 **backend.core.utils.fileio** (`Module`)
+ - 📝 Предоставляет набор утилит для управления файловыми операциями, включая работу с временными файлами, архивами ZIP, файлами YAML и очистку директорий.
+ - 🏗️ Layer: Infra
+ - 🔗 DEPENDS_ON -> `backend.src.core.logger`
+ - 🔗 DEPENDS_ON -> `pyyaml`
+ - ℂ **InvalidZipFormatError** (`Class`)
+ - ƒ **create_temp_file** (`Function`)
+ - 📝 Контекстный менеджер для создания временного файла или директории с гарантированным удалением.
+ - ƒ **remove_empty_directories** (`Function`)
+ - 📝 Рекурсивно удаляет все пустые поддиректории, начиная с указанного пути.
+ - ƒ **read_dashboard_from_disk** (`Function`)
+ - 📝 Читает бинарное содержимое файла с диска.
+ - ƒ **calculate_crc32** (`Function`)
+ - 📝 Вычисляет контрольную сумму CRC32 для файла.
+ - 📦 **RetentionPolicy** (`DataClass`)
+ - 📝 Определяет политику хранения для архивов (ежедневные, еженедельные, ежемесячные).
+ - ƒ **archive_exports** (`Function`)
+ - 📝 Управляет архивом экспортированных файлов, применяя политику хранения и дедупликацию.
+ - 🔗 CALLS -> `apply_retention_policy`
+ - 🔗 CALLS -> `calculate_crc32`
+ - ƒ **apply_retention_policy** (`Function`)
+ - 📝 (Helper) Применяет политику хранения к списку файлов, возвращая те, что нужно сохранить.
+ - ƒ **save_and_unpack_dashboard** (`Function`)
+ - 📝 Сохраняет бинарное содержимое ZIP-архива на диск и опционально распаковывает его.
+ - ƒ **update_yamls** (`Function`)
+ - 📝 Обновляет конфигурации в YAML-файлах, заменяя значения или применяя regex.
+ - 🔗 CALLS -> `_update_yaml_file`
+ - ƒ **_update_yaml_file** (`Function`)
+ - 📝 (Helper) Обновляет один YAML файл.
+ - ƒ **create_dashboard_export** (`Function`)
+ - 📝 Создает ZIP-архив из указанных исходных путей.
+ - ƒ **sanitize_filename** (`Function`)
+ - 📝 Очищает строку от символов, недопустимых в именах файлов.
+ - ƒ **get_filename_from_headers** (`Function`)
+ - 📝 Извлекает имя файла из HTTP заголовка 'Content-Disposition'.
+ - ƒ **consolidate_archive_folders** (`Function`)
+ - 📝 Консолидирует директории архивов на основе общего слага в имени.
+- 📦 **backend.core.utils.network** (`Module`)
+ - 📝 Инкапсулирует низкоуровневую HTTP-логику для взаимодействия с Superset API, включая аутентификацию, управление сессией, retry-логику и обработку ошибок.
+ - 🏗️ Layer: Infra
+ - 🔗 DEPENDS_ON -> `backend.src.core.logger`
+ - 🔗 DEPENDS_ON -> `requests`
+ - ℂ **SupersetAPIError** (`Class`)
+ - ℂ **AuthenticationError** (`Class`)
- 📦 **backend.src.core.utils.matching** (`Module`)
- 📝 Provides utility functions for fuzzy matching database names.
- 🏗️ Layer: Core
- 🔗 DEPENDS_ON -> `rapidfuzz`
- ƒ **suggest_mappings** (`Function`)
- 📝 Suggests mappings between source and target databases using fuzzy matching.
+- 📦 **backend.core.utils.dataset_mapper** (`Module`)
+ - 📝 Этот модуль отвечает за обновление метаданных (verbose_map) в датасетах Superset, извлекая их из PostgreSQL или XLSX-файлов.
+ - 🏗️ Layer: Domain
+ - 🔗 DEPENDS_ON -> `backend.core.superset_client`
+ - 🔗 DEPENDS_ON -> `pandas`
+ - 🔗 DEPENDS_ON -> `psycopg2`
+ - ℂ **DatasetMapper** (`Class`)
+ - 📝 Класс для меппинга и обновления verbose_map в датасетах Superset.
+ - ƒ **__init__** (`Function`)
+ - 📝 Initializes the mapper.
+ - ƒ **get_postgres_comments** (`Function`)
+ - 📝 Извлекает комментарии к колонкам из системного каталога PostgreSQL.
+ - ƒ **load_excel_mappings** (`Function`)
+ - 📝 Загружает меппинги 'column_name' -> 'column_comment' из XLSX файла.
+ - ƒ **run_mapping** (`Function`)
+ - 📝 Основная функция для выполнения меппинга и обновления verbose_map датасета в Superset.
+ - 🔗 CALLS -> `self.get_postgres_comments`
+ - 🔗 CALLS -> `self.load_excel_mappings`
+ - 🔗 CALLS -> `superset_client.get_dataset`
+ - 🔗 CALLS -> `superset_client.update_dataset`
- 📦 **TaskPersistenceModule** (`Module`)
- 📝 Handles the persistence of tasks using SQLAlchemy and the tasks.db database.
- 🏗️ Layer: Core
@@ -1228,10 +982,8 @@
- 📝 Returns the JSON schema for migration plugin parameters.
- ƒ **execute** (`Function`)
- 📝 Executes the dashboard migration logic.
-- ƒ **test_superset_config_url_normalization** (`Function`)
- - 📝 Tests that SupersetConfig correctly normalizes the base URL.
-- ƒ **test_superset_config_invalid_url** (`Function`)
- - 📝 Tests that SupersetConfig raises ValueError for invalid URLs.
+- ƒ **test_environment_model** (`Function`)
+ - 📝 Tests that Environment model correctly stores values.
- ƒ **test_belief_scope_logs_entry_action_exit** (`Function`)
- 📝 Test that belief_scope generates [ID][Entry], [ID][Action], and [ID][Exit] logs.
- ƒ **test_belief_scope_error_handling** (`Function`)