From 49129d3e86ee0b6813bd3407fbb8ccada219e9a0 Mon Sep 17 00:00:00 2001 From: busya Date: Thu, 22 Jan 2026 23:18:48 +0300 Subject: [PATCH] fix error --- .gitignore | 1 + backend/src/api/routes/mappings.py | 1 + backend/src/api/routes/migration.py | 9 +- backend/tasks.db | Bin 53248 -> 57344 bytes frontend/index.html | 13 - frontend/jsconfig.json | 1 + frontend/src/App.svelte | 117 - frontend/src/main.js | 18 - .../semantic_report_20260122_175153.md | 103 + semantics/semantic_map.json | 4827 ++++++----------- specs/012-remove-superset-tool/spec.md | 2 +- specs/project_map.md | 484 +- 12 files changed, 1932 insertions(+), 3644 deletions(-) delete mode 100755 frontend/index.html delete mode 100755 frontend/src/App.svelte delete mode 100755 frontend/src/main.js create mode 100644 semantics/reports/semantic_report_20260122_175153.md 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 38eb23710682e681a41ce485a1bde6f1516d2122..049d28fd82a50c937aedec890675e06e2f3b5cb4 100644 GIT binary patch delta 2181 zcmb`IPiP!f9LG0_tEtJ%Y-^)p(7r6lR?RH)-n@A;vqDO!DX0k5G^env^XJWW$Yy4l znXM@yq#@$LL#>X7(vt`85~89Yp;A*2ynED>A}I7!K`;Jhvsrhu!7l1)XW#Gr-ur#N z-`{WM+DBv8ZjarV&ilDsPJADo8}WDE{5YH(mF~krPL%$X?(d!~{31Os2=IS${88zX zoG9GNN#Bc85*6pfFQs>cTT)f{Rhkg%;tk=BxI44=!^kcw+??1vJGL}pSuS=I!eq)7 zEK}xqvPC(TT@4e)O|Ed87P5^lw=L6ROlI7+Woqb_YYT4Rve2m)$&y4DPp$qS&S`0UCw0Jwp5uqnkt)2HDz7ZF!OBNbg3ik z&RxHY3;9toC)}Rc%l|ZX4<0|<+4^IIZr221>4oXX=I7rIbLzRNVa`i0d@(ai2qH>F zVHHIyGlmV!NG1UY@OQ*4tEQqbobG)76!hP zAvBx5yFWR8n3j(0J-vJHPGM5aoEppLbK~DW{Bu6Pv-SH!o7=TQAILDK#H}WeVxGvh z<*c-ti%aLvFDx#`F*$;wS2R*))S%=jBt%$Q(^WPKI6agH8JeQ%>?ma?1!K^qhw_n( z5@H|hJ+VoO8$qkl*se)^NW-+x@JLiEYgAVZJOFzlqXi!f+K<%EFd3o8AY~aKj@gUU zHcqcl4UBvI5b8P=#U-3I+|Bizy0tVlOs{vTR{eTpC4Lxmy&5bZg+dThbrDQKSQ7+NUz2Q6NO~%iS#(8?Cw@RF@Zm zB)VEfi-{E_eo#lO6PE9K%WDmr11@U^5^LF*go*WXR|S74}mrXJcHJbT{BkgMpT z6q?cme;7-Ebn(xM?3R=cw7SZY~D#c+da(ImgS0DtDQXJzFtV3CKp7gDgY(3)5 zh6M?(U4!yGzg~K^f-XfZ4zXHRdFPm6TqZ|pF{O9K~{iT0bgsjZ9psh>RTbCg37I| zVpM8`_0x48l^$HKVc@p$FAi$5u;wRK)a^Co`GFr_=I#UAiNRp&(5nAlgoMWl{x9?$ zc;O%0p24d#t8*Xyzx2AIlg_KCZ=63poqbW7ha>VT+%S%w4!IA84_yxn4rdOK4znS?-vP5A5JU{KK90sQ3 - - - - - - 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`)