diff --git a/.kilocodemodes b/.kilocodemodes index ea65ce4..7c62ab3 100644 --- a/.kilocodemodes +++ b/.kilocodemodes @@ -23,3 +23,28 @@ customModes: 1. Always begin by loading the relevant plan or task list from the `specs/` directory. 2. Do not assume a task is done just because it is checked; verify the code or functionality first if asked to audit. 3. When updating task lists, ensure you only mark items as complete if you have verified them. + - slug: semantic + name: Semantic Agent + description: Codebase semantic mapping and compliance expert + roleDefinition: >- + You are Kilo Code, a Semantic Agent responsible for maintaining the semantic integrity of the codebase. Your primary goal is to ensure that all code entities (Modules, Classes, Functions, Components) are properly annotated with semantic anchors and tags as defined in `semantic_protocol.md`. + + Your core responsibilities are: + 1. **Semantic Mapping**: You run and maintain the `generate_semantic_map.py` script to generate up-to-date semantic maps (`semantics/semantic_map.json`, `specs/project_map.md`) and compliance reports (`semantics/reports/*.md`). + 2. **Compliance Auditing**: You analyze the generated compliance reports to identify files with low semantic coverage or parsing errors. + 3. **Semantic Enrichment**: You actively edit code files to add missing semantic anchors (`[DEF:...]`, `[/DEF:...]`) and mandatory tags (`@PURPOSE`, `@LAYER`, etc.) to improve the global compliance score. + 4. **Protocol Enforcement**: You strictly adhere to the syntax and rules defined in `semantic_protocol.md` when modifying code. + + You have access to the full codebase and tools to read, write, and execute scripts. You should prioritize fixing "Critical Parsing Errors" (unclosed anchors) before addressing missing metadata. + whenToUse: >- + Use this mode when you need to update the project's semantic map, fix semantic compliance issues (missing anchors/tags), or analyze the codebase structure. This mode is specialized for maintaining the `semantic_protocol.md` standards. + groups: + - read + - edit + - command + - browser + - mcp + customInstructions: >- + Always check `semantics/reports/` for the latest compliance status before starting work. + When fixing a file, try to fix all semantic issues in that file at once. + After making a batch of fixes, run `python3 generate_semantic_map.py` to verify improvements. diff --git a/backend/src/api/auth.py b/backend/src/api/auth.py index e100e41..5d50a5c 100755 --- a/backend/src/api/auth.py +++ b/backend/src/api/auth.py @@ -49,4 +49,4 @@ async def get_current_user(token: str = Depends(oauth2_scheme)): ) # A real implementation would return a user object. return {"placeholder_user": "user@example.com"} -# [/DEF] \ No newline at end of file +# [/DEF:AuthModule:Module] \ No newline at end of file diff --git a/backend/src/api/routes/environments.py b/backend/src/api/routes/environments.py index 4119e0d..eb7eb8e 100644 --- a/backend/src/api/routes/environments.py +++ b/backend/src/api/routes/environments.py @@ -24,7 +24,7 @@ router = APIRouter() class ScheduleSchema(BaseModel): enabled: bool = False cron_expression: str = Field(..., pattern=r'^(@(annually|yearly|monthly|weekly|daily|hourly|reboot))|((((\d+,)*\d+|(\d+(\/|-)\d+)|\d+|\*) ?){5,7})$') -# [/DEF:ScheduleSchema] +# [/DEF:ScheduleSchema:DataClass] # [DEF:EnvironmentResponse:DataClass] class EnvironmentResponse(BaseModel): @@ -32,14 +32,14 @@ class EnvironmentResponse(BaseModel): name: str url: str backup_schedule: Optional[ScheduleSchema] = None -# [/DEF:EnvironmentResponse] +# [/DEF:EnvironmentResponse:DataClass] # [DEF:DatabaseResponse:DataClass] class DatabaseResponse(BaseModel): uuid: str database_name: str engine: Optional[str] -# [/DEF:DatabaseResponse] +# [/DEF:DatabaseResponse:DataClass] # [DEF:get_environments:Function] # @PURPOSE: List all configured environments. @@ -61,7 +61,7 @@ async def get_environments(config_manager=Depends(get_config_manager)): ) if e.backup_schedule else None ) for e in envs ] -# [/DEF:get_environments] +# [/DEF:get_environments:Function] # [DEF:update_environment_schedule:Function] # @PURPOSE: Update backup schedule for an environment. @@ -89,7 +89,7 @@ async def update_environment_schedule( scheduler_service.load_schedules() return {"message": "Schedule updated successfully"} -# [/DEF:update_environment_schedule] +# [/DEF:update_environment_schedule:Function] # [DEF:get_environment_databases:Function] # @PURPOSE: Fetch the list of databases from a specific environment. @@ -119,6 +119,6 @@ async def get_environment_databases(id: str, config_manager=Depends(get_config_m return client.get_databases_summary() except Exception as e: raise HTTPException(status_code=500, detail=f"Failed to fetch databases: {str(e)}") -# [/DEF:get_environment_databases] +# [/DEF:get_environment_databases:Function] -# [/DEF:backend.src.api.routes.environments] +# [/DEF:backend.src.api.routes.environments:Module] diff --git a/backend/src/api/routes/mappings.py b/backend/src/api/routes/mappings.py index 309dfec..4eab93b 100644 --- a/backend/src/api/routes/mappings.py +++ b/backend/src/api/routes/mappings.py @@ -29,7 +29,7 @@ class MappingCreate(BaseModel): target_db_uuid: str source_db_name: str target_db_name: str -# [/DEF:MappingCreate] +# [/DEF:MappingCreate:DataClass] # [DEF:MappingResponse:DataClass] class MappingResponse(BaseModel): @@ -43,13 +43,13 @@ class MappingResponse(BaseModel): class Config: from_attributes = True -# [/DEF:MappingResponse] +# [/DEF:MappingResponse:DataClass] # [DEF:SuggestRequest:DataClass] class SuggestRequest(BaseModel): source_env_id: str target_env_id: str -# [/DEF:SuggestRequest] +# [/DEF:SuggestRequest:DataClass] # [DEF:get_mappings:Function] # @PURPOSE: List all saved database mappings. @@ -65,7 +65,7 @@ async def get_mappings( if target_env_id: query = query.filter(DatabaseMapping.target_env_id == target_env_id) return query.all() -# [/DEF:get_mappings] +# [/DEF:get_mappings:Function] # [DEF:create_mapping:Function] # @PURPOSE: Create or update a database mapping. @@ -90,7 +90,7 @@ async def create_mapping(mapping: MappingCreate, db: Session = Depends(get_db)): db.commit() db.refresh(new_mapping) return new_mapping -# [/DEF:create_mapping] +# [/DEF:create_mapping:Function] # [DEF:suggest_mappings_api:Function] # @PURPOSE: Get suggested mappings based on fuzzy matching. @@ -105,6 +105,6 @@ async def suggest_mappings_api( return await service.get_suggestions(request.source_env_id, request.target_env_id) except Exception as e: raise HTTPException(status_code=500, detail=str(e)) -# [/DEF:suggest_mappings_api] +# [/DEF:suggest_mappings_api:Function] -# [/DEF:backend.src.api.routes.mappings] +# [/DEF:backend.src.api.routes.mappings:Module] diff --git a/backend/src/api/routes/migration.py b/backend/src/api/routes/migration.py index d0f6092..797c633 100644 --- a/backend/src/api/routes/migration.py +++ b/backend/src/api/routes/migration.py @@ -37,7 +37,7 @@ async def get_dashboards(env_id: str, config_manager=Depends(get_config_manager) client = SupersetClient(config) dashboards = client.get_dashboards_summary() return dashboards -# [/DEF:get_dashboards] +# [/DEF:get_dashboards:Function] # [DEF:execute_migration:Function] # @PURPOSE: Execute the migration of selected dashboards. @@ -71,6 +71,6 @@ async def execute_migration(selection: DashboardSelection, config_manager=Depend except Exception as e: logger.error(f"Task creation failed: {e}") raise HTTPException(status_code=500, detail=f"Failed to create migration task: {str(e)}") -# [/DEF:execute_migration] +# [/DEF:execute_migration:Function] -# [/DEF:backend.src.api.routes.migration] \ No newline at end of file +# [/DEF:backend.src.api.routes.migration:Module] \ No newline at end of file diff --git a/backend/src/api/routes/plugins.py b/backend/src/api/routes/plugins.py index 1dc32bf..1c4cfe6 100755 --- a/backend/src/api/routes/plugins.py +++ b/backend/src/api/routes/plugins.py @@ -19,4 +19,4 @@ async def list_plugins( Retrieve a list of all available plugins. """ return plugin_loader.get_all_plugin_configs() -# [/DEF] \ No newline at end of file +# [/DEF:PluginsRouter:Module] \ No newline at end of file diff --git a/backend/src/api/routes/settings.py b/backend/src/api/routes/settings.py index 324d5c3..1367426 100755 --- a/backend/src/api/routes/settings.py +++ b/backend/src/api/routes/settings.py @@ -35,7 +35,7 @@ async def get_settings(config_manager: ConfigManager = Depends(get_config_manage if env.password: env.password = "********" return config -# [/DEF:get_settings] +# [/DEF:get_settings:Function] # [DEF:update_global_settings:Function] # @PURPOSE: Updates global application settings. @@ -49,7 +49,7 @@ async def update_global_settings( logger.info("[update_global_settings][Entry] Updating global settings") config_manager.update_global_settings(settings) return settings -# [/DEF:update_global_settings] +# [/DEF:update_global_settings:Function] # [DEF:get_environments:Function] # @PURPOSE: Lists all configured Superset environments. @@ -58,7 +58,7 @@ async def update_global_settings( async def get_environments(config_manager: ConfigManager = Depends(get_config_manager)): logger.info("[get_environments][Entry] Fetching environments") return config_manager.get_environments() -# [/DEF:get_environments] +# [/DEF:get_environments:Function] # [DEF:add_environment:Function] # @PURPOSE: Adds a new Superset environment. @@ -91,7 +91,7 @@ async def add_environment( config_manager.add_environment(env) return env -# [/DEF:add_environment] +# [/DEF:add_environment:Function] # [DEF:update_environment:Function] # @PURPOSE: Updates an existing Superset environment. @@ -134,7 +134,7 @@ async def update_environment( if config_manager.update_environment(id, env): return env raise HTTPException(status_code=404, detail=f"Environment {id} not found") -# [/DEF:update_environment] +# [/DEF:update_environment:Function] # [DEF:delete_environment:Function] # @PURPOSE: Deletes a Superset environment. @@ -147,7 +147,7 @@ async def delete_environment( logger.info(f"[delete_environment][Entry] Deleting environment {id}") config_manager.delete_environment(id) return {"message": f"Environment {id} deleted"} -# [/DEF:delete_environment] +# [/DEF:delete_environment:Function] # [DEF:test_environment_connection:Function] # @PURPOSE: Tests the connection to a Superset environment. @@ -190,7 +190,7 @@ async def test_environment_connection( except Exception as e: logger.error(f"[test_environment_connection][Coherence:Failed] Connection failed for {id}: {e}") return {"status": "error", "message": str(e)} -# [/DEF:test_environment_connection] +# [/DEF:test_environment_connection:Function] # [DEF:validate_backup_path:Function] # @PURPOSE: Validates if a backup path exists and is writable. @@ -213,6 +213,6 @@ async def validate_backup_path( return {"status": "error", "message": message} return {"status": "success", "message": message} -# [/DEF:validate_backup_path] +# [/DEF:validate_backup_path:Function] -# [/DEF:SettingsRouter] +# [/DEF:SettingsRouter:Module] diff --git a/backend/src/api/routes/tasks.py b/backend/src/api/routes/tasks.py index 921a730..e9cb456 100755 --- a/backend/src/api/routes/tasks.py +++ b/backend/src/api/routes/tasks.py @@ -117,4 +117,4 @@ async def clear_tasks( """ task_manager.clear_tasks(status) return -# [/DEF] \ No newline at end of file +# [/DEF:TasksRouter:Module] \ No newline at end of file diff --git a/backend/src/app.py b/backend/src/app.py index daef363..28c25ac 100755 --- a/backend/src/app.py +++ b/backend/src/app.py @@ -31,6 +31,7 @@ app = FastAPI( description="API for managing Superset automation tools and plugins.", version="1.0.0", ) +# [/DEF:App:Global] # Startup event @app.on_event("startup") @@ -124,8 +125,7 @@ async def websocket_endpoint(websocket: WebSocket, task_id: str): logger.error(f"WebSocket error for task {task_id}: {e}") finally: task_manager.unsubscribe_logs(task_id, queue) - -# [/DEF] +# [/DEF:WebSocketEndpoint:Endpoint] # [DEF:StaticFiles:Mount] # @SEMANTICS: static, frontend, spa @@ -149,4 +149,6 @@ else: @app.get("/") async def read_root(): return {"message": "Superset Tools API is running (Frontend build not found)"} -# [/DEF] +# [/DEF:RootEndpoint:Endpoint] +# [/DEF:StaticFiles:Mount] +# [/DEF:AppModule:Module] diff --git a/backend/src/core/config_manager.py b/backend/src/core/config_manager.py index 85fdf6c..03dd343 100755 --- a/backend/src/core/config_manager.py +++ b/backend/src/core/config_manager.py @@ -46,7 +46,7 @@ class ConfigManager: assert isinstance(self.config, AppConfig), "self.config must be an instance of AppConfig" logger.info(f"[ConfigManager][Exit] Initialized") - # [/DEF:__init__] + # [/DEF:__init__:Function] # [DEF:_load_config:Function] # @PURPOSE: Loads the configuration from disk or creates a default one. @@ -78,7 +78,7 @@ class ConfigManager: environments=[], settings=GlobalSettings(backup_path="backups") ) - # [/DEF:_load_config] + # [/DEF:_load_config:Function] # [DEF:_save_config_to_disk:Function] # @PURPOSE: Saves the provided configuration object to disk. @@ -97,20 +97,20 @@ class ConfigManager: logger.info(f"[_save_config_to_disk][Action] Configuration saved") except Exception as e: logger.error(f"[_save_config_to_disk][Coherence:Failed] Failed to save: {e}") - # [/DEF:_save_config_to_disk] + # [/DEF:_save_config_to_disk:Function] # [DEF:save:Function] # @PURPOSE: Saves the current configuration state to disk. def save(self): self._save_config_to_disk(self.config) - # [/DEF:save] + # [/DEF:save:Function] # [DEF:get_config:Function] # @PURPOSE: Returns the current configuration. # @RETURN: AppConfig - The current configuration. def get_config(self) -> AppConfig: return self.config - # [/DEF:get_config] + # [/DEF:get_config:Function] # [DEF:update_global_settings:Function] # @PURPOSE: Updates the global settings and persists the change. @@ -130,7 +130,7 @@ class ConfigManager: configure_logger(settings.logging) logger.info(f"[update_global_settings][Exit] Settings updated") - # [/DEF:update_global_settings] + # [/DEF:update_global_settings:Function] # [DEF:validate_path:Function] # @PURPOSE: Validates if a path exists and is writable. @@ -148,21 +148,21 @@ class ConfigManager: return False, "Path is not writable" return True, "Path is valid and writable" - # [/DEF:validate_path] + # [/DEF:validate_path:Function] # [DEF:get_environments:Function] # @PURPOSE: Returns the list of configured environments. # @RETURN: List[Environment] - List of environments. def get_environments(self) -> List[Environment]: return self.config.environments - # [/DEF:get_environments] + # [/DEF:get_environments:Function] # [DEF:has_environments:Function] # @PURPOSE: Checks if at least one environment is configured. # @RETURN: bool - True if at least one environment exists. def has_environments(self) -> bool: return len(self.config.environments) > 0 - # [/DEF:has_environments] + # [/DEF:has_environments:Function] # [DEF:add_environment:Function] # @PURPOSE: Adds a new environment to the configuration. @@ -181,7 +181,7 @@ class ConfigManager: self.save() logger.info(f"[add_environment][Exit] Environment added") - # [/DEF:add_environment] + # [/DEF:add_environment:Function] # [DEF:update_environment:Function] # @PURPOSE: Updates an existing environment. @@ -210,7 +210,7 @@ class ConfigManager: logger.warning(f"[update_environment][Coherence:Failed] Environment {env_id} not found") return False - # [/DEF:update_environment] + # [/DEF:update_environment:Function] # [DEF:delete_environment:Function] # @PURPOSE: Deletes an environment by ID. @@ -231,8 +231,8 @@ class ConfigManager: logger.info(f"[delete_environment][Action] Deleted {env_id}") else: logger.warning(f"[delete_environment][Coherence:Failed] Environment {env_id} not found") - # [/DEF:delete_environment] + # [/DEF:delete_environment:Function] -# [/DEF:ConfigManager] +# [/DEF:ConfigManager:Class] -# [/DEF:ConfigManagerModule] +# [/DEF:ConfigManagerModule:Module] diff --git a/backend/src/core/config_models.py b/backend/src/core/config_models.py index 5864e62..237b817 100755 --- a/backend/src/core/config_models.py +++ b/backend/src/core/config_models.py @@ -13,7 +13,7 @@ from typing import List, Optional class Schedule(BaseModel): enabled: bool = False cron_expression: str = "0 0 * * *" # Default: daily at midnight -# [/DEF:Schedule] +# [/DEF:Schedule:DataClass] # [DEF:Environment:DataClass] # @PURPOSE: Represents a Superset environment configuration. @@ -25,7 +25,7 @@ class Environment(BaseModel): password: str # Will be masked in UI is_default: bool = False backup_schedule: Schedule = Field(default_factory=Schedule) -# [/DEF:Environment] +# [/DEF:Environment:DataClass] # [DEF:LoggingConfig:DataClass] # @PURPOSE: Defines the configuration for the application's logging system. @@ -35,7 +35,7 @@ class LoggingConfig(BaseModel): max_bytes: int = 10 * 1024 * 1024 backup_count: int = 5 enable_belief_state: bool = True -# [/DEF:LoggingConfig] +# [/DEF:LoggingConfig:DataClass] # [DEF:GlobalSettings:DataClass] # @PURPOSE: Represents global application settings. @@ -48,13 +48,13 @@ class GlobalSettings(BaseModel): task_retention_days: int = 30 task_retention_limit: int = 100 pagination_limit: int = 10 -# [/DEF:GlobalSettings] +# [/DEF:GlobalSettings:DataClass] # [DEF:AppConfig:DataClass] # @PURPOSE: The root configuration model containing all application settings. class AppConfig(BaseModel): environments: List[Environment] = [] settings: GlobalSettings -# [/DEF:AppConfig] +# [/DEF:AppConfig:DataClass] -# [/DEF:ConfigModels] +# [/DEF:ConfigModels:Module] diff --git a/backend/src/core/database.py b/backend/src/core/database.py index bbf9c0e..0f999ce 100644 --- a/backend/src/core/database.py +++ b/backend/src/core/database.py @@ -19,34 +19,36 @@ import os # [DEF:DATABASE_URL:Constant] DATABASE_URL = os.getenv("DATABASE_URL", "sqlite:///./mappings.db") -# [/DEF:DATABASE_URL] +# [/DEF:DATABASE_URL:Constant] # [DEF:TASKS_DATABASE_URL:Constant] TASKS_DATABASE_URL = os.getenv("TASKS_DATABASE_URL", "sqlite:///./tasks.db") -# [/DEF:TASKS_DATABASE_URL] +# [/DEF:TASKS_DATABASE_URL:Constant] # [DEF:engine:Variable] engine = create_engine(DATABASE_URL, connect_args={"check_same_thread": False}) -# [/DEF:engine] +# [/DEF:engine:Variable] # [DEF:tasks_engine:Variable] tasks_engine = create_engine(TASKS_DATABASE_URL, connect_args={"check_same_thread": False}) -# [/DEF:tasks_engine] +# [/DEF:tasks_engine:Variable] # [DEF:SessionLocal:Class] +# @PURPOSE: A session factory for the main mappings database. SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) -# [/DEF:SessionLocal] +# [/DEF:SessionLocal:Class] # [DEF:TasksSessionLocal:Class] +# @PURPOSE: A session factory for the tasks execution database. TasksSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=tasks_engine) -# [/DEF:TasksSessionLocal] +# [/DEF:TasksSessionLocal:Class] # [DEF:init_db:Function] # @PURPOSE: Initializes the database by creating all tables. def init_db(): Base.metadata.create_all(bind=engine) Base.metadata.create_all(bind=tasks_engine) -# [/DEF:init_db] +# [/DEF:init_db:Function] # [DEF:get_db:Function] # @PURPOSE: Dependency for getting a database session. @@ -58,7 +60,7 @@ def get_db(): yield db finally: db.close() -# [/DEF:get_db] +# [/DEF:get_db:Function] # [DEF:get_tasks_db:Function] # @PURPOSE: Dependency for getting a tasks database session. @@ -70,6 +72,6 @@ def get_tasks_db(): yield db finally: db.close() -# [/DEF:get_tasks_db] +# [/DEF:get_tasks_db:Function] -# [/DEF:backend.src.core.database] +# [/DEF:backend.src.core.database:Module] diff --git a/backend/src/core/logger.py b/backend/src/core/logger.py index 2cf1489..c18e701 100755 --- a/backend/src/core/logger.py +++ b/backend/src/core/logger.py @@ -28,7 +28,7 @@ class BeliefFormatter(logging.Formatter): if anchor_id: msg = f"[{anchor_id}][Action] {msg}" return msg -# [/DEF:BeliefFormatter] +# [/DEF:BeliefFormatter:Class] # Re-using LogEntry from task_manager for consistency # [DEF:LogEntry:Class] @@ -40,7 +40,7 @@ class LogEntry(BaseModel): message: str context: Optional[Dict[str, Any]] = None -# [/DEF] +# [/DEF:LogEntry:Class] # [DEF:BeliefScope:Function] # @PURPOSE: Context manager for structured Belief State logging. @@ -71,7 +71,7 @@ def belief_scope(anchor_id: str, message: str = ""): # Restore old anchor _belief_state.anchor_id = old_anchor -# [/DEF:BeliefScope] +# [/DEF:BeliefScope:Function] # [DEF:ConfigureLogger:Function] # @PURPOSE: Configures the logger with the provided logging settings. @@ -115,7 +115,7 @@ def configure_logger(config): handler.setFormatter(BeliefFormatter( '[%(asctime)s][%(levelname)s][%(name)s] %(message)s' )) -# [/DEF:ConfigureLogger] +# [/DEF:ConfigureLogger:Function] # [DEF:WebSocketLogHandler:Class] # @SEMANTICS: logging, handler, websocket, buffer @@ -158,7 +158,7 @@ class WebSocketLogHandler(logging.Handler): """ return list(self.log_buffer) -# [/DEF] +# [/DEF:WebSocketLogHandler:Class] # [DEF:Logger:Global] # @SEMANTICS: logger, global, instance @@ -184,4 +184,5 @@ logger.addHandler(websocket_log_handler) # Example usage: # logger.info("Application started", extra={"context_key": "context_value"}) # logger.error("An error occurred", exc_info=True) -# [/DEF] \ No newline at end of file +# [/DEF:Logger:Global] +# [/DEF:LoggerModule:Module] \ No newline at end of file diff --git a/backend/src/core/migration_engine.py b/backend/src/core/migration_engine.py index da59a9d..67eebb5 100644 --- a/backend/src/core/migration_engine.py +++ b/backend/src/core/migration_engine.py @@ -73,6 +73,7 @@ class MigrationEngine: except Exception as e: logger.error(f"[MigrationEngine.transform_zip][Coherence:Failed] Error transforming ZIP: {e}") return False + # [/DEF:MigrationEngine.transform_zip:Function] # [DEF:MigrationEngine._transform_yaml:Function] # @PURPOSE: Replaces database_uuid in a single YAML file. @@ -90,8 +91,8 @@ class MigrationEngine: data['database_uuid'] = db_mapping[source_uuid] with open(file_path, 'w') as f: yaml.dump(data, f) - # [/DEF:MigrationEngine._transform_yaml] + # [/DEF:MigrationEngine._transform_yaml:Function] -# [/DEF:MigrationEngine] +# [/DEF:MigrationEngine:Class] -# [/DEF:backend.src.core.migration_engine] +# [/DEF:backend.src.core.migration_engine:Module] diff --git a/backend/src/core/plugin_base.py b/backend/src/core/plugin_base.py index 4fe9455..64431f6 100755 --- a/backend/src/core/plugin_base.py +++ b/backend/src/core/plugin_base.py @@ -54,7 +54,7 @@ class PluginBase(ABC): The `params` argument will be validated against the schema returned by `get_schema()`. """ pass -# [/DEF] +# [/DEF:PluginBase:Class] # [DEF:PluginConfig:Class] # @SEMANTICS: plugin, config, schema, pydantic @@ -68,4 +68,4 @@ class PluginConfig(BaseModel): description: str = Field(..., description="Brief description of what the plugin does") version: str = Field(..., description="Version of the plugin") input_schema: Dict[str, Any] = Field(..., description="JSON schema for input parameters", alias="schema") -# [/DEF] \ No newline at end of file +# [/DEF:PluginConfig:Class] \ No newline at end of file diff --git a/backend/src/core/plugin_loader.py b/backend/src/core/plugin_loader.py index 3db688c..b9cecb7 100755 --- a/backend/src/core/plugin_loader.py +++ b/backend/src/core/plugin_loader.py @@ -16,12 +16,18 @@ class PluginLoader: that inherit from PluginBase. """ + # [DEF:PluginLoader.__init__:Function] + # @PURPOSE: Initializes the PluginLoader with a directory to scan. + # @PARAM: plugin_dir (str) - The directory containing plugin modules. def __init__(self, plugin_dir: str): self.plugin_dir = plugin_dir self._plugins: Dict[str, PluginBase] = {} self._plugin_configs: Dict[str, PluginConfig] = {} self._load_plugins() + # [/DEF:PluginLoader.__init__:Function] + # [DEF:PluginLoader._load_plugins:Function] + # @PURPOSE: Scans the plugin directory and loads all valid plugins. def _load_plugins(self): """ Scans the plugin directory, imports modules, and registers valid plugins. @@ -41,7 +47,12 @@ class PluginLoader: module_name = filename[:-3] file_path = os.path.join(self.plugin_dir, filename) self._load_module(module_name, file_path) + # [/DEF:PluginLoader._load_plugins:Function] + # [DEF:PluginLoader._load_module:Function] + # @PURPOSE: Loads a single Python module and discovers PluginBase implementations. + # @PARAM: module_name (str) - The name of the module. + # @PARAM: file_path (str) - The path to the module file. def _load_module(self, module_name: str, file_path: str): """ Loads a single Python module and extracts PluginBase subclasses. @@ -83,7 +94,11 @@ class PluginLoader: self._register_plugin(plugin_instance) except Exception as e: print(f"Error instantiating plugin {attribute_name} in {module_name}: {e}") # Replace with proper logging + # [/DEF:PluginLoader._load_module:Function] + # [DEF:PluginLoader._register_plugin:Function] + # @PURPOSE: Registers a PluginBase instance and its configuration. + # @PARAM: plugin_instance (PluginBase) - The plugin instance to register. def _register_plugin(self, plugin_instance: PluginBase): """ Registers a valid plugin instance. @@ -116,22 +131,39 @@ class PluginLoader: except Exception as e: from ..core.logger import logger logger.error(f"Error validating plugin '{plugin_instance.name}' (ID: {plugin_id}): {e}") + # [/DEF:PluginLoader._register_plugin:Function] + # [DEF:PluginLoader.get_plugin:Function] + # @PURPOSE: Retrieves a loaded plugin instance by its ID. + # @PARAM: plugin_id (str) - The unique identifier of the plugin. + # @RETURN: Optional[PluginBase] - The plugin instance if found, otherwise None. def get_plugin(self, plugin_id: str) -> Optional[PluginBase]: """ Returns a loaded plugin instance by its ID. """ return self._plugins.get(plugin_id) + # [/DEF:PluginLoader.get_plugin:Function] + # [DEF:PluginLoader.get_all_plugin_configs:Function] + # @PURPOSE: Returns a list of all registered plugin configurations. + # @RETURN: List[PluginConfig] - A list of plugin configurations. def get_all_plugin_configs(self) -> List[PluginConfig]: """ Returns a list of all loaded plugin configurations. """ return list(self._plugin_configs.values()) + # [/DEF:PluginLoader.get_all_plugin_configs:Function] + # [DEF:PluginLoader.has_plugin:Function] + # @PURPOSE: Checks if a plugin with the given ID is registered. + # @PARAM: plugin_id (str) - The unique identifier of the plugin. + # @RETURN: bool - True if the plugin is registered, False otherwise. def has_plugin(self, plugin_id: str) -> bool: """ Checks if a plugin with the given ID is loaded. """ - return plugin_id in self._plugins \ No newline at end of file + return plugin_id in self._plugins + # [/DEF:PluginLoader.has_plugin:Function] + +# [/DEF:PluginLoader:Class] \ No newline at end of file diff --git a/backend/src/core/scheduler.py b/backend/src/core/scheduler.py index e9032f6..7dd2ffe 100644 --- a/backend/src/core/scheduler.py +++ b/backend/src/core/scheduler.py @@ -32,6 +32,7 @@ class SchedulerService: self.scheduler.start() logger.info("Scheduler started.") self.load_schedules() + # [/DEF:SchedulerService.start:Function] # [DEF:SchedulerService.stop:Function] # @PURPOSE: Stops the background scheduler. @@ -40,6 +41,7 @@ class SchedulerService: if self.scheduler.running: self.scheduler.shutdown() logger.info("Scheduler stopped.") + # [/DEF:SchedulerService.stop:Function] # [DEF:SchedulerService.load_schedules:Function] # @PURPOSE: Loads backup schedules from configuration and registers them. @@ -52,6 +54,7 @@ class SchedulerService: for env in config.environments: if env.backup_schedule and env.backup_schedule.enabled: self.add_backup_job(env.id, env.backup_schedule.cron_expression) + # [/DEF:SchedulerService.load_schedules:Function] # [DEF:SchedulerService.add_backup_job:Function] # @PURPOSE: Adds a scheduled backup job for an environment. @@ -71,6 +74,7 @@ class SchedulerService: logger.info(f"Scheduled backup job added for environment {env_id}: {cron_expression}") except Exception as e: logger.error(f"Failed to add backup job for environment {env_id}: {e}") + # [/DEF:SchedulerService.add_backup_job:Function] # [DEF:SchedulerService._trigger_backup:Function] # @PURPOSE: Triggered by the scheduler to start a backup task. @@ -94,6 +98,7 @@ class SchedulerService: self.task_manager.create_task("superset-backup", {"environment_id": env_id}), self.loop ) + # [/DEF:SchedulerService._trigger_backup:Function] # [/DEF:SchedulerService:Class] # [/DEF:SchedulerModule:Module] \ No newline at end of file diff --git a/backend/src/core/superset_client.py b/backend/src/core/superset_client.py index b727e07..511c0df 100644 --- a/backend/src/core/superset_client.py +++ b/backend/src/core/superset_client.py @@ -35,7 +35,7 @@ class SupersetClient(BaseSupersetClient): db['engine'] = db.pop('backend', None) return databases - # [/DEF:SupersetClient.get_databases_summary] + # [/DEF:SupersetClient.get_databases_summary:Function] # [DEF:SupersetClient.get_database_by_uuid:Function] # @PURPOSE: Find a database by its UUID. @@ -50,7 +50,7 @@ class SupersetClient(BaseSupersetClient): } _, databases = self.get_databases(query=query) return databases[0] if databases else None - # [/DEF:SupersetClient.get_database_by_uuid] + # [/DEF:SupersetClient.get_database_by_uuid:Function] # [DEF:SupersetClient.get_dashboards_summary:Function] # @PURPOSE: Fetches dashboard metadata optimized for the grid. @@ -76,8 +76,8 @@ class SupersetClient(BaseSupersetClient): "status": "published" if dash.get("published") else "draft" }) return result - # [/DEF:SupersetClient.get_dashboards_summary] + # [/DEF:SupersetClient.get_dashboards_summary:Function] -# [/DEF:SupersetClient] +# [/DEF:SupersetClient:Class] -# [/DEF:backend.src.core.superset_client] +# [/DEF:backend.src.core.superset_client:Module] diff --git a/backend/src/core/task_manager/cleanup.py b/backend/src/core/task_manager/cleanup.py index 0a4cb3e..f4c146c 100644 --- a/backend/src/core/task_manager/cleanup.py +++ b/backend/src/core/task_manager/cleanup.py @@ -34,5 +34,7 @@ class TaskCleanupService: to_delete = [t.id for t in tasks[settings.task_retention_limit:]] self.persistence_service.delete_tasks(to_delete) logger.info(f"Deleted {len(to_delete)} tasks exceeding limit of {settings.task_retention_limit}") + # [/DEF:TaskCleanupService.run_cleanup:Function] -# [/DEF:TaskCleanupService] \ No newline at end of file +# [/DEF:TaskCleanupService:Class] +# [/DEF:TaskCleanupModule:Module] \ No newline at end of file diff --git a/backend/src/core/utils/matching.py b/backend/src/core/utils/matching.py index 6edc94f..100c780 100644 --- a/backend/src/core/utils/matching.py +++ b/backend/src/core/utils/matching.py @@ -48,6 +48,6 @@ def suggest_mappings(source_databases: List[Dict], target_databases: List[Dict], }) return suggestions -# [/DEF:suggest_mappings] +# [/DEF:suggest_mappings:Function] -# [/DEF:backend.src.core.utils.matching] +# [/DEF:backend.src.core.utils.matching:Module] diff --git a/backend/src/dependencies.py b/backend/src/dependencies.py index 1902865..14c3cd5 100755 --- a/backend/src/dependencies.py +++ b/backend/src/dependencies.py @@ -47,4 +47,4 @@ def get_task_manager() -> TaskManager: def get_scheduler_service() -> SchedulerService: """Dependency injector for the SchedulerService.""" return scheduler_service -# [/DEF] \ No newline at end of file +# [/DEF:Dependencies:Module] \ No newline at end of file diff --git a/backend/src/models/dashboard.py b/backend/src/models/dashboard.py index 0af0320..166cb60 100644 --- a/backend/src/models/dashboard.py +++ b/backend/src/models/dashboard.py @@ -14,7 +14,7 @@ class DashboardMetadata(BaseModel): title: str last_modified: str status: str -# [/DEF:DashboardMetadata] +# [/DEF:DashboardMetadata:Class] # [DEF:DashboardSelection:Class] # @PURPOSE: Represents the user's selection of dashboards to migrate. @@ -23,6 +23,6 @@ class DashboardSelection(BaseModel): source_env_id: str target_env_id: str replace_db_config: bool = False -# [/DEF:DashboardSelection] +# [/DEF:DashboardSelection:Class] -# [/DEF:backend.src.models.dashboard] \ No newline at end of file +# [/DEF:backend.src.models.dashboard:Module] \ No newline at end of file diff --git a/backend/src/models/mapping.py b/backend/src/models/mapping.py index c3ca47c..1522042 100644 --- a/backend/src/models/mapping.py +++ b/backend/src/models/mapping.py @@ -26,7 +26,7 @@ class MigrationStatus(enum.Enum): COMPLETED = "COMPLETED" FAILED = "FAILED" AWAITING_MAPPING = "AWAITING_MAPPING" -# [/DEF:MigrationStatus] +# [/DEF:MigrationStatus:Class] # [DEF:Environment:Class] # @PURPOSE: Represents a Superset instance environment. @@ -37,7 +37,7 @@ class Environment(Base): name = Column(String, nullable=False) url = Column(String, nullable=False) credentials_id = Column(String, nullable=False) -# [/DEF:Environment] +# [/DEF:Environment:Class] # [DEF:DatabaseMapping:Class] # @PURPOSE: Represents a mapping between source and target databases. @@ -52,7 +52,7 @@ class DatabaseMapping(Base): source_db_name = Column(String, nullable=False) target_db_name = Column(String, nullable=False) engine = Column(String, nullable=True) -# [/DEF:DatabaseMapping] +# [/DEF:DatabaseMapping:Class] # [DEF:MigrationJob:Class] # @PURPOSE: Represents a single migration execution job. @@ -65,6 +65,6 @@ class MigrationJob(Base): status = Column(SQLEnum(MigrationStatus), default=MigrationStatus.PENDING) replace_db = Column(Boolean, default=False) created_at = Column(DateTime(timezone=True), server_default=func.now()) -# [/DEF:MigrationJob] +# [/DEF:MigrationJob:Class] -# [/DEF:backend.src.models.mapping] +# [/DEF:backend.src.models.mapping:Module] diff --git a/backend/src/models/task.py b/backend/src/models/task.py index 144e176..b7c3e12 100644 --- a/backend/src/models/task.py +++ b/backend/src/models/task.py @@ -29,6 +29,6 @@ class TaskRecord(Base): error = Column(String, nullable=True) created_at = Column(DateTime(timezone=True), server_default=func.now()) params = Column(JSON, nullable=True) -# [/DEF:TaskRecord] +# [/DEF:TaskRecord:Class] -# [/DEF:backend.src.models.task] \ No newline at end of file +# [/DEF:backend.src.models.task:Module] \ No newline at end of file diff --git a/backend/src/plugins/backup.py b/backend/src/plugins/backup.py index f938d07..098b260 100755 --- a/backend/src/plugins/backup.py +++ b/backend/src/plugins/backup.py @@ -25,6 +25,8 @@ from superset_tool.utils.fileio import ( from superset_tool.utils.init_clients import setup_clients from ..dependencies import get_config_manager +# [DEF:BackupPlugin:Class] +# @PURPOSE: Implementation of the backup plugin logic. class BackupPlugin(PluginBase): """ A plugin to back up Superset dashboards. @@ -143,4 +145,5 @@ class BackupPlugin(PluginBase): except (RequestException, IOError, KeyError) as e: logger.critical(f"[BackupPlugin][Failure] Fatal error during backup for {env}: {e}", exc_info=True) raise e -# [/DEF:BackupPlugin] \ No newline at end of file +# [/DEF:BackupPlugin:Class] +# [/DEF:BackupPlugin:Module] \ No newline at end of file diff --git a/backend/src/plugins/migration.py b/backend/src/plugins/migration.py index 8326f62..ff08d47 100755 --- a/backend/src/plugins/migration.py +++ b/backend/src/plugins/migration.py @@ -21,6 +21,8 @@ from ..core.migration_engine import MigrationEngine from ..core.database import SessionLocal from ..models.mapping import DatabaseMapping, Environment +# [DEF:MigrationPlugin:Class] +# @PURPOSE: Implementation of the migration plugin logic. class MigrationPlugin(PluginBase): """ A plugin to migrate Superset dashboards between environments. @@ -287,10 +289,12 @@ class MigrationPlugin(PluginBase): continue logger.error(f"[MigrationPlugin][Failure] Failed to migrate dashboard {title}: {exc}", exc_info=True) + # [/DEF:MigrationPlugin.execute:Action] logger.info("[MigrationPlugin][Exit] Migration finished.") except Exception as e: logger.critical(f"[MigrationPlugin][Failure] Fatal error during migration: {e}", exc_info=True) raise e -# [/DEF:MigrationPlugin] \ No newline at end of file +# [/DEF:MigrationPlugin:Class] +# [/DEF:MigrationPlugin:Module] \ No newline at end of file diff --git a/backend/src/services/mapping_service.py b/backend/src/services/mapping_service.py index b4d264b..754acad 100644 --- a/backend/src/services/mapping_service.py +++ b/backend/src/services/mapping_service.py @@ -20,8 +20,10 @@ from superset_tool.models import SupersetConfig class MappingService: # [DEF:MappingService.__init__:Function] + # @PURPOSE: Initializes the mapping service with a config manager. def __init__(self, config_manager): self.config_manager = config_manager + # [/DEF:MappingService.__init__:Function] # [DEF:MappingService._get_client:Function] # @PURPOSE: Helper to get an initialized SupersetClient for an environment. @@ -42,6 +44,7 @@ class MappingService: } ) return SupersetClient(superset_config) + # [/DEF:MappingService._get_client:Function] # [DEF:MappingService.get_suggestions:Function] # @PURPOSE: Fetches databases from both environments and returns fuzzy matching suggestions. @@ -59,8 +62,8 @@ class MappingService: target_dbs = target_client.get_databases_summary() return suggest_mappings(source_dbs, target_dbs) - # [/DEF:MappingService.get_suggestions] + # [/DEF:MappingService.get_suggestions:Function] -# [/DEF:MappingService] +# [/DEF:MappingService:Class] -# [/DEF:backend.src.services.mapping_service] +# [/DEF:backend.src.services.mapping_service:Module] diff --git a/backup_script.py b/backup_script.py index 2f35dec..278a0aa 100755 --- a/backup_script.py +++ b/backup_script.py @@ -36,7 +36,7 @@ class BackupConfig: rotate_archive: bool = True clean_folders: bool = True retention_policy: RetentionPolicy = field(default_factory=RetentionPolicy) -# [/DEF:BackupConfig] +# [/DEF:BackupConfig:DataClass] # [DEF:backup_dashboards:Function] # @PURPOSE: Выполняет бэкап всех доступных дашбордов для заданного клиента и окружения, пропуская ошибки экспорта. @@ -111,7 +111,7 @@ def backup_dashboards( except (RequestException, IOError) as e: logger.critical(f"[backup_dashboards][Failure] Fatal error during backup for {env_name}: {e}", exc_info=True) return False -# [/DEF:backup_dashboards] +# [/DEF:backup_dashboards:Function] # [DEF:main:Function] # @PURPOSE: Основная точка входа для запуска процесса резервного копирования. @@ -155,9 +155,9 @@ def main() -> int: logger.info("[main][Exit] Superset backup process finished.") return exit_code -# [/DEF:main] +# [/DEF:main:Function] if __name__ == "__main__": sys.exit(main()) -# [/DEF:backup_script] +# [/DEF:backup_script:Module] diff --git a/debug_db_api.py b/debug_db_api.py index 6cd0dea..f2e155f 100755 --- a/debug_db_api.py +++ b/debug_db_api.py @@ -71,9 +71,9 @@ def debug_database_api(): print(f"Ошибка при тестировании API: {e}") import traceback traceback.print_exc() -# [/DEF:debug_database_api] +# [/DEF:debug_database_api:Function] if __name__ == "__main__": debug_database_api() -# [/DEF:debug_db_api] +# [/DEF:debug_db_api:Module] diff --git a/frontend/src/App.svelte b/frontend/src/App.svelte index f14c465..38a2a32 100755 --- a/frontend/src/App.svelte +++ b/frontend/src/App.svelte @@ -39,7 +39,7 @@ console.error(`[App.handleFormSubmit][Coherence:Failed] Task creation failed error=${error}`); } } - // [/DEF:handleFormSubmit] + // [/DEF:handleFormSubmit:Function] // [DEF:navigate:Function] /** @@ -56,7 +56,7 @@ // Then set page currentPage.set(page); } - // [/DEF:navigate] + // [/DEF:navigate:Function] @@ -110,4 +110,4 @@ - + diff --git a/frontend/src/components/DashboardGrid.svelte b/frontend/src/components/DashboardGrid.svelte index 7b0d5b4..e0f0735 100644 --- a/frontend/src/components/DashboardGrid.svelte +++ b/frontend/src/components/DashboardGrid.svelte @@ -69,7 +69,7 @@ sortDirection = "asc"; } } - // [/DEF:handleSort] + // [/DEF:handleSort:Function] // [DEF:handleSelectionChange:Function] // @PURPOSE: Handles individual checkbox changes. @@ -83,7 +83,7 @@ selectedIds = newSelected; dispatch('selectionChanged', newSelected); } - // [/DEF:handleSelectionChange] + // [/DEF:handleSelectionChange:Function] // [DEF:handleSelectAll:Function] // @PURPOSE: Handles select all checkbox. @@ -101,7 +101,7 @@ selectedIds = newSelected; dispatch('selectionChanged', newSelected); } - // [/DEF:handleSelectAll] + // [/DEF:handleSelectAll:Function] // [DEF:goToPage:Function] // @PURPOSE: Changes current page. @@ -110,7 +110,7 @@ currentPage = page; } } - // [/DEF:goToPage] + // [/DEF:goToPage:Function] @@ -202,4 +202,4 @@ /* Component styles */ - \ No newline at end of file + \ No newline at end of file diff --git a/frontend/src/components/DynamicForm.svelte b/frontend/src/components/DynamicForm.svelte index 95fb885..98754d5 100755 --- a/frontend/src/components/DynamicForm.svelte +++ b/frontend/src/components/DynamicForm.svelte @@ -28,7 +28,7 @@ console.log("[DynamicForm][Action] Submitting form data.", { formData }); dispatch('submit', formData); } - // [/DEF:handleSubmit] + // [/DEF:handleSubmit:Function] // [DEF:initializeForm:Function] /** @@ -41,7 +41,7 @@ } } } - // [/DEF:initializeForm] + // [/DEF:initializeForm:Function] initializeForm(); @@ -85,4 +85,4 @@ - + diff --git a/frontend/src/components/EnvSelector.svelte b/frontend/src/components/EnvSelector.svelte index b8aab28..2f3e696 100644 --- a/frontend/src/components/EnvSelector.svelte +++ b/frontend/src/components/EnvSelector.svelte @@ -31,7 +31,7 @@ selectedId = target.value; dispatch('change', { id: selectedId }); } - // [/DEF:handleSelect] + // [/DEF:handleSelect:Function] @@ -55,4 +55,4 @@ /* Component specific styles */ - + diff --git a/frontend/src/components/Footer.svelte b/frontend/src/components/Footer.svelte index e1d9076..e649a51 100644 --- a/frontend/src/components/Footer.svelte +++ b/frontend/src/components/Footer.svelte @@ -1,3 +1,10 @@ + + + diff --git a/frontend/src/components/MappingTable.svelte b/frontend/src/components/MappingTable.svelte index 023e6f3..806c4a0 100644 --- a/frontend/src/components/MappingTable.svelte +++ b/frontend/src/components/MappingTable.svelte @@ -29,7 +29,7 @@ function updateMapping(sourceUuid: string, targetUuid: string) { dispatch('update', { sourceUuid, targetUuid }); } - // [/DEF:updateMapping] + // [/DEF:updateMapping:Function] // [DEF:getSuggestion:Function] /** @@ -38,7 +38,7 @@ function getSuggestion(sourceUuid: string) { return suggestions.find(s => s.source_db_uuid === sourceUuid); } - // [/DEF:getSuggestion] + // [/DEF:getSuggestion:Function] @@ -91,4 +91,4 @@ /* Component specific styles */ - + diff --git a/frontend/src/components/MissingMappingModal.svelte b/frontend/src/components/MissingMappingModal.svelte index 30c9c85..9853352 100644 --- a/frontend/src/components/MissingMappingModal.svelte +++ b/frontend/src/components/MissingMappingModal.svelte @@ -24,6 +24,7 @@ const dispatch = createEventDispatcher(); // [DEF:resolve:Function] + // @PURPOSE: Dispatches the resolution event with the selected mapping. function resolve() { if (!selectedTargetUuid) return; dispatch('resolve', { @@ -33,14 +34,15 @@ }); show = false; } - // [/DEF:resolve] + // [/DEF:resolve:Function] // [DEF:cancel:Function] + // @PURPOSE: Cancels the mapping resolution modal. function cancel() { dispatch('cancel'); show = false; } - // [/DEF:cancel] + // [/DEF:cancel:Function] @@ -109,4 +111,4 @@ /* Modal specific styles */ - + diff --git a/frontend/src/components/Navbar.svelte b/frontend/src/components/Navbar.svelte index d7b2082..6423db6 100644 --- a/frontend/src/components/Navbar.svelte +++ b/frontend/src/components/Navbar.svelte @@ -1,3 +1,10 @@ + + @@ -36,3 +43,4 @@ + diff --git a/frontend/src/components/PasswordPrompt.svelte b/frontend/src/components/PasswordPrompt.svelte index 43185aa..4e13c9e 100644 --- a/frontend/src/components/PasswordPrompt.svelte +++ b/frontend/src/components/PasswordPrompt.svelte @@ -18,6 +18,8 @@ let passwords = {}; let submitting = false; + // [DEF:handleSubmit:Function] + // @PURPOSE: Validates and dispatches the passwords to resume the task. function handleSubmit() { if (submitting) return; @@ -32,11 +34,15 @@ dispatch('resume', { passwords }); // Reset submitting state is handled by parent or on close } + // [/DEF:handleSubmit:Function] + // [DEF:handleCancel:Function] + // @PURPOSE: Cancels the password prompt. function handleCancel() { dispatch('cancel'); show = false; } + // [/DEF:handleCancel:Function] // Reset passwords when modal opens/closes $: if (!show) { @@ -120,4 +126,4 @@ {/if} - \ No newline at end of file + \ No newline at end of file diff --git a/frontend/src/components/TaskHistory.svelte b/frontend/src/components/TaskHistory.svelte index 6cd27d3..f3f5193 100644 --- a/frontend/src/components/TaskHistory.svelte +++ b/frontend/src/components/TaskHistory.svelte @@ -15,6 +15,8 @@ let error = ""; let interval; + // [DEF:fetchTasks:Function] + // @PURPOSE: Fetches the list of recent tasks from the API. async function fetchTasks() { try { const res = await fetch('/api/tasks?limit=10'); @@ -41,7 +43,10 @@ loading = false; } } + // [/DEF:fetchTasks:Function] + // [DEF:clearTasks:Function] + // @PURPOSE: Clears tasks from the history, optionally filtered by status. async function clearTasks(status = null) { if (!confirm('Are you sure you want to clear tasks?')) return; try { @@ -57,7 +62,10 @@ error = e.message; } } + // [/DEF:clearTasks:Function] + // [DEF:selectTask:Function] + // @PURPOSE: Selects a task and fetches its full details. async function selectTask(task) { try { // Fetch the full task details (including logs) before setting it as selected @@ -74,7 +82,10 @@ selectedTask.set(task); } } + // [/DEF:selectTask:Function] + // [DEF:getStatusColor:Function] + // @PURPOSE: Returns the CSS color class for a given task status. function getStatusColor(status) { switch (status) { case 'SUCCESS': return 'bg-green-100 text-green-800'; @@ -85,15 +96,22 @@ default: return 'bg-gray-100 text-gray-800'; } } + // [/DEF:getStatusColor:Function] + // [DEF:onMount:Function] + // @PURPOSE: Initializes the component by fetching tasks and starting polling. onMount(() => { fetchTasks(); interval = setInterval(fetchTasks, 5000); // Poll every 5s }); + // [/DEF:onMount:Function] + // [DEF:onDestroy:Function] + // @PURPOSE: Cleans up the polling interval when the component is destroyed. onDestroy(() => { clearInterval(interval); }); + // [/DEF:onDestroy:Function]
@@ -176,4 +194,4 @@ {/if}
- \ No newline at end of file + \ No newline at end of file diff --git a/frontend/src/components/TaskList.svelte b/frontend/src/components/TaskList.svelte index 80e7459..d89c2fe 100644 --- a/frontend/src/components/TaskList.svelte +++ b/frontend/src/components/TaskList.svelte @@ -15,6 +15,8 @@ const dispatch = createEventDispatcher(); + // [DEF:getStatusColor:Function] + // @PURPOSE: Returns the CSS color class for a given task status. function getStatusColor(status: string) { switch (status) { case 'SUCCESS': return 'bg-green-100 text-green-800'; @@ -26,7 +28,10 @@ default: return 'bg-gray-100 text-gray-800'; } } + // [/DEF:getStatusColor:Function] + // [DEF:formatTime:Function] + // @PURPOSE: Formats a date string using date-fns. function formatTime(dateStr: string | null) { if (!dateStr) return 'N/A'; try { @@ -35,10 +40,14 @@ return 'Invalid date'; } } + // [/DEF:formatTime:Function] + // [DEF:handleTaskClick:Function] + // @PURPOSE: Dispatches a select event when a task is clicked. function handleTaskClick(taskId: string) { dispatch('select', { id: taskId }); } + // [/DEF:handleTaskClick:Function]
@@ -91,4 +100,4 @@ {/if}
- \ No newline at end of file + \ No newline at end of file diff --git a/frontend/src/components/TaskLogViewer.svelte b/frontend/src/components/TaskLogViewer.svelte index 8a373bb..e820b99 100644 --- a/frontend/src/components/TaskLogViewer.svelte +++ b/frontend/src/components/TaskLogViewer.svelte @@ -22,6 +22,8 @@ let autoScroll = true; let logContainer; + // [DEF:fetchLogs:Function] + // @PURPOSE: Fetches logs for the current task. async function fetchLogs() { if (!taskId) return; try { @@ -35,7 +37,10 @@ loading = false; } } + // [/DEF:fetchLogs:Function] + // [DEF:scrollToBottom:Function] + // @PURPOSE: Scrolls the log container to the bottom. function scrollToBottom() { if (logContainer) { setTimeout(() => { @@ -43,7 +48,10 @@ }, 0); } } + // [/DEF:scrollToBottom:Function] + // [DEF:handleScroll:Function] + // @PURPOSE: Updates auto-scroll preference based on scroll position. function handleScroll() { if (!logContainer) return; // If user scrolls up, disable auto-scroll @@ -51,12 +59,18 @@ const atBottom = scrollHeight - scrollTop - clientHeight < 50; autoScroll = atBottom; } + // [/DEF:handleScroll:Function] + // [DEF:close:Function] + // @PURPOSE: Closes the log viewer modal. function close() { dispatch('close'); show = false; } + // [/DEF:close:Function] + // [DEF:getLogLevelColor:Function] + // @PURPOSE: Returns the CSS color class for a given log level. function getLogLevelColor(level) { switch (level) { case 'INFO': return 'text-blue-600'; @@ -66,6 +80,7 @@ default: return 'text-gray-800'; } } + // [/DEF:getLogLevelColor:Function] // React to changes in show/taskId $: if (show && taskId) { @@ -82,9 +97,12 @@ if (interval) clearInterval(interval); } + // [DEF:onDestroy:Function] + // @PURPOSE: Cleans up the polling interval. onDestroy(() => { if (interval) clearInterval(interval); }); + // [/DEF:onDestroy:Function] {#if show} @@ -150,4 +168,4 @@ {/if} - \ No newline at end of file + \ No newline at end of file diff --git a/frontend/src/components/TaskRunner.svelte b/frontend/src/components/TaskRunner.svelte index 3a0f0c9..2b20186 100755 --- a/frontend/src/components/TaskRunner.svelte +++ b/frontend/src/components/TaskRunner.svelte @@ -127,8 +127,10 @@ } }; } - // [/DEF:connect] + // [/DEF:connect:Function] + // [DEF:fetchTargetDatabases:Function] + // @PURPOSE: Fetches the list of databases in the target environment. async function fetchTargetDatabases() { const task = get(selectedTask); if (!task || !task.params.to_env) return; @@ -147,7 +149,10 @@ console.error('Failed to fetch target databases', e); } } + // [/DEF:fetchTargetDatabases:Function] + // [DEF:handleMappingResolve:Function] + // @PURPOSE: Handles the resolution of a missing database mapping. async function handleMappingResolve(event) { const task = get(selectedTask); const { sourceDbUuid, targetDbUuid, targetDbName } = event.detail; @@ -187,7 +192,10 @@ addToast('Failed to resolve mapping: ' + e.message, 'error'); } } + // [/DEF:handleMappingResolve:Function] + // [DEF:handlePasswordResume:Function] + // @PURPOSE: Handles the submission of database passwords to resume a task. async function handlePasswordResume(event) { const task = get(selectedTask); const { passwords } = event.detail; @@ -206,7 +214,10 @@ addToast('Failed to resume task: ' + e.message, 'error'); } } + // [/DEF:handlePasswordResume:Function] + // [DEF:startDataTimeout:Function] + // @PURPOSE: Starts a timeout to detect when the log stream has stalled. function startDataTimeout() { waitingForData = false; dataTimeout = setTimeout(() => { @@ -215,14 +226,19 @@ } }, 5000); } + // [/DEF:startDataTimeout:Function] + // [DEF:resetDataTimeout:Function] + // @PURPOSE: Resets the data stall timeout. function resetDataTimeout() { clearTimeout(dataTimeout); waitingForData = false; startDataTimeout(); } + // [/DEF:resetDataTimeout:Function] // [DEF:onMount:Function] + // @PURPOSE: Initializes the component and subscribes to task selection changes. onMount(() => { // Subscribe to selectedTask changes const unsubscribe = selectedTask.subscribe(task => { @@ -246,7 +262,7 @@ }); return unsubscribe; }); - // [/DEF:onMount] + // [/DEF:onMount:Function] // [DEF:onDestroy:Function] /** @@ -260,7 +276,7 @@ ws.close(); } }); - // [/DEF:onDestroy] + // [/DEF:onDestroy:Function] @@ -360,4 +376,4 @@ /> - + diff --git a/frontend/src/components/Toast.svelte b/frontend/src/components/Toast.svelte index 47fb11d..b082b50 100755 --- a/frontend/src/components/Toast.svelte +++ b/frontend/src/components/Toast.svelte @@ -28,4 +28,4 @@ - + diff --git a/frontend/src/lib/api.js b/frontend/src/lib/api.js index 672b7d3..37cb39e 100755 --- a/frontend/src/lib/api.js +++ b/frontend/src/lib/api.js @@ -8,11 +8,10 @@ import { PUBLIC_WS_URL } from '$env/static/public'; const API_BASE_URL = '/api'; -/** - * Returns the WebSocket URL for a specific task, with fallback logic. - * @param {string} taskId - * @returns {string} - */ +// [DEF:getWsUrl:Function] +// @PURPOSE: Returns the WebSocket URL for a specific task, with fallback logic. +// @PARAM: taskId (string) - The ID of the task. +// @RETURN: string - The WebSocket URL. export const getWsUrl = (taskId) => { let baseUrl = PUBLIC_WS_URL; if (!baseUrl) { @@ -22,6 +21,7 @@ export const getWsUrl = (taskId) => { } return `${baseUrl}/ws/logs/${taskId}`; }; +// [/DEF:getWsUrl:Function] // [DEF:fetchApi:Function] // @PURPOSE: Generic GET request wrapper. @@ -41,7 +41,7 @@ async function fetchApi(endpoint) { throw error; } } -// [/DEF:fetchApi] +// [/DEF:fetchApi:Function] // [DEF:postApi:Function] // @PURPOSE: Generic POST request wrapper. @@ -68,7 +68,7 @@ async function postApi(endpoint, body) { throw error; } } -// [/DEF:postApi] +// [/DEF:postApi:Function] // [DEF:requestApi:Function] // @PURPOSE: Generic request wrapper. @@ -96,6 +96,7 @@ async function requestApi(endpoint, method = 'GET', body = null) { throw error; } } +// [/DEF:requestApi:Function] // [DEF:api:Data] // @PURPOSE: API client object with specific methods. @@ -116,7 +117,9 @@ export const api = { updateEnvironmentSchedule: (id, schedule) => requestApi(`/environments/${id}/schedule`, 'PUT', schedule), getEnvironmentsList: () => fetchApi('/environments'), }; -// [/DEF:api_module] +// [/DEF:api:Data] + +// [/DEF:api_module:Module] // Export individual functions for easier use in components export const getPlugins = api.getPlugins; diff --git a/frontend/src/lib/stores.js b/frontend/src/lib/stores.js index d2cbdfe..19cea65 100755 --- a/frontend/src/lib/stores.js +++ b/frontend/src/lib/stores.js @@ -9,26 +9,32 @@ import { api } from './api.js'; // [DEF:plugins:Data] // @PURPOSE: Store for the list of available plugins. export const plugins = writable([]); +// [/DEF:plugins:Data] // [DEF:tasks:Data] // @PURPOSE: Store for the list of tasks. export const tasks = writable([]); +// [/DEF:tasks:Data] // [DEF:selectedPlugin:Data] // @PURPOSE: Store for the currently selected plugin. export const selectedPlugin = writable(null); +// [/DEF:selectedPlugin:Data] // [DEF:selectedTask:Data] // @PURPOSE: Store for the currently selected task. export const selectedTask = writable(null); +// [/DEF:selectedTask:Data] // [DEF:currentPage:Data] // @PURPOSE: Store for the current page. export const currentPage = writable('dashboard'); +// [/DEF:currentPage:Data] // [DEF:taskLogs:Data] // @PURPOSE: Store for the logs of the currently selected task. export const taskLogs = writable([]); +// [/DEF:taskLogs:Data] // [DEF:fetchPlugins:Function] // @PURPOSE: Fetches plugins from the API and updates the plugins store. @@ -42,7 +48,7 @@ export async function fetchPlugins() { console.error(`[stores.fetchPlugins][Coherence:Failed] Error fetching plugins context={{'error': '${error}'}}`); } } -// [/DEF:fetchPlugins] +// [/DEF:fetchPlugins:Function] // [DEF:fetchTasks:Function] // @PURPOSE: Fetches tasks from the API and updates the tasks store. @@ -56,5 +62,5 @@ export async function fetchTasks() { console.error(`[stores.fetchTasks][Coherence:Failed] Error fetching tasks context={{'error': '${error}'}}`); } } -// [/DEF:fetchTasks] -// [/DEF:stores_module] \ No newline at end of file +// [/DEF:fetchTasks:Function] +// [/DEF:stores_module:Module] \ No newline at end of file diff --git a/frontend/src/lib/toasts.js b/frontend/src/lib/toasts.js index babc136..f67baf4 100755 --- a/frontend/src/lib/toasts.js +++ b/frontend/src/lib/toasts.js @@ -8,6 +8,7 @@ import { writable } from 'svelte/store'; // [DEF:toasts:Data] // @PURPOSE: Writable store containing the list of active toasts. export const toasts = writable([]); +// [/DEF:toasts:Data] // [DEF:addToast:Function] // @PURPOSE: Adds a new toast message. @@ -20,7 +21,7 @@ export function addToast(message, type = 'info', duration = 3000) { toasts.update(all => [...all, { id, message, type }]); setTimeout(() => removeToast(id), duration); } -// [/DEF:addToast] +// [/DEF:addToast:Function] // [DEF:removeToast:Function] // @PURPOSE: Removes a toast message by ID. @@ -29,5 +30,5 @@ function removeToast(id) { console.log(`[toasts.removeToast][Action] Removing toast context={{'id': '${id}'}}`); toasts.update(all => all.filter(t => t.id !== id)); } -// [/DEF:removeToast] -// [/DEF:toasts_module] \ No newline at end of file +// [/DEF:removeToast:Function] +// [/DEF:toasts_module:Module] \ No newline at end of file diff --git a/frontend/src/main.js b/frontend/src/main.js index f79b68d..2afa121 100755 --- a/frontend/src/main.js +++ b/frontend/src/main.js @@ -12,6 +12,7 @@ const app = new App({ target: document.getElementById('app'), props: {} }) +// [/DEF:app_instance:Data] export default app -// [/DEF:main] +// [/DEF:main:Module] diff --git a/frontend/src/pages/Dashboard.svelte b/frontend/src/pages/Dashboard.svelte index 416fc81..de2a020 100755 --- a/frontend/src/pages/Dashboard.svelte +++ b/frontend/src/pages/Dashboard.svelte @@ -22,7 +22,7 @@ console.log("[Dashboard][Entry] Component mounted, fetching plugins."); await fetchPlugins(); }); - // [/DEF:onMount] + // [/DEF:onMount:Function] // [DEF:selectPlugin:Function] /** @@ -33,7 +33,7 @@ console.log(`[Dashboard][Action] Selecting plugin: ${plugin.id}`); selectedPlugin.set(plugin); } - // [/DEF:selectPlugin] + // [/DEF:selectPlugin:Function] @@ -57,4 +57,4 @@ - + diff --git a/frontend/src/pages/Settings.svelte b/frontend/src/pages/Settings.svelte index 87cd202..88d93a4 100755 --- a/frontend/src/pages/Settings.svelte +++ b/frontend/src/pages/Settings.svelte @@ -62,7 +62,7 @@ addToast('Failed to load settings', 'error'); } } - // [/DEF:loadSettings] + // [/DEF:loadSettings:Function] // [DEF:handleSaveGlobal:Function] /** @@ -79,7 +79,7 @@ addToast('Failed to save global settings', 'error'); } } - // [/DEF:handleSaveGlobal] + // [/DEF:handleSaveGlobal:Function] // [DEF:handleAddOrUpdateEnv:Function] /** @@ -103,7 +103,7 @@ addToast('Failed to save environment', 'error'); } } - // [/DEF:handleAddOrUpdateEnv] + // [/DEF:handleAddOrUpdateEnv:Function] // [DEF:handleDeleteEnv:Function] /** @@ -124,7 +124,7 @@ } } } - // [/DEF:handleDeleteEnv] + // [/DEF:handleDeleteEnv:Function] // [DEF:handleTestEnv:Function] /** @@ -147,7 +147,7 @@ addToast('Failed to test connection', 'error'); } } - // [/DEF:handleTestEnv] + // [/DEF:handleTestEnv:Function] // [DEF:editEnv:Function] /** @@ -158,7 +158,7 @@ newEnv = { ...env }; editingEnvId = env.id; } - // [/DEF:editEnv] + // [/DEF:editEnv:Function] // [DEF:resetEnvForm:Function] /** @@ -179,7 +179,7 @@ }; editingEnvId = null; } - // [/DEF:resetEnvForm] + // [/DEF:resetEnvForm:Function] onMount(loadSettings); @@ -330,4 +330,4 @@ - + diff --git a/frontend/src/routes/migration/+page.svelte b/frontend/src/routes/migration/+page.svelte index 7f616e8..1e0caf0 100644 --- a/frontend/src/routes/migration/+page.svelte +++ b/frontend/src/routes/migration/+page.svelte @@ -64,7 +64,7 @@ loading = false; } } - // [/DEF:fetchEnvironments] + // [/DEF:fetchEnvironments:Function] // [DEF:fetchDashboards:Function] /** @@ -83,7 +83,7 @@ dashboards = []; } } - // [/DEF:fetchDashboards] + // [/DEF:fetchDashboards:Function] onMount(fetchEnvironments); @@ -123,7 +123,7 @@ fetchingDbs = false; } } - // [/DEF:fetchDatabases] + // [/DEF:fetchDatabases:Function] // [DEF:handleMappingUpdate:Function] /** @@ -158,18 +158,20 @@ error = e.message; } } - // [/DEF:handleMappingUpdate] + // [/DEF:handleMappingUpdate:Function] // [DEF:handleViewLogs:Function] + // @PURPOSE: Opens the log viewer for a specific task. function handleViewLogs(event: CustomEvent) { const task = event.detail; logViewerTaskId = task.id; logViewerTaskStatus = task.status; showLogViewer = true; } - // [/DEF:handleViewLogs] + // [/DEF:handleViewLogs:Function] // [DEF:handlePasswordPrompt:Function] + // @PURPOSE: Reactive logic to show password prompt when a task is awaiting input. // This is triggered by TaskRunner or TaskHistory when a task needs input // For now, we rely on the WebSocket or manual check. // Ideally, TaskHistory or TaskRunner emits an event when input is needed. @@ -188,7 +190,10 @@ // showPasswordPrompt = false; // Actually, don't auto-close, let the user or success handler close it. } + // [/DEF:handlePasswordPrompt:Function] + // [DEF:handleResumeMigration:Function] + // @PURPOSE: Resumes a migration task with provided passwords. async function handleResumeMigration(event: CustomEvent) { if (!$selectedTask) return; @@ -203,6 +208,7 @@ // Keep prompt open } } + // [/DEF:handleResumeMigration:Function] // [DEF:startMigration:Function] /** @@ -270,7 +276,7 @@ error = e.message; } } - // [/DEF:startMigration] + // [/DEF:startMigration:Function] @@ -396,4 +402,4 @@ /* Page specific styles */ - + diff --git a/frontend/src/routes/migration/mappings/+page.svelte b/frontend/src/routes/migration/mappings/+page.svelte index 65aca8a..6274362 100644 --- a/frontend/src/routes/migration/mappings/+page.svelte +++ b/frontend/src/routes/migration/mappings/+page.svelte @@ -30,6 +30,8 @@ let success = ""; // [/SECTION] + // [DEF:fetchEnvironments:Function] + // @PURPOSE: Fetches the list of environments. async function fetchEnvironments() { try { const response = await fetch('/api/environments'); @@ -41,6 +43,7 @@ loading = false; } } + // [/DEF:fetchEnvironments:Function] onMount(fetchEnvironments); @@ -78,7 +81,7 @@ fetchingDbs = false; } } - // [/DEF:fetchDatabases] + // [/DEF:fetchDatabases:Function] // [DEF:handleUpdate:Function] /** @@ -114,7 +117,7 @@ error = e.message; } } - // [/DEF:handleUpdate] + // [/DEF:handleUpdate:Function] @@ -180,4 +183,4 @@ /* Page specific styles */ - + diff --git a/generate_semantic_map.py b/generate_semantic_map.py new file mode 100644 index 0000000..7e4011c --- /dev/null +++ b/generate_semantic_map.py @@ -0,0 +1,439 @@ +# [DEF:generate_semantic_map:Module] +# +# @SEMANTICS: semantic_analysis, parser, map_generator, compliance_checker +# @PURPOSE: Scans the codebase to generate a Semantic Map and Compliance Report based on the System Standard. +# @LAYER: DevOps/Tooling +# @RELATION: READS -> FileSystem +# @RELATION: PRODUCES -> semantics/semantic_map.json +# @RELATION: PRODUCES -> specs/project_map.md +# @RELATION: PRODUCES -> semantics/reports/semantic_report_*.md + +# [SECTION: IMPORTS] +import os +import re +import json +import datetime +from typing import Dict, List, Optional, Any, Pattern, Tuple +# [/SECTION] + +# [SECTION: CONFIGURATION] +PROJECT_ROOT = "." +IGNORE_DIRS = { + ".git", "__pycache__", "node_modules", "venv", ".pytest_cache", + ".kilocode", "backups", "logs", "semantics", "specs" +} +IGNORE_FILES = { + "package-lock.json", "poetry.lock", "yarn.lock" +} +OUTPUT_JSON = "semantics/semantic_map.json" +OUTPUT_COMPRESSED_MD = "specs/project_map.md" +REPORTS_DIR = "semantics/reports" + +MANDATORY_TAGS = { + "Module": ["PURPOSE", "LAYER"], + "Component": ["PURPOSE", "LAYER"], + "Function": ["PURPOSE"], + "Class": ["PURPOSE"] +} +# [/SECTION] + +# [DEF:SemanticEntity:Class] +# @PURPOSE: Represents a code entity (Module, Function, Component) found during parsing. +# @INVARIANT: start_line is always set; end_line is set upon closure. +class SemanticEntity: + def __init__(self, name: str, type_: str, start_line: int, file_path: str): + self.name = name + self.type = type_ + self.start_line = start_line + self.end_line: Optional[int] = None + self.file_path = file_path + self.tags: Dict[str, str] = {} + self.relations: List[Dict[str, str]] = [] + self.children: List['SemanticEntity'] = [] + self.parent: Optional['SemanticEntity'] = None + self.compliance_issues: List[str] = [] + + # [DEF:to_dict:Function] + # @PURPOSE: Serializes the entity to a dictionary for JSON output. + # @RETURN: Dict representation of the entity. + def to_dict(self) -> Dict[str, Any]: + return { + "name": self.name, + "type": self.type, + "start_line": self.start_line, + "end_line": self.end_line, + "tags": self.tags, + "relations": self.relations, + "children": [c.to_dict() for c in self.children], + "compliance": { + "valid": len(self.compliance_issues) == 0, + "issues": self.compliance_issues + } + } + # [/DEF:to_dict:Function] + + # [DEF:validate:Function] + # @PURPOSE: Checks for semantic compliance (closure, mandatory tags). + # @POST: Populates self.compliance_issues. + def validate(self): + # 1. Check Closure + if self.end_line is None: + self.compliance_issues.append(f"Unclosed Anchor: [DEF:{self.name}:{self.type}] started at line {self.start_line}") + + # 2. Check Mandatory Tags + required = MANDATORY_TAGS.get(self.type, []) + for req_tag in required: + found = False + for existing_tag in self.tags: + if existing_tag.upper() == req_tag: + found = True + break + if not found: + self.compliance_issues.append(f"Missing Mandatory Tag: @{req_tag}") + + # Recursive validation + for child in self.children: + child.validate() + # [/DEF:validate:Function] + + # [DEF:get_score:Function] + # @PURPOSE: Calculates a compliance score (0.0 to 1.0). + # @RETURN: Float score. + def get_score(self) -> float: + if self.end_line is None: + return 0.0 + + score = 1.0 + required = MANDATORY_TAGS.get(self.type, []) + if required: + found_count = 0 + for req_tag in required: + for existing_tag in self.tags: + if existing_tag.upper() == req_tag: + found_count += 1 + break + if found_count < len(required): + # Penalty proportional to missing tags + score -= 0.5 * (1 - (found_count / len(required))) + + return max(0.0, score) + # [/DEF:get_score:Function] +# [/DEF:SemanticEntity:Class] + + +# [DEF:get_patterns:Function] +# @PURPOSE: Returns regex patterns for a specific language. +# @PARAM: lang (str) - 'python' or 'svelte_js' +# @RETURN: Dict containing compiled regex patterns. +def get_patterns(lang: str) -> Dict[str, Pattern]: + if lang == "python": + return { + "anchor_start": re.compile(r"#\s*\[DEF:(?P[\w\.]+):(?P\w+)\]"), + "anchor_end": re.compile(r"#\s*\[/DEF:(?P[\w\.]+):(?P\w+)\]"), + "tag": re.compile(r"#\s*@(?P[A-Z_]+):\s*(?P.*)"), + "relation": re.compile(r"#\s*@RELATION:\s*(?P\w+)\s*->\s*(?P.*)"), + } + else: + return { + "html_anchor_start": re.compile(r""), + "html_anchor_end": re.compile(r""), + "js_anchor_start": re.compile(r"//\s*\[DEF:(?P[\w\.]+):(?P\w+)\]"), + "js_anchor_end": re.compile(r"//\s*\[/DEF:(?P[\w\.]+):(?P\w+)\]"), + "html_tag": re.compile(r"@(?P[A-Z_]+):\s*(?P.*)"), + "jsdoc_tag": re.compile(r"\*\s*@(?P[a-zA-Z]+)\s+(?P.*)"), + "relation": re.compile(r"//\s*@RELATION:\s*(?P\w+)\s*->\s*(?P.*)"), + } +# [/DEF:get_patterns:Function] + + +# [DEF:parse_file:Function] +# @PURPOSE: Parses a single file to extract semantic entities. +# @PARAM: full_path - Absolute path to file. +# @PARAM: rel_path - Relative path from project root. +# @PARAM: lang - Language identifier. +# @RETURN: Tuple[List[SemanticEntity], List[str]] - Entities found and global issues. +def parse_file(full_path: str, rel_path: str, lang: str) -> Tuple[List[SemanticEntity], List[str]]: + issues: List[str] = [] + try: + with open(full_path, 'r', encoding='utf-8') as f: + lines = f.readlines() + except Exception as e: + return [], [f"Could not read file {rel_path}: {e}"] + + stack: List[SemanticEntity] = [] + file_entities: List[SemanticEntity] = [] + patterns = get_patterns(lang) + + for i, line in enumerate(lines): + lineno = i + 1 + line = line.strip() + + # 1. Check for Anchor Start + match_start = None + if lang == "python": + match_start = patterns["anchor_start"].search(line) + else: + match_start = patterns["html_anchor_start"].search(line) or patterns["js_anchor_start"].search(line) + + if match_start: + name = match_start.group("name") + type_ = match_start.group("type") + entity = SemanticEntity(name, type_, lineno, rel_path) + + if stack: + parent = stack[-1] + parent.children.append(entity) + entity.parent = parent + else: + file_entities.append(entity) + + stack.append(entity) + continue + + # 2. Check for Anchor End + match_end = None + if lang == "python": + match_end = patterns["anchor_end"].search(line) + else: + match_end = patterns["html_anchor_end"].search(line) or patterns["js_anchor_end"].search(line) + + if match_end: + name = match_end.group("name") + type_ = match_end.group("type") + + if not stack: + issues.append(f"{rel_path}:{lineno} Found closing anchor [/DEF:{name}:{type_}] without opening anchor.") + continue + + top = stack[-1] + if top.name == name and top.type == type_: + top.end_line = lineno + stack.pop() + else: + issues.append(f"{rel_path}:{lineno} Mismatched closing anchor. Expected [/DEF:{top.name}:{top.type}], found [/DEF:{name}:{type_}].") + continue + + # 3. Check for Tags/Relations + if stack: + current = stack[-1] + + match_rel = patterns["relation"].search(line) + if match_rel: + current.relations.append({ + "type": match_rel.group("type"), + "target": match_rel.group("target") + }) + continue + + match_tag = None + if lang == "python": + match_tag = patterns["tag"].search(line) + elif lang == "svelte_js": + match_tag = patterns["html_tag"].search(line) + if not match_tag and ("/*" in line or "*" in line or "//" in line): + match_tag = patterns["jsdoc_tag"].search(line) + + if match_tag: + tag_name = match_tag.group("tag").upper() + tag_value = match_tag.group("value").strip() + current.tags[tag_name] = tag_value + + # End of file check + if stack: + for unclosed in stack: + unclosed.compliance_issues.append(f"Unclosed Anchor at end of file (started line {unclosed.start_line})") + if unclosed.parent is None and unclosed not in file_entities: + file_entities.append(unclosed) + + return file_entities, issues +# [/DEF:parse_file:Function] + + +# [DEF:SemanticMapGenerator:Class] +# @PURPOSE: Orchestrates the mapping process. +class SemanticMapGenerator: + def __init__(self, root_dir: str): + self.root_dir = root_dir + self.entities: List[SemanticEntity] = [] + self.file_scores: Dict[str, float] = {} + self.global_issues: List[str] = [] + + # [DEF:run:Function] + # @PURPOSE: Main execution flow. + # @RELATION: CALLS -> _walk_and_parse + # @RELATION: CALLS -> _generate_artifacts + def run(self): + print(f"Starting Semantic Map Generation in {self.root_dir}...") + self._walk_and_parse() + self._generate_artifacts() + print("Done.") + # [/DEF:run:Function] + + # [DEF:_walk_and_parse:Function] + # @PURPOSE: Recursively walks directories and triggers parsing. + def _walk_and_parse(self): + for root, dirs, files in os.walk(self.root_dir): + dirs[:] = [d for d in dirs if d not in IGNORE_DIRS] + + for file in files: + if file in IGNORE_FILES: + continue + + file_path = os.path.join(root, file) + rel_path = os.path.relpath(file_path, self.root_dir) + + lang = None + if file.endswith(".py"): + lang = "python" + elif file.endswith((".svelte", ".js", ".ts")): + lang = "svelte_js" + + if lang: + entities, issues = parse_file(file_path, rel_path, lang) + self.global_issues.extend(issues) + + if entities: + self._process_file_results(rel_path, entities) + # [/DEF:_walk_and_parse:Function] + + # [DEF:_process_file_results:Function] + # @PURPOSE: Validates entities and calculates file scores. + def _process_file_results(self, rel_path: str, entities: List[SemanticEntity]): + total_score = 0 + count = 0 + + def validate_recursive(ent_list): + nonlocal total_score, count + for e in ent_list: + e.validate() + total_score += e.get_score() + count += 1 + validate_recursive(e.children) + + validate_recursive(entities) + + self.entities.extend(entities) + self.file_scores[rel_path] = (total_score / count) if count > 0 else 0.0 + # [/DEF:_process_file_results:Function] + + # [DEF:_generate_artifacts:Function] + # @PURPOSE: Writes output files. + def _generate_artifacts(self): + # 1. Full JSON Map + full_map = { + "project_root": self.root_dir, + "generated_at": datetime.datetime.now().isoformat(), + "modules": [e.to_dict() for e in self.entities] + } + + os.makedirs(os.path.dirname(OUTPUT_JSON), exist_ok=True) + with open(OUTPUT_JSON, 'w', encoding='utf-8') as f: + json.dump(full_map, f, indent=2) + print(f"Generated {OUTPUT_JSON}") + + # 2. Compliance Report + self._generate_report() + + # 3. Compressed Map (Markdown) + self._generate_compressed_map() + # [/DEF:_generate_artifacts:Function] + + # [DEF:_generate_report:Function] + # @PURPOSE: Generates the Markdown compliance report. + def _generate_report(self): + timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S") + report_path = os.path.join(REPORTS_DIR, f"semantic_report_{timestamp}.md") + os.makedirs(REPORTS_DIR, exist_ok=True) + + total_files = len(self.file_scores) + avg_score = sum(self.file_scores.values()) / total_files if total_files > 0 else 0 + + with open(report_path, 'w', encoding='utf-8') as f: + f.write(f"# Semantic Compliance Report\n\n") + f.write(f"**Generated At:** {datetime.datetime.now().isoformat()}\n") + f.write(f"**Global Compliance Score:** {avg_score:.1%}\n") + f.write(f"**Scanned Files:** {total_files}\n\n") + + if self.global_issues: + f.write("## Critical Parsing Errors\n") + for issue in self.global_issues: + f.write(f"- 🔴 {issue}\n") + f.write("\n") + + f.write("## File Compliance Status\n") + f.write("| File | Score | Issues |\n") + f.write("|------|-------|--------|\n") + + sorted_files = sorted(self.file_scores.items(), key=lambda x: x[1]) + + for file_path, score in sorted_files: + issues = [] + self._collect_issues(self.entities, file_path, issues) + + status_icon = "🟢" if score == 1.0 else "🟡" if score > 0.5 else "🔴" + issue_text = "
".join(issues) if issues else "OK" + f.write(f"| {file_path} | {status_icon} {score:.0%} | {issue_text} |\n") + + print(f"Generated {report_path}") + # [/DEF:_generate_report:Function] + + # [DEF:_collect_issues:Function] + # @PURPOSE: Helper to collect issues for a specific file from the entity tree. + def _collect_issues(self, entities: List[SemanticEntity], file_path: str, issues: List[str]): + for e in entities: + if e.file_path == file_path: + issues.extend([f"[{e.name}] {i}" for i in e.compliance_issues]) + self._collect_issues(e.children, file_path, issues) + # [/DEF:_collect_issues:Function] + + # [DEF:_generate_compressed_map:Function] + # @PURPOSE: Generates the token-optimized project map. + def _generate_compressed_map(self): + os.makedirs(os.path.dirname(OUTPUT_COMPRESSED_MD), exist_ok=True) + + with open(OUTPUT_COMPRESSED_MD, 'w', encoding='utf-8') as f: + f.write("# Project Semantic Map\n\n") + f.write("> Compressed view for AI Context. Generated automatically.\n\n") + + for entity in self.entities: + self._write_entity_md(f, entity, level=0) + + print(f"Generated {OUTPUT_COMPRESSED_MD}") + # [/DEF:_generate_compressed_map:Function] + + # [DEF:_write_entity_md:Function] + # @PURPOSE: Recursive helper to write entity tree to Markdown. + def _write_entity_md(self, f, entity: SemanticEntity, level: int): + indent = " " * level + + icon = "📦" + if entity.type == "Component": icon = "🧩" + elif entity.type == "Function": icon = "ƒ" + elif entity.type == "Class": icon = "ℂ" + + f.write(f"{indent}- {icon} **{entity.name}** (`{entity.type}`)\n") + + purpose = entity.tags.get("PURPOSE") or entity.tags.get("purpose") + layer = entity.tags.get("LAYER") or entity.tags.get("layer") + + if purpose: + f.write(f"{indent} - 📝 {purpose}\n") + if layer: + f.write(f"{indent} - 🏗️ Layer: {layer}\n") + + for rel in entity.relations: + if rel['type'] in ['DEPENDS_ON', 'CALLS', 'INHERITS_FROM']: + f.write(f"{indent} - 🔗 {rel['type']} -> `{rel['target']}`\n") + + if level < 2: + for child in entity.children: + self._write_entity_md(f, child, level + 1) + # [/DEF:_write_entity_md:Function] + +# [/DEF:SemanticMapGenerator:Class] + +if __name__ == "__main__": + generator = SemanticMapGenerator(PROJECT_ROOT) + generator.run() + +# [/DEF:generate_semantic_map:Module] \ No newline at end of file diff --git a/get_dataset_structure.py b/get_dataset_structure.py index 1ba3325..4d5f9a4 100755 --- a/get_dataset_structure.py +++ b/get_dataset_structure.py @@ -50,7 +50,7 @@ def get_and_save_dataset(env: str, dataset_id: int, output_path: str): except Exception as e: logger.error("[get_and_save_dataset][Failure] An error occurred: %s", e, exc_info=True) -# [/DEF:get_and_save_dataset] +# [/DEF:get_and_save_dataset:Function] if __name__ == "__main__": parser = argparse.ArgumentParser(description="Получение структуры датасета из Superset.") @@ -61,4 +61,4 @@ if __name__ == "__main__": get_and_save_dataset(args.env, args.dataset_id, args.output_path) -# [/DEF:get_dataset_structure] +# [/DEF:get_dataset_structure:Module] diff --git a/migration_script.py b/migration_script.py index 72ed3b3..e2f3eb7 100755 --- a/migration_script.py +++ b/migration_script.py @@ -47,7 +47,7 @@ class Migration: self.dashboards_to_migrate: List[dict] = [] self.db_config_replacement: Optional[dict] = None self._failed_imports: List[dict] = [] - # [/DEF:Migration.__init__] + # [/DEF:Migration.__init__:Function] # [DEF:Migration.run:Function] # @PURPOSE: Точка входа – последовательный запуск всех шагов миграции. @@ -66,7 +66,7 @@ class Migration: self.confirm_db_config_replacement() self.execute_migration() self.logger.info("[run][Exit] Скрипт миграции завершён.") - # [/DEF:Migration.run] + # [/DEF:Migration.run:Function] # [DEF:Migration.ask_delete_on_failure:Function] # @PURPOSE: Запрашивает у пользователя, следует ли удалять дашборд при ошибке импорта. @@ -81,7 +81,7 @@ class Migration: "[ask_delete_on_failure][State] Delete-on-failure = %s", self.enable_delete_on_failure, ) - # [/DEF:Migration.ask_delete_on_failure] + # [/DEF:Migration.ask_delete_on_failure:Function] # [DEF:Migration.select_environments:Function] # @PURPOSE: Позволяет пользователю выбрать исходное и целевое окружения Superset. @@ -122,7 +122,7 @@ class Migration: self.to_c = all_clients[to_env_name] self.logger.info("[select_environments][State] to = %s", to_env_name) self.logger.info("[select_environments][Exit] Шаг 1 завершён.") - # [/DEF:Migration.select_environments] + # [/DEF:Migration.select_environments:Function] # [DEF:Migration.select_dashboards:Function] # @PURPOSE: Позволяет пользователю выбрать набор дашбордов для миграции. @@ -179,7 +179,7 @@ class Migration: self.logger.error("[select_dashboards][Failure] %s", e, exc_info=True) msgbox("Ошибка", "Не удалось получить список дашбордов.") self.logger.info("[select_dashboards][Exit] Шаг 2 завершён.") - # [/DEF:Migration.select_dashboards] + # [/DEF:Migration.select_dashboards:Function] # [DEF:Migration.confirm_db_config_replacement:Function] # @PURPOSE: Запрашивает у пользователя, требуется ли заменить имена БД в YAML-файлах. @@ -214,7 +214,7 @@ class Migration: self.logger.info("[confirm_db_config_replacement][State] Replacement set: %s", self.db_config_replacement) else: self.logger.info("[confirm_db_config_replacement][State] Skipped.") - # [/DEF:Migration.confirm_db_config_replacement] + # [/DEF:Migration.confirm_db_config_replacement:Function] # [DEF:Migration._select_databases:Function] # @PURPOSE: Позволяет пользователю выбрать исходную и целевую БД через API. @@ -293,7 +293,7 @@ class Migration: self.logger.info("[_select_databases][Exit] Selected databases: %s -> %s", from_db.get("database_name", "Без имени"), to_db.get("database_name", "Без имени")) return from_db, to_db - # [/DEF:Migration._select_databases] + # [/DEF:Migration._select_databases:Function] # [DEF:Migration._batch_delete_by_ids:Function] # @PURPOSE: Удаляет набор дашбордов по их ID единым запросом. @@ -319,7 +319,7 @@ class Migration: self.logger.warning("[_batch_delete_by_ids][Warning] Unexpected delete response: %s", response) else: self.logger.info("[_batch_delete_by_ids][Success] Delete request completed.") - # [/DEF:Migration._batch_delete_by_ids] + # [/DEF:Migration._batch_delete_by_ids:Function] # [DEF:Migration.execute_migration:Function] # @PURPOSE: Выполняет экспорт-импорт дашбордов, обрабатывает ошибки и, при необходимости, выполняет процедуру восстановления. @@ -391,11 +391,11 @@ class Migration: self.logger.info("[execute_migration][Exit] Migration finished.") msgbox("Информация", "Миграция завершена!") - # [/DEF:Migration.execute_migration] + # [/DEF:Migration.execute_migration:Function] -# [/DEF:Migration] +# [/DEF:Migration:Class] if __name__ == "__main__": Migration().run() -# [/DEF:migration_script] +# [/DEF:migration_script:Module] diff --git a/run_mapper.py b/run_mapper.py index bddc7d0..1ac38b9 100755 --- a/run_mapper.py +++ b/run_mapper.py @@ -64,9 +64,9 @@ def main(): except Exception as main_exc: logger.error("[main][Failure] An unexpected error occurred: %s", main_exc, exc_info=True) -# [/DEF:main] +# [/DEF:main:Function] if __name__ == '__main__': main() -# [/DEF:run_mapper] +# [/DEF:run_mapper:Module] diff --git a/search_script.py b/search_script.py index fc82bb5..e51c73f 100755 --- a/search_script.py +++ b/search_script.py @@ -76,7 +76,7 @@ def search_datasets( except (SupersetAPIError, RequestException) as e: logger.critical(f"[search_datasets][Failure] Critical error during search: {e}", exc_info=True) raise -# [/DEF:search_datasets] +# [/DEF:search_datasets:Function] # [DEF:save_results_to_file:Function] # @PURPOSE: Сохраняет результаты поиска в текстовый файл. @@ -99,7 +99,7 @@ def save_results_to_file(results: Optional[Dict], filename: str, logger: Optiona except Exception as e: logger.error(f"[save_results_to_file][Failure] Failed to save results to file: {e}", exc_info=True) return False -# [/DEF:save_results_to_file] +# [/DEF:save_results_to_file:Function] # [DEF:print_search_results:Function] # @PURPOSE: Форматирует результаты поиска для читаемого вывода в консоль. @@ -160,7 +160,7 @@ def print_search_results(results: Optional[Dict], context_lines: int = 3) -> str output.append(f" {prefix}{line_content}") output.append("-" * 25) return "\n".join(output) -# [/DEF:print_search_results] +# [/DEF:print_search_results:Function] # [DEF:main:Function] # @PURPOSE: Основная точка входа для запуска скрипта поиска. @@ -196,9 +196,9 @@ def main(): logger.info(f"[main][Success] Results also saved to file: {output_filename}") else: logger.error(f"[main][Failure] Failed to save results to file: {output_filename}") -# [/DEF:main] +# [/DEF:main:Function] if __name__ == "__main__": main() -# [/DEF:search_script] +# [/DEF:search_script:Module] diff --git a/semantics/reports/semantic_report_20260101_162143.md b/semantics/reports/semantic_report_20260101_162143.md new file mode 100644 index 0000000..68d09e6 --- /dev/null +++ b/semantics/reports/semantic_report_20260101_162143.md @@ -0,0 +1,81 @@ +# Semantic Compliance Report + +**Generated At:** 2026-01-01T16:21:43.137362 +**Global Compliance Score:** 7.4% +**Scanned Files:** 68 + +## Critical Parsing Errors +- 🔴 backend/src/core/scheduler.py:98 Mismatched closing anchor. Expected [/DEF:SchedulerService._trigger_backup:Function], found [/DEF:SchedulerService:Class]. +- 🔴 backend/src/core/scheduler.py:99 Mismatched closing anchor. Expected [/DEF:SchedulerService._trigger_backup:Function], found [/DEF:SchedulerModule:Module]. + +## File Compliance Status +| File | Score | Issues | +|------|-------|--------| +| search_script.py | 🔴 0% | [search_script] Unclosed Anchor at end of file (started line 1)
[search_script] Unclosed Anchor: [DEF:search_script:Module] started at line 1
[search_datasets] Unclosed Anchor at end of file (started line 22)
[search_datasets] Unclosed Anchor: [DEF:search_datasets:Function] started at line 22
[search_datasets] Unclosed Anchor: [DEF:search_datasets:Function] started at line 22
[save_results_to_file] Unclosed Anchor at end of file (started line 81)
[save_results_to_file] Unclosed Anchor: [DEF:save_results_to_file:Function] started at line 81
[save_results_to_file] Unclosed Anchor: [DEF:save_results_to_file:Function] started at line 81
[save_results_to_file] Unclosed Anchor: [DEF:save_results_to_file:Function] started at line 81
[print_search_results] Unclosed Anchor at end of file (started line 104)
[print_search_results] Unclosed Anchor: [DEF:print_search_results:Function] started at line 104
[print_search_results] Unclosed Anchor: [DEF:print_search_results:Function] started at line 104
[print_search_results] Unclosed Anchor: [DEF:print_search_results:Function] started at line 104
[print_search_results] Unclosed Anchor: [DEF:print_search_results:Function] started at line 104
[main] Unclosed Anchor at end of file (started line 165)
[main] Unclosed Anchor: [DEF:main:Function] started at line 165
[main] Unclosed Anchor: [DEF:main:Function] started at line 165
[main] Unclosed Anchor: [DEF:main:Function] started at line 165
[main] Unclosed Anchor: [DEF:main:Function] started at line 165
[main] Unclosed Anchor: [DEF:main:Function] started at line 165 | +| get_dataset_structure.py | 🔴 0% | [get_dataset_structure] Unclosed Anchor at end of file (started line 1)
[get_dataset_structure] Unclosed Anchor: [DEF:get_dataset_structure:Module] started at line 1
[get_and_save_dataset] Unclosed Anchor at end of file (started line 18)
[get_and_save_dataset] Unclosed Anchor: [DEF:get_and_save_dataset:Function] started at line 18
[get_and_save_dataset] Unclosed Anchor: [DEF:get_and_save_dataset:Function] started at line 18 | +| debug_db_api.py | 🔴 0% | [debug_db_api] Unclosed Anchor at end of file (started line 1)
[debug_db_api] Unclosed Anchor: [DEF:debug_db_api:Module] started at line 1
[debug_database_api] Unclosed Anchor at end of file (started line 18)
[debug_database_api] Unclosed Anchor: [DEF:debug_database_api:Function] started at line 18
[debug_database_api] Unclosed Anchor: [DEF:debug_database_api:Function] started at line 18 | +| run_mapper.py | 🔴 0% | [run_mapper] Unclosed Anchor at end of file (started line 1)
[run_mapper] Unclosed Anchor: [DEF:run_mapper:Module] started at line 1
[main] Unclosed Anchor at end of file (started line 18)
[main] Unclosed Anchor: [DEF:main:Function] started at line 18
[main] Unclosed Anchor: [DEF:main:Function] started at line 18 | +| migration_script.py | 🔴 0% | [migration_script] Unclosed Anchor at end of file (started line 1)
[migration_script] Unclosed Anchor: [DEF:migration_script:Module] started at line 1
[Migration] Unclosed Anchor at end of file (started line 25)
[Migration] Unclosed Anchor: [DEF:Migration:Class] started at line 25
[Migration] Unclosed Anchor: [DEF:Migration:Class] started at line 25
[Migration.__init__] Unclosed Anchor at end of file (started line 33)
[Migration.__init__] Unclosed Anchor: [DEF:Migration.__init__:Function] started at line 33
[Migration.__init__] Unclosed Anchor: [DEF:Migration.__init__:Function] started at line 33
[Migration.__init__] Unclosed Anchor: [DEF:Migration.__init__:Function] started at line 33
[Migration.run] Unclosed Anchor at end of file (started line 52)
[Migration.run] Unclosed Anchor: [DEF:Migration.run:Function] started at line 52
[Migration.run] Unclosed Anchor: [DEF:Migration.run:Function] started at line 52
[Migration.run] Unclosed Anchor: [DEF:Migration.run:Function] started at line 52
[Migration.run] Unclosed Anchor: [DEF:Migration.run:Function] started at line 52
[Migration.ask_delete_on_failure] Unclosed Anchor at end of file (started line 71)
[Migration.ask_delete_on_failure] Unclosed Anchor: [DEF:Migration.ask_delete_on_failure:Function] started at line 71
[Migration.ask_delete_on_failure] Unclosed Anchor: [DEF:Migration.ask_delete_on_failure:Function] started at line 71
[Migration.ask_delete_on_failure] Unclosed Anchor: [DEF:Migration.ask_delete_on_failure:Function] started at line 71
[Migration.ask_delete_on_failure] Unclosed Anchor: [DEF:Migration.ask_delete_on_failure:Function] started at line 71
[Migration.ask_delete_on_failure] Unclosed Anchor: [DEF:Migration.ask_delete_on_failure:Function] started at line 71
[Migration.select_environments] Unclosed Anchor at end of file (started line 86)
[Migration.select_environments] Unclosed Anchor: [DEF:Migration.select_environments:Function] started at line 86
[Migration.select_environments] Unclosed Anchor: [DEF:Migration.select_environments:Function] started at line 86
[Migration.select_environments] Unclosed Anchor: [DEF:Migration.select_environments:Function] started at line 86
[Migration.select_environments] Unclosed Anchor: [DEF:Migration.select_environments:Function] started at line 86
[Migration.select_environments] Unclosed Anchor: [DEF:Migration.select_environments:Function] started at line 86
[Migration.select_environments] Unclosed Anchor: [DEF:Migration.select_environments:Function] started at line 86
[Migration.select_dashboards] Unclosed Anchor at end of file (started line 127)
[Migration.select_dashboards] Unclosed Anchor: [DEF:Migration.select_dashboards:Function] started at line 127
[Migration.select_dashboards] Unclosed Anchor: [DEF:Migration.select_dashboards:Function] started at line 127
[Migration.select_dashboards] Unclosed Anchor: [DEF:Migration.select_dashboards:Function] started at line 127
[Migration.select_dashboards] Unclosed Anchor: [DEF:Migration.select_dashboards:Function] started at line 127
[Migration.select_dashboards] Unclosed Anchor: [DEF:Migration.select_dashboards:Function] started at line 127
[Migration.select_dashboards] Unclosed Anchor: [DEF:Migration.select_dashboards:Function] started at line 127
[Migration.select_dashboards] Unclosed Anchor: [DEF:Migration.select_dashboards:Function] started at line 127
[Migration.confirm_db_config_replacement] Unclosed Anchor at end of file (started line 184)
[Migration.confirm_db_config_replacement] Unclosed Anchor: [DEF:Migration.confirm_db_config_replacement:Function] started at line 184
[Migration.confirm_db_config_replacement] Unclosed Anchor: [DEF:Migration.confirm_db_config_replacement:Function] started at line 184
[Migration.confirm_db_config_replacement] Unclosed Anchor: [DEF:Migration.confirm_db_config_replacement:Function] started at line 184
[Migration.confirm_db_config_replacement] Unclosed Anchor: [DEF:Migration.confirm_db_config_replacement:Function] started at line 184
[Migration.confirm_db_config_replacement] Unclosed Anchor: [DEF:Migration.confirm_db_config_replacement:Function] started at line 184
[Migration.confirm_db_config_replacement] Unclosed Anchor: [DEF:Migration.confirm_db_config_replacement:Function] started at line 184
[Migration.confirm_db_config_replacement] Unclosed Anchor: [DEF:Migration.confirm_db_config_replacement:Function] started at line 184
[Migration.confirm_db_config_replacement] Unclosed Anchor: [DEF:Migration.confirm_db_config_replacement:Function] started at line 184
[Migration._select_databases] Unclosed Anchor at end of file (started line 219)
[Migration._select_databases] Unclosed Anchor: [DEF:Migration._select_databases:Function] started at line 219
[Migration._select_databases] Unclosed Anchor: [DEF:Migration._select_databases:Function] started at line 219
[Migration._select_databases] Unclosed Anchor: [DEF:Migration._select_databases:Function] started at line 219
[Migration._select_databases] Unclosed Anchor: [DEF:Migration._select_databases:Function] started at line 219
[Migration._select_databases] Unclosed Anchor: [DEF:Migration._select_databases:Function] started at line 219
[Migration._select_databases] Unclosed Anchor: [DEF:Migration._select_databases:Function] started at line 219
[Migration._select_databases] Unclosed Anchor: [DEF:Migration._select_databases:Function] started at line 219
[Migration._select_databases] Unclosed Anchor: [DEF:Migration._select_databases:Function] started at line 219
[Migration._select_databases] Unclosed Anchor: [DEF:Migration._select_databases:Function] started at line 219
[Migration._batch_delete_by_ids] Unclosed Anchor at end of file (started line 298)
[Migration._batch_delete_by_ids] Unclosed Anchor: [DEF:Migration._batch_delete_by_ids:Function] started at line 298
[Migration._batch_delete_by_ids] Unclosed Anchor: [DEF:Migration._batch_delete_by_ids:Function] started at line 298
[Migration._batch_delete_by_ids] Unclosed Anchor: [DEF:Migration._batch_delete_by_ids:Function] started at line 298
[Migration._batch_delete_by_ids] Unclosed Anchor: [DEF:Migration._batch_delete_by_ids:Function] started at line 298
[Migration._batch_delete_by_ids] Unclosed Anchor: [DEF:Migration._batch_delete_by_ids:Function] started at line 298
[Migration._batch_delete_by_ids] Unclosed Anchor: [DEF:Migration._batch_delete_by_ids:Function] started at line 298
[Migration._batch_delete_by_ids] Unclosed Anchor: [DEF:Migration._batch_delete_by_ids:Function] started at line 298
[Migration._batch_delete_by_ids] Unclosed Anchor: [DEF:Migration._batch_delete_by_ids:Function] started at line 298
[Migration._batch_delete_by_ids] Unclosed Anchor: [DEF:Migration._batch_delete_by_ids:Function] started at line 298
[Migration._batch_delete_by_ids] Unclosed Anchor: [DEF:Migration._batch_delete_by_ids:Function] started at line 298
[Migration.execute_migration] Unclosed Anchor at end of file (started line 324)
[Migration.execute_migration] Unclosed Anchor: [DEF:Migration.execute_migration:Function] started at line 324
[Migration.execute_migration] Unclosed Anchor: [DEF:Migration.execute_migration:Function] started at line 324
[Migration.execute_migration] Unclosed Anchor: [DEF:Migration.execute_migration:Function] started at line 324
[Migration.execute_migration] Unclosed Anchor: [DEF:Migration.execute_migration:Function] started at line 324
[Migration.execute_migration] Unclosed Anchor: [DEF:Migration.execute_migration:Function] started at line 324
[Migration.execute_migration] Unclosed Anchor: [DEF:Migration.execute_migration:Function] started at line 324
[Migration.execute_migration] Unclosed Anchor: [DEF:Migration.execute_migration:Function] started at line 324
[Migration.execute_migration] Unclosed Anchor: [DEF:Migration.execute_migration:Function] started at line 324
[Migration.execute_migration] Unclosed Anchor: [DEF:Migration.execute_migration:Function] started at line 324
[Migration.execute_migration] Unclosed Anchor: [DEF:Migration.execute_migration:Function] started at line 324
[Migration.execute_migration] Unclosed Anchor: [DEF:Migration.execute_migration:Function] started at line 324 | +| backup_script.py | 🔴 0% | [backup_script] Unclosed Anchor at end of file (started line 1)
[backup_script] Unclosed Anchor: [DEF:backup_script:Module] started at line 1
[BackupConfig] Unclosed Anchor at end of file (started line 30)
[BackupConfig] Unclosed Anchor: [DEF:BackupConfig:DataClass] started at line 30
[BackupConfig] Unclosed Anchor: [DEF:BackupConfig:DataClass] started at line 30
[backup_dashboards] Unclosed Anchor at end of file (started line 41)
[backup_dashboards] Unclosed Anchor: [DEF:backup_dashboards:Function] started at line 41
[backup_dashboards] Unclosed Anchor: [DEF:backup_dashboards:Function] started at line 41
[backup_dashboards] Unclosed Anchor: [DEF:backup_dashboards:Function] started at line 41
[main] Unclosed Anchor at end of file (started line 116)
[main] Unclosed Anchor: [DEF:main:Function] started at line 116
[main] Unclosed Anchor: [DEF:main:Function] started at line 116
[main] Unclosed Anchor: [DEF:main:Function] started at line 116
[main] Unclosed Anchor: [DEF:main:Function] started at line 116 | +| superset_tool/exceptions.py | 🔴 0% | [superset_tool.exceptions] Unclosed Anchor at end of file (started line 1)
[superset_tool.exceptions] Unclosed Anchor: [DEF:superset_tool.exceptions:Module] started at line 1
[SupersetToolError] Unclosed Anchor at end of file (started line 11)
[SupersetToolError] Unclosed Anchor: [DEF:SupersetToolError:Class] started at line 11
[SupersetToolError] Unclosed Anchor: [DEF:SupersetToolError:Class] started at line 11
[AuthenticationError] Unclosed Anchor at end of file (started line 22)
[AuthenticationError] Unclosed Anchor: [DEF:AuthenticationError:Class] started at line 22
[AuthenticationError] Unclosed Anchor: [DEF:AuthenticationError:Class] started at line 22
[AuthenticationError] Unclosed Anchor: [DEF:AuthenticationError:Class] started at line 22
[PermissionDeniedError] Unclosed Anchor at end of file (started line 32)
[PermissionDeniedError] Unclosed Anchor: [DEF:PermissionDeniedError:Class] started at line 32
[PermissionDeniedError] Unclosed Anchor: [DEF:PermissionDeniedError:Class] started at line 32
[PermissionDeniedError] Unclosed Anchor: [DEF:PermissionDeniedError:Class] started at line 32
[PermissionDeniedError] Unclosed Anchor: [DEF:PermissionDeniedError:Class] started at line 32
[SupersetAPIError] Unclosed Anchor at end of file (started line 44)
[SupersetAPIError] Unclosed Anchor: [DEF:SupersetAPIError:Class] started at line 44
[SupersetAPIError] Unclosed Anchor: [DEF:SupersetAPIError:Class] started at line 44
[SupersetAPIError] Unclosed Anchor: [DEF:SupersetAPIError:Class] started at line 44
[SupersetAPIError] Unclosed Anchor: [DEF:SupersetAPIError:Class] started at line 44
[SupersetAPIError] Unclosed Anchor: [DEF:SupersetAPIError:Class] started at line 44
[ExportError] Unclosed Anchor at end of file (started line 54)
[ExportError] Unclosed Anchor: [DEF:ExportError:Class] started at line 54
[ExportError] Unclosed Anchor: [DEF:ExportError:Class] started at line 54
[ExportError] Unclosed Anchor: [DEF:ExportError:Class] started at line 54
[ExportError] Unclosed Anchor: [DEF:ExportError:Class] started at line 54
[ExportError] Unclosed Anchor: [DEF:ExportError:Class] started at line 54
[ExportError] Unclosed Anchor: [DEF:ExportError:Class] started at line 54
[DashboardNotFoundError] Unclosed Anchor at end of file (started line 64)
[DashboardNotFoundError] Unclosed Anchor: [DEF:DashboardNotFoundError:Class] started at line 64
[DashboardNotFoundError] Unclosed Anchor: [DEF:DashboardNotFoundError:Class] started at line 64
[DashboardNotFoundError] Unclosed Anchor: [DEF:DashboardNotFoundError:Class] started at line 64
[DashboardNotFoundError] Unclosed Anchor: [DEF:DashboardNotFoundError:Class] started at line 64
[DashboardNotFoundError] Unclosed Anchor: [DEF:DashboardNotFoundError:Class] started at line 64
[DashboardNotFoundError] Unclosed Anchor: [DEF:DashboardNotFoundError:Class] started at line 64
[DashboardNotFoundError] Unclosed Anchor: [DEF:DashboardNotFoundError:Class] started at line 64
[DatasetNotFoundError] Unclosed Anchor at end of file (started line 75)
[DatasetNotFoundError] Unclosed Anchor: [DEF:DatasetNotFoundError:Class] started at line 75
[DatasetNotFoundError] Unclosed Anchor: [DEF:DatasetNotFoundError:Class] started at line 75
[DatasetNotFoundError] Unclosed Anchor: [DEF:DatasetNotFoundError:Class] started at line 75
[DatasetNotFoundError] Unclosed Anchor: [DEF:DatasetNotFoundError:Class] started at line 75
[DatasetNotFoundError] Unclosed Anchor: [DEF:DatasetNotFoundError:Class] started at line 75
[DatasetNotFoundError] Unclosed Anchor: [DEF:DatasetNotFoundError:Class] started at line 75
[DatasetNotFoundError] Unclosed Anchor: [DEF:DatasetNotFoundError:Class] started at line 75
[DatasetNotFoundError] Unclosed Anchor: [DEF:DatasetNotFoundError:Class] started at line 75
[InvalidZipFormatError] Unclosed Anchor at end of file (started line 86)
[InvalidZipFormatError] Unclosed Anchor: [DEF:InvalidZipFormatError:Class] started at line 86
[InvalidZipFormatError] Unclosed Anchor: [DEF:InvalidZipFormatError:Class] started at line 86
[InvalidZipFormatError] Unclosed Anchor: [DEF:InvalidZipFormatError:Class] started at line 86
[InvalidZipFormatError] Unclosed Anchor: [DEF:InvalidZipFormatError:Class] started at line 86
[InvalidZipFormatError] Unclosed Anchor: [DEF:InvalidZipFormatError:Class] started at line 86
[InvalidZipFormatError] Unclosed Anchor: [DEF:InvalidZipFormatError:Class] started at line 86
[InvalidZipFormatError] Unclosed Anchor: [DEF:InvalidZipFormatError:Class] started at line 86
[InvalidZipFormatError] Unclosed Anchor: [DEF:InvalidZipFormatError:Class] started at line 86
[InvalidZipFormatError] Unclosed Anchor: [DEF:InvalidZipFormatError:Class] started at line 86
[NetworkError] Unclosed Anchor at end of file (started line 97)
[NetworkError] Unclosed Anchor: [DEF:NetworkError:Class] started at line 97
[NetworkError] Unclosed Anchor: [DEF:NetworkError:Class] started at line 97
[NetworkError] Unclosed Anchor: [DEF:NetworkError:Class] started at line 97
[NetworkError] Unclosed Anchor: [DEF:NetworkError:Class] started at line 97
[NetworkError] Unclosed Anchor: [DEF:NetworkError:Class] started at line 97
[NetworkError] Unclosed Anchor: [DEF:NetworkError:Class] started at line 97
[NetworkError] Unclosed Anchor: [DEF:NetworkError:Class] started at line 97
[NetworkError] Unclosed Anchor: [DEF:NetworkError:Class] started at line 97
[NetworkError] Unclosed Anchor: [DEF:NetworkError:Class] started at line 97
[NetworkError] Unclosed Anchor: [DEF:NetworkError:Class] started at line 97
[FileOperationError] Unclosed Anchor at end of file (started line 107)
[FileOperationError] Unclosed Anchor: [DEF:FileOperationError:Class] started at line 107
[FileOperationError] Unclosed Anchor: [DEF:FileOperationError:Class] started at line 107
[FileOperationError] Unclosed Anchor: [DEF:FileOperationError:Class] started at line 107
[FileOperationError] Unclosed Anchor: [DEF:FileOperationError:Class] started at line 107
[FileOperationError] Unclosed Anchor: [DEF:FileOperationError:Class] started at line 107
[FileOperationError] Unclosed Anchor: [DEF:FileOperationError:Class] started at line 107
[FileOperationError] Unclosed Anchor: [DEF:FileOperationError:Class] started at line 107
[FileOperationError] Unclosed Anchor: [DEF:FileOperationError:Class] started at line 107
[FileOperationError] Unclosed Anchor: [DEF:FileOperationError:Class] started at line 107
[FileOperationError] Unclosed Anchor: [DEF:FileOperationError:Class] started at line 107
[FileOperationError] Unclosed Anchor: [DEF:FileOperationError:Class] started at line 107
[InvalidFileStructureError] Unclosed Anchor at end of file (started line 114)
[InvalidFileStructureError] Unclosed Anchor: [DEF:InvalidFileStructureError:Class] started at line 114
[InvalidFileStructureError] Unclosed Anchor: [DEF:InvalidFileStructureError:Class] started at line 114
[InvalidFileStructureError] Unclosed Anchor: [DEF:InvalidFileStructureError:Class] started at line 114
[InvalidFileStructureError] Unclosed Anchor: [DEF:InvalidFileStructureError:Class] started at line 114
[InvalidFileStructureError] Unclosed Anchor: [DEF:InvalidFileStructureError:Class] started at line 114
[InvalidFileStructureError] Unclosed Anchor: [DEF:InvalidFileStructureError:Class] started at line 114
[InvalidFileStructureError] Unclosed Anchor: [DEF:InvalidFileStructureError:Class] started at line 114
[InvalidFileStructureError] Unclosed Anchor: [DEF:InvalidFileStructureError:Class] started at line 114
[InvalidFileStructureError] Unclosed Anchor: [DEF:InvalidFileStructureError:Class] started at line 114
[InvalidFileStructureError] Unclosed Anchor: [DEF:InvalidFileStructureError:Class] started at line 114
[InvalidFileStructureError] Unclosed Anchor: [DEF:InvalidFileStructureError:Class] started at line 114
[InvalidFileStructureError] Unclosed Anchor: [DEF:InvalidFileStructureError:Class] started at line 114
[ConfigurationError] Unclosed Anchor at end of file (started line 121)
[ConfigurationError] Unclosed Anchor: [DEF:ConfigurationError:Class] started at line 121
[ConfigurationError] Unclosed Anchor: [DEF:ConfigurationError:Class] started at line 121
[ConfigurationError] Unclosed Anchor: [DEF:ConfigurationError:Class] started at line 121
[ConfigurationError] Unclosed Anchor: [DEF:ConfigurationError:Class] started at line 121
[ConfigurationError] Unclosed Anchor: [DEF:ConfigurationError:Class] started at line 121
[ConfigurationError] Unclosed Anchor: [DEF:ConfigurationError:Class] started at line 121
[ConfigurationError] Unclosed Anchor: [DEF:ConfigurationError:Class] started at line 121
[ConfigurationError] Unclosed Anchor: [DEF:ConfigurationError:Class] started at line 121
[ConfigurationError] Unclosed Anchor: [DEF:ConfigurationError:Class] started at line 121
[ConfigurationError] Unclosed Anchor: [DEF:ConfigurationError:Class] started at line 121
[ConfigurationError] Unclosed Anchor: [DEF:ConfigurationError:Class] started at line 121
[ConfigurationError] Unclosed Anchor: [DEF:ConfigurationError:Class] started at line 121
[ConfigurationError] Unclosed Anchor: [DEF:ConfigurationError:Class] started at line 121 | +| superset_tool/__init__.py | 🔴 0% | [superset_tool] Unclosed Anchor at end of file (started line 1)
[superset_tool] Unclosed Anchor: [DEF:superset_tool:Module] started at line 1 | +| superset_tool/client.py | 🔴 0% | [superset_tool.client] Unclosed Anchor at end of file (started line 1)
[superset_tool.client] Unclosed Anchor: [DEF:superset_tool.client:Module] started at line 1
[SupersetClient] Unclosed Anchor at end of file (started line 27)
[SupersetClient] Unclosed Anchor: [DEF:SupersetClient:Class] started at line 27
[SupersetClient] Unclosed Anchor: [DEF:SupersetClient:Class] started at line 27
[SupersetClient.__init__] Unclosed Anchor at end of file (started line 32)
[SupersetClient.__init__] Unclosed Anchor: [DEF:SupersetClient.__init__:Function] started at line 32
[SupersetClient.__init__] Unclosed Anchor: [DEF:SupersetClient.__init__:Function] started at line 32
[SupersetClient.__init__] Unclosed Anchor: [DEF:SupersetClient.__init__:Function] started at line 32
[SupersetClient._validate_config] Unclosed Anchor at end of file (started line 53)
[SupersetClient._validate_config] Unclosed Anchor: [DEF:SupersetClient._validate_config:Function] started at line 53
[SupersetClient._validate_config] Unclosed Anchor: [DEF:SupersetClient._validate_config:Function] started at line 53
[SupersetClient._validate_config] Unclosed Anchor: [DEF:SupersetClient._validate_config:Function] started at line 53
[SupersetClient._validate_config] Unclosed Anchor: [DEF:SupersetClient._validate_config:Function] started at line 53
[SupersetClient.headers] Unclosed Anchor at end of file (started line 67)
[SupersetClient.headers] Unclosed Anchor: [DEF:SupersetClient.headers:Function] started at line 67
[SupersetClient.headers] Unclosed Anchor: [DEF:SupersetClient.headers:Function] started at line 67
[SupersetClient.headers] Unclosed Anchor: [DEF:SupersetClient.headers:Function] started at line 67
[SupersetClient.headers] Unclosed Anchor: [DEF:SupersetClient.headers:Function] started at line 67
[SupersetClient.headers] Unclosed Anchor: [DEF:SupersetClient.headers:Function] started at line 67
[SupersetClient.get_dashboards] Unclosed Anchor at end of file (started line 74)
[SupersetClient.get_dashboards] Unclosed Anchor: [DEF:SupersetClient.get_dashboards:Function] started at line 74
[SupersetClient.get_dashboards] Unclosed Anchor: [DEF:SupersetClient.get_dashboards:Function] started at line 74
[SupersetClient.get_dashboards] Unclosed Anchor: [DEF:SupersetClient.get_dashboards:Function] started at line 74
[SupersetClient.get_dashboards] Unclosed Anchor: [DEF:SupersetClient.get_dashboards:Function] started at line 74
[SupersetClient.get_dashboards] Unclosed Anchor: [DEF:SupersetClient.get_dashboards:Function] started at line 74
[SupersetClient.get_dashboards] Unclosed Anchor: [DEF:SupersetClient.get_dashboards:Function] started at line 74
[SupersetClient.export_dashboard] Unclosed Anchor at end of file (started line 98)
[SupersetClient.export_dashboard] Unclosed Anchor: [DEF:SupersetClient.export_dashboard:Function] started at line 98
[SupersetClient.export_dashboard] Unclosed Anchor: [DEF:SupersetClient.export_dashboard:Function] started at line 98
[SupersetClient.export_dashboard] Unclosed Anchor: [DEF:SupersetClient.export_dashboard:Function] started at line 98
[SupersetClient.export_dashboard] Unclosed Anchor: [DEF:SupersetClient.export_dashboard:Function] started at line 98
[SupersetClient.export_dashboard] Unclosed Anchor: [DEF:SupersetClient.export_dashboard:Function] started at line 98
[SupersetClient.export_dashboard] Unclosed Anchor: [DEF:SupersetClient.export_dashboard:Function] started at line 98
[SupersetClient.export_dashboard] Unclosed Anchor: [DEF:SupersetClient.export_dashboard:Function] started at line 98
[SupersetClient.import_dashboard] Unclosed Anchor at end of file (started line 123)
[SupersetClient.import_dashboard] Unclosed Anchor: [DEF:SupersetClient.import_dashboard:Function] started at line 123
[SupersetClient.import_dashboard] Unclosed Anchor: [DEF:SupersetClient.import_dashboard:Function] started at line 123
[SupersetClient.import_dashboard] Unclosed Anchor: [DEF:SupersetClient.import_dashboard:Function] started at line 123
[SupersetClient.import_dashboard] Unclosed Anchor: [DEF:SupersetClient.import_dashboard:Function] started at line 123
[SupersetClient.import_dashboard] Unclosed Anchor: [DEF:SupersetClient.import_dashboard:Function] started at line 123
[SupersetClient.import_dashboard] Unclosed Anchor: [DEF:SupersetClient.import_dashboard:Function] started at line 123
[SupersetClient.import_dashboard] Unclosed Anchor: [DEF:SupersetClient.import_dashboard:Function] started at line 123
[SupersetClient.import_dashboard] Unclosed Anchor: [DEF:SupersetClient.import_dashboard:Function] started at line 123
[SupersetClient._resolve_target_id_for_delete] Unclosed Anchor at end of file (started line 157)
[SupersetClient._resolve_target_id_for_delete] Unclosed Anchor: [DEF:SupersetClient._resolve_target_id_for_delete:Function] started at line 157
[SupersetClient._resolve_target_id_for_delete] Unclosed Anchor: [DEF:SupersetClient._resolve_target_id_for_delete:Function] started at line 157
[SupersetClient._resolve_target_id_for_delete] Unclosed Anchor: [DEF:SupersetClient._resolve_target_id_for_delete:Function] started at line 157
[SupersetClient._resolve_target_id_for_delete] Unclosed Anchor: [DEF:SupersetClient._resolve_target_id_for_delete:Function] started at line 157
[SupersetClient._resolve_target_id_for_delete] Unclosed Anchor: [DEF:SupersetClient._resolve_target_id_for_delete:Function] started at line 157
[SupersetClient._resolve_target_id_for_delete] Unclosed Anchor: [DEF:SupersetClient._resolve_target_id_for_delete:Function] started at line 157
[SupersetClient._resolve_target_id_for_delete] Unclosed Anchor: [DEF:SupersetClient._resolve_target_id_for_delete:Function] started at line 157
[SupersetClient._resolve_target_id_for_delete] Unclosed Anchor: [DEF:SupersetClient._resolve_target_id_for_delete:Function] started at line 157
[SupersetClient._resolve_target_id_for_delete] Unclosed Anchor: [DEF:SupersetClient._resolve_target_id_for_delete:Function] started at line 157
[SupersetClient._do_import] Unclosed Anchor at end of file (started line 182)
[SupersetClient._do_import] Unclosed Anchor: [DEF:SupersetClient._do_import:Function] started at line 182
[SupersetClient._do_import] Unclosed Anchor: [DEF:SupersetClient._do_import:Function] started at line 182
[SupersetClient._do_import] Unclosed Anchor: [DEF:SupersetClient._do_import:Function] started at line 182
[SupersetClient._do_import] Unclosed Anchor: [DEF:SupersetClient._do_import:Function] started at line 182
[SupersetClient._do_import] Unclosed Anchor: [DEF:SupersetClient._do_import:Function] started at line 182
[SupersetClient._do_import] Unclosed Anchor: [DEF:SupersetClient._do_import:Function] started at line 182
[SupersetClient._do_import] Unclosed Anchor: [DEF:SupersetClient._do_import:Function] started at line 182
[SupersetClient._do_import] Unclosed Anchor: [DEF:SupersetClient._do_import:Function] started at line 182
[SupersetClient._do_import] Unclosed Anchor: [DEF:SupersetClient._do_import:Function] started at line 182
[SupersetClient._do_import] Unclosed Anchor: [DEF:SupersetClient._do_import:Function] started at line 182
[SupersetClient.delete_dashboard] Unclosed Anchor at end of file (started line 205)
[SupersetClient.delete_dashboard] Unclosed Anchor: [DEF:SupersetClient.delete_dashboard:Function] started at line 205
[SupersetClient.delete_dashboard] Unclosed Anchor: [DEF:SupersetClient.delete_dashboard:Function] started at line 205
[SupersetClient.delete_dashboard] Unclosed Anchor: [DEF:SupersetClient.delete_dashboard:Function] started at line 205
[SupersetClient.delete_dashboard] Unclosed Anchor: [DEF:SupersetClient.delete_dashboard:Function] started at line 205
[SupersetClient.delete_dashboard] Unclosed Anchor: [DEF:SupersetClient.delete_dashboard:Function] started at line 205
[SupersetClient.delete_dashboard] Unclosed Anchor: [DEF:SupersetClient.delete_dashboard:Function] started at line 205
[SupersetClient.delete_dashboard] Unclosed Anchor: [DEF:SupersetClient.delete_dashboard:Function] started at line 205
[SupersetClient.delete_dashboard] Unclosed Anchor: [DEF:SupersetClient.delete_dashboard:Function] started at line 205
[SupersetClient.delete_dashboard] Unclosed Anchor: [DEF:SupersetClient.delete_dashboard:Function] started at line 205
[SupersetClient.delete_dashboard] Unclosed Anchor: [DEF:SupersetClient.delete_dashboard:Function] started at line 205
[SupersetClient.delete_dashboard] Unclosed Anchor: [DEF:SupersetClient.delete_dashboard:Function] started at line 205
[SupersetClient._extract_dashboard_id_from_zip] Unclosed Anchor at end of file (started line 223)
[SupersetClient._extract_dashboard_id_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_id_from_zip:Function] started at line 223
[SupersetClient._extract_dashboard_id_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_id_from_zip:Function] started at line 223
[SupersetClient._extract_dashboard_id_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_id_from_zip:Function] started at line 223
[SupersetClient._extract_dashboard_id_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_id_from_zip:Function] started at line 223
[SupersetClient._extract_dashboard_id_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_id_from_zip:Function] started at line 223
[SupersetClient._extract_dashboard_id_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_id_from_zip:Function] started at line 223
[SupersetClient._extract_dashboard_id_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_id_from_zip:Function] started at line 223
[SupersetClient._extract_dashboard_id_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_id_from_zip:Function] started at line 223
[SupersetClient._extract_dashboard_id_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_id_from_zip:Function] started at line 223
[SupersetClient._extract_dashboard_id_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_id_from_zip:Function] started at line 223
[SupersetClient._extract_dashboard_id_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_id_from_zip:Function] started at line 223
[SupersetClient._extract_dashboard_id_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_id_from_zip:Function] started at line 223
[SupersetClient._extract_dashboard_slug_from_zip] Unclosed Anchor at end of file (started line 246)
[SupersetClient._extract_dashboard_slug_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_slug_from_zip:Function] started at line 246
[SupersetClient._extract_dashboard_slug_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_slug_from_zip:Function] started at line 246
[SupersetClient._extract_dashboard_slug_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_slug_from_zip:Function] started at line 246
[SupersetClient._extract_dashboard_slug_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_slug_from_zip:Function] started at line 246
[SupersetClient._extract_dashboard_slug_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_slug_from_zip:Function] started at line 246
[SupersetClient._extract_dashboard_slug_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_slug_from_zip:Function] started at line 246
[SupersetClient._extract_dashboard_slug_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_slug_from_zip:Function] started at line 246
[SupersetClient._extract_dashboard_slug_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_slug_from_zip:Function] started at line 246
[SupersetClient._extract_dashboard_slug_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_slug_from_zip:Function] started at line 246
[SupersetClient._extract_dashboard_slug_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_slug_from_zip:Function] started at line 246
[SupersetClient._extract_dashboard_slug_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_slug_from_zip:Function] started at line 246
[SupersetClient._extract_dashboard_slug_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_slug_from_zip:Function] started at line 246
[SupersetClient._extract_dashboard_slug_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_slug_from_zip:Function] started at line 246
[SupersetClient._validate_export_response] Unclosed Anchor at end of file (started line 269)
[SupersetClient._validate_export_response] Unclosed Anchor: [DEF:SupersetClient._validate_export_response:Function] started at line 269
[SupersetClient._validate_export_response] Unclosed Anchor: [DEF:SupersetClient._validate_export_response:Function] started at line 269
[SupersetClient._validate_export_response] Unclosed Anchor: [DEF:SupersetClient._validate_export_response:Function] started at line 269
[SupersetClient._validate_export_response] Unclosed Anchor: [DEF:SupersetClient._validate_export_response:Function] started at line 269
[SupersetClient._validate_export_response] Unclosed Anchor: [DEF:SupersetClient._validate_export_response:Function] started at line 269
[SupersetClient._validate_export_response] Unclosed Anchor: [DEF:SupersetClient._validate_export_response:Function] started at line 269
[SupersetClient._validate_export_response] Unclosed Anchor: [DEF:SupersetClient._validate_export_response:Function] started at line 269
[SupersetClient._validate_export_response] Unclosed Anchor: [DEF:SupersetClient._validate_export_response:Function] started at line 269
[SupersetClient._validate_export_response] Unclosed Anchor: [DEF:SupersetClient._validate_export_response:Function] started at line 269
[SupersetClient._validate_export_response] Unclosed Anchor: [DEF:SupersetClient._validate_export_response:Function] started at line 269
[SupersetClient._validate_export_response] Unclosed Anchor: [DEF:SupersetClient._validate_export_response:Function] started at line 269
[SupersetClient._validate_export_response] Unclosed Anchor: [DEF:SupersetClient._validate_export_response:Function] started at line 269
[SupersetClient._validate_export_response] Unclosed Anchor: [DEF:SupersetClient._validate_export_response:Function] started at line 269
[SupersetClient._validate_export_response] Unclosed Anchor: [DEF:SupersetClient._validate_export_response:Function] started at line 269
[SupersetClient._resolve_export_filename] Unclosed Anchor at end of file (started line 285)
[SupersetClient._resolve_export_filename] Unclosed Anchor: [DEF:SupersetClient._resolve_export_filename:Function] started at line 285
[SupersetClient._resolve_export_filename] Unclosed Anchor: [DEF:SupersetClient._resolve_export_filename:Function] started at line 285
[SupersetClient._resolve_export_filename] Unclosed Anchor: [DEF:SupersetClient._resolve_export_filename:Function] started at line 285
[SupersetClient._resolve_export_filename] Unclosed Anchor: [DEF:SupersetClient._resolve_export_filename:Function] started at line 285
[SupersetClient._resolve_export_filename] Unclosed Anchor: [DEF:SupersetClient._resolve_export_filename:Function] started at line 285
[SupersetClient._resolve_export_filename] Unclosed Anchor: [DEF:SupersetClient._resolve_export_filename:Function] started at line 285
[SupersetClient._resolve_export_filename] Unclosed Anchor: [DEF:SupersetClient._resolve_export_filename:Function] started at line 285
[SupersetClient._resolve_export_filename] Unclosed Anchor: [DEF:SupersetClient._resolve_export_filename:Function] started at line 285
[SupersetClient._resolve_export_filename] Unclosed Anchor: [DEF:SupersetClient._resolve_export_filename:Function] started at line 285
[SupersetClient._resolve_export_filename] Unclosed Anchor: [DEF:SupersetClient._resolve_export_filename:Function] started at line 285
[SupersetClient._resolve_export_filename] Unclosed Anchor: [DEF:SupersetClient._resolve_export_filename:Function] started at line 285
[SupersetClient._resolve_export_filename] Unclosed Anchor: [DEF:SupersetClient._resolve_export_filename:Function] started at line 285
[SupersetClient._resolve_export_filename] Unclosed Anchor: [DEF:SupersetClient._resolve_export_filename:Function] started at line 285
[SupersetClient._resolve_export_filename] Unclosed Anchor: [DEF:SupersetClient._resolve_export_filename:Function] started at line 285
[SupersetClient._resolve_export_filename] Unclosed Anchor: [DEF:SupersetClient._resolve_export_filename:Function] started at line 285
[SupersetClient._validate_query_params] Unclosed Anchor at end of file (started line 303)
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._fetch_total_object_count] Unclosed Anchor at end of file (started line 315)
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_all_pages] Unclosed Anchor at end of file (started line 331)
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._validate_import_file] Unclosed Anchor at end of file (started line 345)
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient.get_datasets] Unclosed Anchor at end of file (started line 361)
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_databases] Unclosed Anchor at end of file (started line 384)
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_dataset] Unclosed Anchor at end of file (started line 408)
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_database] Unclosed Anchor at end of file (started line 425)
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.update_dataset] Unclosed Anchor at end of file (started line 442)
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442 | +| superset_tool/models.py | 🔴 0% | [superset_tool.models] Unclosed Anchor at end of file (started line 1)
[superset_tool.models] Unclosed Anchor: [DEF:superset_tool.models:Module] started at line 1
[SupersetConfig] Unclosed Anchor at end of file (started line 17)
[SupersetConfig] Unclosed Anchor: [DEF:SupersetConfig:Class] started at line 17
[SupersetConfig] Unclosed Anchor: [DEF:SupersetConfig:Class] started at line 17
[SupersetConfig.validate_auth] Unclosed Anchor at end of file (started line 28)
[SupersetConfig.validate_auth] Unclosed Anchor: [DEF:SupersetConfig.validate_auth:Function] started at line 28
[SupersetConfig.validate_auth] Unclosed Anchor: [DEF:SupersetConfig.validate_auth:Function] started at line 28
[SupersetConfig.validate_auth] Unclosed Anchor: [DEF:SupersetConfig.validate_auth:Function] started at line 28
[SupersetConfig.normalize_base_url] Unclosed Anchor at end of file (started line 42)
[SupersetConfig.normalize_base_url] Unclosed Anchor: [DEF:SupersetConfig.normalize_base_url:Function] started at line 42
[SupersetConfig.normalize_base_url] Unclosed Anchor: [DEF:SupersetConfig.normalize_base_url:Function] started at line 42
[SupersetConfig.normalize_base_url] Unclosed Anchor: [DEF:SupersetConfig.normalize_base_url:Function] started at line 42
[SupersetConfig.normalize_base_url] Unclosed Anchor: [DEF:SupersetConfig.normalize_base_url:Function] started at line 42
[DatabaseConfig] Unclosed Anchor at end of file (started line 63)
[DatabaseConfig] Unclosed Anchor: [DEF:DatabaseConfig:Class] started at line 63
[DatabaseConfig] Unclosed Anchor: [DEF:DatabaseConfig:Class] started at line 63
[DatabaseConfig] Unclosed Anchor: [DEF:DatabaseConfig:Class] started at line 63
[DatabaseConfig] Unclosed Anchor: [DEF:DatabaseConfig:Class] started at line 63
[DatabaseConfig] Unclosed Anchor: [DEF:DatabaseConfig:Class] started at line 63
[DatabaseConfig.validate_config] Unclosed Anchor at end of file (started line 70)
[DatabaseConfig.validate_config] Unclosed Anchor: [DEF:DatabaseConfig.validate_config:Function] started at line 70
[DatabaseConfig.validate_config] Unclosed Anchor: [DEF:DatabaseConfig.validate_config:Function] started at line 70
[DatabaseConfig.validate_config] Unclosed Anchor: [DEF:DatabaseConfig.validate_config:Function] started at line 70
[DatabaseConfig.validate_config] Unclosed Anchor: [DEF:DatabaseConfig.validate_config:Function] started at line 70
[DatabaseConfig.validate_config] Unclosed Anchor: [DEF:DatabaseConfig.validate_config:Function] started at line 70
[DatabaseConfig.validate_config] Unclosed Anchor: [DEF:DatabaseConfig.validate_config:Function] started at line 70 | +| superset_tool/utils/logger.py | 🔴 0% | [superset_tool.utils.logger] Unclosed Anchor at end of file (started line 1)
[superset_tool.utils.logger] Unclosed Anchor: [DEF:superset_tool.utils.logger:Module] started at line 1
[SupersetLogger] Unclosed Anchor at end of file (started line 19)
[SupersetLogger] Unclosed Anchor: [DEF:SupersetLogger:Class] started at line 19
[SupersetLogger] Unclosed Anchor: [DEF:SupersetLogger:Class] started at line 19
[SupersetLogger.__init__] Unclosed Anchor at end of file (started line 23)
[SupersetLogger.__init__] Unclosed Anchor: [DEF:SupersetLogger.__init__:Function] started at line 23
[SupersetLogger.__init__] Unclosed Anchor: [DEF:SupersetLogger.__init__:Function] started at line 23
[SupersetLogger.__init__] Unclosed Anchor: [DEF:SupersetLogger.__init__:Function] started at line 23
[SupersetLogger._log] Unclosed Anchor at end of file (started line 58)
[SupersetLogger._log] Unclosed Anchor: [DEF:SupersetLogger._log:Function] started at line 58
[SupersetLogger._log] Unclosed Anchor: [DEF:SupersetLogger._log:Function] started at line 58
[SupersetLogger._log] Unclosed Anchor: [DEF:SupersetLogger._log:Function] started at line 58
[SupersetLogger._log] Unclosed Anchor: [DEF:SupersetLogger._log:Function] started at line 58
[SupersetLogger.info] Unclosed Anchor at end of file (started line 69)
[SupersetLogger.info] Unclosed Anchor: [DEF:SupersetLogger.info:Function] started at line 69
[SupersetLogger.info] Unclosed Anchor: [DEF:SupersetLogger.info:Function] started at line 69
[SupersetLogger.info] Unclosed Anchor: [DEF:SupersetLogger.info:Function] started at line 69
[SupersetLogger.info] Unclosed Anchor: [DEF:SupersetLogger.info:Function] started at line 69
[SupersetLogger.info] Unclosed Anchor: [DEF:SupersetLogger.info:Function] started at line 69
[SupersetLogger.debug] Unclosed Anchor at end of file (started line 75)
[SupersetLogger.debug] Unclosed Anchor: [DEF:SupersetLogger.debug:Function] started at line 75
[SupersetLogger.debug] Unclosed Anchor: [DEF:SupersetLogger.debug:Function] started at line 75
[SupersetLogger.debug] Unclosed Anchor: [DEF:SupersetLogger.debug:Function] started at line 75
[SupersetLogger.debug] Unclosed Anchor: [DEF:SupersetLogger.debug:Function] started at line 75
[SupersetLogger.debug] Unclosed Anchor: [DEF:SupersetLogger.debug:Function] started at line 75
[SupersetLogger.debug] Unclosed Anchor: [DEF:SupersetLogger.debug:Function] started at line 75
[SupersetLogger.warning] Unclosed Anchor at end of file (started line 81)
[SupersetLogger.warning] Unclosed Anchor: [DEF:SupersetLogger.warning:Function] started at line 81
[SupersetLogger.warning] Unclosed Anchor: [DEF:SupersetLogger.warning:Function] started at line 81
[SupersetLogger.warning] Unclosed Anchor: [DEF:SupersetLogger.warning:Function] started at line 81
[SupersetLogger.warning] Unclosed Anchor: [DEF:SupersetLogger.warning:Function] started at line 81
[SupersetLogger.warning] Unclosed Anchor: [DEF:SupersetLogger.warning:Function] started at line 81
[SupersetLogger.warning] Unclosed Anchor: [DEF:SupersetLogger.warning:Function] started at line 81
[SupersetLogger.warning] Unclosed Anchor: [DEF:SupersetLogger.warning:Function] started at line 81
[SupersetLogger.error] Unclosed Anchor at end of file (started line 87)
[SupersetLogger.error] Unclosed Anchor: [DEF:SupersetLogger.error:Function] started at line 87
[SupersetLogger.error] Unclosed Anchor: [DEF:SupersetLogger.error:Function] started at line 87
[SupersetLogger.error] Unclosed Anchor: [DEF:SupersetLogger.error:Function] started at line 87
[SupersetLogger.error] Unclosed Anchor: [DEF:SupersetLogger.error:Function] started at line 87
[SupersetLogger.error] Unclosed Anchor: [DEF:SupersetLogger.error:Function] started at line 87
[SupersetLogger.error] Unclosed Anchor: [DEF:SupersetLogger.error:Function] started at line 87
[SupersetLogger.error] Unclosed Anchor: [DEF:SupersetLogger.error:Function] started at line 87
[SupersetLogger.error] Unclosed Anchor: [DEF:SupersetLogger.error:Function] started at line 87
[SupersetLogger.critical] Unclosed Anchor at end of file (started line 93)
[SupersetLogger.critical] Unclosed Anchor: [DEF:SupersetLogger.critical:Function] started at line 93
[SupersetLogger.critical] Unclosed Anchor: [DEF:SupersetLogger.critical:Function] started at line 93
[SupersetLogger.critical] Unclosed Anchor: [DEF:SupersetLogger.critical:Function] started at line 93
[SupersetLogger.critical] Unclosed Anchor: [DEF:SupersetLogger.critical:Function] started at line 93
[SupersetLogger.critical] Unclosed Anchor: [DEF:SupersetLogger.critical:Function] started at line 93
[SupersetLogger.critical] Unclosed Anchor: [DEF:SupersetLogger.critical:Function] started at line 93
[SupersetLogger.critical] Unclosed Anchor: [DEF:SupersetLogger.critical:Function] started at line 93
[SupersetLogger.critical] Unclosed Anchor: [DEF:SupersetLogger.critical:Function] started at line 93
[SupersetLogger.critical] Unclosed Anchor: [DEF:SupersetLogger.critical:Function] started at line 93
[SupersetLogger.exception] Unclosed Anchor at end of file (started line 99)
[SupersetLogger.exception] Unclosed Anchor: [DEF:SupersetLogger.exception:Function] started at line 99
[SupersetLogger.exception] Unclosed Anchor: [DEF:SupersetLogger.exception:Function] started at line 99
[SupersetLogger.exception] Unclosed Anchor: [DEF:SupersetLogger.exception:Function] started at line 99
[SupersetLogger.exception] Unclosed Anchor: [DEF:SupersetLogger.exception:Function] started at line 99
[SupersetLogger.exception] Unclosed Anchor: [DEF:SupersetLogger.exception:Function] started at line 99
[SupersetLogger.exception] Unclosed Anchor: [DEF:SupersetLogger.exception:Function] started at line 99
[SupersetLogger.exception] Unclosed Anchor: [DEF:SupersetLogger.exception:Function] started at line 99
[SupersetLogger.exception] Unclosed Anchor: [DEF:SupersetLogger.exception:Function] started at line 99
[SupersetLogger.exception] Unclosed Anchor: [DEF:SupersetLogger.exception:Function] started at line 99
[SupersetLogger.exception] Unclosed Anchor: [DEF:SupersetLogger.exception:Function] started at line 99 | +| superset_tool/utils/network.py | 🔴 0% | [superset_tool.utils.network] Unclosed Anchor at end of file (started line 1)
[superset_tool.utils.network] Unclosed Anchor: [DEF:superset_tool.utils.network:Module] started at line 1
[APIClient] Unclosed Anchor at end of file (started line 24)
[APIClient] Unclosed Anchor: [DEF:APIClient:Class] started at line 24
[APIClient] Unclosed Anchor: [DEF:APIClient:Class] started at line 24
[APIClient.__init__] Unclosed Anchor at end of file (started line 29)
[APIClient.__init__] Unclosed Anchor: [DEF:APIClient.__init__:Function] started at line 29
[APIClient.__init__] Unclosed Anchor: [DEF:APIClient.__init__:Function] started at line 29
[APIClient.__init__] Unclosed Anchor: [DEF:APIClient.__init__:Function] started at line 29
[APIClient._init_session] Unclosed Anchor at end of file (started line 47)
[APIClient._init_session] Unclosed Anchor: [DEF:APIClient._init_session:Function] started at line 47
[APIClient._init_session] Unclosed Anchor: [DEF:APIClient._init_session:Function] started at line 47
[APIClient._init_session] Unclosed Anchor: [DEF:APIClient._init_session:Function] started at line 47
[APIClient._init_session] Unclosed Anchor: [DEF:APIClient._init_session:Function] started at line 47
[APIClient.authenticate] Unclosed Anchor at end of file (started line 63)
[APIClient.authenticate] Unclosed Anchor: [DEF:APIClient.authenticate:Function] started at line 63
[APIClient.authenticate] Unclosed Anchor: [DEF:APIClient.authenticate:Function] started at line 63
[APIClient.authenticate] Unclosed Anchor: [DEF:APIClient.authenticate:Function] started at line 63
[APIClient.authenticate] Unclosed Anchor: [DEF:APIClient.authenticate:Function] started at line 63
[APIClient.authenticate] Unclosed Anchor: [DEF:APIClient.authenticate:Function] started at line 63
[APIClient.headers] Unclosed Anchor at end of file (started line 92)
[APIClient.headers] Unclosed Anchor: [DEF:APIClient.headers:Function] started at line 92
[APIClient.headers] Unclosed Anchor: [DEF:APIClient.headers:Function] started at line 92
[APIClient.headers] Unclosed Anchor: [DEF:APIClient.headers:Function] started at line 92
[APIClient.headers] Unclosed Anchor: [DEF:APIClient.headers:Function] started at line 92
[APIClient.headers] Unclosed Anchor: [DEF:APIClient.headers:Function] started at line 92
[APIClient.headers] Unclosed Anchor: [DEF:APIClient.headers:Function] started at line 92
[APIClient.request] Unclosed Anchor at end of file (started line 103)
[APIClient.request] Unclosed Anchor: [DEF:APIClient.request:Function] started at line 103
[APIClient.request] Unclosed Anchor: [DEF:APIClient.request:Function] started at line 103
[APIClient.request] Unclosed Anchor: [DEF:APIClient.request:Function] started at line 103
[APIClient.request] Unclosed Anchor: [DEF:APIClient.request:Function] started at line 103
[APIClient.request] Unclosed Anchor: [DEF:APIClient.request:Function] started at line 103
[APIClient.request] Unclosed Anchor: [DEF:APIClient.request:Function] started at line 103
[APIClient.request] Unclosed Anchor: [DEF:APIClient.request:Function] started at line 103
[APIClient._handle_http_error] Unclosed Anchor at end of file (started line 126)
[APIClient._handle_http_error] Unclosed Anchor: [DEF:APIClient._handle_http_error:Function] started at line 126
[APIClient._handle_http_error] Unclosed Anchor: [DEF:APIClient._handle_http_error:Function] started at line 126
[APIClient._handle_http_error] Unclosed Anchor: [DEF:APIClient._handle_http_error:Function] started at line 126
[APIClient._handle_http_error] Unclosed Anchor: [DEF:APIClient._handle_http_error:Function] started at line 126
[APIClient._handle_http_error] Unclosed Anchor: [DEF:APIClient._handle_http_error:Function] started at line 126
[APIClient._handle_http_error] Unclosed Anchor: [DEF:APIClient._handle_http_error:Function] started at line 126
[APIClient._handle_http_error] Unclosed Anchor: [DEF:APIClient._handle_http_error:Function] started at line 126
[APIClient._handle_http_error] Unclosed Anchor: [DEF:APIClient._handle_http_error:Function] started at line 126
[APIClient._handle_network_error] Unclosed Anchor at end of file (started line 138)
[APIClient._handle_network_error] Unclosed Anchor: [DEF:APIClient._handle_network_error:Function] started at line 138
[APIClient._handle_network_error] Unclosed Anchor: [DEF:APIClient._handle_network_error:Function] started at line 138
[APIClient._handle_network_error] Unclosed Anchor: [DEF:APIClient._handle_network_error:Function] started at line 138
[APIClient._handle_network_error] Unclosed Anchor: [DEF:APIClient._handle_network_error:Function] started at line 138
[APIClient._handle_network_error] Unclosed Anchor: [DEF:APIClient._handle_network_error:Function] started at line 138
[APIClient._handle_network_error] Unclosed Anchor: [DEF:APIClient._handle_network_error:Function] started at line 138
[APIClient._handle_network_error] Unclosed Anchor: [DEF:APIClient._handle_network_error:Function] started at line 138
[APIClient._handle_network_error] Unclosed Anchor: [DEF:APIClient._handle_network_error:Function] started at line 138
[APIClient._handle_network_error] Unclosed Anchor: [DEF:APIClient._handle_network_error:Function] started at line 138
[APIClient.upload_file] Unclosed Anchor at end of file (started line 149)
[APIClient.upload_file] Unclosed Anchor: [DEF:APIClient.upload_file:Function] started at line 149
[APIClient.upload_file] Unclosed Anchor: [DEF:APIClient.upload_file:Function] started at line 149
[APIClient.upload_file] Unclosed Anchor: [DEF:APIClient.upload_file:Function] started at line 149
[APIClient.upload_file] Unclosed Anchor: [DEF:APIClient.upload_file:Function] started at line 149
[APIClient.upload_file] Unclosed Anchor: [DEF:APIClient.upload_file:Function] started at line 149
[APIClient.upload_file] Unclosed Anchor: [DEF:APIClient.upload_file:Function] started at line 149
[APIClient.upload_file] Unclosed Anchor: [DEF:APIClient.upload_file:Function] started at line 149
[APIClient.upload_file] Unclosed Anchor: [DEF:APIClient.upload_file:Function] started at line 149
[APIClient.upload_file] Unclosed Anchor: [DEF:APIClient.upload_file:Function] started at line 149
[APIClient.upload_file] Unclosed Anchor: [DEF:APIClient.upload_file:Function] started at line 149
[APIClient._perform_upload] Unclosed Anchor at end of file (started line 175)
[APIClient._perform_upload] Unclosed Anchor: [DEF:APIClient._perform_upload:Function] started at line 175
[APIClient._perform_upload] Unclosed Anchor: [DEF:APIClient._perform_upload:Function] started at line 175
[APIClient._perform_upload] Unclosed Anchor: [DEF:APIClient._perform_upload:Function] started at line 175
[APIClient._perform_upload] Unclosed Anchor: [DEF:APIClient._perform_upload:Function] started at line 175
[APIClient._perform_upload] Unclosed Anchor: [DEF:APIClient._perform_upload:Function] started at line 175
[APIClient._perform_upload] Unclosed Anchor: [DEF:APIClient._perform_upload:Function] started at line 175
[APIClient._perform_upload] Unclosed Anchor: [DEF:APIClient._perform_upload:Function] started at line 175
[APIClient._perform_upload] Unclosed Anchor: [DEF:APIClient._perform_upload:Function] started at line 175
[APIClient._perform_upload] Unclosed Anchor: [DEF:APIClient._perform_upload:Function] started at line 175
[APIClient._perform_upload] Unclosed Anchor: [DEF:APIClient._perform_upload:Function] started at line 175
[APIClient._perform_upload] Unclosed Anchor: [DEF:APIClient._perform_upload:Function] started at line 175
[APIClient.fetch_paginated_count] Unclosed Anchor at end of file (started line 201)
[APIClient.fetch_paginated_count] Unclosed Anchor: [DEF:APIClient.fetch_paginated_count:Function] started at line 201
[APIClient.fetch_paginated_count] Unclosed Anchor: [DEF:APIClient.fetch_paginated_count:Function] started at line 201
[APIClient.fetch_paginated_count] Unclosed Anchor: [DEF:APIClient.fetch_paginated_count:Function] started at line 201
[APIClient.fetch_paginated_count] Unclosed Anchor: [DEF:APIClient.fetch_paginated_count:Function] started at line 201
[APIClient.fetch_paginated_count] Unclosed Anchor: [DEF:APIClient.fetch_paginated_count:Function] started at line 201
[APIClient.fetch_paginated_count] Unclosed Anchor: [DEF:APIClient.fetch_paginated_count:Function] started at line 201
[APIClient.fetch_paginated_count] Unclosed Anchor: [DEF:APIClient.fetch_paginated_count:Function] started at line 201
[APIClient.fetch_paginated_count] Unclosed Anchor: [DEF:APIClient.fetch_paginated_count:Function] started at line 201
[APIClient.fetch_paginated_count] Unclosed Anchor: [DEF:APIClient.fetch_paginated_count:Function] started at line 201
[APIClient.fetch_paginated_count] Unclosed Anchor: [DEF:APIClient.fetch_paginated_count:Function] started at line 201
[APIClient.fetch_paginated_count] Unclosed Anchor: [DEF:APIClient.fetch_paginated_count:Function] started at line 201
[APIClient.fetch_paginated_count] Unclosed Anchor: [DEF:APIClient.fetch_paginated_count:Function] started at line 201
[APIClient.fetch_paginated_data] Unclosed Anchor at end of file (started line 212)
[APIClient.fetch_paginated_data] Unclosed Anchor: [DEF:APIClient.fetch_paginated_data:Function] started at line 212
[APIClient.fetch_paginated_data] Unclosed Anchor: [DEF:APIClient.fetch_paginated_data:Function] started at line 212
[APIClient.fetch_paginated_data] Unclosed Anchor: [DEF:APIClient.fetch_paginated_data:Function] started at line 212
[APIClient.fetch_paginated_data] Unclosed Anchor: [DEF:APIClient.fetch_paginated_data:Function] started at line 212
[APIClient.fetch_paginated_data] Unclosed Anchor: [DEF:APIClient.fetch_paginated_data:Function] started at line 212
[APIClient.fetch_paginated_data] Unclosed Anchor: [DEF:APIClient.fetch_paginated_data:Function] started at line 212
[APIClient.fetch_paginated_data] Unclosed Anchor: [DEF:APIClient.fetch_paginated_data:Function] started at line 212
[APIClient.fetch_paginated_data] Unclosed Anchor: [DEF:APIClient.fetch_paginated_data:Function] started at line 212
[APIClient.fetch_paginated_data] Unclosed Anchor: [DEF:APIClient.fetch_paginated_data:Function] started at line 212
[APIClient.fetch_paginated_data] Unclosed Anchor: [DEF:APIClient.fetch_paginated_data:Function] started at line 212
[APIClient.fetch_paginated_data] Unclosed Anchor: [DEF:APIClient.fetch_paginated_data:Function] started at line 212
[APIClient.fetch_paginated_data] Unclosed Anchor: [DEF:APIClient.fetch_paginated_data:Function] started at line 212
[APIClient.fetch_paginated_data] Unclosed Anchor: [DEF:APIClient.fetch_paginated_data:Function] started at line 212 | +| superset_tool/utils/whiptail_fallback.py | 🔴 0% | [superset_tool.utils.whiptail_fallback] Unclosed Anchor at end of file (started line 1)
[superset_tool.utils.whiptail_fallback] Unclosed Anchor: [DEF:superset_tool.utils.whiptail_fallback:Module] started at line 1
[menu] Unclosed Anchor at end of file (started line 13)
[menu] Unclosed Anchor: [DEF:menu:Function] started at line 13
[menu] Unclosed Anchor: [DEF:menu:Function] started at line 13
[checklist] Unclosed Anchor at end of file (started line 31)
[checklist] Unclosed Anchor: [DEF:checklist:Function] started at line 31
[checklist] Unclosed Anchor: [DEF:checklist:Function] started at line 31
[checklist] Unclosed Anchor: [DEF:checklist:Function] started at line 31
[yesno] Unclosed Anchor at end of file (started line 51)
[yesno] Unclosed Anchor: [DEF:yesno:Function] started at line 51
[yesno] Unclosed Anchor: [DEF:yesno:Function] started at line 51
[yesno] Unclosed Anchor: [DEF:yesno:Function] started at line 51
[yesno] Unclosed Anchor: [DEF:yesno:Function] started at line 51
[msgbox] Unclosed Anchor at end of file (started line 61)
[msgbox] Unclosed Anchor: [DEF:msgbox:Function] started at line 61
[msgbox] Unclosed Anchor: [DEF:msgbox:Function] started at line 61
[msgbox] Unclosed Anchor: [DEF:msgbox:Function] started at line 61
[msgbox] Unclosed Anchor: [DEF:msgbox:Function] started at line 61
[msgbox] Unclosed Anchor: [DEF:msgbox:Function] started at line 61
[inputbox] Unclosed Anchor at end of file (started line 69)
[inputbox] Unclosed Anchor: [DEF:inputbox:Function] started at line 69
[inputbox] Unclosed Anchor: [DEF:inputbox:Function] started at line 69
[inputbox] Unclosed Anchor: [DEF:inputbox:Function] started at line 69
[inputbox] Unclosed Anchor: [DEF:inputbox:Function] started at line 69
[inputbox] Unclosed Anchor: [DEF:inputbox:Function] started at line 69
[inputbox] Unclosed Anchor: [DEF:inputbox:Function] started at line 69
[_ConsoleGauge] Unclosed Anchor at end of file (started line 80)
[_ConsoleGauge] Unclosed Anchor: [DEF:_ConsoleGauge:Class] started at line 80
[_ConsoleGauge] Unclosed Anchor: [DEF:_ConsoleGauge:Class] started at line 80
[_ConsoleGauge] Unclosed Anchor: [DEF:_ConsoleGauge:Class] started at line 80
[_ConsoleGauge] Unclosed Anchor: [DEF:_ConsoleGauge:Class] started at line 80
[_ConsoleGauge] Unclosed Anchor: [DEF:_ConsoleGauge:Class] started at line 80
[_ConsoleGauge] Unclosed Anchor: [DEF:_ConsoleGauge:Class] started at line 80
[_ConsoleGauge] Unclosed Anchor: [DEF:_ConsoleGauge:Class] started at line 80
[gauge] Unclosed Anchor at end of file (started line 96)
[gauge] Unclosed Anchor: [DEF:gauge:Function] started at line 96
[gauge] Unclosed Anchor: [DEF:gauge:Function] started at line 96
[gauge] Unclosed Anchor: [DEF:gauge:Function] started at line 96
[gauge] Unclosed Anchor: [DEF:gauge:Function] started at line 96
[gauge] Unclosed Anchor: [DEF:gauge:Function] started at line 96
[gauge] Unclosed Anchor: [DEF:gauge:Function] started at line 96
[gauge] Unclosed Anchor: [DEF:gauge:Function] started at line 96
[gauge] Unclosed Anchor: [DEF:gauge:Function] started at line 96 | +| superset_tool/utils/dataset_mapper.py | 🔴 0% | [superset_tool.utils.dataset_mapper] Unclosed Anchor at end of file (started line 1)
[superset_tool.utils.dataset_mapper] Unclosed Anchor: [DEF:superset_tool.utils.dataset_mapper:Module] started at line 1
[DatasetMapper] Unclosed Anchor at end of file (started line 20)
[DatasetMapper] Unclosed Anchor: [DEF:DatasetMapper:Class] started at line 20
[DatasetMapper] Unclosed Anchor: [DEF:DatasetMapper:Class] started at line 20
[DatasetMapper.get_postgres_comments] Unclosed Anchor at end of file (started line 26)
[DatasetMapper.get_postgres_comments] Unclosed Anchor: [DEF:DatasetMapper.get_postgres_comments:Function] started at line 26
[DatasetMapper.get_postgres_comments] Unclosed Anchor: [DEF:DatasetMapper.get_postgres_comments:Function] started at line 26
[DatasetMapper.get_postgres_comments] Unclosed Anchor: [DEF:DatasetMapper.get_postgres_comments:Function] started at line 26
[DatasetMapper.load_excel_mappings] Unclosed Anchor at end of file (started line 90)
[DatasetMapper.load_excel_mappings] Unclosed Anchor: [DEF:DatasetMapper.load_excel_mappings:Function] started at line 90
[DatasetMapper.load_excel_mappings] Unclosed Anchor: [DEF:DatasetMapper.load_excel_mappings:Function] started at line 90
[DatasetMapper.load_excel_mappings] Unclosed Anchor: [DEF:DatasetMapper.load_excel_mappings:Function] started at line 90
[DatasetMapper.load_excel_mappings] Unclosed Anchor: [DEF:DatasetMapper.load_excel_mappings:Function] started at line 90
[DatasetMapper.run_mapping] Unclosed Anchor at end of file (started line 109)
[DatasetMapper.run_mapping] Unclosed Anchor: [DEF:DatasetMapper.run_mapping:Function] started at line 109
[DatasetMapper.run_mapping] Unclosed Anchor: [DEF:DatasetMapper.run_mapping:Function] started at line 109
[DatasetMapper.run_mapping] Unclosed Anchor: [DEF:DatasetMapper.run_mapping:Function] started at line 109
[DatasetMapper.run_mapping] Unclosed Anchor: [DEF:DatasetMapper.run_mapping:Function] started at line 109
[DatasetMapper.run_mapping] Unclosed Anchor: [DEF:DatasetMapper.run_mapping:Function] started at line 109 | +| superset_tool/utils/__init__.py | 🔴 0% | [superset_tool.utils] Unclosed Anchor at end of file (started line 1)
[superset_tool.utils] Unclosed Anchor: [DEF:superset_tool.utils:Module] started at line 1 | +| superset_tool/utils/init_clients.py | 🔴 0% | [superset_tool.utils.init_clients] Unclosed Anchor at end of file (started line 1)
[superset_tool.utils.init_clients] Unclosed Anchor: [DEF:superset_tool.utils.init_clients:Module] started at line 1
[setup_clients] Unclosed Anchor at end of file (started line 20)
[setup_clients] Unclosed Anchor: [DEF:setup_clients:Function] started at line 20
[setup_clients] Unclosed Anchor: [DEF:setup_clients:Function] started at line 20 | +| superset_tool/utils/fileio.py | 🔴 0% | [superset_tool.utils.fileio] Unclosed Anchor at end of file (started line 1)
[superset_tool.utils.fileio] Unclosed Anchor: [DEF:superset_tool.utils.fileio:Module] started at line 1
[create_temp_file] Unclosed Anchor at end of file (started line 29)
[create_temp_file] Unclosed Anchor: [DEF:create_temp_file:Function] started at line 29
[create_temp_file] Unclosed Anchor: [DEF:create_temp_file:Function] started at line 29
[remove_empty_directories] Unclosed Anchor at end of file (started line 69)
[remove_empty_directories] Unclosed Anchor: [DEF:remove_empty_directories:Function] started at line 69
[remove_empty_directories] Unclosed Anchor: [DEF:remove_empty_directories:Function] started at line 69
[remove_empty_directories] Unclosed Anchor: [DEF:remove_empty_directories:Function] started at line 69
[read_dashboard_from_disk] Unclosed Anchor at end of file (started line 93)
[read_dashboard_from_disk] Unclosed Anchor: [DEF:read_dashboard_from_disk:Function] started at line 93
[read_dashboard_from_disk] Unclosed Anchor: [DEF:read_dashboard_from_disk:Function] started at line 93
[read_dashboard_from_disk] Unclosed Anchor: [DEF:read_dashboard_from_disk:Function] started at line 93
[read_dashboard_from_disk] Unclosed Anchor: [DEF:read_dashboard_from_disk:Function] started at line 93
[calculate_crc32] Unclosed Anchor at end of file (started line 110)
[calculate_crc32] Unclosed Anchor: [DEF:calculate_crc32:Function] started at line 110
[calculate_crc32] Unclosed Anchor: [DEF:calculate_crc32:Function] started at line 110
[calculate_crc32] Unclosed Anchor: [DEF:calculate_crc32:Function] started at line 110
[calculate_crc32] Unclosed Anchor: [DEF:calculate_crc32:Function] started at line 110
[calculate_crc32] Unclosed Anchor: [DEF:calculate_crc32:Function] started at line 110
[RetentionPolicy] Unclosed Anchor at end of file (started line 121)
[RetentionPolicy] Unclosed Anchor: [DEF:RetentionPolicy:DataClass] started at line 121
[RetentionPolicy] Unclosed Anchor: [DEF:RetentionPolicy:DataClass] started at line 121
[RetentionPolicy] Unclosed Anchor: [DEF:RetentionPolicy:DataClass] started at line 121
[RetentionPolicy] Unclosed Anchor: [DEF:RetentionPolicy:DataClass] started at line 121
[RetentionPolicy] Unclosed Anchor: [DEF:RetentionPolicy:DataClass] started at line 121
[RetentionPolicy] Unclosed Anchor: [DEF:RetentionPolicy:DataClass] started at line 121
[archive_exports] Unclosed Anchor at end of file (started line 130)
[archive_exports] Unclosed Anchor: [DEF:archive_exports:Function] started at line 130
[archive_exports] Unclosed Anchor: [DEF:archive_exports:Function] started at line 130
[archive_exports] Unclosed Anchor: [DEF:archive_exports:Function] started at line 130
[archive_exports] Unclosed Anchor: [DEF:archive_exports:Function] started at line 130
[archive_exports] Unclosed Anchor: [DEF:archive_exports:Function] started at line 130
[archive_exports] Unclosed Anchor: [DEF:archive_exports:Function] started at line 130
[archive_exports] Unclosed Anchor: [DEF:archive_exports:Function] started at line 130
[apply_retention_policy] Unclosed Anchor at end of file (started line 212)
[apply_retention_policy] Unclosed Anchor: [DEF:apply_retention_policy:Function] started at line 212
[apply_retention_policy] Unclosed Anchor: [DEF:apply_retention_policy:Function] started at line 212
[apply_retention_policy] Unclosed Anchor: [DEF:apply_retention_policy:Function] started at line 212
[apply_retention_policy] Unclosed Anchor: [DEF:apply_retention_policy:Function] started at line 212
[apply_retention_policy] Unclosed Anchor: [DEF:apply_retention_policy:Function] started at line 212
[apply_retention_policy] Unclosed Anchor: [DEF:apply_retention_policy:Function] started at line 212
[apply_retention_policy] Unclosed Anchor: [DEF:apply_retention_policy:Function] started at line 212
[apply_retention_policy] Unclosed Anchor: [DEF:apply_retention_policy:Function] started at line 212
[save_and_unpack_dashboard] Unclosed Anchor at end of file (started line 245)
[save_and_unpack_dashboard] Unclosed Anchor: [DEF:save_and_unpack_dashboard:Function] started at line 245
[save_and_unpack_dashboard] Unclosed Anchor: [DEF:save_and_unpack_dashboard:Function] started at line 245
[save_and_unpack_dashboard] Unclosed Anchor: [DEF:save_and_unpack_dashboard:Function] started at line 245
[save_and_unpack_dashboard] Unclosed Anchor: [DEF:save_and_unpack_dashboard:Function] started at line 245
[save_and_unpack_dashboard] Unclosed Anchor: [DEF:save_and_unpack_dashboard:Function] started at line 245
[save_and_unpack_dashboard] Unclosed Anchor: [DEF:save_and_unpack_dashboard:Function] started at line 245
[save_and_unpack_dashboard] Unclosed Anchor: [DEF:save_and_unpack_dashboard:Function] started at line 245
[save_and_unpack_dashboard] Unclosed Anchor: [DEF:save_and_unpack_dashboard:Function] started at line 245
[save_and_unpack_dashboard] Unclosed Anchor: [DEF:save_and_unpack_dashboard:Function] started at line 245
[update_yamls] Unclosed Anchor at end of file (started line 275)
[update_yamls] Unclosed Anchor: [DEF:update_yamls:Function] started at line 275
[update_yamls] Unclosed Anchor: [DEF:update_yamls:Function] started at line 275
[update_yamls] Unclosed Anchor: [DEF:update_yamls:Function] started at line 275
[update_yamls] Unclosed Anchor: [DEF:update_yamls:Function] started at line 275
[update_yamls] Unclosed Anchor: [DEF:update_yamls:Function] started at line 275
[update_yamls] Unclosed Anchor: [DEF:update_yamls:Function] started at line 275
[update_yamls] Unclosed Anchor: [DEF:update_yamls:Function] started at line 275
[update_yamls] Unclosed Anchor: [DEF:update_yamls:Function] started at line 275
[update_yamls] Unclosed Anchor: [DEF:update_yamls:Function] started at line 275
[update_yamls] Unclosed Anchor: [DEF:update_yamls:Function] started at line 275
[_update_yaml_file] Unclosed Anchor at end of file (started line 296)
[_update_yaml_file] Unclosed Anchor: [DEF:_update_yaml_file:Function] started at line 296
[_update_yaml_file] Unclosed Anchor: [DEF:_update_yaml_file:Function] started at line 296
[_update_yaml_file] Unclosed Anchor: [DEF:_update_yaml_file:Function] started at line 296
[_update_yaml_file] Unclosed Anchor: [DEF:_update_yaml_file:Function] started at line 296
[_update_yaml_file] Unclosed Anchor: [DEF:_update_yaml_file:Function] started at line 296
[_update_yaml_file] Unclosed Anchor: [DEF:_update_yaml_file:Function] started at line 296
[_update_yaml_file] Unclosed Anchor: [DEF:_update_yaml_file:Function] started at line 296
[_update_yaml_file] Unclosed Anchor: [DEF:_update_yaml_file:Function] started at line 296
[_update_yaml_file] Unclosed Anchor: [DEF:_update_yaml_file:Function] started at line 296
[_update_yaml_file] Unclosed Anchor: [DEF:_update_yaml_file:Function] started at line 296
[_update_yaml_file] Unclosed Anchor: [DEF:_update_yaml_file:Function] started at line 296
[create_dashboard_export] Unclosed Anchor at end of file (started line 357)
[create_dashboard_export] Unclosed Anchor: [DEF:create_dashboard_export:Function] started at line 357
[create_dashboard_export] Unclosed Anchor: [DEF:create_dashboard_export:Function] started at line 357
[create_dashboard_export] Unclosed Anchor: [DEF:create_dashboard_export:Function] started at line 357
[create_dashboard_export] Unclosed Anchor: [DEF:create_dashboard_export:Function] started at line 357
[create_dashboard_export] Unclosed Anchor: [DEF:create_dashboard_export:Function] started at line 357
[create_dashboard_export] Unclosed Anchor: [DEF:create_dashboard_export:Function] started at line 357
[create_dashboard_export] Unclosed Anchor: [DEF:create_dashboard_export:Function] started at line 357
[create_dashboard_export] Unclosed Anchor: [DEF:create_dashboard_export:Function] started at line 357
[create_dashboard_export] Unclosed Anchor: [DEF:create_dashboard_export:Function] started at line 357
[create_dashboard_export] Unclosed Anchor: [DEF:create_dashboard_export:Function] started at line 357
[create_dashboard_export] Unclosed Anchor: [DEF:create_dashboard_export:Function] started at line 357
[create_dashboard_export] Unclosed Anchor: [DEF:create_dashboard_export:Function] started at line 357
[sanitize_filename] Unclosed Anchor at end of file (started line 384)
[sanitize_filename] Unclosed Anchor: [DEF:sanitize_filename:Function] started at line 384
[sanitize_filename] Unclosed Anchor: [DEF:sanitize_filename:Function] started at line 384
[sanitize_filename] Unclosed Anchor: [DEF:sanitize_filename:Function] started at line 384
[sanitize_filename] Unclosed Anchor: [DEF:sanitize_filename:Function] started at line 384
[sanitize_filename] Unclosed Anchor: [DEF:sanitize_filename:Function] started at line 384
[sanitize_filename] Unclosed Anchor: [DEF:sanitize_filename:Function] started at line 384
[sanitize_filename] Unclosed Anchor: [DEF:sanitize_filename:Function] started at line 384
[sanitize_filename] Unclosed Anchor: [DEF:sanitize_filename:Function] started at line 384
[sanitize_filename] Unclosed Anchor: [DEF:sanitize_filename:Function] started at line 384
[sanitize_filename] Unclosed Anchor: [DEF:sanitize_filename:Function] started at line 384
[sanitize_filename] Unclosed Anchor: [DEF:sanitize_filename:Function] started at line 384
[sanitize_filename] Unclosed Anchor: [DEF:sanitize_filename:Function] started at line 384
[sanitize_filename] Unclosed Anchor: [DEF:sanitize_filename:Function] started at line 384
[get_filename_from_headers] Unclosed Anchor at end of file (started line 392)
[get_filename_from_headers] Unclosed Anchor: [DEF:get_filename_from_headers:Function] started at line 392
[get_filename_from_headers] Unclosed Anchor: [DEF:get_filename_from_headers:Function] started at line 392
[get_filename_from_headers] Unclosed Anchor: [DEF:get_filename_from_headers:Function] started at line 392
[get_filename_from_headers] Unclosed Anchor: [DEF:get_filename_from_headers:Function] started at line 392
[get_filename_from_headers] Unclosed Anchor: [DEF:get_filename_from_headers:Function] started at line 392
[get_filename_from_headers] Unclosed Anchor: [DEF:get_filename_from_headers:Function] started at line 392
[get_filename_from_headers] Unclosed Anchor: [DEF:get_filename_from_headers:Function] started at line 392
[get_filename_from_headers] Unclosed Anchor: [DEF:get_filename_from_headers:Function] started at line 392
[get_filename_from_headers] Unclosed Anchor: [DEF:get_filename_from_headers:Function] started at line 392
[get_filename_from_headers] Unclosed Anchor: [DEF:get_filename_from_headers:Function] started at line 392
[get_filename_from_headers] Unclosed Anchor: [DEF:get_filename_from_headers:Function] started at line 392
[get_filename_from_headers] Unclosed Anchor: [DEF:get_filename_from_headers:Function] started at line 392
[get_filename_from_headers] Unclosed Anchor: [DEF:get_filename_from_headers:Function] started at line 392
[get_filename_from_headers] Unclosed Anchor: [DEF:get_filename_from_headers:Function] started at line 392
[consolidate_archive_folders] Unclosed Anchor at end of file (started line 403)
[consolidate_archive_folders] Unclosed Anchor: [DEF:consolidate_archive_folders:Function] started at line 403
[consolidate_archive_folders] Unclosed Anchor: [DEF:consolidate_archive_folders:Function] started at line 403
[consolidate_archive_folders] Unclosed Anchor: [DEF:consolidate_archive_folders:Function] started at line 403
[consolidate_archive_folders] Unclosed Anchor: [DEF:consolidate_archive_folders:Function] started at line 403
[consolidate_archive_folders] Unclosed Anchor: [DEF:consolidate_archive_folders:Function] started at line 403
[consolidate_archive_folders] Unclosed Anchor: [DEF:consolidate_archive_folders:Function] started at line 403
[consolidate_archive_folders] Unclosed Anchor: [DEF:consolidate_archive_folders:Function] started at line 403
[consolidate_archive_folders] Unclosed Anchor: [DEF:consolidate_archive_folders:Function] started at line 403
[consolidate_archive_folders] Unclosed Anchor: [DEF:consolidate_archive_folders:Function] started at line 403
[consolidate_archive_folders] Unclosed Anchor: [DEF:consolidate_archive_folders:Function] started at line 403
[consolidate_archive_folders] Unclosed Anchor: [DEF:consolidate_archive_folders:Function] started at line 403
[consolidate_archive_folders] Unclosed Anchor: [DEF:consolidate_archive_folders:Function] started at line 403
[consolidate_archive_folders] Unclosed Anchor: [DEF:consolidate_archive_folders:Function] started at line 403
[consolidate_archive_folders] Unclosed Anchor: [DEF:consolidate_archive_folders:Function] started at line 403
[consolidate_archive_folders] Unclosed Anchor: [DEF:consolidate_archive_folders:Function] started at line 403 | +| frontend/src/App.svelte | 🔴 0% | [App] Unclosed Anchor at end of file (started line 1)
[App] Unclosed Anchor: [DEF:App:Component] started at line 1
[handleFormSubmit] Unclosed Anchor at end of file (started line 24)
[handleFormSubmit] Unclosed Anchor: [DEF:handleFormSubmit:Function] started at line 24
[handleFormSubmit] Unclosed Anchor: [DEF:handleFormSubmit:Function] started at line 24
[navigate] Unclosed Anchor at end of file (started line 44)
[navigate] Unclosed Anchor: [DEF:navigate:Function] started at line 44
[navigate] Unclosed Anchor: [DEF:navigate:Function] started at line 44
[navigate] Unclosed Anchor: [DEF:navigate:Function] started at line 44 | +| frontend/src/main.js | 🔴 0% | [main] Unclosed Anchor at end of file (started line 1)
[main] Unclosed Anchor: [DEF:main:Module] started at line 1
[app_instance] Unclosed Anchor at end of file (started line 9)
[app_instance] Unclosed Anchor: [DEF:app_instance:Data] started at line 9
[app_instance] Unclosed Anchor: [DEF:app_instance:Data] started at line 9 | +| frontend/src/components/DashboardGrid.svelte | 🔴 0% | [DashboardGrid] Unclosed Anchor at end of file (started line 1)
[DashboardGrid] Unclosed Anchor: [DEF:DashboardGrid:Component] started at line 1
[handleSort] Unclosed Anchor at end of file (started line 62)
[handleSort] Unclosed Anchor: [DEF:handleSort:Function] started at line 62
[handleSort] Unclosed Anchor: [DEF:handleSort:Function] started at line 62
[handleSelectionChange] Unclosed Anchor at end of file (started line 74)
[handleSelectionChange] Unclosed Anchor: [DEF:handleSelectionChange:Function] started at line 74
[handleSelectionChange] Unclosed Anchor: [DEF:handleSelectionChange:Function] started at line 74
[handleSelectionChange] Unclosed Anchor: [DEF:handleSelectionChange:Function] started at line 74
[handleSelectAll] Unclosed Anchor at end of file (started line 88)
[handleSelectAll] Unclosed Anchor: [DEF:handleSelectAll:Function] started at line 88
[handleSelectAll] Unclosed Anchor: [DEF:handleSelectAll:Function] started at line 88
[handleSelectAll] Unclosed Anchor: [DEF:handleSelectAll:Function] started at line 88
[handleSelectAll] Unclosed Anchor: [DEF:handleSelectAll:Function] started at line 88
[goToPage] Unclosed Anchor at end of file (started line 106)
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106 | +| frontend/src/components/TaskHistory.svelte | 🔴 0% | [TaskHistory] Unclosed Anchor at end of file (started line 1)
[TaskHistory] Unclosed Anchor: [DEF:TaskHistory:Component] started at line 1 | +| frontend/src/components/MappingTable.svelte | 🔴 0% | [MappingTable] Unclosed Anchor at end of file (started line 1)
[MappingTable] Unclosed Anchor: [DEF:MappingTable:Component] started at line 1
[updateMapping] Unclosed Anchor at end of file (started line 25)
[updateMapping] Unclosed Anchor: [DEF:updateMapping:Function] started at line 25
[updateMapping] Unclosed Anchor: [DEF:updateMapping:Function] started at line 25
[getSuggestion] Unclosed Anchor at end of file (started line 34)
[getSuggestion] Unclosed Anchor: [DEF:getSuggestion:Function] started at line 34
[getSuggestion] Unclosed Anchor: [DEF:getSuggestion:Function] started at line 34
[getSuggestion] Unclosed Anchor: [DEF:getSuggestion:Function] started at line 34 | +| frontend/src/components/EnvSelector.svelte | 🔴 0% | [EnvSelector] Unclosed Anchor at end of file (started line 1)
[EnvSelector] Unclosed Anchor: [DEF:EnvSelector:Component] started at line 1
[handleSelect] Unclosed Anchor at end of file (started line 24)
[handleSelect] Unclosed Anchor: [DEF:handleSelect:Function] started at line 24
[handleSelect] Unclosed Anchor: [DEF:handleSelect:Function] started at line 24 | +| frontend/src/components/TaskList.svelte | 🔴 0% | [TaskList] Unclosed Anchor at end of file (started line 1)
[TaskList] Unclosed Anchor: [DEF:TaskList:Component] started at line 1 | +| frontend/src/components/DynamicForm.svelte | 🔴 0% | [DynamicForm] Unclosed Anchor at end of file (started line 1)
[DynamicForm] Unclosed Anchor: [DEF:DynamicForm:Component] started at line 1
[handleSubmit] Unclosed Anchor at end of file (started line 23)
[handleSubmit] Unclosed Anchor: [DEF:handleSubmit:Function] started at line 23
[handleSubmit] Unclosed Anchor: [DEF:handleSubmit:Function] started at line 23
[initializeForm] Unclosed Anchor at end of file (started line 33)
[initializeForm] Unclosed Anchor: [DEF:initializeForm:Function] started at line 33
[initializeForm] Unclosed Anchor: [DEF:initializeForm:Function] started at line 33
[initializeForm] Unclosed Anchor: [DEF:initializeForm:Function] started at line 33 | +| frontend/src/components/TaskRunner.svelte | 🔴 0% | [TaskRunner] Unclosed Anchor at end of file (started line 1)
[TaskRunner] Unclosed Anchor: [DEF:TaskRunner:Component] started at line 1
[connect] Unclosed Anchor at end of file (started line 38)
[connect] Unclosed Anchor: [DEF:connect:Function] started at line 38
[connect] Unclosed Anchor: [DEF:connect:Function] started at line 38
[onMount] Unclosed Anchor at end of file (started line 225)
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 225
[onMount] Missing Mandatory Tag: @PURPOSE
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 225
[onMount] Missing Mandatory Tag: @PURPOSE
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 225
[onMount] Missing Mandatory Tag: @PURPOSE
[onDestroy] Unclosed Anchor at end of file (started line 251)
[onDestroy] Unclosed Anchor: [DEF:onDestroy:Function] started at line 251
[onDestroy] Unclosed Anchor: [DEF:onDestroy:Function] started at line 251
[onDestroy] Unclosed Anchor: [DEF:onDestroy:Function] started at line 251
[onDestroy] Unclosed Anchor: [DEF:onDestroy:Function] started at line 251 | +| frontend/src/components/TaskLogViewer.svelte | 🔴 0% | [TaskLogViewer] Unclosed Anchor at end of file (started line 1)
[TaskLogViewer] Unclosed Anchor: [DEF:TaskLogViewer:Component] started at line 1 | +| frontend/src/components/PasswordPrompt.svelte | 🔴 0% | [PasswordPrompt] Unclosed Anchor at end of file (started line 1)
[PasswordPrompt] Unclosed Anchor: [DEF:PasswordPrompt:Component] started at line 1 | +| frontend/src/components/MissingMappingModal.svelte | 🔴 0% | [MissingMappingModal] Unclosed Anchor at end of file (started line 1)
[MissingMappingModal] Unclosed Anchor: [DEF:MissingMappingModal:Component] started at line 1
[resolve] Unclosed Anchor at end of file (started line 26)
[resolve] Unclosed Anchor: [DEF:resolve:Function] started at line 26
[resolve] Missing Mandatory Tag: @PURPOSE
[resolve] Unclosed Anchor: [DEF:resolve:Function] started at line 26
[resolve] Missing Mandatory Tag: @PURPOSE
[cancel] Unclosed Anchor at end of file (started line 38)
[cancel] Unclosed Anchor: [DEF:cancel:Function] started at line 38
[cancel] Missing Mandatory Tag: @PURPOSE
[cancel] Unclosed Anchor: [DEF:cancel:Function] started at line 38
[cancel] Missing Mandatory Tag: @PURPOSE
[cancel] Unclosed Anchor: [DEF:cancel:Function] started at line 38
[cancel] Missing Mandatory Tag: @PURPOSE | +| frontend/src/components/Toast.svelte | 🔴 0% | [Toast] Unclosed Anchor at end of file (started line 1)
[Toast] Unclosed Anchor: [DEF:Toast:Component] started at line 1 | +| frontend/src/pages/Settings.svelte | 🔴 0% | [Settings] Unclosed Anchor at end of file (started line 1)
[Settings] Unclosed Anchor: [DEF:Settings:Component] started at line 1
[loadSettings] Unclosed Anchor at end of file (started line 50)
[loadSettings] Unclosed Anchor: [DEF:loadSettings:Function] started at line 50
[loadSettings] Unclosed Anchor: [DEF:loadSettings:Function] started at line 50
[handleSaveGlobal] Unclosed Anchor at end of file (started line 67)
[handleSaveGlobal] Unclosed Anchor: [DEF:handleSaveGlobal:Function] started at line 67
[handleSaveGlobal] Unclosed Anchor: [DEF:handleSaveGlobal:Function] started at line 67
[handleSaveGlobal] Unclosed Anchor: [DEF:handleSaveGlobal:Function] started at line 67
[handleAddOrUpdateEnv] Unclosed Anchor at end of file (started line 84)
[handleAddOrUpdateEnv] Unclosed Anchor: [DEF:handleAddOrUpdateEnv:Function] started at line 84
[handleAddOrUpdateEnv] Unclosed Anchor: [DEF:handleAddOrUpdateEnv:Function] started at line 84
[handleAddOrUpdateEnv] Unclosed Anchor: [DEF:handleAddOrUpdateEnv:Function] started at line 84
[handleAddOrUpdateEnv] Unclosed Anchor: [DEF:handleAddOrUpdateEnv:Function] started at line 84
[handleDeleteEnv] Unclosed Anchor at end of file (started line 108)
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleTestEnv] Unclosed Anchor at end of file (started line 129)
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[editEnv] Unclosed Anchor at end of file (started line 152)
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[resetEnvForm] Unclosed Anchor at end of file (started line 163)
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163 | +| frontend/src/pages/Dashboard.svelte | 🔴 0% | [Dashboard] Unclosed Anchor at end of file (started line 1)
[Dashboard] Unclosed Anchor: [DEF:Dashboard:Component] started at line 1
[onMount] Unclosed Anchor at end of file (started line 17)
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 17
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 17
[selectPlugin] Unclosed Anchor at end of file (started line 27)
[selectPlugin] Unclosed Anchor: [DEF:selectPlugin:Function] started at line 27
[selectPlugin] Unclosed Anchor: [DEF:selectPlugin:Function] started at line 27
[selectPlugin] Unclosed Anchor: [DEF:selectPlugin:Function] started at line 27 | +| frontend/src/lib/stores.js | 🔴 0% | [stores_module] Unclosed Anchor at end of file (started line 1)
[stores_module] Unclosed Anchor: [DEF:stores_module:Module] started at line 1
[plugins] Unclosed Anchor at end of file (started line 9)
[plugins] Unclosed Anchor: [DEF:plugins:Data] started at line 9
[plugins] Unclosed Anchor: [DEF:plugins:Data] started at line 9
[tasks] Unclosed Anchor at end of file (started line 13)
[tasks] Unclosed Anchor: [DEF:tasks:Data] started at line 13
[tasks] Unclosed Anchor: [DEF:tasks:Data] started at line 13
[tasks] Unclosed Anchor: [DEF:tasks:Data] started at line 13
[selectedPlugin] Unclosed Anchor at end of file (started line 17)
[selectedPlugin] Unclosed Anchor: [DEF:selectedPlugin:Data] started at line 17
[selectedPlugin] Unclosed Anchor: [DEF:selectedPlugin:Data] started at line 17
[selectedPlugin] Unclosed Anchor: [DEF:selectedPlugin:Data] started at line 17
[selectedPlugin] Unclosed Anchor: [DEF:selectedPlugin:Data] started at line 17
[selectedTask] Unclosed Anchor at end of file (started line 21)
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[currentPage] Unclosed Anchor at end of file (started line 25)
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[taskLogs] Unclosed Anchor at end of file (started line 29)
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[fetchPlugins] Unclosed Anchor at end of file (started line 33)
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchTasks] Unclosed Anchor at end of file (started line 47)
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47 | +| frontend/src/lib/toasts.js | 🔴 0% | [toasts_module] Unclosed Anchor at end of file (started line 1)
[toasts_module] Unclosed Anchor: [DEF:toasts_module:Module] started at line 1
[toasts] Unclosed Anchor at end of file (started line 8)
[toasts] Unclosed Anchor: [DEF:toasts:Data] started at line 8
[toasts] Unclosed Anchor: [DEF:toasts:Data] started at line 8
[addToast] Unclosed Anchor at end of file (started line 12)
[addToast] Unclosed Anchor: [DEF:addToast:Function] started at line 12
[addToast] Unclosed Anchor: [DEF:addToast:Function] started at line 12
[addToast] Unclosed Anchor: [DEF:addToast:Function] started at line 12
[removeToast] Unclosed Anchor at end of file (started line 25)
[removeToast] Unclosed Anchor: [DEF:removeToast:Function] started at line 25
[removeToast] Unclosed Anchor: [DEF:removeToast:Function] started at line 25
[removeToast] Unclosed Anchor: [DEF:removeToast:Function] started at line 25
[removeToast] Unclosed Anchor: [DEF:removeToast:Function] started at line 25 | +| frontend/src/lib/api.js | 🔴 0% | [api_module] Unclosed Anchor at end of file (started line 1)
[api_module] Unclosed Anchor: [DEF:api_module:Module] started at line 1
[fetchApi] Unclosed Anchor at end of file (started line 26)
[fetchApi] Unclosed Anchor: [DEF:fetchApi:Function] started at line 26
[fetchApi] Unclosed Anchor: [DEF:fetchApi:Function] started at line 26
[postApi] Unclosed Anchor at end of file (started line 46)
[postApi] Unclosed Anchor: [DEF:postApi:Function] started at line 46
[postApi] Unclosed Anchor: [DEF:postApi:Function] started at line 46
[postApi] Unclosed Anchor: [DEF:postApi:Function] started at line 46
[requestApi] Unclosed Anchor at end of file (started line 73)
[requestApi] Unclosed Anchor: [DEF:requestApi:Function] started at line 73
[requestApi] Unclosed Anchor: [DEF:requestApi:Function] started at line 73
[requestApi] Unclosed Anchor: [DEF:requestApi:Function] started at line 73
[requestApi] Unclosed Anchor: [DEF:requestApi:Function] started at line 73
[api] Unclosed Anchor at end of file (started line 100)
[api] Unclosed Anchor: [DEF:api:Data] started at line 100
[api] Unclosed Anchor: [DEF:api:Data] started at line 100
[api] Unclosed Anchor: [DEF:api:Data] started at line 100
[api] Unclosed Anchor: [DEF:api:Data] started at line 100
[api] Unclosed Anchor: [DEF:api:Data] started at line 100 | +| frontend/src/routes/migration/+page.svelte | 🔴 0% | [MigrationDashboard] Unclosed Anchor at end of file (started line 1)
[MigrationDashboard] Unclosed Anchor: [DEF:MigrationDashboard:Component] started at line 1
[fetchEnvironments] Unclosed Anchor at end of file (started line 51)
[fetchEnvironments] Unclosed Anchor: [DEF:fetchEnvironments:Function] started at line 51
[fetchEnvironments] Unclosed Anchor: [DEF:fetchEnvironments:Function] started at line 51
[fetchDashboards] Unclosed Anchor at end of file (started line 69)
[fetchDashboards] Unclosed Anchor: [DEF:fetchDashboards:Function] started at line 69
[fetchDashboards] Unclosed Anchor: [DEF:fetchDashboards:Function] started at line 69
[fetchDashboards] Unclosed Anchor: [DEF:fetchDashboards:Function] started at line 69
[fetchDatabases] Unclosed Anchor at end of file (started line 93)
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 93
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 93
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 93
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 93
[handleMappingUpdate] Unclosed Anchor at end of file (started line 128)
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleViewLogs] Unclosed Anchor at end of file (started line 163)
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor at end of file (started line 172)
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[startMigration] Unclosed Anchor at end of file (started line 207)
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207 | +| frontend/src/routes/migration/mappings/+page.svelte | 🔴 0% | [MappingManagement] Unclosed Anchor at end of file (started line 1)
[MappingManagement] Unclosed Anchor: [DEF:MappingManagement:Component] started at line 1
[fetchDatabases] Unclosed Anchor at end of file (started line 47)
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 47
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 47
[handleUpdate] Unclosed Anchor at end of file (started line 83)
[handleUpdate] Unclosed Anchor: [DEF:handleUpdate:Function] started at line 83
[handleUpdate] Unclosed Anchor: [DEF:handleUpdate:Function] started at line 83
[handleUpdate] Unclosed Anchor: [DEF:handleUpdate:Function] started at line 83 | +| backend/src/dependencies.py | 🔴 0% | [Dependencies] Unclosed Anchor at end of file (started line 1)
[Dependencies] Unclosed Anchor: [DEF:Dependencies:Module] started at line 1 | +| backend/src/app.py | 🔴 0% | [AppModule] Unclosed Anchor at end of file (started line 1)
[AppModule] Unclosed Anchor: [DEF:AppModule:Module] started at line 1
[App] Unclosed Anchor at end of file (started line 26)
[App] Unclosed Anchor: [DEF:App:Global] started at line 26
[App] Unclosed Anchor: [DEF:App:Global] started at line 26
[WebSocketEndpoint] Unclosed Anchor at end of file (started line 72)
[WebSocketEndpoint] Unclosed Anchor: [DEF:WebSocketEndpoint:Endpoint] started at line 72
[WebSocketEndpoint] Unclosed Anchor: [DEF:WebSocketEndpoint:Endpoint] started at line 72
[WebSocketEndpoint] Unclosed Anchor: [DEF:WebSocketEndpoint:Endpoint] started at line 72
[StaticFiles] Unclosed Anchor at end of file (started line 130)
[StaticFiles] Unclosed Anchor: [DEF:StaticFiles:Mount] started at line 130
[StaticFiles] Unclosed Anchor: [DEF:StaticFiles:Mount] started at line 130
[StaticFiles] Unclosed Anchor: [DEF:StaticFiles:Mount] started at line 130
[StaticFiles] Unclosed Anchor: [DEF:StaticFiles:Mount] started at line 130
[RootEndpoint] Unclosed Anchor at end of file (started line 146)
[RootEndpoint] Unclosed Anchor: [DEF:RootEndpoint:Endpoint] started at line 146
[RootEndpoint] Unclosed Anchor: [DEF:RootEndpoint:Endpoint] started at line 146
[RootEndpoint] Unclosed Anchor: [DEF:RootEndpoint:Endpoint] started at line 146
[RootEndpoint] Unclosed Anchor: [DEF:RootEndpoint:Endpoint] started at line 146
[RootEndpoint] Unclosed Anchor: [DEF:RootEndpoint:Endpoint] started at line 146 | +| backend/src/models/mapping.py | 🔴 0% | [backend.src.models.mapping] Unclosed Anchor at end of file (started line 1)
[backend.src.models.mapping] Unclosed Anchor: [DEF:backend.src.models.mapping:Module] started at line 1
[MigrationStatus] Unclosed Anchor at end of file (started line 21)
[MigrationStatus] Unclosed Anchor: [DEF:MigrationStatus:Class] started at line 21
[MigrationStatus] Unclosed Anchor: [DEF:MigrationStatus:Class] started at line 21
[Environment] Unclosed Anchor at end of file (started line 31)
[Environment] Unclosed Anchor: [DEF:Environment:Class] started at line 31
[Environment] Unclosed Anchor: [DEF:Environment:Class] started at line 31
[Environment] Unclosed Anchor: [DEF:Environment:Class] started at line 31
[DatabaseMapping] Unclosed Anchor at end of file (started line 42)
[DatabaseMapping] Unclosed Anchor: [DEF:DatabaseMapping:Class] started at line 42
[DatabaseMapping] Unclosed Anchor: [DEF:DatabaseMapping:Class] started at line 42
[DatabaseMapping] Unclosed Anchor: [DEF:DatabaseMapping:Class] started at line 42
[DatabaseMapping] Unclosed Anchor: [DEF:DatabaseMapping:Class] started at line 42
[MigrationJob] Unclosed Anchor at end of file (started line 57)
[MigrationJob] Unclosed Anchor: [DEF:MigrationJob:Class] started at line 57
[MigrationJob] Unclosed Anchor: [DEF:MigrationJob:Class] started at line 57
[MigrationJob] Unclosed Anchor: [DEF:MigrationJob:Class] started at line 57
[MigrationJob] Unclosed Anchor: [DEF:MigrationJob:Class] started at line 57
[MigrationJob] Unclosed Anchor: [DEF:MigrationJob:Class] started at line 57 | +| backend/src/models/dashboard.py | 🔴 0% | [backend.src.models.dashboard] Unclosed Anchor at end of file (started line 1)
[backend.src.models.dashboard] Unclosed Anchor: [DEF:backend.src.models.dashboard:Module] started at line 1
[DashboardMetadata] Unclosed Anchor at end of file (started line 10)
[DashboardMetadata] Unclosed Anchor: [DEF:DashboardMetadata:Class] started at line 10
[DashboardMetadata] Unclosed Anchor: [DEF:DashboardMetadata:Class] started at line 10
[DashboardSelection] Unclosed Anchor at end of file (started line 19)
[DashboardSelection] Unclosed Anchor: [DEF:DashboardSelection:Class] started at line 19
[DashboardSelection] Unclosed Anchor: [DEF:DashboardSelection:Class] started at line 19
[DashboardSelection] Unclosed Anchor: [DEF:DashboardSelection:Class] started at line 19 | +| backend/src/models/task.py | 🔴 0% | [backend.src.models.task] Unclosed Anchor at end of file (started line 1)
[backend.src.models.task] Unclosed Anchor: [DEF:backend.src.models.task:Module] started at line 1
[TaskRecord] Unclosed Anchor at end of file (started line 17)
[TaskRecord] Unclosed Anchor: [DEF:TaskRecord:Class] started at line 17
[TaskRecord] Unclosed Anchor: [DEF:TaskRecord:Class] started at line 17 | +| backend/src/services/mapping_service.py | 🔴 0% | [backend.src.services.mapping_service] Unclosed Anchor at end of file (started line 1)
[backend.src.services.mapping_service] Unclosed Anchor: [DEF:backend.src.services.mapping_service:Module] started at line 1
[MappingService] Unclosed Anchor at end of file (started line 18)
[MappingService] Unclosed Anchor: [DEF:MappingService:Class] started at line 18
[MappingService] Unclosed Anchor: [DEF:MappingService:Class] started at line 18
[MappingService.__init__] Unclosed Anchor at end of file (started line 22)
[MappingService.__init__] Unclosed Anchor: [DEF:MappingService.__init__:Function] started at line 22
[MappingService.__init__] Missing Mandatory Tag: @PURPOSE
[MappingService.__init__] Unclosed Anchor: [DEF:MappingService.__init__:Function] started at line 22
[MappingService.__init__] Missing Mandatory Tag: @PURPOSE
[MappingService.__init__] Unclosed Anchor: [DEF:MappingService.__init__:Function] started at line 22
[MappingService.__init__] Missing Mandatory Tag: @PURPOSE
[MappingService._get_client] Unclosed Anchor at end of file (started line 26)
[MappingService._get_client] Unclosed Anchor: [DEF:MappingService._get_client:Function] started at line 26
[MappingService._get_client] Unclosed Anchor: [DEF:MappingService._get_client:Function] started at line 26
[MappingService._get_client] Unclosed Anchor: [DEF:MappingService._get_client:Function] started at line 26
[MappingService._get_client] Unclosed Anchor: [DEF:MappingService._get_client:Function] started at line 26
[MappingService.get_suggestions] Unclosed Anchor at end of file (started line 46)
[MappingService.get_suggestions] Unclosed Anchor: [DEF:MappingService.get_suggestions:Function] started at line 46
[MappingService.get_suggestions] Unclosed Anchor: [DEF:MappingService.get_suggestions:Function] started at line 46
[MappingService.get_suggestions] Unclosed Anchor: [DEF:MappingService.get_suggestions:Function] started at line 46
[MappingService.get_suggestions] Unclosed Anchor: [DEF:MappingService.get_suggestions:Function] started at line 46
[MappingService.get_suggestions] Unclosed Anchor: [DEF:MappingService.get_suggestions:Function] started at line 46 | +| backend/src/core/config_manager.py | 🔴 0% | [ConfigManagerModule] Unclosed Anchor at end of file (started line 1)
[ConfigManagerModule] Unclosed Anchor: [DEF:ConfigManagerModule:Module] started at line 1
[ConfigManager] Unclosed Anchor at end of file (started line 22)
[ConfigManager] Unclosed Anchor: [DEF:ConfigManager:Class] started at line 22
[ConfigManager] Unclosed Anchor: [DEF:ConfigManager:Class] started at line 22
[__init__] Unclosed Anchor at end of file (started line 27)
[__init__] Unclosed Anchor: [DEF:__init__:Function] started at line 27
[__init__] Unclosed Anchor: [DEF:__init__:Function] started at line 27
[__init__] Unclosed Anchor: [DEF:__init__:Function] started at line 27
[_load_config] Unclosed Anchor at end of file (started line 51)
[_load_config] Unclosed Anchor: [DEF:_load_config:Function] started at line 51
[_load_config] Unclosed Anchor: [DEF:_load_config:Function] started at line 51
[_load_config] Unclosed Anchor: [DEF:_load_config:Function] started at line 51
[_load_config] Unclosed Anchor: [DEF:_load_config:Function] started at line 51
[_save_config_to_disk] Unclosed Anchor at end of file (started line 83)
[_save_config_to_disk] Unclosed Anchor: [DEF:_save_config_to_disk:Function] started at line 83
[_save_config_to_disk] Unclosed Anchor: [DEF:_save_config_to_disk:Function] started at line 83
[_save_config_to_disk] Unclosed Anchor: [DEF:_save_config_to_disk:Function] started at line 83
[_save_config_to_disk] Unclosed Anchor: [DEF:_save_config_to_disk:Function] started at line 83
[_save_config_to_disk] Unclosed Anchor: [DEF:_save_config_to_disk:Function] started at line 83
[save] Unclosed Anchor at end of file (started line 102)
[save] Unclosed Anchor: [DEF:save:Function] started at line 102
[save] Unclosed Anchor: [DEF:save:Function] started at line 102
[save] Unclosed Anchor: [DEF:save:Function] started at line 102
[save] Unclosed Anchor: [DEF:save:Function] started at line 102
[save] Unclosed Anchor: [DEF:save:Function] started at line 102
[save] Unclosed Anchor: [DEF:save:Function] started at line 102
[get_config] Unclosed Anchor at end of file (started line 108)
[get_config] Unclosed Anchor: [DEF:get_config:Function] started at line 108
[get_config] Unclosed Anchor: [DEF:get_config:Function] started at line 108
[get_config] Unclosed Anchor: [DEF:get_config:Function] started at line 108
[get_config] Unclosed Anchor: [DEF:get_config:Function] started at line 108
[get_config] Unclosed Anchor: [DEF:get_config:Function] started at line 108
[get_config] Unclosed Anchor: [DEF:get_config:Function] started at line 108
[get_config] Unclosed Anchor: [DEF:get_config:Function] started at line 108
[update_global_settings] Unclosed Anchor at end of file (started line 115)
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 115
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 115
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 115
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 115
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 115
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 115
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 115
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 115
[validate_path] Unclosed Anchor at end of file (started line 135)
[validate_path] Unclosed Anchor: [DEF:validate_path:Function] started at line 135
[validate_path] Unclosed Anchor: [DEF:validate_path:Function] started at line 135
[validate_path] Unclosed Anchor: [DEF:validate_path:Function] started at line 135
[validate_path] Unclosed Anchor: [DEF:validate_path:Function] started at line 135
[validate_path] Unclosed Anchor: [DEF:validate_path:Function] started at line 135
[validate_path] Unclosed Anchor: [DEF:validate_path:Function] started at line 135
[validate_path] Unclosed Anchor: [DEF:validate_path:Function] started at line 135
[validate_path] Unclosed Anchor: [DEF:validate_path:Function] started at line 135
[validate_path] Unclosed Anchor: [DEF:validate_path:Function] started at line 135
[get_environments] Unclosed Anchor at end of file (started line 153)
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[has_environments] Unclosed Anchor at end of file (started line 160)
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[add_environment] Unclosed Anchor at end of file (started line 167)
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[update_environment] Unclosed Anchor at end of file (started line 186)
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[delete_environment] Unclosed Anchor at end of file (started line 215)
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215 | +| backend/src/core/superset_client.py | 🔴 0% | [backend.src.core.superset_client] Unclosed Anchor at end of file (started line 1)
[backend.src.core.superset_client] Unclosed Anchor: [DEF:backend.src.core.superset_client:Module] started at line 1
[SupersetClient] Unclosed Anchor at end of file (started line 16)
[SupersetClient] Unclosed Anchor: [DEF:SupersetClient:Class] started at line 16
[SupersetClient] Unclosed Anchor: [DEF:SupersetClient:Class] started at line 16
[SupersetClient.get_databases_summary] Unclosed Anchor at end of file (started line 20)
[SupersetClient.get_databases_summary] Unclosed Anchor: [DEF:SupersetClient.get_databases_summary:Function] started at line 20
[SupersetClient.get_databases_summary] Unclosed Anchor: [DEF:SupersetClient.get_databases_summary:Function] started at line 20
[SupersetClient.get_databases_summary] Unclosed Anchor: [DEF:SupersetClient.get_databases_summary:Function] started at line 20
[SupersetClient.get_database_by_uuid] Unclosed Anchor at end of file (started line 40)
[SupersetClient.get_database_by_uuid] Unclosed Anchor: [DEF:SupersetClient.get_database_by_uuid:Function] started at line 40
[SupersetClient.get_database_by_uuid] Unclosed Anchor: [DEF:SupersetClient.get_database_by_uuid:Function] started at line 40
[SupersetClient.get_database_by_uuid] Unclosed Anchor: [DEF:SupersetClient.get_database_by_uuid:Function] started at line 40
[SupersetClient.get_database_by_uuid] Unclosed Anchor: [DEF:SupersetClient.get_database_by_uuid:Function] started at line 40
[SupersetClient.get_dashboards_summary] Unclosed Anchor at end of file (started line 55)
[SupersetClient.get_dashboards_summary] Unclosed Anchor: [DEF:SupersetClient.get_dashboards_summary:Function] started at line 55
[SupersetClient.get_dashboards_summary] Unclosed Anchor: [DEF:SupersetClient.get_dashboards_summary:Function] started at line 55
[SupersetClient.get_dashboards_summary] Unclosed Anchor: [DEF:SupersetClient.get_dashboards_summary:Function] started at line 55
[SupersetClient.get_dashboards_summary] Unclosed Anchor: [DEF:SupersetClient.get_dashboards_summary:Function] started at line 55
[SupersetClient.get_dashboards_summary] Unclosed Anchor: [DEF:SupersetClient.get_dashboards_summary:Function] started at line 55 | +| backend/src/core/migration_engine.py | 🔴 0% | [backend.src.core.migration_engine] Unclosed Anchor at end of file (started line 1)
[backend.src.core.migration_engine] Unclosed Anchor: [DEF:backend.src.core.migration_engine:Module] started at line 1
[MigrationEngine] Unclosed Anchor at end of file (started line 22)
[MigrationEngine] Unclosed Anchor: [DEF:MigrationEngine:Class] started at line 22
[MigrationEngine] Unclosed Anchor: [DEF:MigrationEngine:Class] started at line 22
[MigrationEngine.transform_zip] Unclosed Anchor at end of file (started line 26)
[MigrationEngine.transform_zip] Unclosed Anchor: [DEF:MigrationEngine.transform_zip:Function] started at line 26
[MigrationEngine.transform_zip] Unclosed Anchor: [DEF:MigrationEngine.transform_zip:Function] started at line 26
[MigrationEngine.transform_zip] Unclosed Anchor: [DEF:MigrationEngine.transform_zip:Function] started at line 26
[MigrationEngine._transform_yaml] Unclosed Anchor at end of file (started line 77)
[MigrationEngine._transform_yaml] Unclosed Anchor: [DEF:MigrationEngine._transform_yaml:Function] started at line 77
[MigrationEngine._transform_yaml] Unclosed Anchor: [DEF:MigrationEngine._transform_yaml:Function] started at line 77
[MigrationEngine._transform_yaml] Unclosed Anchor: [DEF:MigrationEngine._transform_yaml:Function] started at line 77
[MigrationEngine._transform_yaml] Unclosed Anchor: [DEF:MigrationEngine._transform_yaml:Function] started at line 77 | +| backend/src/core/logger.py | 🔴 0% | [LoggerModule] Unclosed Anchor at end of file (started line 1)
[LoggerModule] Unclosed Anchor: [DEF:LoggerModule:Module] started at line 1
[BeliefFormatter] Unclosed Anchor at end of file (started line 22)
[BeliefFormatter] Unclosed Anchor: [DEF:BeliefFormatter:Class] started at line 22
[BeliefFormatter] Unclosed Anchor: [DEF:BeliefFormatter:Class] started at line 22
[LogEntry] Unclosed Anchor at end of file (started line 34)
[LogEntry] Unclosed Anchor: [DEF:LogEntry:Class] started at line 34
[LogEntry] Unclosed Anchor: [DEF:LogEntry:Class] started at line 34
[LogEntry] Unclosed Anchor: [DEF:LogEntry:Class] started at line 34
[BeliefScope] Unclosed Anchor at end of file (started line 45)
[BeliefScope] Unclosed Anchor: [DEF:BeliefScope:Function] started at line 45
[BeliefScope] Unclosed Anchor: [DEF:BeliefScope:Function] started at line 45
[BeliefScope] Unclosed Anchor: [DEF:BeliefScope:Function] started at line 45
[BeliefScope] Unclosed Anchor: [DEF:BeliefScope:Function] started at line 45
[ConfigureLogger] Unclosed Anchor at end of file (started line 76)
[ConfigureLogger] Unclosed Anchor: [DEF:ConfigureLogger:Function] started at line 76
[ConfigureLogger] Unclosed Anchor: [DEF:ConfigureLogger:Function] started at line 76
[ConfigureLogger] Unclosed Anchor: [DEF:ConfigureLogger:Function] started at line 76
[ConfigureLogger] Unclosed Anchor: [DEF:ConfigureLogger:Function] started at line 76
[ConfigureLogger] Unclosed Anchor: [DEF:ConfigureLogger:Function] started at line 76
[WebSocketLogHandler] Unclosed Anchor at end of file (started line 120)
[WebSocketLogHandler] Unclosed Anchor: [DEF:WebSocketLogHandler:Class] started at line 120
[WebSocketLogHandler] Unclosed Anchor: [DEF:WebSocketLogHandler:Class] started at line 120
[WebSocketLogHandler] Unclosed Anchor: [DEF:WebSocketLogHandler:Class] started at line 120
[WebSocketLogHandler] Unclosed Anchor: [DEF:WebSocketLogHandler:Class] started at line 120
[WebSocketLogHandler] Unclosed Anchor: [DEF:WebSocketLogHandler:Class] started at line 120
[WebSocketLogHandler] Unclosed Anchor: [DEF:WebSocketLogHandler:Class] started at line 120
[Logger] Unclosed Anchor at end of file (started line 163)
[Logger] Unclosed Anchor: [DEF:Logger:Global] started at line 163
[Logger] Unclosed Anchor: [DEF:Logger:Global] started at line 163
[Logger] Unclosed Anchor: [DEF:Logger:Global] started at line 163
[Logger] Unclosed Anchor: [DEF:Logger:Global] started at line 163
[Logger] Unclosed Anchor: [DEF:Logger:Global] started at line 163
[Logger] Unclosed Anchor: [DEF:Logger:Global] started at line 163
[Logger] Unclosed Anchor: [DEF:Logger:Global] started at line 163 | +| backend/src/core/database.py | 🔴 0% | [backend.src.core.database] Unclosed Anchor at end of file (started line 1)
[backend.src.core.database] Unclosed Anchor: [DEF:backend.src.core.database:Module] started at line 1
[DATABASE_URL] Unclosed Anchor at end of file (started line 20)
[DATABASE_URL] Unclosed Anchor: [DEF:DATABASE_URL:Constant] started at line 20
[DATABASE_URL] Unclosed Anchor: [DEF:DATABASE_URL:Constant] started at line 20
[TASKS_DATABASE_URL] Unclosed Anchor at end of file (started line 24)
[TASKS_DATABASE_URL] Unclosed Anchor: [DEF:TASKS_DATABASE_URL:Constant] started at line 24
[TASKS_DATABASE_URL] Unclosed Anchor: [DEF:TASKS_DATABASE_URL:Constant] started at line 24
[TASKS_DATABASE_URL] Unclosed Anchor: [DEF:TASKS_DATABASE_URL:Constant] started at line 24
[engine] Unclosed Anchor at end of file (started line 28)
[engine] Unclosed Anchor: [DEF:engine:Variable] started at line 28
[engine] Unclosed Anchor: [DEF:engine:Variable] started at line 28
[engine] Unclosed Anchor: [DEF:engine:Variable] started at line 28
[engine] Unclosed Anchor: [DEF:engine:Variable] started at line 28
[tasks_engine] Unclosed Anchor at end of file (started line 32)
[tasks_engine] Unclosed Anchor: [DEF:tasks_engine:Variable] started at line 32
[tasks_engine] Unclosed Anchor: [DEF:tasks_engine:Variable] started at line 32
[tasks_engine] Unclosed Anchor: [DEF:tasks_engine:Variable] started at line 32
[tasks_engine] Unclosed Anchor: [DEF:tasks_engine:Variable] started at line 32
[tasks_engine] Unclosed Anchor: [DEF:tasks_engine:Variable] started at line 32
[SessionLocal] Unclosed Anchor at end of file (started line 36)
[SessionLocal] Unclosed Anchor: [DEF:SessionLocal:Class] started at line 36
[SessionLocal] Missing Mandatory Tag: @PURPOSE
[SessionLocal] Unclosed Anchor: [DEF:SessionLocal:Class] started at line 36
[SessionLocal] Missing Mandatory Tag: @PURPOSE
[SessionLocal] Unclosed Anchor: [DEF:SessionLocal:Class] started at line 36
[SessionLocal] Missing Mandatory Tag: @PURPOSE
[SessionLocal] Unclosed Anchor: [DEF:SessionLocal:Class] started at line 36
[SessionLocal] Missing Mandatory Tag: @PURPOSE
[SessionLocal] Unclosed Anchor: [DEF:SessionLocal:Class] started at line 36
[SessionLocal] Missing Mandatory Tag: @PURPOSE
[SessionLocal] Unclosed Anchor: [DEF:SessionLocal:Class] started at line 36
[SessionLocal] Missing Mandatory Tag: @PURPOSE
[TasksSessionLocal] Unclosed Anchor at end of file (started line 40)
[TasksSessionLocal] Unclosed Anchor: [DEF:TasksSessionLocal:Class] started at line 40
[TasksSessionLocal] Missing Mandatory Tag: @PURPOSE
[TasksSessionLocal] Unclosed Anchor: [DEF:TasksSessionLocal:Class] started at line 40
[TasksSessionLocal] Missing Mandatory Tag: @PURPOSE
[TasksSessionLocal] Unclosed Anchor: [DEF:TasksSessionLocal:Class] started at line 40
[TasksSessionLocal] Missing Mandatory Tag: @PURPOSE
[TasksSessionLocal] Unclosed Anchor: [DEF:TasksSessionLocal:Class] started at line 40
[TasksSessionLocal] Missing Mandatory Tag: @PURPOSE
[TasksSessionLocal] Unclosed Anchor: [DEF:TasksSessionLocal:Class] started at line 40
[TasksSessionLocal] Missing Mandatory Tag: @PURPOSE
[TasksSessionLocal] Unclosed Anchor: [DEF:TasksSessionLocal:Class] started at line 40
[TasksSessionLocal] Missing Mandatory Tag: @PURPOSE
[TasksSessionLocal] Unclosed Anchor: [DEF:TasksSessionLocal:Class] started at line 40
[TasksSessionLocal] Missing Mandatory Tag: @PURPOSE
[init_db] Unclosed Anchor at end of file (started line 44)
[init_db] Unclosed Anchor: [DEF:init_db:Function] started at line 44
[init_db] Unclosed Anchor: [DEF:init_db:Function] started at line 44
[init_db] Unclosed Anchor: [DEF:init_db:Function] started at line 44
[init_db] Unclosed Anchor: [DEF:init_db:Function] started at line 44
[init_db] Unclosed Anchor: [DEF:init_db:Function] started at line 44
[init_db] Unclosed Anchor: [DEF:init_db:Function] started at line 44
[init_db] Unclosed Anchor: [DEF:init_db:Function] started at line 44
[init_db] Unclosed Anchor: [DEF:init_db:Function] started at line 44
[get_db] Unclosed Anchor at end of file (started line 51)
[get_db] Unclosed Anchor: [DEF:get_db:Function] started at line 51
[get_db] Unclosed Anchor: [DEF:get_db:Function] started at line 51
[get_db] Unclosed Anchor: [DEF:get_db:Function] started at line 51
[get_db] Unclosed Anchor: [DEF:get_db:Function] started at line 51
[get_db] Unclosed Anchor: [DEF:get_db:Function] started at line 51
[get_db] Unclosed Anchor: [DEF:get_db:Function] started at line 51
[get_db] Unclosed Anchor: [DEF:get_db:Function] started at line 51
[get_db] Unclosed Anchor: [DEF:get_db:Function] started at line 51
[get_db] Unclosed Anchor: [DEF:get_db:Function] started at line 51
[get_tasks_db] Unclosed Anchor at end of file (started line 63)
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63 | +| backend/src/core/config_models.py | 🔴 0% | [ConfigModels] Unclosed Anchor at end of file (started line 1)
[ConfigModels] Unclosed Anchor: [DEF:ConfigModels:Module] started at line 1
[Schedule] Unclosed Anchor at end of file (started line 11)
[Schedule] Unclosed Anchor: [DEF:Schedule:DataClass] started at line 11
[Schedule] Unclosed Anchor: [DEF:Schedule:DataClass] started at line 11
[Environment] Unclosed Anchor at end of file (started line 18)
[Environment] Unclosed Anchor: [DEF:Environment:DataClass] started at line 18
[Environment] Unclosed Anchor: [DEF:Environment:DataClass] started at line 18
[Environment] Unclosed Anchor: [DEF:Environment:DataClass] started at line 18
[LoggingConfig] Unclosed Anchor at end of file (started line 30)
[LoggingConfig] Unclosed Anchor: [DEF:LoggingConfig:DataClass] started at line 30
[LoggingConfig] Unclosed Anchor: [DEF:LoggingConfig:DataClass] started at line 30
[LoggingConfig] Unclosed Anchor: [DEF:LoggingConfig:DataClass] started at line 30
[LoggingConfig] Unclosed Anchor: [DEF:LoggingConfig:DataClass] started at line 30
[GlobalSettings] Unclosed Anchor at end of file (started line 40)
[GlobalSettings] Unclosed Anchor: [DEF:GlobalSettings:DataClass] started at line 40
[GlobalSettings] Unclosed Anchor: [DEF:GlobalSettings:DataClass] started at line 40
[GlobalSettings] Unclosed Anchor: [DEF:GlobalSettings:DataClass] started at line 40
[GlobalSettings] Unclosed Anchor: [DEF:GlobalSettings:DataClass] started at line 40
[GlobalSettings] Unclosed Anchor: [DEF:GlobalSettings:DataClass] started at line 40
[AppConfig] Unclosed Anchor at end of file (started line 53)
[AppConfig] Unclosed Anchor: [DEF:AppConfig:DataClass] started at line 53
[AppConfig] Unclosed Anchor: [DEF:AppConfig:DataClass] started at line 53
[AppConfig] Unclosed Anchor: [DEF:AppConfig:DataClass] started at line 53
[AppConfig] Unclosed Anchor: [DEF:AppConfig:DataClass] started at line 53
[AppConfig] Unclosed Anchor: [DEF:AppConfig:DataClass] started at line 53
[AppConfig] Unclosed Anchor: [DEF:AppConfig:DataClass] started at line 53 | +| backend/src/core/scheduler.py | 🔴 0% | [SchedulerModule] Unclosed Anchor at end of file (started line 1)
[SchedulerModule] Unclosed Anchor: [DEF:SchedulerModule:Module] started at line 1
[SchedulerService] Unclosed Anchor at end of file (started line 16)
[SchedulerService] Unclosed Anchor: [DEF:SchedulerService:Class] started at line 16
[SchedulerService] Unclosed Anchor: [DEF:SchedulerService:Class] started at line 16
[SchedulerService.start] Unclosed Anchor at end of file (started line 27)
[SchedulerService.start] Unclosed Anchor: [DEF:SchedulerService.start:Function] started at line 27
[SchedulerService.start] Unclosed Anchor: [DEF:SchedulerService.start:Function] started at line 27
[SchedulerService.start] Unclosed Anchor: [DEF:SchedulerService.start:Function] started at line 27
[SchedulerService.stop] Unclosed Anchor at end of file (started line 36)
[SchedulerService.stop] Unclosed Anchor: [DEF:SchedulerService.stop:Function] started at line 36
[SchedulerService.stop] Unclosed Anchor: [DEF:SchedulerService.stop:Function] started at line 36
[SchedulerService.stop] Unclosed Anchor: [DEF:SchedulerService.stop:Function] started at line 36
[SchedulerService.stop] Unclosed Anchor: [DEF:SchedulerService.stop:Function] started at line 36
[SchedulerService.load_schedules] Unclosed Anchor at end of file (started line 44)
[SchedulerService.load_schedules] Unclosed Anchor: [DEF:SchedulerService.load_schedules:Function] started at line 44
[SchedulerService.load_schedules] Unclosed Anchor: [DEF:SchedulerService.load_schedules:Function] started at line 44
[SchedulerService.load_schedules] Unclosed Anchor: [DEF:SchedulerService.load_schedules:Function] started at line 44
[SchedulerService.load_schedules] Unclosed Anchor: [DEF:SchedulerService.load_schedules:Function] started at line 44
[SchedulerService.load_schedules] Unclosed Anchor: [DEF:SchedulerService.load_schedules:Function] started at line 44
[SchedulerService.add_backup_job] Unclosed Anchor at end of file (started line 56)
[SchedulerService.add_backup_job] Unclosed Anchor: [DEF:SchedulerService.add_backup_job:Function] started at line 56
[SchedulerService.add_backup_job] Unclosed Anchor: [DEF:SchedulerService.add_backup_job:Function] started at line 56
[SchedulerService.add_backup_job] Unclosed Anchor: [DEF:SchedulerService.add_backup_job:Function] started at line 56
[SchedulerService.add_backup_job] Unclosed Anchor: [DEF:SchedulerService.add_backup_job:Function] started at line 56
[SchedulerService.add_backup_job] Unclosed Anchor: [DEF:SchedulerService.add_backup_job:Function] started at line 56
[SchedulerService.add_backup_job] Unclosed Anchor: [DEF:SchedulerService.add_backup_job:Function] started at line 56
[SchedulerService._trigger_backup] Unclosed Anchor at end of file (started line 75)
[SchedulerService._trigger_backup] Unclosed Anchor: [DEF:SchedulerService._trigger_backup:Function] started at line 75
[SchedulerService._trigger_backup] Unclosed Anchor: [DEF:SchedulerService._trigger_backup:Function] started at line 75
[SchedulerService._trigger_backup] Unclosed Anchor: [DEF:SchedulerService._trigger_backup:Function] started at line 75
[SchedulerService._trigger_backup] Unclosed Anchor: [DEF:SchedulerService._trigger_backup:Function] started at line 75
[SchedulerService._trigger_backup] Unclosed Anchor: [DEF:SchedulerService._trigger_backup:Function] started at line 75
[SchedulerService._trigger_backup] Unclosed Anchor: [DEF:SchedulerService._trigger_backup:Function] started at line 75
[SchedulerService._trigger_backup] Unclosed Anchor: [DEF:SchedulerService._trigger_backup:Function] started at line 75 | +| backend/src/core/plugin_loader.py | 🔴 0% | [PluginLoader] Unclosed Anchor at end of file (started line 8)
[PluginLoader] Unclosed Anchor: [DEF:PluginLoader:Class] started at line 8 | +| backend/src/core/plugin_base.py | 🔴 0% | [PluginBase] Unclosed Anchor at end of file (started line 6)
[PluginBase] Unclosed Anchor: [DEF:PluginBase:Class] started at line 6
[PluginConfig] Unclosed Anchor at end of file (started line 59)
[PluginConfig] Unclosed Anchor: [DEF:PluginConfig:Class] started at line 59
[PluginConfig] Unclosed Anchor: [DEF:PluginConfig:Class] started at line 59 | +| backend/src/core/utils/matching.py | 🔴 0% | [backend.src.core.utils.matching] Unclosed Anchor at end of file (started line 1)
[backend.src.core.utils.matching] Unclosed Anchor: [DEF:backend.src.core.utils.matching:Module] started at line 1
[suggest_mappings] Unclosed Anchor at end of file (started line 15)
[suggest_mappings] Unclosed Anchor: [DEF:suggest_mappings:Function] started at line 15
[suggest_mappings] Unclosed Anchor: [DEF:suggest_mappings:Function] started at line 15 | +| backend/src/core/task_manager/cleanup.py | 🔴 0% | [TaskCleanupModule] Unclosed Anchor at end of file (started line 1)
[TaskCleanupModule] Unclosed Anchor: [DEF:TaskCleanupModule:Module] started at line 1
[TaskCleanupService] Unclosed Anchor at end of file (started line 12)
[TaskCleanupService] Unclosed Anchor: [DEF:TaskCleanupService:Class] started at line 12
[TaskCleanupService] Unclosed Anchor: [DEF:TaskCleanupService:Class] started at line 12
[TaskCleanupService.run_cleanup] Unclosed Anchor at end of file (started line 19)
[TaskCleanupService.run_cleanup] Unclosed Anchor: [DEF:TaskCleanupService.run_cleanup:Function] started at line 19
[TaskCleanupService.run_cleanup] Unclosed Anchor: [DEF:TaskCleanupService.run_cleanup:Function] started at line 19
[TaskCleanupService.run_cleanup] Unclosed Anchor: [DEF:TaskCleanupService.run_cleanup:Function] started at line 19 | +| backend/src/plugins/backup.py | 🔴 0% | [BackupPlugin] Unclosed Anchor at end of file (started line 1)
[BackupPlugin] Unclosed Anchor: [DEF:BackupPlugin:Module] started at line 1 | +| backend/src/plugins/migration.py | 🔴 0% | [MigrationPlugin] Unclosed Anchor at end of file (started line 1)
[MigrationPlugin] Unclosed Anchor: [DEF:MigrationPlugin:Module] started at line 1
[MigrationPlugin.execute] Unclosed Anchor at end of file (started line 103)
[MigrationPlugin.execute] Unclosed Anchor: [DEF:MigrationPlugin.execute:Action] started at line 103
[MigrationPlugin.execute] Unclosed Anchor: [DEF:MigrationPlugin.execute:Action] started at line 103 | +| backend/src/api/auth.py | 🔴 0% | [AuthModule] Unclosed Anchor at end of file (started line 1)
[AuthModule] Unclosed Anchor: [DEF:AuthModule:Module] started at line 1 | +| backend/src/api/routes/settings.py | 🔴 0% | [SettingsRouter] Unclosed Anchor at end of file (started line 1)
[SettingsRouter] Unclosed Anchor: [DEF:SettingsRouter:Module] started at line 1
[get_settings] Unclosed Anchor at end of file (started line 26)
[get_settings] Unclosed Anchor: [DEF:get_settings:Function] started at line 26
[get_settings] Unclosed Anchor: [DEF:get_settings:Function] started at line 26
[update_global_settings] Unclosed Anchor at end of file (started line 40)
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 40
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 40
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 40
[get_environments] Unclosed Anchor at end of file (started line 54)
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 54
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 54
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 54
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 54
[add_environment] Unclosed Anchor at end of file (started line 63)
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 63
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 63
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 63
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 63
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 63
[update_environment] Unclosed Anchor at end of file (started line 96)
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 96
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 96
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 96
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 96
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 96
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 96
[delete_environment] Unclosed Anchor at end of file (started line 139)
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 139
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 139
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 139
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 139
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 139
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 139
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 139
[test_environment_connection] Unclosed Anchor at end of file (started line 152)
[test_environment_connection] Unclosed Anchor: [DEF:test_environment_connection:Function] started at line 152
[test_environment_connection] Unclosed Anchor: [DEF:test_environment_connection:Function] started at line 152
[test_environment_connection] Unclosed Anchor: [DEF:test_environment_connection:Function] started at line 152
[test_environment_connection] Unclosed Anchor: [DEF:test_environment_connection:Function] started at line 152
[test_environment_connection] Unclosed Anchor: [DEF:test_environment_connection:Function] started at line 152
[test_environment_connection] Unclosed Anchor: [DEF:test_environment_connection:Function] started at line 152
[test_environment_connection] Unclosed Anchor: [DEF:test_environment_connection:Function] started at line 152
[test_environment_connection] Unclosed Anchor: [DEF:test_environment_connection:Function] started at line 152
[validate_backup_path] Unclosed Anchor at end of file (started line 195)
[validate_backup_path] Unclosed Anchor: [DEF:validate_backup_path:Function] started at line 195
[validate_backup_path] Unclosed Anchor: [DEF:validate_backup_path:Function] started at line 195
[validate_backup_path] Unclosed Anchor: [DEF:validate_backup_path:Function] started at line 195
[validate_backup_path] Unclosed Anchor: [DEF:validate_backup_path:Function] started at line 195
[validate_backup_path] Unclosed Anchor: [DEF:validate_backup_path:Function] started at line 195
[validate_backup_path] Unclosed Anchor: [DEF:validate_backup_path:Function] started at line 195
[validate_backup_path] Unclosed Anchor: [DEF:validate_backup_path:Function] started at line 195
[validate_backup_path] Unclosed Anchor: [DEF:validate_backup_path:Function] started at line 195
[validate_backup_path] Unclosed Anchor: [DEF:validate_backup_path:Function] started at line 195 | +| backend/src/api/routes/tasks.py | 🔴 0% | [TasksRouter] Unclosed Anchor at end of file (started line 1)
[TasksRouter] Unclosed Anchor: [DEF:TasksRouter:Module] started at line 1 | +| backend/src/api/routes/environments.py | 🔴 0% | [backend.src.api.routes.environments] Unclosed Anchor at end of file (started line 1)
[backend.src.api.routes.environments] Unclosed Anchor: [DEF:backend.src.api.routes.environments:Module] started at line 1
[ScheduleSchema] Unclosed Anchor at end of file (started line 23)
[ScheduleSchema] Unclosed Anchor: [DEF:ScheduleSchema:DataClass] started at line 23
[ScheduleSchema] Unclosed Anchor: [DEF:ScheduleSchema:DataClass] started at line 23
[EnvironmentResponse] Unclosed Anchor at end of file (started line 29)
[EnvironmentResponse] Unclosed Anchor: [DEF:EnvironmentResponse:DataClass] started at line 29
[EnvironmentResponse] Unclosed Anchor: [DEF:EnvironmentResponse:DataClass] started at line 29
[EnvironmentResponse] Unclosed Anchor: [DEF:EnvironmentResponse:DataClass] started at line 29
[DatabaseResponse] Unclosed Anchor at end of file (started line 37)
[DatabaseResponse] Unclosed Anchor: [DEF:DatabaseResponse:DataClass] started at line 37
[DatabaseResponse] Unclosed Anchor: [DEF:DatabaseResponse:DataClass] started at line 37
[DatabaseResponse] Unclosed Anchor: [DEF:DatabaseResponse:DataClass] started at line 37
[DatabaseResponse] Unclosed Anchor: [DEF:DatabaseResponse:DataClass] started at line 37
[get_environments] Unclosed Anchor at end of file (started line 44)
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 44
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 44
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 44
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 44
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 44
[update_environment_schedule] Unclosed Anchor at end of file (started line 66)
[update_environment_schedule] Unclosed Anchor: [DEF:update_environment_schedule:Function] started at line 66
[update_environment_schedule] Unclosed Anchor: [DEF:update_environment_schedule:Function] started at line 66
[update_environment_schedule] Unclosed Anchor: [DEF:update_environment_schedule:Function] started at line 66
[update_environment_schedule] Unclosed Anchor: [DEF:update_environment_schedule:Function] started at line 66
[update_environment_schedule] Unclosed Anchor: [DEF:update_environment_schedule:Function] started at line 66
[update_environment_schedule] Unclosed Anchor: [DEF:update_environment_schedule:Function] started at line 66
[get_environment_databases] Unclosed Anchor at end of file (started line 94)
[get_environment_databases] Unclosed Anchor: [DEF:get_environment_databases:Function] started at line 94
[get_environment_databases] Unclosed Anchor: [DEF:get_environment_databases:Function] started at line 94
[get_environment_databases] Unclosed Anchor: [DEF:get_environment_databases:Function] started at line 94
[get_environment_databases] Unclosed Anchor: [DEF:get_environment_databases:Function] started at line 94
[get_environment_databases] Unclosed Anchor: [DEF:get_environment_databases:Function] started at line 94
[get_environment_databases] Unclosed Anchor: [DEF:get_environment_databases:Function] started at line 94
[get_environment_databases] Unclosed Anchor: [DEF:get_environment_databases:Function] started at line 94 | +| backend/src/api/routes/plugins.py | 🔴 0% | [PluginsRouter] Unclosed Anchor at end of file (started line 1)
[PluginsRouter] Unclosed Anchor: [DEF:PluginsRouter:Module] started at line 1 | +| backend/src/api/routes/migration.py | 🔴 0% | [backend.src.api.routes.migration] Unclosed Anchor at end of file (started line 1)
[backend.src.api.routes.migration] Unclosed Anchor: [DEF:backend.src.api.routes.migration:Module] started at line 1
[get_dashboards] Unclosed Anchor at end of file (started line 17)
[get_dashboards] Unclosed Anchor: [DEF:get_dashboards:Function] started at line 17
[get_dashboards] Unclosed Anchor: [DEF:get_dashboards:Function] started at line 17
[execute_migration] Unclosed Anchor at end of file (started line 42)
[execute_migration] Unclosed Anchor: [DEF:execute_migration:Function] started at line 42
[execute_migration] Unclosed Anchor: [DEF:execute_migration:Function] started at line 42
[execute_migration] Unclosed Anchor: [DEF:execute_migration:Function] started at line 42 | +| backend/src/api/routes/mappings.py | 🔴 0% | [backend.src.api.routes.mappings] Unclosed Anchor at end of file (started line 1)
[backend.src.api.routes.mappings] Unclosed Anchor: [DEF:backend.src.api.routes.mappings:Module] started at line 1
[MappingCreate] Unclosed Anchor at end of file (started line 24)
[MappingCreate] Unclosed Anchor: [DEF:MappingCreate:DataClass] started at line 24
[MappingCreate] Unclosed Anchor: [DEF:MappingCreate:DataClass] started at line 24
[MappingResponse] Unclosed Anchor at end of file (started line 34)
[MappingResponse] Unclosed Anchor: [DEF:MappingResponse:DataClass] started at line 34
[MappingResponse] Unclosed Anchor: [DEF:MappingResponse:DataClass] started at line 34
[MappingResponse] Unclosed Anchor: [DEF:MappingResponse:DataClass] started at line 34
[SuggestRequest] Unclosed Anchor at end of file (started line 48)
[SuggestRequest] Unclosed Anchor: [DEF:SuggestRequest:DataClass] started at line 48
[SuggestRequest] Unclosed Anchor: [DEF:SuggestRequest:DataClass] started at line 48
[SuggestRequest] Unclosed Anchor: [DEF:SuggestRequest:DataClass] started at line 48
[SuggestRequest] Unclosed Anchor: [DEF:SuggestRequest:DataClass] started at line 48
[get_mappings] Unclosed Anchor at end of file (started line 54)
[get_mappings] Unclosed Anchor: [DEF:get_mappings:Function] started at line 54
[get_mappings] Unclosed Anchor: [DEF:get_mappings:Function] started at line 54
[get_mappings] Unclosed Anchor: [DEF:get_mappings:Function] started at line 54
[get_mappings] Unclosed Anchor: [DEF:get_mappings:Function] started at line 54
[get_mappings] Unclosed Anchor: [DEF:get_mappings:Function] started at line 54
[create_mapping] Unclosed Anchor at end of file (started line 70)
[create_mapping] Unclosed Anchor: [DEF:create_mapping:Function] started at line 70
[create_mapping] Unclosed Anchor: [DEF:create_mapping:Function] started at line 70
[create_mapping] Unclosed Anchor: [DEF:create_mapping:Function] started at line 70
[create_mapping] Unclosed Anchor: [DEF:create_mapping:Function] started at line 70
[create_mapping] Unclosed Anchor: [DEF:create_mapping:Function] started at line 70
[create_mapping] Unclosed Anchor: [DEF:create_mapping:Function] started at line 70
[suggest_mappings_api] Unclosed Anchor at end of file (started line 95)
[suggest_mappings_api] Unclosed Anchor: [DEF:suggest_mappings_api:Function] started at line 95
[suggest_mappings_api] Unclosed Anchor: [DEF:suggest_mappings_api:Function] started at line 95
[suggest_mappings_api] Unclosed Anchor: [DEF:suggest_mappings_api:Function] started at line 95
[suggest_mappings_api] Unclosed Anchor: [DEF:suggest_mappings_api:Function] started at line 95
[suggest_mappings_api] Unclosed Anchor: [DEF:suggest_mappings_api:Function] started at line 95
[suggest_mappings_api] Unclosed Anchor: [DEF:suggest_mappings_api:Function] started at line 95
[suggest_mappings_api] Unclosed Anchor: [DEF:suggest_mappings_api:Function] started at line 95 | +| generate_semantic_map.py | 🟢 100% | OK | +| backend/src/core/task_manager/manager.py | 🟢 100% | OK | +| backend/src/core/task_manager/__init__.py | 🟢 100% | OK | +| backend/src/core/task_manager/models.py | 🟢 100% | OK | +| backend/src/core/task_manager/persistence.py | 🟢 100% | OK | diff --git a/semantics/reports/semantic_report_20260101_162904.md b/semantics/reports/semantic_report_20260101_162904.md new file mode 100644 index 0000000..2357f31 --- /dev/null +++ b/semantics/reports/semantic_report_20260101_162904.md @@ -0,0 +1,81 @@ +# Semantic Compliance Report + +**Generated At:** 2026-01-01T16:29:04.928770 +**Global Compliance Score:** 13.4% +**Scanned Files:** 68 + +## Critical Parsing Errors +- 🔴 backend/src/core/scheduler.py:99 Mismatched closing anchor. Expected [/DEF:SchedulerService.add_backup_job:Function], found [/DEF:SchedulerService:Class]. +- 🔴 backend/src/core/scheduler.py:100 Mismatched closing anchor. Expected [/DEF:SchedulerService.add_backup_job:Function], found [/DEF:SchedulerModule:Module]. + +## File Compliance Status +| File | Score | Issues | +|------|-------|--------| +| migration_script.py | 🔴 0% | [migration_script] Unclosed Anchor at end of file (started line 1)
[migration_script] Unclosed Anchor: [DEF:migration_script:Module] started at line 1
[Migration] Unclosed Anchor at end of file (started line 25)
[Migration] Unclosed Anchor: [DEF:Migration:Class] started at line 25
[Migration] Unclosed Anchor: [DEF:Migration:Class] started at line 25
[Migration.__init__] Unclosed Anchor at end of file (started line 33)
[Migration.__init__] Unclosed Anchor: [DEF:Migration.__init__:Function] started at line 33
[Migration.__init__] Unclosed Anchor: [DEF:Migration.__init__:Function] started at line 33
[Migration.__init__] Unclosed Anchor: [DEF:Migration.__init__:Function] started at line 33
[Migration.run] Unclosed Anchor at end of file (started line 52)
[Migration.run] Unclosed Anchor: [DEF:Migration.run:Function] started at line 52
[Migration.run] Unclosed Anchor: [DEF:Migration.run:Function] started at line 52
[Migration.run] Unclosed Anchor: [DEF:Migration.run:Function] started at line 52
[Migration.run] Unclosed Anchor: [DEF:Migration.run:Function] started at line 52
[Migration.ask_delete_on_failure] Unclosed Anchor at end of file (started line 71)
[Migration.ask_delete_on_failure] Unclosed Anchor: [DEF:Migration.ask_delete_on_failure:Function] started at line 71
[Migration.ask_delete_on_failure] Unclosed Anchor: [DEF:Migration.ask_delete_on_failure:Function] started at line 71
[Migration.ask_delete_on_failure] Unclosed Anchor: [DEF:Migration.ask_delete_on_failure:Function] started at line 71
[Migration.ask_delete_on_failure] Unclosed Anchor: [DEF:Migration.ask_delete_on_failure:Function] started at line 71
[Migration.ask_delete_on_failure] Unclosed Anchor: [DEF:Migration.ask_delete_on_failure:Function] started at line 71
[Migration.select_environments] Unclosed Anchor at end of file (started line 86)
[Migration.select_environments] Unclosed Anchor: [DEF:Migration.select_environments:Function] started at line 86
[Migration.select_environments] Unclosed Anchor: [DEF:Migration.select_environments:Function] started at line 86
[Migration.select_environments] Unclosed Anchor: [DEF:Migration.select_environments:Function] started at line 86
[Migration.select_environments] Unclosed Anchor: [DEF:Migration.select_environments:Function] started at line 86
[Migration.select_environments] Unclosed Anchor: [DEF:Migration.select_environments:Function] started at line 86
[Migration.select_environments] Unclosed Anchor: [DEF:Migration.select_environments:Function] started at line 86
[Migration.select_dashboards] Unclosed Anchor at end of file (started line 127)
[Migration.select_dashboards] Unclosed Anchor: [DEF:Migration.select_dashboards:Function] started at line 127
[Migration.select_dashboards] Unclosed Anchor: [DEF:Migration.select_dashboards:Function] started at line 127
[Migration.select_dashboards] Unclosed Anchor: [DEF:Migration.select_dashboards:Function] started at line 127
[Migration.select_dashboards] Unclosed Anchor: [DEF:Migration.select_dashboards:Function] started at line 127
[Migration.select_dashboards] Unclosed Anchor: [DEF:Migration.select_dashboards:Function] started at line 127
[Migration.select_dashboards] Unclosed Anchor: [DEF:Migration.select_dashboards:Function] started at line 127
[Migration.select_dashboards] Unclosed Anchor: [DEF:Migration.select_dashboards:Function] started at line 127
[Migration.confirm_db_config_replacement] Unclosed Anchor at end of file (started line 184)
[Migration.confirm_db_config_replacement] Unclosed Anchor: [DEF:Migration.confirm_db_config_replacement:Function] started at line 184
[Migration.confirm_db_config_replacement] Unclosed Anchor: [DEF:Migration.confirm_db_config_replacement:Function] started at line 184
[Migration.confirm_db_config_replacement] Unclosed Anchor: [DEF:Migration.confirm_db_config_replacement:Function] started at line 184
[Migration.confirm_db_config_replacement] Unclosed Anchor: [DEF:Migration.confirm_db_config_replacement:Function] started at line 184
[Migration.confirm_db_config_replacement] Unclosed Anchor: [DEF:Migration.confirm_db_config_replacement:Function] started at line 184
[Migration.confirm_db_config_replacement] Unclosed Anchor: [DEF:Migration.confirm_db_config_replacement:Function] started at line 184
[Migration.confirm_db_config_replacement] Unclosed Anchor: [DEF:Migration.confirm_db_config_replacement:Function] started at line 184
[Migration.confirm_db_config_replacement] Unclosed Anchor: [DEF:Migration.confirm_db_config_replacement:Function] started at line 184
[Migration._select_databases] Unclosed Anchor at end of file (started line 219)
[Migration._select_databases] Unclosed Anchor: [DEF:Migration._select_databases:Function] started at line 219
[Migration._select_databases] Unclosed Anchor: [DEF:Migration._select_databases:Function] started at line 219
[Migration._select_databases] Unclosed Anchor: [DEF:Migration._select_databases:Function] started at line 219
[Migration._select_databases] Unclosed Anchor: [DEF:Migration._select_databases:Function] started at line 219
[Migration._select_databases] Unclosed Anchor: [DEF:Migration._select_databases:Function] started at line 219
[Migration._select_databases] Unclosed Anchor: [DEF:Migration._select_databases:Function] started at line 219
[Migration._select_databases] Unclosed Anchor: [DEF:Migration._select_databases:Function] started at line 219
[Migration._select_databases] Unclosed Anchor: [DEF:Migration._select_databases:Function] started at line 219
[Migration._select_databases] Unclosed Anchor: [DEF:Migration._select_databases:Function] started at line 219
[Migration._batch_delete_by_ids] Unclosed Anchor at end of file (started line 298)
[Migration._batch_delete_by_ids] Unclosed Anchor: [DEF:Migration._batch_delete_by_ids:Function] started at line 298
[Migration._batch_delete_by_ids] Unclosed Anchor: [DEF:Migration._batch_delete_by_ids:Function] started at line 298
[Migration._batch_delete_by_ids] Unclosed Anchor: [DEF:Migration._batch_delete_by_ids:Function] started at line 298
[Migration._batch_delete_by_ids] Unclosed Anchor: [DEF:Migration._batch_delete_by_ids:Function] started at line 298
[Migration._batch_delete_by_ids] Unclosed Anchor: [DEF:Migration._batch_delete_by_ids:Function] started at line 298
[Migration._batch_delete_by_ids] Unclosed Anchor: [DEF:Migration._batch_delete_by_ids:Function] started at line 298
[Migration._batch_delete_by_ids] Unclosed Anchor: [DEF:Migration._batch_delete_by_ids:Function] started at line 298
[Migration._batch_delete_by_ids] Unclosed Anchor: [DEF:Migration._batch_delete_by_ids:Function] started at line 298
[Migration._batch_delete_by_ids] Unclosed Anchor: [DEF:Migration._batch_delete_by_ids:Function] started at line 298
[Migration._batch_delete_by_ids] Unclosed Anchor: [DEF:Migration._batch_delete_by_ids:Function] started at line 298
[Migration.execute_migration] Unclosed Anchor at end of file (started line 324)
[Migration.execute_migration] Unclosed Anchor: [DEF:Migration.execute_migration:Function] started at line 324
[Migration.execute_migration] Unclosed Anchor: [DEF:Migration.execute_migration:Function] started at line 324
[Migration.execute_migration] Unclosed Anchor: [DEF:Migration.execute_migration:Function] started at line 324
[Migration.execute_migration] Unclosed Anchor: [DEF:Migration.execute_migration:Function] started at line 324
[Migration.execute_migration] Unclosed Anchor: [DEF:Migration.execute_migration:Function] started at line 324
[Migration.execute_migration] Unclosed Anchor: [DEF:Migration.execute_migration:Function] started at line 324
[Migration.execute_migration] Unclosed Anchor: [DEF:Migration.execute_migration:Function] started at line 324
[Migration.execute_migration] Unclosed Anchor: [DEF:Migration.execute_migration:Function] started at line 324
[Migration.execute_migration] Unclosed Anchor: [DEF:Migration.execute_migration:Function] started at line 324
[Migration.execute_migration] Unclosed Anchor: [DEF:Migration.execute_migration:Function] started at line 324
[Migration.execute_migration] Unclosed Anchor: [DEF:Migration.execute_migration:Function] started at line 324 | +| backup_script.py | 🔴 0% | [backup_script] Unclosed Anchor at end of file (started line 1)
[backup_script] Unclosed Anchor: [DEF:backup_script:Module] started at line 1
[BackupConfig] Unclosed Anchor at end of file (started line 30)
[BackupConfig] Unclosed Anchor: [DEF:BackupConfig:DataClass] started at line 30
[BackupConfig] Unclosed Anchor: [DEF:BackupConfig:DataClass] started at line 30
[backup_dashboards] Unclosed Anchor at end of file (started line 41)
[backup_dashboards] Unclosed Anchor: [DEF:backup_dashboards:Function] started at line 41
[backup_dashboards] Unclosed Anchor: [DEF:backup_dashboards:Function] started at line 41
[backup_dashboards] Unclosed Anchor: [DEF:backup_dashboards:Function] started at line 41
[main] Unclosed Anchor at end of file (started line 116)
[main] Unclosed Anchor: [DEF:main:Function] started at line 116
[main] Unclosed Anchor: [DEF:main:Function] started at line 116
[main] Unclosed Anchor: [DEF:main:Function] started at line 116
[main] Unclosed Anchor: [DEF:main:Function] started at line 116 | +| superset_tool/exceptions.py | 🔴 0% | [superset_tool.exceptions] Unclosed Anchor at end of file (started line 1)
[superset_tool.exceptions] Unclosed Anchor: [DEF:superset_tool.exceptions:Module] started at line 1
[SupersetToolError] Unclosed Anchor at end of file (started line 11)
[SupersetToolError] Unclosed Anchor: [DEF:SupersetToolError:Class] started at line 11
[SupersetToolError] Unclosed Anchor: [DEF:SupersetToolError:Class] started at line 11
[AuthenticationError] Unclosed Anchor at end of file (started line 22)
[AuthenticationError] Unclosed Anchor: [DEF:AuthenticationError:Class] started at line 22
[AuthenticationError] Unclosed Anchor: [DEF:AuthenticationError:Class] started at line 22
[AuthenticationError] Unclosed Anchor: [DEF:AuthenticationError:Class] started at line 22
[PermissionDeniedError] Unclosed Anchor at end of file (started line 32)
[PermissionDeniedError] Unclosed Anchor: [DEF:PermissionDeniedError:Class] started at line 32
[PermissionDeniedError] Unclosed Anchor: [DEF:PermissionDeniedError:Class] started at line 32
[PermissionDeniedError] Unclosed Anchor: [DEF:PermissionDeniedError:Class] started at line 32
[PermissionDeniedError] Unclosed Anchor: [DEF:PermissionDeniedError:Class] started at line 32
[SupersetAPIError] Unclosed Anchor at end of file (started line 44)
[SupersetAPIError] Unclosed Anchor: [DEF:SupersetAPIError:Class] started at line 44
[SupersetAPIError] Unclosed Anchor: [DEF:SupersetAPIError:Class] started at line 44
[SupersetAPIError] Unclosed Anchor: [DEF:SupersetAPIError:Class] started at line 44
[SupersetAPIError] Unclosed Anchor: [DEF:SupersetAPIError:Class] started at line 44
[SupersetAPIError] Unclosed Anchor: [DEF:SupersetAPIError:Class] started at line 44
[ExportError] Unclosed Anchor at end of file (started line 54)
[ExportError] Unclosed Anchor: [DEF:ExportError:Class] started at line 54
[ExportError] Unclosed Anchor: [DEF:ExportError:Class] started at line 54
[ExportError] Unclosed Anchor: [DEF:ExportError:Class] started at line 54
[ExportError] Unclosed Anchor: [DEF:ExportError:Class] started at line 54
[ExportError] Unclosed Anchor: [DEF:ExportError:Class] started at line 54
[ExportError] Unclosed Anchor: [DEF:ExportError:Class] started at line 54
[DashboardNotFoundError] Unclosed Anchor at end of file (started line 64)
[DashboardNotFoundError] Unclosed Anchor: [DEF:DashboardNotFoundError:Class] started at line 64
[DashboardNotFoundError] Unclosed Anchor: [DEF:DashboardNotFoundError:Class] started at line 64
[DashboardNotFoundError] Unclosed Anchor: [DEF:DashboardNotFoundError:Class] started at line 64
[DashboardNotFoundError] Unclosed Anchor: [DEF:DashboardNotFoundError:Class] started at line 64
[DashboardNotFoundError] Unclosed Anchor: [DEF:DashboardNotFoundError:Class] started at line 64
[DashboardNotFoundError] Unclosed Anchor: [DEF:DashboardNotFoundError:Class] started at line 64
[DashboardNotFoundError] Unclosed Anchor: [DEF:DashboardNotFoundError:Class] started at line 64
[DatasetNotFoundError] Unclosed Anchor at end of file (started line 75)
[DatasetNotFoundError] Unclosed Anchor: [DEF:DatasetNotFoundError:Class] started at line 75
[DatasetNotFoundError] Unclosed Anchor: [DEF:DatasetNotFoundError:Class] started at line 75
[DatasetNotFoundError] Unclosed Anchor: [DEF:DatasetNotFoundError:Class] started at line 75
[DatasetNotFoundError] Unclosed Anchor: [DEF:DatasetNotFoundError:Class] started at line 75
[DatasetNotFoundError] Unclosed Anchor: [DEF:DatasetNotFoundError:Class] started at line 75
[DatasetNotFoundError] Unclosed Anchor: [DEF:DatasetNotFoundError:Class] started at line 75
[DatasetNotFoundError] Unclosed Anchor: [DEF:DatasetNotFoundError:Class] started at line 75
[DatasetNotFoundError] Unclosed Anchor: [DEF:DatasetNotFoundError:Class] started at line 75
[InvalidZipFormatError] Unclosed Anchor at end of file (started line 86)
[InvalidZipFormatError] Unclosed Anchor: [DEF:InvalidZipFormatError:Class] started at line 86
[InvalidZipFormatError] Unclosed Anchor: [DEF:InvalidZipFormatError:Class] started at line 86
[InvalidZipFormatError] Unclosed Anchor: [DEF:InvalidZipFormatError:Class] started at line 86
[InvalidZipFormatError] Unclosed Anchor: [DEF:InvalidZipFormatError:Class] started at line 86
[InvalidZipFormatError] Unclosed Anchor: [DEF:InvalidZipFormatError:Class] started at line 86
[InvalidZipFormatError] Unclosed Anchor: [DEF:InvalidZipFormatError:Class] started at line 86
[InvalidZipFormatError] Unclosed Anchor: [DEF:InvalidZipFormatError:Class] started at line 86
[InvalidZipFormatError] Unclosed Anchor: [DEF:InvalidZipFormatError:Class] started at line 86
[InvalidZipFormatError] Unclosed Anchor: [DEF:InvalidZipFormatError:Class] started at line 86
[NetworkError] Unclosed Anchor at end of file (started line 97)
[NetworkError] Unclosed Anchor: [DEF:NetworkError:Class] started at line 97
[NetworkError] Unclosed Anchor: [DEF:NetworkError:Class] started at line 97
[NetworkError] Unclosed Anchor: [DEF:NetworkError:Class] started at line 97
[NetworkError] Unclosed Anchor: [DEF:NetworkError:Class] started at line 97
[NetworkError] Unclosed Anchor: [DEF:NetworkError:Class] started at line 97
[NetworkError] Unclosed Anchor: [DEF:NetworkError:Class] started at line 97
[NetworkError] Unclosed Anchor: [DEF:NetworkError:Class] started at line 97
[NetworkError] Unclosed Anchor: [DEF:NetworkError:Class] started at line 97
[NetworkError] Unclosed Anchor: [DEF:NetworkError:Class] started at line 97
[NetworkError] Unclosed Anchor: [DEF:NetworkError:Class] started at line 97
[FileOperationError] Unclosed Anchor at end of file (started line 107)
[FileOperationError] Unclosed Anchor: [DEF:FileOperationError:Class] started at line 107
[FileOperationError] Unclosed Anchor: [DEF:FileOperationError:Class] started at line 107
[FileOperationError] Unclosed Anchor: [DEF:FileOperationError:Class] started at line 107
[FileOperationError] Unclosed Anchor: [DEF:FileOperationError:Class] started at line 107
[FileOperationError] Unclosed Anchor: [DEF:FileOperationError:Class] started at line 107
[FileOperationError] Unclosed Anchor: [DEF:FileOperationError:Class] started at line 107
[FileOperationError] Unclosed Anchor: [DEF:FileOperationError:Class] started at line 107
[FileOperationError] Unclosed Anchor: [DEF:FileOperationError:Class] started at line 107
[FileOperationError] Unclosed Anchor: [DEF:FileOperationError:Class] started at line 107
[FileOperationError] Unclosed Anchor: [DEF:FileOperationError:Class] started at line 107
[FileOperationError] Unclosed Anchor: [DEF:FileOperationError:Class] started at line 107
[InvalidFileStructureError] Unclosed Anchor at end of file (started line 114)
[InvalidFileStructureError] Unclosed Anchor: [DEF:InvalidFileStructureError:Class] started at line 114
[InvalidFileStructureError] Unclosed Anchor: [DEF:InvalidFileStructureError:Class] started at line 114
[InvalidFileStructureError] Unclosed Anchor: [DEF:InvalidFileStructureError:Class] started at line 114
[InvalidFileStructureError] Unclosed Anchor: [DEF:InvalidFileStructureError:Class] started at line 114
[InvalidFileStructureError] Unclosed Anchor: [DEF:InvalidFileStructureError:Class] started at line 114
[InvalidFileStructureError] Unclosed Anchor: [DEF:InvalidFileStructureError:Class] started at line 114
[InvalidFileStructureError] Unclosed Anchor: [DEF:InvalidFileStructureError:Class] started at line 114
[InvalidFileStructureError] Unclosed Anchor: [DEF:InvalidFileStructureError:Class] started at line 114
[InvalidFileStructureError] Unclosed Anchor: [DEF:InvalidFileStructureError:Class] started at line 114
[InvalidFileStructureError] Unclosed Anchor: [DEF:InvalidFileStructureError:Class] started at line 114
[InvalidFileStructureError] Unclosed Anchor: [DEF:InvalidFileStructureError:Class] started at line 114
[InvalidFileStructureError] Unclosed Anchor: [DEF:InvalidFileStructureError:Class] started at line 114
[ConfigurationError] Unclosed Anchor at end of file (started line 121)
[ConfigurationError] Unclosed Anchor: [DEF:ConfigurationError:Class] started at line 121
[ConfigurationError] Unclosed Anchor: [DEF:ConfigurationError:Class] started at line 121
[ConfigurationError] Unclosed Anchor: [DEF:ConfigurationError:Class] started at line 121
[ConfigurationError] Unclosed Anchor: [DEF:ConfigurationError:Class] started at line 121
[ConfigurationError] Unclosed Anchor: [DEF:ConfigurationError:Class] started at line 121
[ConfigurationError] Unclosed Anchor: [DEF:ConfigurationError:Class] started at line 121
[ConfigurationError] Unclosed Anchor: [DEF:ConfigurationError:Class] started at line 121
[ConfigurationError] Unclosed Anchor: [DEF:ConfigurationError:Class] started at line 121
[ConfigurationError] Unclosed Anchor: [DEF:ConfigurationError:Class] started at line 121
[ConfigurationError] Unclosed Anchor: [DEF:ConfigurationError:Class] started at line 121
[ConfigurationError] Unclosed Anchor: [DEF:ConfigurationError:Class] started at line 121
[ConfigurationError] Unclosed Anchor: [DEF:ConfigurationError:Class] started at line 121
[ConfigurationError] Unclosed Anchor: [DEF:ConfigurationError:Class] started at line 121 | +| superset_tool/__init__.py | 🔴 0% | [superset_tool] Unclosed Anchor at end of file (started line 1)
[superset_tool] Unclosed Anchor: [DEF:superset_tool:Module] started at line 1 | +| superset_tool/client.py | 🔴 0% | [superset_tool.client] Unclosed Anchor at end of file (started line 1)
[superset_tool.client] Unclosed Anchor: [DEF:superset_tool.client:Module] started at line 1
[SupersetClient] Unclosed Anchor at end of file (started line 27)
[SupersetClient] Unclosed Anchor: [DEF:SupersetClient:Class] started at line 27
[SupersetClient] Unclosed Anchor: [DEF:SupersetClient:Class] started at line 27
[SupersetClient.__init__] Unclosed Anchor at end of file (started line 32)
[SupersetClient.__init__] Unclosed Anchor: [DEF:SupersetClient.__init__:Function] started at line 32
[SupersetClient.__init__] Unclosed Anchor: [DEF:SupersetClient.__init__:Function] started at line 32
[SupersetClient.__init__] Unclosed Anchor: [DEF:SupersetClient.__init__:Function] started at line 32
[SupersetClient._validate_config] Unclosed Anchor at end of file (started line 53)
[SupersetClient._validate_config] Unclosed Anchor: [DEF:SupersetClient._validate_config:Function] started at line 53
[SupersetClient._validate_config] Unclosed Anchor: [DEF:SupersetClient._validate_config:Function] started at line 53
[SupersetClient._validate_config] Unclosed Anchor: [DEF:SupersetClient._validate_config:Function] started at line 53
[SupersetClient._validate_config] Unclosed Anchor: [DEF:SupersetClient._validate_config:Function] started at line 53
[SupersetClient.headers] Unclosed Anchor at end of file (started line 67)
[SupersetClient.headers] Unclosed Anchor: [DEF:SupersetClient.headers:Function] started at line 67
[SupersetClient.headers] Unclosed Anchor: [DEF:SupersetClient.headers:Function] started at line 67
[SupersetClient.headers] Unclosed Anchor: [DEF:SupersetClient.headers:Function] started at line 67
[SupersetClient.headers] Unclosed Anchor: [DEF:SupersetClient.headers:Function] started at line 67
[SupersetClient.headers] Unclosed Anchor: [DEF:SupersetClient.headers:Function] started at line 67
[SupersetClient.get_dashboards] Unclosed Anchor at end of file (started line 74)
[SupersetClient.get_dashboards] Unclosed Anchor: [DEF:SupersetClient.get_dashboards:Function] started at line 74
[SupersetClient.get_dashboards] Unclosed Anchor: [DEF:SupersetClient.get_dashboards:Function] started at line 74
[SupersetClient.get_dashboards] Unclosed Anchor: [DEF:SupersetClient.get_dashboards:Function] started at line 74
[SupersetClient.get_dashboards] Unclosed Anchor: [DEF:SupersetClient.get_dashboards:Function] started at line 74
[SupersetClient.get_dashboards] Unclosed Anchor: [DEF:SupersetClient.get_dashboards:Function] started at line 74
[SupersetClient.get_dashboards] Unclosed Anchor: [DEF:SupersetClient.get_dashboards:Function] started at line 74
[SupersetClient.export_dashboard] Unclosed Anchor at end of file (started line 98)
[SupersetClient.export_dashboard] Unclosed Anchor: [DEF:SupersetClient.export_dashboard:Function] started at line 98
[SupersetClient.export_dashboard] Unclosed Anchor: [DEF:SupersetClient.export_dashboard:Function] started at line 98
[SupersetClient.export_dashboard] Unclosed Anchor: [DEF:SupersetClient.export_dashboard:Function] started at line 98
[SupersetClient.export_dashboard] Unclosed Anchor: [DEF:SupersetClient.export_dashboard:Function] started at line 98
[SupersetClient.export_dashboard] Unclosed Anchor: [DEF:SupersetClient.export_dashboard:Function] started at line 98
[SupersetClient.export_dashboard] Unclosed Anchor: [DEF:SupersetClient.export_dashboard:Function] started at line 98
[SupersetClient.export_dashboard] Unclosed Anchor: [DEF:SupersetClient.export_dashboard:Function] started at line 98
[SupersetClient.import_dashboard] Unclosed Anchor at end of file (started line 123)
[SupersetClient.import_dashboard] Unclosed Anchor: [DEF:SupersetClient.import_dashboard:Function] started at line 123
[SupersetClient.import_dashboard] Unclosed Anchor: [DEF:SupersetClient.import_dashboard:Function] started at line 123
[SupersetClient.import_dashboard] Unclosed Anchor: [DEF:SupersetClient.import_dashboard:Function] started at line 123
[SupersetClient.import_dashboard] Unclosed Anchor: [DEF:SupersetClient.import_dashboard:Function] started at line 123
[SupersetClient.import_dashboard] Unclosed Anchor: [DEF:SupersetClient.import_dashboard:Function] started at line 123
[SupersetClient.import_dashboard] Unclosed Anchor: [DEF:SupersetClient.import_dashboard:Function] started at line 123
[SupersetClient.import_dashboard] Unclosed Anchor: [DEF:SupersetClient.import_dashboard:Function] started at line 123
[SupersetClient.import_dashboard] Unclosed Anchor: [DEF:SupersetClient.import_dashboard:Function] started at line 123
[SupersetClient._resolve_target_id_for_delete] Unclosed Anchor at end of file (started line 157)
[SupersetClient._resolve_target_id_for_delete] Unclosed Anchor: [DEF:SupersetClient._resolve_target_id_for_delete:Function] started at line 157
[SupersetClient._resolve_target_id_for_delete] Unclosed Anchor: [DEF:SupersetClient._resolve_target_id_for_delete:Function] started at line 157
[SupersetClient._resolve_target_id_for_delete] Unclosed Anchor: [DEF:SupersetClient._resolve_target_id_for_delete:Function] started at line 157
[SupersetClient._resolve_target_id_for_delete] Unclosed Anchor: [DEF:SupersetClient._resolve_target_id_for_delete:Function] started at line 157
[SupersetClient._resolve_target_id_for_delete] Unclosed Anchor: [DEF:SupersetClient._resolve_target_id_for_delete:Function] started at line 157
[SupersetClient._resolve_target_id_for_delete] Unclosed Anchor: [DEF:SupersetClient._resolve_target_id_for_delete:Function] started at line 157
[SupersetClient._resolve_target_id_for_delete] Unclosed Anchor: [DEF:SupersetClient._resolve_target_id_for_delete:Function] started at line 157
[SupersetClient._resolve_target_id_for_delete] Unclosed Anchor: [DEF:SupersetClient._resolve_target_id_for_delete:Function] started at line 157
[SupersetClient._resolve_target_id_for_delete] Unclosed Anchor: [DEF:SupersetClient._resolve_target_id_for_delete:Function] started at line 157
[SupersetClient._do_import] Unclosed Anchor at end of file (started line 182)
[SupersetClient._do_import] Unclosed Anchor: [DEF:SupersetClient._do_import:Function] started at line 182
[SupersetClient._do_import] Unclosed Anchor: [DEF:SupersetClient._do_import:Function] started at line 182
[SupersetClient._do_import] Unclosed Anchor: [DEF:SupersetClient._do_import:Function] started at line 182
[SupersetClient._do_import] Unclosed Anchor: [DEF:SupersetClient._do_import:Function] started at line 182
[SupersetClient._do_import] Unclosed Anchor: [DEF:SupersetClient._do_import:Function] started at line 182
[SupersetClient._do_import] Unclosed Anchor: [DEF:SupersetClient._do_import:Function] started at line 182
[SupersetClient._do_import] Unclosed Anchor: [DEF:SupersetClient._do_import:Function] started at line 182
[SupersetClient._do_import] Unclosed Anchor: [DEF:SupersetClient._do_import:Function] started at line 182
[SupersetClient._do_import] Unclosed Anchor: [DEF:SupersetClient._do_import:Function] started at line 182
[SupersetClient._do_import] Unclosed Anchor: [DEF:SupersetClient._do_import:Function] started at line 182
[SupersetClient.delete_dashboard] Unclosed Anchor at end of file (started line 205)
[SupersetClient.delete_dashboard] Unclosed Anchor: [DEF:SupersetClient.delete_dashboard:Function] started at line 205
[SupersetClient.delete_dashboard] Unclosed Anchor: [DEF:SupersetClient.delete_dashboard:Function] started at line 205
[SupersetClient.delete_dashboard] Unclosed Anchor: [DEF:SupersetClient.delete_dashboard:Function] started at line 205
[SupersetClient.delete_dashboard] Unclosed Anchor: [DEF:SupersetClient.delete_dashboard:Function] started at line 205
[SupersetClient.delete_dashboard] Unclosed Anchor: [DEF:SupersetClient.delete_dashboard:Function] started at line 205
[SupersetClient.delete_dashboard] Unclosed Anchor: [DEF:SupersetClient.delete_dashboard:Function] started at line 205
[SupersetClient.delete_dashboard] Unclosed Anchor: [DEF:SupersetClient.delete_dashboard:Function] started at line 205
[SupersetClient.delete_dashboard] Unclosed Anchor: [DEF:SupersetClient.delete_dashboard:Function] started at line 205
[SupersetClient.delete_dashboard] Unclosed Anchor: [DEF:SupersetClient.delete_dashboard:Function] started at line 205
[SupersetClient.delete_dashboard] Unclosed Anchor: [DEF:SupersetClient.delete_dashboard:Function] started at line 205
[SupersetClient.delete_dashboard] Unclosed Anchor: [DEF:SupersetClient.delete_dashboard:Function] started at line 205
[SupersetClient._extract_dashboard_id_from_zip] Unclosed Anchor at end of file (started line 223)
[SupersetClient._extract_dashboard_id_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_id_from_zip:Function] started at line 223
[SupersetClient._extract_dashboard_id_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_id_from_zip:Function] started at line 223
[SupersetClient._extract_dashboard_id_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_id_from_zip:Function] started at line 223
[SupersetClient._extract_dashboard_id_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_id_from_zip:Function] started at line 223
[SupersetClient._extract_dashboard_id_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_id_from_zip:Function] started at line 223
[SupersetClient._extract_dashboard_id_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_id_from_zip:Function] started at line 223
[SupersetClient._extract_dashboard_id_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_id_from_zip:Function] started at line 223
[SupersetClient._extract_dashboard_id_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_id_from_zip:Function] started at line 223
[SupersetClient._extract_dashboard_id_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_id_from_zip:Function] started at line 223
[SupersetClient._extract_dashboard_id_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_id_from_zip:Function] started at line 223
[SupersetClient._extract_dashboard_id_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_id_from_zip:Function] started at line 223
[SupersetClient._extract_dashboard_id_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_id_from_zip:Function] started at line 223
[SupersetClient._extract_dashboard_slug_from_zip] Unclosed Anchor at end of file (started line 246)
[SupersetClient._extract_dashboard_slug_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_slug_from_zip:Function] started at line 246
[SupersetClient._extract_dashboard_slug_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_slug_from_zip:Function] started at line 246
[SupersetClient._extract_dashboard_slug_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_slug_from_zip:Function] started at line 246
[SupersetClient._extract_dashboard_slug_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_slug_from_zip:Function] started at line 246
[SupersetClient._extract_dashboard_slug_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_slug_from_zip:Function] started at line 246
[SupersetClient._extract_dashboard_slug_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_slug_from_zip:Function] started at line 246
[SupersetClient._extract_dashboard_slug_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_slug_from_zip:Function] started at line 246
[SupersetClient._extract_dashboard_slug_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_slug_from_zip:Function] started at line 246
[SupersetClient._extract_dashboard_slug_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_slug_from_zip:Function] started at line 246
[SupersetClient._extract_dashboard_slug_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_slug_from_zip:Function] started at line 246
[SupersetClient._extract_dashboard_slug_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_slug_from_zip:Function] started at line 246
[SupersetClient._extract_dashboard_slug_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_slug_from_zip:Function] started at line 246
[SupersetClient._extract_dashboard_slug_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_slug_from_zip:Function] started at line 246
[SupersetClient._validate_export_response] Unclosed Anchor at end of file (started line 269)
[SupersetClient._validate_export_response] Unclosed Anchor: [DEF:SupersetClient._validate_export_response:Function] started at line 269
[SupersetClient._validate_export_response] Unclosed Anchor: [DEF:SupersetClient._validate_export_response:Function] started at line 269
[SupersetClient._validate_export_response] Unclosed Anchor: [DEF:SupersetClient._validate_export_response:Function] started at line 269
[SupersetClient._validate_export_response] Unclosed Anchor: [DEF:SupersetClient._validate_export_response:Function] started at line 269
[SupersetClient._validate_export_response] Unclosed Anchor: [DEF:SupersetClient._validate_export_response:Function] started at line 269
[SupersetClient._validate_export_response] Unclosed Anchor: [DEF:SupersetClient._validate_export_response:Function] started at line 269
[SupersetClient._validate_export_response] Unclosed Anchor: [DEF:SupersetClient._validate_export_response:Function] started at line 269
[SupersetClient._validate_export_response] Unclosed Anchor: [DEF:SupersetClient._validate_export_response:Function] started at line 269
[SupersetClient._validate_export_response] Unclosed Anchor: [DEF:SupersetClient._validate_export_response:Function] started at line 269
[SupersetClient._validate_export_response] Unclosed Anchor: [DEF:SupersetClient._validate_export_response:Function] started at line 269
[SupersetClient._validate_export_response] Unclosed Anchor: [DEF:SupersetClient._validate_export_response:Function] started at line 269
[SupersetClient._validate_export_response] Unclosed Anchor: [DEF:SupersetClient._validate_export_response:Function] started at line 269
[SupersetClient._validate_export_response] Unclosed Anchor: [DEF:SupersetClient._validate_export_response:Function] started at line 269
[SupersetClient._validate_export_response] Unclosed Anchor: [DEF:SupersetClient._validate_export_response:Function] started at line 269
[SupersetClient._resolve_export_filename] Unclosed Anchor at end of file (started line 285)
[SupersetClient._resolve_export_filename] Unclosed Anchor: [DEF:SupersetClient._resolve_export_filename:Function] started at line 285
[SupersetClient._resolve_export_filename] Unclosed Anchor: [DEF:SupersetClient._resolve_export_filename:Function] started at line 285
[SupersetClient._resolve_export_filename] Unclosed Anchor: [DEF:SupersetClient._resolve_export_filename:Function] started at line 285
[SupersetClient._resolve_export_filename] Unclosed Anchor: [DEF:SupersetClient._resolve_export_filename:Function] started at line 285
[SupersetClient._resolve_export_filename] Unclosed Anchor: [DEF:SupersetClient._resolve_export_filename:Function] started at line 285
[SupersetClient._resolve_export_filename] Unclosed Anchor: [DEF:SupersetClient._resolve_export_filename:Function] started at line 285
[SupersetClient._resolve_export_filename] Unclosed Anchor: [DEF:SupersetClient._resolve_export_filename:Function] started at line 285
[SupersetClient._resolve_export_filename] Unclosed Anchor: [DEF:SupersetClient._resolve_export_filename:Function] started at line 285
[SupersetClient._resolve_export_filename] Unclosed Anchor: [DEF:SupersetClient._resolve_export_filename:Function] started at line 285
[SupersetClient._resolve_export_filename] Unclosed Anchor: [DEF:SupersetClient._resolve_export_filename:Function] started at line 285
[SupersetClient._resolve_export_filename] Unclosed Anchor: [DEF:SupersetClient._resolve_export_filename:Function] started at line 285
[SupersetClient._resolve_export_filename] Unclosed Anchor: [DEF:SupersetClient._resolve_export_filename:Function] started at line 285
[SupersetClient._resolve_export_filename] Unclosed Anchor: [DEF:SupersetClient._resolve_export_filename:Function] started at line 285
[SupersetClient._resolve_export_filename] Unclosed Anchor: [DEF:SupersetClient._resolve_export_filename:Function] started at line 285
[SupersetClient._resolve_export_filename] Unclosed Anchor: [DEF:SupersetClient._resolve_export_filename:Function] started at line 285
[SupersetClient._validate_query_params] Unclosed Anchor at end of file (started line 303)
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._fetch_total_object_count] Unclosed Anchor at end of file (started line 315)
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_all_pages] Unclosed Anchor at end of file (started line 331)
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._validate_import_file] Unclosed Anchor at end of file (started line 345)
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient.get_datasets] Unclosed Anchor at end of file (started line 361)
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_databases] Unclosed Anchor at end of file (started line 384)
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_dataset] Unclosed Anchor at end of file (started line 408)
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_database] Unclosed Anchor at end of file (started line 425)
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.update_dataset] Unclosed Anchor at end of file (started line 442)
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442 | +| superset_tool/models.py | 🔴 0% | [superset_tool.models] Unclosed Anchor at end of file (started line 1)
[superset_tool.models] Unclosed Anchor: [DEF:superset_tool.models:Module] started at line 1
[SupersetConfig] Unclosed Anchor at end of file (started line 17)
[SupersetConfig] Unclosed Anchor: [DEF:SupersetConfig:Class] started at line 17
[SupersetConfig] Unclosed Anchor: [DEF:SupersetConfig:Class] started at line 17
[SupersetConfig.validate_auth] Unclosed Anchor at end of file (started line 28)
[SupersetConfig.validate_auth] Unclosed Anchor: [DEF:SupersetConfig.validate_auth:Function] started at line 28
[SupersetConfig.validate_auth] Unclosed Anchor: [DEF:SupersetConfig.validate_auth:Function] started at line 28
[SupersetConfig.validate_auth] Unclosed Anchor: [DEF:SupersetConfig.validate_auth:Function] started at line 28
[SupersetConfig.normalize_base_url] Unclosed Anchor at end of file (started line 42)
[SupersetConfig.normalize_base_url] Unclosed Anchor: [DEF:SupersetConfig.normalize_base_url:Function] started at line 42
[SupersetConfig.normalize_base_url] Unclosed Anchor: [DEF:SupersetConfig.normalize_base_url:Function] started at line 42
[SupersetConfig.normalize_base_url] Unclosed Anchor: [DEF:SupersetConfig.normalize_base_url:Function] started at line 42
[SupersetConfig.normalize_base_url] Unclosed Anchor: [DEF:SupersetConfig.normalize_base_url:Function] started at line 42
[DatabaseConfig] Unclosed Anchor at end of file (started line 63)
[DatabaseConfig] Unclosed Anchor: [DEF:DatabaseConfig:Class] started at line 63
[DatabaseConfig] Unclosed Anchor: [DEF:DatabaseConfig:Class] started at line 63
[DatabaseConfig] Unclosed Anchor: [DEF:DatabaseConfig:Class] started at line 63
[DatabaseConfig] Unclosed Anchor: [DEF:DatabaseConfig:Class] started at line 63
[DatabaseConfig] Unclosed Anchor: [DEF:DatabaseConfig:Class] started at line 63
[DatabaseConfig.validate_config] Unclosed Anchor at end of file (started line 70)
[DatabaseConfig.validate_config] Unclosed Anchor: [DEF:DatabaseConfig.validate_config:Function] started at line 70
[DatabaseConfig.validate_config] Unclosed Anchor: [DEF:DatabaseConfig.validate_config:Function] started at line 70
[DatabaseConfig.validate_config] Unclosed Anchor: [DEF:DatabaseConfig.validate_config:Function] started at line 70
[DatabaseConfig.validate_config] Unclosed Anchor: [DEF:DatabaseConfig.validate_config:Function] started at line 70
[DatabaseConfig.validate_config] Unclosed Anchor: [DEF:DatabaseConfig.validate_config:Function] started at line 70
[DatabaseConfig.validate_config] Unclosed Anchor: [DEF:DatabaseConfig.validate_config:Function] started at line 70 | +| superset_tool/utils/logger.py | 🔴 0% | [superset_tool.utils.logger] Unclosed Anchor at end of file (started line 1)
[superset_tool.utils.logger] Unclosed Anchor: [DEF:superset_tool.utils.logger:Module] started at line 1
[SupersetLogger] Unclosed Anchor at end of file (started line 19)
[SupersetLogger] Unclosed Anchor: [DEF:SupersetLogger:Class] started at line 19
[SupersetLogger] Unclosed Anchor: [DEF:SupersetLogger:Class] started at line 19
[SupersetLogger.__init__] Unclosed Anchor at end of file (started line 23)
[SupersetLogger.__init__] Unclosed Anchor: [DEF:SupersetLogger.__init__:Function] started at line 23
[SupersetLogger.__init__] Unclosed Anchor: [DEF:SupersetLogger.__init__:Function] started at line 23
[SupersetLogger.__init__] Unclosed Anchor: [DEF:SupersetLogger.__init__:Function] started at line 23
[SupersetLogger._log] Unclosed Anchor at end of file (started line 58)
[SupersetLogger._log] Unclosed Anchor: [DEF:SupersetLogger._log:Function] started at line 58
[SupersetLogger._log] Unclosed Anchor: [DEF:SupersetLogger._log:Function] started at line 58
[SupersetLogger._log] Unclosed Anchor: [DEF:SupersetLogger._log:Function] started at line 58
[SupersetLogger._log] Unclosed Anchor: [DEF:SupersetLogger._log:Function] started at line 58
[SupersetLogger.info] Unclosed Anchor at end of file (started line 69)
[SupersetLogger.info] Unclosed Anchor: [DEF:SupersetLogger.info:Function] started at line 69
[SupersetLogger.info] Unclosed Anchor: [DEF:SupersetLogger.info:Function] started at line 69
[SupersetLogger.info] Unclosed Anchor: [DEF:SupersetLogger.info:Function] started at line 69
[SupersetLogger.info] Unclosed Anchor: [DEF:SupersetLogger.info:Function] started at line 69
[SupersetLogger.info] Unclosed Anchor: [DEF:SupersetLogger.info:Function] started at line 69
[SupersetLogger.debug] Unclosed Anchor at end of file (started line 75)
[SupersetLogger.debug] Unclosed Anchor: [DEF:SupersetLogger.debug:Function] started at line 75
[SupersetLogger.debug] Unclosed Anchor: [DEF:SupersetLogger.debug:Function] started at line 75
[SupersetLogger.debug] Unclosed Anchor: [DEF:SupersetLogger.debug:Function] started at line 75
[SupersetLogger.debug] Unclosed Anchor: [DEF:SupersetLogger.debug:Function] started at line 75
[SupersetLogger.debug] Unclosed Anchor: [DEF:SupersetLogger.debug:Function] started at line 75
[SupersetLogger.debug] Unclosed Anchor: [DEF:SupersetLogger.debug:Function] started at line 75
[SupersetLogger.warning] Unclosed Anchor at end of file (started line 81)
[SupersetLogger.warning] Unclosed Anchor: [DEF:SupersetLogger.warning:Function] started at line 81
[SupersetLogger.warning] Unclosed Anchor: [DEF:SupersetLogger.warning:Function] started at line 81
[SupersetLogger.warning] Unclosed Anchor: [DEF:SupersetLogger.warning:Function] started at line 81
[SupersetLogger.warning] Unclosed Anchor: [DEF:SupersetLogger.warning:Function] started at line 81
[SupersetLogger.warning] Unclosed Anchor: [DEF:SupersetLogger.warning:Function] started at line 81
[SupersetLogger.warning] Unclosed Anchor: [DEF:SupersetLogger.warning:Function] started at line 81
[SupersetLogger.warning] Unclosed Anchor: [DEF:SupersetLogger.warning:Function] started at line 81
[SupersetLogger.error] Unclosed Anchor at end of file (started line 87)
[SupersetLogger.error] Unclosed Anchor: [DEF:SupersetLogger.error:Function] started at line 87
[SupersetLogger.error] Unclosed Anchor: [DEF:SupersetLogger.error:Function] started at line 87
[SupersetLogger.error] Unclosed Anchor: [DEF:SupersetLogger.error:Function] started at line 87
[SupersetLogger.error] Unclosed Anchor: [DEF:SupersetLogger.error:Function] started at line 87
[SupersetLogger.error] Unclosed Anchor: [DEF:SupersetLogger.error:Function] started at line 87
[SupersetLogger.error] Unclosed Anchor: [DEF:SupersetLogger.error:Function] started at line 87
[SupersetLogger.error] Unclosed Anchor: [DEF:SupersetLogger.error:Function] started at line 87
[SupersetLogger.error] Unclosed Anchor: [DEF:SupersetLogger.error:Function] started at line 87
[SupersetLogger.critical] Unclosed Anchor at end of file (started line 93)
[SupersetLogger.critical] Unclosed Anchor: [DEF:SupersetLogger.critical:Function] started at line 93
[SupersetLogger.critical] Unclosed Anchor: [DEF:SupersetLogger.critical:Function] started at line 93
[SupersetLogger.critical] Unclosed Anchor: [DEF:SupersetLogger.critical:Function] started at line 93
[SupersetLogger.critical] Unclosed Anchor: [DEF:SupersetLogger.critical:Function] started at line 93
[SupersetLogger.critical] Unclosed Anchor: [DEF:SupersetLogger.critical:Function] started at line 93
[SupersetLogger.critical] Unclosed Anchor: [DEF:SupersetLogger.critical:Function] started at line 93
[SupersetLogger.critical] Unclosed Anchor: [DEF:SupersetLogger.critical:Function] started at line 93
[SupersetLogger.critical] Unclosed Anchor: [DEF:SupersetLogger.critical:Function] started at line 93
[SupersetLogger.critical] Unclosed Anchor: [DEF:SupersetLogger.critical:Function] started at line 93
[SupersetLogger.exception] Unclosed Anchor at end of file (started line 99)
[SupersetLogger.exception] Unclosed Anchor: [DEF:SupersetLogger.exception:Function] started at line 99
[SupersetLogger.exception] Unclosed Anchor: [DEF:SupersetLogger.exception:Function] started at line 99
[SupersetLogger.exception] Unclosed Anchor: [DEF:SupersetLogger.exception:Function] started at line 99
[SupersetLogger.exception] Unclosed Anchor: [DEF:SupersetLogger.exception:Function] started at line 99
[SupersetLogger.exception] Unclosed Anchor: [DEF:SupersetLogger.exception:Function] started at line 99
[SupersetLogger.exception] Unclosed Anchor: [DEF:SupersetLogger.exception:Function] started at line 99
[SupersetLogger.exception] Unclosed Anchor: [DEF:SupersetLogger.exception:Function] started at line 99
[SupersetLogger.exception] Unclosed Anchor: [DEF:SupersetLogger.exception:Function] started at line 99
[SupersetLogger.exception] Unclosed Anchor: [DEF:SupersetLogger.exception:Function] started at line 99
[SupersetLogger.exception] Unclosed Anchor: [DEF:SupersetLogger.exception:Function] started at line 99 | +| superset_tool/utils/network.py | 🔴 0% | [superset_tool.utils.network] Unclosed Anchor at end of file (started line 1)
[superset_tool.utils.network] Unclosed Anchor: [DEF:superset_tool.utils.network:Module] started at line 1
[APIClient] Unclosed Anchor at end of file (started line 24)
[APIClient] Unclosed Anchor: [DEF:APIClient:Class] started at line 24
[APIClient] Unclosed Anchor: [DEF:APIClient:Class] started at line 24
[APIClient.__init__] Unclosed Anchor at end of file (started line 29)
[APIClient.__init__] Unclosed Anchor: [DEF:APIClient.__init__:Function] started at line 29
[APIClient.__init__] Unclosed Anchor: [DEF:APIClient.__init__:Function] started at line 29
[APIClient.__init__] Unclosed Anchor: [DEF:APIClient.__init__:Function] started at line 29
[APIClient._init_session] Unclosed Anchor at end of file (started line 47)
[APIClient._init_session] Unclosed Anchor: [DEF:APIClient._init_session:Function] started at line 47
[APIClient._init_session] Unclosed Anchor: [DEF:APIClient._init_session:Function] started at line 47
[APIClient._init_session] Unclosed Anchor: [DEF:APIClient._init_session:Function] started at line 47
[APIClient._init_session] Unclosed Anchor: [DEF:APIClient._init_session:Function] started at line 47
[APIClient.authenticate] Unclosed Anchor at end of file (started line 63)
[APIClient.authenticate] Unclosed Anchor: [DEF:APIClient.authenticate:Function] started at line 63
[APIClient.authenticate] Unclosed Anchor: [DEF:APIClient.authenticate:Function] started at line 63
[APIClient.authenticate] Unclosed Anchor: [DEF:APIClient.authenticate:Function] started at line 63
[APIClient.authenticate] Unclosed Anchor: [DEF:APIClient.authenticate:Function] started at line 63
[APIClient.authenticate] Unclosed Anchor: [DEF:APIClient.authenticate:Function] started at line 63
[APIClient.headers] Unclosed Anchor at end of file (started line 92)
[APIClient.headers] Unclosed Anchor: [DEF:APIClient.headers:Function] started at line 92
[APIClient.headers] Unclosed Anchor: [DEF:APIClient.headers:Function] started at line 92
[APIClient.headers] Unclosed Anchor: [DEF:APIClient.headers:Function] started at line 92
[APIClient.headers] Unclosed Anchor: [DEF:APIClient.headers:Function] started at line 92
[APIClient.headers] Unclosed Anchor: [DEF:APIClient.headers:Function] started at line 92
[APIClient.headers] Unclosed Anchor: [DEF:APIClient.headers:Function] started at line 92
[APIClient.request] Unclosed Anchor at end of file (started line 103)
[APIClient.request] Unclosed Anchor: [DEF:APIClient.request:Function] started at line 103
[APIClient.request] Unclosed Anchor: [DEF:APIClient.request:Function] started at line 103
[APIClient.request] Unclosed Anchor: [DEF:APIClient.request:Function] started at line 103
[APIClient.request] Unclosed Anchor: [DEF:APIClient.request:Function] started at line 103
[APIClient.request] Unclosed Anchor: [DEF:APIClient.request:Function] started at line 103
[APIClient.request] Unclosed Anchor: [DEF:APIClient.request:Function] started at line 103
[APIClient.request] Unclosed Anchor: [DEF:APIClient.request:Function] started at line 103
[APIClient._handle_http_error] Unclosed Anchor at end of file (started line 126)
[APIClient._handle_http_error] Unclosed Anchor: [DEF:APIClient._handle_http_error:Function] started at line 126
[APIClient._handle_http_error] Unclosed Anchor: [DEF:APIClient._handle_http_error:Function] started at line 126
[APIClient._handle_http_error] Unclosed Anchor: [DEF:APIClient._handle_http_error:Function] started at line 126
[APIClient._handle_http_error] Unclosed Anchor: [DEF:APIClient._handle_http_error:Function] started at line 126
[APIClient._handle_http_error] Unclosed Anchor: [DEF:APIClient._handle_http_error:Function] started at line 126
[APIClient._handle_http_error] Unclosed Anchor: [DEF:APIClient._handle_http_error:Function] started at line 126
[APIClient._handle_http_error] Unclosed Anchor: [DEF:APIClient._handle_http_error:Function] started at line 126
[APIClient._handle_http_error] Unclosed Anchor: [DEF:APIClient._handle_http_error:Function] started at line 126
[APIClient._handle_network_error] Unclosed Anchor at end of file (started line 138)
[APIClient._handle_network_error] Unclosed Anchor: [DEF:APIClient._handle_network_error:Function] started at line 138
[APIClient._handle_network_error] Unclosed Anchor: [DEF:APIClient._handle_network_error:Function] started at line 138
[APIClient._handle_network_error] Unclosed Anchor: [DEF:APIClient._handle_network_error:Function] started at line 138
[APIClient._handle_network_error] Unclosed Anchor: [DEF:APIClient._handle_network_error:Function] started at line 138
[APIClient._handle_network_error] Unclosed Anchor: [DEF:APIClient._handle_network_error:Function] started at line 138
[APIClient._handle_network_error] Unclosed Anchor: [DEF:APIClient._handle_network_error:Function] started at line 138
[APIClient._handle_network_error] Unclosed Anchor: [DEF:APIClient._handle_network_error:Function] started at line 138
[APIClient._handle_network_error] Unclosed Anchor: [DEF:APIClient._handle_network_error:Function] started at line 138
[APIClient._handle_network_error] Unclosed Anchor: [DEF:APIClient._handle_network_error:Function] started at line 138
[APIClient.upload_file] Unclosed Anchor at end of file (started line 149)
[APIClient.upload_file] Unclosed Anchor: [DEF:APIClient.upload_file:Function] started at line 149
[APIClient.upload_file] Unclosed Anchor: [DEF:APIClient.upload_file:Function] started at line 149
[APIClient.upload_file] Unclosed Anchor: [DEF:APIClient.upload_file:Function] started at line 149
[APIClient.upload_file] Unclosed Anchor: [DEF:APIClient.upload_file:Function] started at line 149
[APIClient.upload_file] Unclosed Anchor: [DEF:APIClient.upload_file:Function] started at line 149
[APIClient.upload_file] Unclosed Anchor: [DEF:APIClient.upload_file:Function] started at line 149
[APIClient.upload_file] Unclosed Anchor: [DEF:APIClient.upload_file:Function] started at line 149
[APIClient.upload_file] Unclosed Anchor: [DEF:APIClient.upload_file:Function] started at line 149
[APIClient.upload_file] Unclosed Anchor: [DEF:APIClient.upload_file:Function] started at line 149
[APIClient.upload_file] Unclosed Anchor: [DEF:APIClient.upload_file:Function] started at line 149
[APIClient._perform_upload] Unclosed Anchor at end of file (started line 175)
[APIClient._perform_upload] Unclosed Anchor: [DEF:APIClient._perform_upload:Function] started at line 175
[APIClient._perform_upload] Unclosed Anchor: [DEF:APIClient._perform_upload:Function] started at line 175
[APIClient._perform_upload] Unclosed Anchor: [DEF:APIClient._perform_upload:Function] started at line 175
[APIClient._perform_upload] Unclosed Anchor: [DEF:APIClient._perform_upload:Function] started at line 175
[APIClient._perform_upload] Unclosed Anchor: [DEF:APIClient._perform_upload:Function] started at line 175
[APIClient._perform_upload] Unclosed Anchor: [DEF:APIClient._perform_upload:Function] started at line 175
[APIClient._perform_upload] Unclosed Anchor: [DEF:APIClient._perform_upload:Function] started at line 175
[APIClient._perform_upload] Unclosed Anchor: [DEF:APIClient._perform_upload:Function] started at line 175
[APIClient._perform_upload] Unclosed Anchor: [DEF:APIClient._perform_upload:Function] started at line 175
[APIClient._perform_upload] Unclosed Anchor: [DEF:APIClient._perform_upload:Function] started at line 175
[APIClient._perform_upload] Unclosed Anchor: [DEF:APIClient._perform_upload:Function] started at line 175
[APIClient.fetch_paginated_count] Unclosed Anchor at end of file (started line 201)
[APIClient.fetch_paginated_count] Unclosed Anchor: [DEF:APIClient.fetch_paginated_count:Function] started at line 201
[APIClient.fetch_paginated_count] Unclosed Anchor: [DEF:APIClient.fetch_paginated_count:Function] started at line 201
[APIClient.fetch_paginated_count] Unclosed Anchor: [DEF:APIClient.fetch_paginated_count:Function] started at line 201
[APIClient.fetch_paginated_count] Unclosed Anchor: [DEF:APIClient.fetch_paginated_count:Function] started at line 201
[APIClient.fetch_paginated_count] Unclosed Anchor: [DEF:APIClient.fetch_paginated_count:Function] started at line 201
[APIClient.fetch_paginated_count] Unclosed Anchor: [DEF:APIClient.fetch_paginated_count:Function] started at line 201
[APIClient.fetch_paginated_count] Unclosed Anchor: [DEF:APIClient.fetch_paginated_count:Function] started at line 201
[APIClient.fetch_paginated_count] Unclosed Anchor: [DEF:APIClient.fetch_paginated_count:Function] started at line 201
[APIClient.fetch_paginated_count] Unclosed Anchor: [DEF:APIClient.fetch_paginated_count:Function] started at line 201
[APIClient.fetch_paginated_count] Unclosed Anchor: [DEF:APIClient.fetch_paginated_count:Function] started at line 201
[APIClient.fetch_paginated_count] Unclosed Anchor: [DEF:APIClient.fetch_paginated_count:Function] started at line 201
[APIClient.fetch_paginated_count] Unclosed Anchor: [DEF:APIClient.fetch_paginated_count:Function] started at line 201
[APIClient.fetch_paginated_data] Unclosed Anchor at end of file (started line 212)
[APIClient.fetch_paginated_data] Unclosed Anchor: [DEF:APIClient.fetch_paginated_data:Function] started at line 212
[APIClient.fetch_paginated_data] Unclosed Anchor: [DEF:APIClient.fetch_paginated_data:Function] started at line 212
[APIClient.fetch_paginated_data] Unclosed Anchor: [DEF:APIClient.fetch_paginated_data:Function] started at line 212
[APIClient.fetch_paginated_data] Unclosed Anchor: [DEF:APIClient.fetch_paginated_data:Function] started at line 212
[APIClient.fetch_paginated_data] Unclosed Anchor: [DEF:APIClient.fetch_paginated_data:Function] started at line 212
[APIClient.fetch_paginated_data] Unclosed Anchor: [DEF:APIClient.fetch_paginated_data:Function] started at line 212
[APIClient.fetch_paginated_data] Unclosed Anchor: [DEF:APIClient.fetch_paginated_data:Function] started at line 212
[APIClient.fetch_paginated_data] Unclosed Anchor: [DEF:APIClient.fetch_paginated_data:Function] started at line 212
[APIClient.fetch_paginated_data] Unclosed Anchor: [DEF:APIClient.fetch_paginated_data:Function] started at line 212
[APIClient.fetch_paginated_data] Unclosed Anchor: [DEF:APIClient.fetch_paginated_data:Function] started at line 212
[APIClient.fetch_paginated_data] Unclosed Anchor: [DEF:APIClient.fetch_paginated_data:Function] started at line 212
[APIClient.fetch_paginated_data] Unclosed Anchor: [DEF:APIClient.fetch_paginated_data:Function] started at line 212
[APIClient.fetch_paginated_data] Unclosed Anchor: [DEF:APIClient.fetch_paginated_data:Function] started at line 212 | +| superset_tool/utils/whiptail_fallback.py | 🔴 0% | [superset_tool.utils.whiptail_fallback] Unclosed Anchor at end of file (started line 1)
[superset_tool.utils.whiptail_fallback] Unclosed Anchor: [DEF:superset_tool.utils.whiptail_fallback:Module] started at line 1
[menu] Unclosed Anchor at end of file (started line 13)
[menu] Unclosed Anchor: [DEF:menu:Function] started at line 13
[menu] Unclosed Anchor: [DEF:menu:Function] started at line 13
[checklist] Unclosed Anchor at end of file (started line 31)
[checklist] Unclosed Anchor: [DEF:checklist:Function] started at line 31
[checklist] Unclosed Anchor: [DEF:checklist:Function] started at line 31
[checklist] Unclosed Anchor: [DEF:checklist:Function] started at line 31
[yesno] Unclosed Anchor at end of file (started line 51)
[yesno] Unclosed Anchor: [DEF:yesno:Function] started at line 51
[yesno] Unclosed Anchor: [DEF:yesno:Function] started at line 51
[yesno] Unclosed Anchor: [DEF:yesno:Function] started at line 51
[yesno] Unclosed Anchor: [DEF:yesno:Function] started at line 51
[msgbox] Unclosed Anchor at end of file (started line 61)
[msgbox] Unclosed Anchor: [DEF:msgbox:Function] started at line 61
[msgbox] Unclosed Anchor: [DEF:msgbox:Function] started at line 61
[msgbox] Unclosed Anchor: [DEF:msgbox:Function] started at line 61
[msgbox] Unclosed Anchor: [DEF:msgbox:Function] started at line 61
[msgbox] Unclosed Anchor: [DEF:msgbox:Function] started at line 61
[inputbox] Unclosed Anchor at end of file (started line 69)
[inputbox] Unclosed Anchor: [DEF:inputbox:Function] started at line 69
[inputbox] Unclosed Anchor: [DEF:inputbox:Function] started at line 69
[inputbox] Unclosed Anchor: [DEF:inputbox:Function] started at line 69
[inputbox] Unclosed Anchor: [DEF:inputbox:Function] started at line 69
[inputbox] Unclosed Anchor: [DEF:inputbox:Function] started at line 69
[inputbox] Unclosed Anchor: [DEF:inputbox:Function] started at line 69
[_ConsoleGauge] Unclosed Anchor at end of file (started line 80)
[_ConsoleGauge] Unclosed Anchor: [DEF:_ConsoleGauge:Class] started at line 80
[_ConsoleGauge] Unclosed Anchor: [DEF:_ConsoleGauge:Class] started at line 80
[_ConsoleGauge] Unclosed Anchor: [DEF:_ConsoleGauge:Class] started at line 80
[_ConsoleGauge] Unclosed Anchor: [DEF:_ConsoleGauge:Class] started at line 80
[_ConsoleGauge] Unclosed Anchor: [DEF:_ConsoleGauge:Class] started at line 80
[_ConsoleGauge] Unclosed Anchor: [DEF:_ConsoleGauge:Class] started at line 80
[_ConsoleGauge] Unclosed Anchor: [DEF:_ConsoleGauge:Class] started at line 80
[gauge] Unclosed Anchor at end of file (started line 96)
[gauge] Unclosed Anchor: [DEF:gauge:Function] started at line 96
[gauge] Unclosed Anchor: [DEF:gauge:Function] started at line 96
[gauge] Unclosed Anchor: [DEF:gauge:Function] started at line 96
[gauge] Unclosed Anchor: [DEF:gauge:Function] started at line 96
[gauge] Unclosed Anchor: [DEF:gauge:Function] started at line 96
[gauge] Unclosed Anchor: [DEF:gauge:Function] started at line 96
[gauge] Unclosed Anchor: [DEF:gauge:Function] started at line 96
[gauge] Unclosed Anchor: [DEF:gauge:Function] started at line 96 | +| superset_tool/utils/dataset_mapper.py | 🔴 0% | [superset_tool.utils.dataset_mapper] Unclosed Anchor at end of file (started line 1)
[superset_tool.utils.dataset_mapper] Unclosed Anchor: [DEF:superset_tool.utils.dataset_mapper:Module] started at line 1
[DatasetMapper] Unclosed Anchor at end of file (started line 20)
[DatasetMapper] Unclosed Anchor: [DEF:DatasetMapper:Class] started at line 20
[DatasetMapper] Unclosed Anchor: [DEF:DatasetMapper:Class] started at line 20
[DatasetMapper.get_postgres_comments] Unclosed Anchor at end of file (started line 26)
[DatasetMapper.get_postgres_comments] Unclosed Anchor: [DEF:DatasetMapper.get_postgres_comments:Function] started at line 26
[DatasetMapper.get_postgres_comments] Unclosed Anchor: [DEF:DatasetMapper.get_postgres_comments:Function] started at line 26
[DatasetMapper.get_postgres_comments] Unclosed Anchor: [DEF:DatasetMapper.get_postgres_comments:Function] started at line 26
[DatasetMapper.load_excel_mappings] Unclosed Anchor at end of file (started line 90)
[DatasetMapper.load_excel_mappings] Unclosed Anchor: [DEF:DatasetMapper.load_excel_mappings:Function] started at line 90
[DatasetMapper.load_excel_mappings] Unclosed Anchor: [DEF:DatasetMapper.load_excel_mappings:Function] started at line 90
[DatasetMapper.load_excel_mappings] Unclosed Anchor: [DEF:DatasetMapper.load_excel_mappings:Function] started at line 90
[DatasetMapper.load_excel_mappings] Unclosed Anchor: [DEF:DatasetMapper.load_excel_mappings:Function] started at line 90
[DatasetMapper.run_mapping] Unclosed Anchor at end of file (started line 109)
[DatasetMapper.run_mapping] Unclosed Anchor: [DEF:DatasetMapper.run_mapping:Function] started at line 109
[DatasetMapper.run_mapping] Unclosed Anchor: [DEF:DatasetMapper.run_mapping:Function] started at line 109
[DatasetMapper.run_mapping] Unclosed Anchor: [DEF:DatasetMapper.run_mapping:Function] started at line 109
[DatasetMapper.run_mapping] Unclosed Anchor: [DEF:DatasetMapper.run_mapping:Function] started at line 109
[DatasetMapper.run_mapping] Unclosed Anchor: [DEF:DatasetMapper.run_mapping:Function] started at line 109 | +| superset_tool/utils/__init__.py | 🔴 0% | [superset_tool.utils] Unclosed Anchor at end of file (started line 1)
[superset_tool.utils] Unclosed Anchor: [DEF:superset_tool.utils:Module] started at line 1 | +| superset_tool/utils/init_clients.py | 🔴 0% | [superset_tool.utils.init_clients] Unclosed Anchor at end of file (started line 1)
[superset_tool.utils.init_clients] Unclosed Anchor: [DEF:superset_tool.utils.init_clients:Module] started at line 1
[setup_clients] Unclosed Anchor at end of file (started line 20)
[setup_clients] Unclosed Anchor: [DEF:setup_clients:Function] started at line 20
[setup_clients] Unclosed Anchor: [DEF:setup_clients:Function] started at line 20 | +| superset_tool/utils/fileio.py | 🔴 0% | [superset_tool.utils.fileio] Unclosed Anchor at end of file (started line 1)
[superset_tool.utils.fileio] Unclosed Anchor: [DEF:superset_tool.utils.fileio:Module] started at line 1
[create_temp_file] Unclosed Anchor at end of file (started line 29)
[create_temp_file] Unclosed Anchor: [DEF:create_temp_file:Function] started at line 29
[create_temp_file] Unclosed Anchor: [DEF:create_temp_file:Function] started at line 29
[remove_empty_directories] Unclosed Anchor at end of file (started line 69)
[remove_empty_directories] Unclosed Anchor: [DEF:remove_empty_directories:Function] started at line 69
[remove_empty_directories] Unclosed Anchor: [DEF:remove_empty_directories:Function] started at line 69
[remove_empty_directories] Unclosed Anchor: [DEF:remove_empty_directories:Function] started at line 69
[read_dashboard_from_disk] Unclosed Anchor at end of file (started line 93)
[read_dashboard_from_disk] Unclosed Anchor: [DEF:read_dashboard_from_disk:Function] started at line 93
[read_dashboard_from_disk] Unclosed Anchor: [DEF:read_dashboard_from_disk:Function] started at line 93
[read_dashboard_from_disk] Unclosed Anchor: [DEF:read_dashboard_from_disk:Function] started at line 93
[read_dashboard_from_disk] Unclosed Anchor: [DEF:read_dashboard_from_disk:Function] started at line 93
[calculate_crc32] Unclosed Anchor at end of file (started line 110)
[calculate_crc32] Unclosed Anchor: [DEF:calculate_crc32:Function] started at line 110
[calculate_crc32] Unclosed Anchor: [DEF:calculate_crc32:Function] started at line 110
[calculate_crc32] Unclosed Anchor: [DEF:calculate_crc32:Function] started at line 110
[calculate_crc32] Unclosed Anchor: [DEF:calculate_crc32:Function] started at line 110
[calculate_crc32] Unclosed Anchor: [DEF:calculate_crc32:Function] started at line 110
[RetentionPolicy] Unclosed Anchor at end of file (started line 121)
[RetentionPolicy] Unclosed Anchor: [DEF:RetentionPolicy:DataClass] started at line 121
[RetentionPolicy] Unclosed Anchor: [DEF:RetentionPolicy:DataClass] started at line 121
[RetentionPolicy] Unclosed Anchor: [DEF:RetentionPolicy:DataClass] started at line 121
[RetentionPolicy] Unclosed Anchor: [DEF:RetentionPolicy:DataClass] started at line 121
[RetentionPolicy] Unclosed Anchor: [DEF:RetentionPolicy:DataClass] started at line 121
[RetentionPolicy] Unclosed Anchor: [DEF:RetentionPolicy:DataClass] started at line 121
[archive_exports] Unclosed Anchor at end of file (started line 130)
[archive_exports] Unclosed Anchor: [DEF:archive_exports:Function] started at line 130
[archive_exports] Unclosed Anchor: [DEF:archive_exports:Function] started at line 130
[archive_exports] Unclosed Anchor: [DEF:archive_exports:Function] started at line 130
[archive_exports] Unclosed Anchor: [DEF:archive_exports:Function] started at line 130
[archive_exports] Unclosed Anchor: [DEF:archive_exports:Function] started at line 130
[archive_exports] Unclosed Anchor: [DEF:archive_exports:Function] started at line 130
[archive_exports] Unclosed Anchor: [DEF:archive_exports:Function] started at line 130
[apply_retention_policy] Unclosed Anchor at end of file (started line 212)
[apply_retention_policy] Unclosed Anchor: [DEF:apply_retention_policy:Function] started at line 212
[apply_retention_policy] Unclosed Anchor: [DEF:apply_retention_policy:Function] started at line 212
[apply_retention_policy] Unclosed Anchor: [DEF:apply_retention_policy:Function] started at line 212
[apply_retention_policy] Unclosed Anchor: [DEF:apply_retention_policy:Function] started at line 212
[apply_retention_policy] Unclosed Anchor: [DEF:apply_retention_policy:Function] started at line 212
[apply_retention_policy] Unclosed Anchor: [DEF:apply_retention_policy:Function] started at line 212
[apply_retention_policy] Unclosed Anchor: [DEF:apply_retention_policy:Function] started at line 212
[apply_retention_policy] Unclosed Anchor: [DEF:apply_retention_policy:Function] started at line 212
[save_and_unpack_dashboard] Unclosed Anchor at end of file (started line 245)
[save_and_unpack_dashboard] Unclosed Anchor: [DEF:save_and_unpack_dashboard:Function] started at line 245
[save_and_unpack_dashboard] Unclosed Anchor: [DEF:save_and_unpack_dashboard:Function] started at line 245
[save_and_unpack_dashboard] Unclosed Anchor: [DEF:save_and_unpack_dashboard:Function] started at line 245
[save_and_unpack_dashboard] Unclosed Anchor: [DEF:save_and_unpack_dashboard:Function] started at line 245
[save_and_unpack_dashboard] Unclosed Anchor: [DEF:save_and_unpack_dashboard:Function] started at line 245
[save_and_unpack_dashboard] Unclosed Anchor: [DEF:save_and_unpack_dashboard:Function] started at line 245
[save_and_unpack_dashboard] Unclosed Anchor: [DEF:save_and_unpack_dashboard:Function] started at line 245
[save_and_unpack_dashboard] Unclosed Anchor: [DEF:save_and_unpack_dashboard:Function] started at line 245
[save_and_unpack_dashboard] Unclosed Anchor: [DEF:save_and_unpack_dashboard:Function] started at line 245
[update_yamls] Unclosed Anchor at end of file (started line 275)
[update_yamls] Unclosed Anchor: [DEF:update_yamls:Function] started at line 275
[update_yamls] Unclosed Anchor: [DEF:update_yamls:Function] started at line 275
[update_yamls] Unclosed Anchor: [DEF:update_yamls:Function] started at line 275
[update_yamls] Unclosed Anchor: [DEF:update_yamls:Function] started at line 275
[update_yamls] Unclosed Anchor: [DEF:update_yamls:Function] started at line 275
[update_yamls] Unclosed Anchor: [DEF:update_yamls:Function] started at line 275
[update_yamls] Unclosed Anchor: [DEF:update_yamls:Function] started at line 275
[update_yamls] Unclosed Anchor: [DEF:update_yamls:Function] started at line 275
[update_yamls] Unclosed Anchor: [DEF:update_yamls:Function] started at line 275
[update_yamls] Unclosed Anchor: [DEF:update_yamls:Function] started at line 275
[_update_yaml_file] Unclosed Anchor at end of file (started line 296)
[_update_yaml_file] Unclosed Anchor: [DEF:_update_yaml_file:Function] started at line 296
[_update_yaml_file] Unclosed Anchor: [DEF:_update_yaml_file:Function] started at line 296
[_update_yaml_file] Unclosed Anchor: [DEF:_update_yaml_file:Function] started at line 296
[_update_yaml_file] Unclosed Anchor: [DEF:_update_yaml_file:Function] started at line 296
[_update_yaml_file] Unclosed Anchor: [DEF:_update_yaml_file:Function] started at line 296
[_update_yaml_file] Unclosed Anchor: [DEF:_update_yaml_file:Function] started at line 296
[_update_yaml_file] Unclosed Anchor: [DEF:_update_yaml_file:Function] started at line 296
[_update_yaml_file] Unclosed Anchor: [DEF:_update_yaml_file:Function] started at line 296
[_update_yaml_file] Unclosed Anchor: [DEF:_update_yaml_file:Function] started at line 296
[_update_yaml_file] Unclosed Anchor: [DEF:_update_yaml_file:Function] started at line 296
[_update_yaml_file] Unclosed Anchor: [DEF:_update_yaml_file:Function] started at line 296
[create_dashboard_export] Unclosed Anchor at end of file (started line 357)
[create_dashboard_export] Unclosed Anchor: [DEF:create_dashboard_export:Function] started at line 357
[create_dashboard_export] Unclosed Anchor: [DEF:create_dashboard_export:Function] started at line 357
[create_dashboard_export] Unclosed Anchor: [DEF:create_dashboard_export:Function] started at line 357
[create_dashboard_export] Unclosed Anchor: [DEF:create_dashboard_export:Function] started at line 357
[create_dashboard_export] Unclosed Anchor: [DEF:create_dashboard_export:Function] started at line 357
[create_dashboard_export] Unclosed Anchor: [DEF:create_dashboard_export:Function] started at line 357
[create_dashboard_export] Unclosed Anchor: [DEF:create_dashboard_export:Function] started at line 357
[create_dashboard_export] Unclosed Anchor: [DEF:create_dashboard_export:Function] started at line 357
[create_dashboard_export] Unclosed Anchor: [DEF:create_dashboard_export:Function] started at line 357
[create_dashboard_export] Unclosed Anchor: [DEF:create_dashboard_export:Function] started at line 357
[create_dashboard_export] Unclosed Anchor: [DEF:create_dashboard_export:Function] started at line 357
[create_dashboard_export] Unclosed Anchor: [DEF:create_dashboard_export:Function] started at line 357
[sanitize_filename] Unclosed Anchor at end of file (started line 384)
[sanitize_filename] Unclosed Anchor: [DEF:sanitize_filename:Function] started at line 384
[sanitize_filename] Unclosed Anchor: [DEF:sanitize_filename:Function] started at line 384
[sanitize_filename] Unclosed Anchor: [DEF:sanitize_filename:Function] started at line 384
[sanitize_filename] Unclosed Anchor: [DEF:sanitize_filename:Function] started at line 384
[sanitize_filename] Unclosed Anchor: [DEF:sanitize_filename:Function] started at line 384
[sanitize_filename] Unclosed Anchor: [DEF:sanitize_filename:Function] started at line 384
[sanitize_filename] Unclosed Anchor: [DEF:sanitize_filename:Function] started at line 384
[sanitize_filename] Unclosed Anchor: [DEF:sanitize_filename:Function] started at line 384
[sanitize_filename] Unclosed Anchor: [DEF:sanitize_filename:Function] started at line 384
[sanitize_filename] Unclosed Anchor: [DEF:sanitize_filename:Function] started at line 384
[sanitize_filename] Unclosed Anchor: [DEF:sanitize_filename:Function] started at line 384
[sanitize_filename] Unclosed Anchor: [DEF:sanitize_filename:Function] started at line 384
[sanitize_filename] Unclosed Anchor: [DEF:sanitize_filename:Function] started at line 384
[get_filename_from_headers] Unclosed Anchor at end of file (started line 392)
[get_filename_from_headers] Unclosed Anchor: [DEF:get_filename_from_headers:Function] started at line 392
[get_filename_from_headers] Unclosed Anchor: [DEF:get_filename_from_headers:Function] started at line 392
[get_filename_from_headers] Unclosed Anchor: [DEF:get_filename_from_headers:Function] started at line 392
[get_filename_from_headers] Unclosed Anchor: [DEF:get_filename_from_headers:Function] started at line 392
[get_filename_from_headers] Unclosed Anchor: [DEF:get_filename_from_headers:Function] started at line 392
[get_filename_from_headers] Unclosed Anchor: [DEF:get_filename_from_headers:Function] started at line 392
[get_filename_from_headers] Unclosed Anchor: [DEF:get_filename_from_headers:Function] started at line 392
[get_filename_from_headers] Unclosed Anchor: [DEF:get_filename_from_headers:Function] started at line 392
[get_filename_from_headers] Unclosed Anchor: [DEF:get_filename_from_headers:Function] started at line 392
[get_filename_from_headers] Unclosed Anchor: [DEF:get_filename_from_headers:Function] started at line 392
[get_filename_from_headers] Unclosed Anchor: [DEF:get_filename_from_headers:Function] started at line 392
[get_filename_from_headers] Unclosed Anchor: [DEF:get_filename_from_headers:Function] started at line 392
[get_filename_from_headers] Unclosed Anchor: [DEF:get_filename_from_headers:Function] started at line 392
[get_filename_from_headers] Unclosed Anchor: [DEF:get_filename_from_headers:Function] started at line 392
[consolidate_archive_folders] Unclosed Anchor at end of file (started line 403)
[consolidate_archive_folders] Unclosed Anchor: [DEF:consolidate_archive_folders:Function] started at line 403
[consolidate_archive_folders] Unclosed Anchor: [DEF:consolidate_archive_folders:Function] started at line 403
[consolidate_archive_folders] Unclosed Anchor: [DEF:consolidate_archive_folders:Function] started at line 403
[consolidate_archive_folders] Unclosed Anchor: [DEF:consolidate_archive_folders:Function] started at line 403
[consolidate_archive_folders] Unclosed Anchor: [DEF:consolidate_archive_folders:Function] started at line 403
[consolidate_archive_folders] Unclosed Anchor: [DEF:consolidate_archive_folders:Function] started at line 403
[consolidate_archive_folders] Unclosed Anchor: [DEF:consolidate_archive_folders:Function] started at line 403
[consolidate_archive_folders] Unclosed Anchor: [DEF:consolidate_archive_folders:Function] started at line 403
[consolidate_archive_folders] Unclosed Anchor: [DEF:consolidate_archive_folders:Function] started at line 403
[consolidate_archive_folders] Unclosed Anchor: [DEF:consolidate_archive_folders:Function] started at line 403
[consolidate_archive_folders] Unclosed Anchor: [DEF:consolidate_archive_folders:Function] started at line 403
[consolidate_archive_folders] Unclosed Anchor: [DEF:consolidate_archive_folders:Function] started at line 403
[consolidate_archive_folders] Unclosed Anchor: [DEF:consolidate_archive_folders:Function] started at line 403
[consolidate_archive_folders] Unclosed Anchor: [DEF:consolidate_archive_folders:Function] started at line 403
[consolidate_archive_folders] Unclosed Anchor: [DEF:consolidate_archive_folders:Function] started at line 403 | +| frontend/src/App.svelte | 🔴 0% | [App] Unclosed Anchor at end of file (started line 1)
[App] Unclosed Anchor: [DEF:App:Component] started at line 1
[handleFormSubmit] Unclosed Anchor at end of file (started line 24)
[handleFormSubmit] Unclosed Anchor: [DEF:handleFormSubmit:Function] started at line 24
[handleFormSubmit] Unclosed Anchor: [DEF:handleFormSubmit:Function] started at line 24
[navigate] Unclosed Anchor at end of file (started line 44)
[navigate] Unclosed Anchor: [DEF:navigate:Function] started at line 44
[navigate] Unclosed Anchor: [DEF:navigate:Function] started at line 44
[navigate] Unclosed Anchor: [DEF:navigate:Function] started at line 44 | +| frontend/src/main.js | 🔴 0% | [main] Unclosed Anchor at end of file (started line 1)
[main] Unclosed Anchor: [DEF:main:Module] started at line 1
[app_instance] Unclosed Anchor at end of file (started line 9)
[app_instance] Unclosed Anchor: [DEF:app_instance:Data] started at line 9
[app_instance] Unclosed Anchor: [DEF:app_instance:Data] started at line 9 | +| frontend/src/components/DashboardGrid.svelte | 🔴 0% | [DashboardGrid] Unclosed Anchor at end of file (started line 1)
[DashboardGrid] Unclosed Anchor: [DEF:DashboardGrid:Component] started at line 1
[handleSort] Unclosed Anchor at end of file (started line 62)
[handleSort] Unclosed Anchor: [DEF:handleSort:Function] started at line 62
[handleSort] Unclosed Anchor: [DEF:handleSort:Function] started at line 62
[handleSelectionChange] Unclosed Anchor at end of file (started line 74)
[handleSelectionChange] Unclosed Anchor: [DEF:handleSelectionChange:Function] started at line 74
[handleSelectionChange] Unclosed Anchor: [DEF:handleSelectionChange:Function] started at line 74
[handleSelectionChange] Unclosed Anchor: [DEF:handleSelectionChange:Function] started at line 74
[handleSelectAll] Unclosed Anchor at end of file (started line 88)
[handleSelectAll] Unclosed Anchor: [DEF:handleSelectAll:Function] started at line 88
[handleSelectAll] Unclosed Anchor: [DEF:handleSelectAll:Function] started at line 88
[handleSelectAll] Unclosed Anchor: [DEF:handleSelectAll:Function] started at line 88
[handleSelectAll] Unclosed Anchor: [DEF:handleSelectAll:Function] started at line 88
[goToPage] Unclosed Anchor at end of file (started line 106)
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106 | +| frontend/src/components/TaskHistory.svelte | 🔴 0% | [TaskHistory] Unclosed Anchor at end of file (started line 1)
[TaskHistory] Unclosed Anchor: [DEF:TaskHistory:Component] started at line 1 | +| frontend/src/components/MappingTable.svelte | 🔴 0% | [MappingTable] Unclosed Anchor at end of file (started line 1)
[MappingTable] Unclosed Anchor: [DEF:MappingTable:Component] started at line 1
[updateMapping] Unclosed Anchor at end of file (started line 25)
[updateMapping] Unclosed Anchor: [DEF:updateMapping:Function] started at line 25
[updateMapping] Unclosed Anchor: [DEF:updateMapping:Function] started at line 25
[getSuggestion] Unclosed Anchor at end of file (started line 34)
[getSuggestion] Unclosed Anchor: [DEF:getSuggestion:Function] started at line 34
[getSuggestion] Unclosed Anchor: [DEF:getSuggestion:Function] started at line 34
[getSuggestion] Unclosed Anchor: [DEF:getSuggestion:Function] started at line 34 | +| frontend/src/components/EnvSelector.svelte | 🔴 0% | [EnvSelector] Unclosed Anchor at end of file (started line 1)
[EnvSelector] Unclosed Anchor: [DEF:EnvSelector:Component] started at line 1
[handleSelect] Unclosed Anchor at end of file (started line 24)
[handleSelect] Unclosed Anchor: [DEF:handleSelect:Function] started at line 24
[handleSelect] Unclosed Anchor: [DEF:handleSelect:Function] started at line 24 | +| frontend/src/components/TaskList.svelte | 🔴 0% | [TaskList] Unclosed Anchor at end of file (started line 1)
[TaskList] Unclosed Anchor: [DEF:TaskList:Component] started at line 1 | +| frontend/src/components/DynamicForm.svelte | 🔴 0% | [DynamicForm] Unclosed Anchor at end of file (started line 1)
[DynamicForm] Unclosed Anchor: [DEF:DynamicForm:Component] started at line 1
[handleSubmit] Unclosed Anchor at end of file (started line 23)
[handleSubmit] Unclosed Anchor: [DEF:handleSubmit:Function] started at line 23
[handleSubmit] Unclosed Anchor: [DEF:handleSubmit:Function] started at line 23
[initializeForm] Unclosed Anchor at end of file (started line 33)
[initializeForm] Unclosed Anchor: [DEF:initializeForm:Function] started at line 33
[initializeForm] Unclosed Anchor: [DEF:initializeForm:Function] started at line 33
[initializeForm] Unclosed Anchor: [DEF:initializeForm:Function] started at line 33 | +| frontend/src/components/TaskRunner.svelte | 🔴 0% | [TaskRunner] Unclosed Anchor at end of file (started line 1)
[TaskRunner] Unclosed Anchor: [DEF:TaskRunner:Component] started at line 1
[connect] Unclosed Anchor at end of file (started line 38)
[connect] Unclosed Anchor: [DEF:connect:Function] started at line 38
[connect] Unclosed Anchor: [DEF:connect:Function] started at line 38
[onMount] Unclosed Anchor at end of file (started line 225)
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 225
[onMount] Missing Mandatory Tag: @PURPOSE
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 225
[onMount] Missing Mandatory Tag: @PURPOSE
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 225
[onMount] Missing Mandatory Tag: @PURPOSE
[onDestroy] Unclosed Anchor at end of file (started line 251)
[onDestroy] Unclosed Anchor: [DEF:onDestroy:Function] started at line 251
[onDestroy] Unclosed Anchor: [DEF:onDestroy:Function] started at line 251
[onDestroy] Unclosed Anchor: [DEF:onDestroy:Function] started at line 251
[onDestroy] Unclosed Anchor: [DEF:onDestroy:Function] started at line 251 | +| frontend/src/components/TaskLogViewer.svelte | 🔴 0% | [TaskLogViewer] Unclosed Anchor at end of file (started line 1)
[TaskLogViewer] Unclosed Anchor: [DEF:TaskLogViewer:Component] started at line 1 | +| frontend/src/components/PasswordPrompt.svelte | 🔴 0% | [PasswordPrompt] Unclosed Anchor at end of file (started line 1)
[PasswordPrompt] Unclosed Anchor: [DEF:PasswordPrompt:Component] started at line 1 | +| frontend/src/components/MissingMappingModal.svelte | 🔴 0% | [MissingMappingModal] Unclosed Anchor at end of file (started line 1)
[MissingMappingModal] Unclosed Anchor: [DEF:MissingMappingModal:Component] started at line 1
[resolve] Unclosed Anchor at end of file (started line 26)
[resolve] Unclosed Anchor: [DEF:resolve:Function] started at line 26
[resolve] Missing Mandatory Tag: @PURPOSE
[resolve] Unclosed Anchor: [DEF:resolve:Function] started at line 26
[resolve] Missing Mandatory Tag: @PURPOSE
[cancel] Unclosed Anchor at end of file (started line 38)
[cancel] Unclosed Anchor: [DEF:cancel:Function] started at line 38
[cancel] Missing Mandatory Tag: @PURPOSE
[cancel] Unclosed Anchor: [DEF:cancel:Function] started at line 38
[cancel] Missing Mandatory Tag: @PURPOSE
[cancel] Unclosed Anchor: [DEF:cancel:Function] started at line 38
[cancel] Missing Mandatory Tag: @PURPOSE | +| frontend/src/components/Toast.svelte | 🔴 0% | [Toast] Unclosed Anchor at end of file (started line 1)
[Toast] Unclosed Anchor: [DEF:Toast:Component] started at line 1 | +| frontend/src/pages/Settings.svelte | 🔴 0% | [Settings] Unclosed Anchor at end of file (started line 1)
[Settings] Unclosed Anchor: [DEF:Settings:Component] started at line 1
[loadSettings] Unclosed Anchor at end of file (started line 50)
[loadSettings] Unclosed Anchor: [DEF:loadSettings:Function] started at line 50
[loadSettings] Unclosed Anchor: [DEF:loadSettings:Function] started at line 50
[handleSaveGlobal] Unclosed Anchor at end of file (started line 67)
[handleSaveGlobal] Unclosed Anchor: [DEF:handleSaveGlobal:Function] started at line 67
[handleSaveGlobal] Unclosed Anchor: [DEF:handleSaveGlobal:Function] started at line 67
[handleSaveGlobal] Unclosed Anchor: [DEF:handleSaveGlobal:Function] started at line 67
[handleAddOrUpdateEnv] Unclosed Anchor at end of file (started line 84)
[handleAddOrUpdateEnv] Unclosed Anchor: [DEF:handleAddOrUpdateEnv:Function] started at line 84
[handleAddOrUpdateEnv] Unclosed Anchor: [DEF:handleAddOrUpdateEnv:Function] started at line 84
[handleAddOrUpdateEnv] Unclosed Anchor: [DEF:handleAddOrUpdateEnv:Function] started at line 84
[handleAddOrUpdateEnv] Unclosed Anchor: [DEF:handleAddOrUpdateEnv:Function] started at line 84
[handleDeleteEnv] Unclosed Anchor at end of file (started line 108)
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleTestEnv] Unclosed Anchor at end of file (started line 129)
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[editEnv] Unclosed Anchor at end of file (started line 152)
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[resetEnvForm] Unclosed Anchor at end of file (started line 163)
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163 | +| frontend/src/pages/Dashboard.svelte | 🔴 0% | [Dashboard] Unclosed Anchor at end of file (started line 1)
[Dashboard] Unclosed Anchor: [DEF:Dashboard:Component] started at line 1
[onMount] Unclosed Anchor at end of file (started line 17)
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 17
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 17
[selectPlugin] Unclosed Anchor at end of file (started line 27)
[selectPlugin] Unclosed Anchor: [DEF:selectPlugin:Function] started at line 27
[selectPlugin] Unclosed Anchor: [DEF:selectPlugin:Function] started at line 27
[selectPlugin] Unclosed Anchor: [DEF:selectPlugin:Function] started at line 27 | +| frontend/src/lib/stores.js | 🔴 0% | [stores_module] Unclosed Anchor at end of file (started line 1)
[stores_module] Unclosed Anchor: [DEF:stores_module:Module] started at line 1
[plugins] Unclosed Anchor at end of file (started line 9)
[plugins] Unclosed Anchor: [DEF:plugins:Data] started at line 9
[plugins] Unclosed Anchor: [DEF:plugins:Data] started at line 9
[tasks] Unclosed Anchor at end of file (started line 13)
[tasks] Unclosed Anchor: [DEF:tasks:Data] started at line 13
[tasks] Unclosed Anchor: [DEF:tasks:Data] started at line 13
[tasks] Unclosed Anchor: [DEF:tasks:Data] started at line 13
[selectedPlugin] Unclosed Anchor at end of file (started line 17)
[selectedPlugin] Unclosed Anchor: [DEF:selectedPlugin:Data] started at line 17
[selectedPlugin] Unclosed Anchor: [DEF:selectedPlugin:Data] started at line 17
[selectedPlugin] Unclosed Anchor: [DEF:selectedPlugin:Data] started at line 17
[selectedPlugin] Unclosed Anchor: [DEF:selectedPlugin:Data] started at line 17
[selectedTask] Unclosed Anchor at end of file (started line 21)
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[currentPage] Unclosed Anchor at end of file (started line 25)
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[taskLogs] Unclosed Anchor at end of file (started line 29)
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[fetchPlugins] Unclosed Anchor at end of file (started line 33)
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchTasks] Unclosed Anchor at end of file (started line 47)
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47 | +| frontend/src/lib/toasts.js | 🔴 0% | [toasts_module] Unclosed Anchor at end of file (started line 1)
[toasts_module] Unclosed Anchor: [DEF:toasts_module:Module] started at line 1
[toasts] Unclosed Anchor at end of file (started line 8)
[toasts] Unclosed Anchor: [DEF:toasts:Data] started at line 8
[toasts] Unclosed Anchor: [DEF:toasts:Data] started at line 8
[addToast] Unclosed Anchor at end of file (started line 12)
[addToast] Unclosed Anchor: [DEF:addToast:Function] started at line 12
[addToast] Unclosed Anchor: [DEF:addToast:Function] started at line 12
[addToast] Unclosed Anchor: [DEF:addToast:Function] started at line 12
[removeToast] Unclosed Anchor at end of file (started line 25)
[removeToast] Unclosed Anchor: [DEF:removeToast:Function] started at line 25
[removeToast] Unclosed Anchor: [DEF:removeToast:Function] started at line 25
[removeToast] Unclosed Anchor: [DEF:removeToast:Function] started at line 25
[removeToast] Unclosed Anchor: [DEF:removeToast:Function] started at line 25 | +| frontend/src/lib/api.js | 🔴 0% | [api_module] Unclosed Anchor at end of file (started line 1)
[api_module] Unclosed Anchor: [DEF:api_module:Module] started at line 1
[fetchApi] Unclosed Anchor at end of file (started line 26)
[fetchApi] Unclosed Anchor: [DEF:fetchApi:Function] started at line 26
[fetchApi] Unclosed Anchor: [DEF:fetchApi:Function] started at line 26
[postApi] Unclosed Anchor at end of file (started line 46)
[postApi] Unclosed Anchor: [DEF:postApi:Function] started at line 46
[postApi] Unclosed Anchor: [DEF:postApi:Function] started at line 46
[postApi] Unclosed Anchor: [DEF:postApi:Function] started at line 46
[requestApi] Unclosed Anchor at end of file (started line 73)
[requestApi] Unclosed Anchor: [DEF:requestApi:Function] started at line 73
[requestApi] Unclosed Anchor: [DEF:requestApi:Function] started at line 73
[requestApi] Unclosed Anchor: [DEF:requestApi:Function] started at line 73
[requestApi] Unclosed Anchor: [DEF:requestApi:Function] started at line 73
[api] Unclosed Anchor at end of file (started line 100)
[api] Unclosed Anchor: [DEF:api:Data] started at line 100
[api] Unclosed Anchor: [DEF:api:Data] started at line 100
[api] Unclosed Anchor: [DEF:api:Data] started at line 100
[api] Unclosed Anchor: [DEF:api:Data] started at line 100
[api] Unclosed Anchor: [DEF:api:Data] started at line 100 | +| frontend/src/routes/migration/+page.svelte | 🔴 0% | [MigrationDashboard] Unclosed Anchor at end of file (started line 1)
[MigrationDashboard] Unclosed Anchor: [DEF:MigrationDashboard:Component] started at line 1
[fetchEnvironments] Unclosed Anchor at end of file (started line 51)
[fetchEnvironments] Unclosed Anchor: [DEF:fetchEnvironments:Function] started at line 51
[fetchEnvironments] Unclosed Anchor: [DEF:fetchEnvironments:Function] started at line 51
[fetchDashboards] Unclosed Anchor at end of file (started line 69)
[fetchDashboards] Unclosed Anchor: [DEF:fetchDashboards:Function] started at line 69
[fetchDashboards] Unclosed Anchor: [DEF:fetchDashboards:Function] started at line 69
[fetchDashboards] Unclosed Anchor: [DEF:fetchDashboards:Function] started at line 69
[fetchDatabases] Unclosed Anchor at end of file (started line 93)
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 93
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 93
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 93
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 93
[handleMappingUpdate] Unclosed Anchor at end of file (started line 128)
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleViewLogs] Unclosed Anchor at end of file (started line 163)
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor at end of file (started line 172)
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[startMigration] Unclosed Anchor at end of file (started line 207)
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207 | +| frontend/src/routes/migration/mappings/+page.svelte | 🔴 0% | [MappingManagement] Unclosed Anchor at end of file (started line 1)
[MappingManagement] Unclosed Anchor: [DEF:MappingManagement:Component] started at line 1
[fetchDatabases] Unclosed Anchor at end of file (started line 47)
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 47
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 47
[handleUpdate] Unclosed Anchor at end of file (started line 83)
[handleUpdate] Unclosed Anchor: [DEF:handleUpdate:Function] started at line 83
[handleUpdate] Unclosed Anchor: [DEF:handleUpdate:Function] started at line 83
[handleUpdate] Unclosed Anchor: [DEF:handleUpdate:Function] started at line 83 | +| backend/src/dependencies.py | 🔴 0% | [Dependencies] Unclosed Anchor at end of file (started line 1)
[Dependencies] Unclosed Anchor: [DEF:Dependencies:Module] started at line 1 | +| backend/src/app.py | 🔴 0% | [AppModule] Unclosed Anchor at end of file (started line 1)
[AppModule] Unclosed Anchor: [DEF:AppModule:Module] started at line 1
[App] Unclosed Anchor at end of file (started line 26)
[App] Unclosed Anchor: [DEF:App:Global] started at line 26
[App] Unclosed Anchor: [DEF:App:Global] started at line 26
[WebSocketEndpoint] Unclosed Anchor at end of file (started line 72)
[WebSocketEndpoint] Unclosed Anchor: [DEF:WebSocketEndpoint:Endpoint] started at line 72
[WebSocketEndpoint] Unclosed Anchor: [DEF:WebSocketEndpoint:Endpoint] started at line 72
[WebSocketEndpoint] Unclosed Anchor: [DEF:WebSocketEndpoint:Endpoint] started at line 72
[StaticFiles] Unclosed Anchor at end of file (started line 130)
[StaticFiles] Unclosed Anchor: [DEF:StaticFiles:Mount] started at line 130
[StaticFiles] Unclosed Anchor: [DEF:StaticFiles:Mount] started at line 130
[StaticFiles] Unclosed Anchor: [DEF:StaticFiles:Mount] started at line 130
[StaticFiles] Unclosed Anchor: [DEF:StaticFiles:Mount] started at line 130
[RootEndpoint] Unclosed Anchor at end of file (started line 146)
[RootEndpoint] Unclosed Anchor: [DEF:RootEndpoint:Endpoint] started at line 146
[RootEndpoint] Unclosed Anchor: [DEF:RootEndpoint:Endpoint] started at line 146
[RootEndpoint] Unclosed Anchor: [DEF:RootEndpoint:Endpoint] started at line 146
[RootEndpoint] Unclosed Anchor: [DEF:RootEndpoint:Endpoint] started at line 146
[RootEndpoint] Unclosed Anchor: [DEF:RootEndpoint:Endpoint] started at line 146 | +| backend/src/models/mapping.py | 🔴 0% | [backend.src.models.mapping] Unclosed Anchor at end of file (started line 1)
[backend.src.models.mapping] Unclosed Anchor: [DEF:backend.src.models.mapping:Module] started at line 1
[MigrationStatus] Unclosed Anchor at end of file (started line 21)
[MigrationStatus] Unclosed Anchor: [DEF:MigrationStatus:Class] started at line 21
[MigrationStatus] Unclosed Anchor: [DEF:MigrationStatus:Class] started at line 21
[Environment] Unclosed Anchor at end of file (started line 31)
[Environment] Unclosed Anchor: [DEF:Environment:Class] started at line 31
[Environment] Unclosed Anchor: [DEF:Environment:Class] started at line 31
[Environment] Unclosed Anchor: [DEF:Environment:Class] started at line 31
[DatabaseMapping] Unclosed Anchor at end of file (started line 42)
[DatabaseMapping] Unclosed Anchor: [DEF:DatabaseMapping:Class] started at line 42
[DatabaseMapping] Unclosed Anchor: [DEF:DatabaseMapping:Class] started at line 42
[DatabaseMapping] Unclosed Anchor: [DEF:DatabaseMapping:Class] started at line 42
[DatabaseMapping] Unclosed Anchor: [DEF:DatabaseMapping:Class] started at line 42
[MigrationJob] Unclosed Anchor at end of file (started line 57)
[MigrationJob] Unclosed Anchor: [DEF:MigrationJob:Class] started at line 57
[MigrationJob] Unclosed Anchor: [DEF:MigrationJob:Class] started at line 57
[MigrationJob] Unclosed Anchor: [DEF:MigrationJob:Class] started at line 57
[MigrationJob] Unclosed Anchor: [DEF:MigrationJob:Class] started at line 57
[MigrationJob] Unclosed Anchor: [DEF:MigrationJob:Class] started at line 57 | +| backend/src/models/dashboard.py | 🔴 0% | [backend.src.models.dashboard] Unclosed Anchor at end of file (started line 1)
[backend.src.models.dashboard] Unclosed Anchor: [DEF:backend.src.models.dashboard:Module] started at line 1
[DashboardMetadata] Unclosed Anchor at end of file (started line 10)
[DashboardMetadata] Unclosed Anchor: [DEF:DashboardMetadata:Class] started at line 10
[DashboardMetadata] Unclosed Anchor: [DEF:DashboardMetadata:Class] started at line 10
[DashboardSelection] Unclosed Anchor at end of file (started line 19)
[DashboardSelection] Unclosed Anchor: [DEF:DashboardSelection:Class] started at line 19
[DashboardSelection] Unclosed Anchor: [DEF:DashboardSelection:Class] started at line 19
[DashboardSelection] Unclosed Anchor: [DEF:DashboardSelection:Class] started at line 19 | +| backend/src/models/task.py | 🔴 0% | [backend.src.models.task] Unclosed Anchor at end of file (started line 1)
[backend.src.models.task] Unclosed Anchor: [DEF:backend.src.models.task:Module] started at line 1
[TaskRecord] Unclosed Anchor at end of file (started line 17)
[TaskRecord] Unclosed Anchor: [DEF:TaskRecord:Class] started at line 17
[TaskRecord] Unclosed Anchor: [DEF:TaskRecord:Class] started at line 17 | +| backend/src/services/mapping_service.py | 🔴 0% | [backend.src.services.mapping_service] Unclosed Anchor at end of file (started line 1)
[backend.src.services.mapping_service] Unclosed Anchor: [DEF:backend.src.services.mapping_service:Module] started at line 1
[MappingService] Unclosed Anchor at end of file (started line 18)
[MappingService] Unclosed Anchor: [DEF:MappingService:Class] started at line 18
[MappingService] Unclosed Anchor: [DEF:MappingService:Class] started at line 18
[MappingService.__init__] Unclosed Anchor at end of file (started line 22)
[MappingService.__init__] Unclosed Anchor: [DEF:MappingService.__init__:Function] started at line 22
[MappingService.__init__] Missing Mandatory Tag: @PURPOSE
[MappingService.__init__] Unclosed Anchor: [DEF:MappingService.__init__:Function] started at line 22
[MappingService.__init__] Missing Mandatory Tag: @PURPOSE
[MappingService.__init__] Unclosed Anchor: [DEF:MappingService.__init__:Function] started at line 22
[MappingService.__init__] Missing Mandatory Tag: @PURPOSE
[MappingService._get_client] Unclosed Anchor at end of file (started line 26)
[MappingService._get_client] Unclosed Anchor: [DEF:MappingService._get_client:Function] started at line 26
[MappingService._get_client] Unclosed Anchor: [DEF:MappingService._get_client:Function] started at line 26
[MappingService._get_client] Unclosed Anchor: [DEF:MappingService._get_client:Function] started at line 26
[MappingService._get_client] Unclosed Anchor: [DEF:MappingService._get_client:Function] started at line 26
[MappingService.get_suggestions] Unclosed Anchor at end of file (started line 46)
[MappingService.get_suggestions] Unclosed Anchor: [DEF:MappingService.get_suggestions:Function] started at line 46
[MappingService.get_suggestions] Unclosed Anchor: [DEF:MappingService.get_suggestions:Function] started at line 46
[MappingService.get_suggestions] Unclosed Anchor: [DEF:MappingService.get_suggestions:Function] started at line 46
[MappingService.get_suggestions] Unclosed Anchor: [DEF:MappingService.get_suggestions:Function] started at line 46
[MappingService.get_suggestions] Unclosed Anchor: [DEF:MappingService.get_suggestions:Function] started at line 46 | +| backend/src/core/config_manager.py | 🔴 0% | [ConfigManagerModule] Unclosed Anchor at end of file (started line 1)
[ConfigManagerModule] Unclosed Anchor: [DEF:ConfigManagerModule:Module] started at line 1
[ConfigManager] Unclosed Anchor at end of file (started line 22)
[ConfigManager] Unclosed Anchor: [DEF:ConfigManager:Class] started at line 22
[ConfigManager] Unclosed Anchor: [DEF:ConfigManager:Class] started at line 22
[__init__] Unclosed Anchor at end of file (started line 27)
[__init__] Unclosed Anchor: [DEF:__init__:Function] started at line 27
[__init__] Unclosed Anchor: [DEF:__init__:Function] started at line 27
[__init__] Unclosed Anchor: [DEF:__init__:Function] started at line 27
[_load_config] Unclosed Anchor at end of file (started line 51)
[_load_config] Unclosed Anchor: [DEF:_load_config:Function] started at line 51
[_load_config] Unclosed Anchor: [DEF:_load_config:Function] started at line 51
[_load_config] Unclosed Anchor: [DEF:_load_config:Function] started at line 51
[_load_config] Unclosed Anchor: [DEF:_load_config:Function] started at line 51
[_save_config_to_disk] Unclosed Anchor at end of file (started line 83)
[_save_config_to_disk] Unclosed Anchor: [DEF:_save_config_to_disk:Function] started at line 83
[_save_config_to_disk] Unclosed Anchor: [DEF:_save_config_to_disk:Function] started at line 83
[_save_config_to_disk] Unclosed Anchor: [DEF:_save_config_to_disk:Function] started at line 83
[_save_config_to_disk] Unclosed Anchor: [DEF:_save_config_to_disk:Function] started at line 83
[_save_config_to_disk] Unclosed Anchor: [DEF:_save_config_to_disk:Function] started at line 83
[save] Unclosed Anchor at end of file (started line 102)
[save] Unclosed Anchor: [DEF:save:Function] started at line 102
[save] Unclosed Anchor: [DEF:save:Function] started at line 102
[save] Unclosed Anchor: [DEF:save:Function] started at line 102
[save] Unclosed Anchor: [DEF:save:Function] started at line 102
[save] Unclosed Anchor: [DEF:save:Function] started at line 102
[save] Unclosed Anchor: [DEF:save:Function] started at line 102
[get_config] Unclosed Anchor at end of file (started line 108)
[get_config] Unclosed Anchor: [DEF:get_config:Function] started at line 108
[get_config] Unclosed Anchor: [DEF:get_config:Function] started at line 108
[get_config] Unclosed Anchor: [DEF:get_config:Function] started at line 108
[get_config] Unclosed Anchor: [DEF:get_config:Function] started at line 108
[get_config] Unclosed Anchor: [DEF:get_config:Function] started at line 108
[get_config] Unclosed Anchor: [DEF:get_config:Function] started at line 108
[get_config] Unclosed Anchor: [DEF:get_config:Function] started at line 108
[update_global_settings] Unclosed Anchor at end of file (started line 115)
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 115
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 115
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 115
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 115
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 115
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 115
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 115
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 115
[validate_path] Unclosed Anchor at end of file (started line 135)
[validate_path] Unclosed Anchor: [DEF:validate_path:Function] started at line 135
[validate_path] Unclosed Anchor: [DEF:validate_path:Function] started at line 135
[validate_path] Unclosed Anchor: [DEF:validate_path:Function] started at line 135
[validate_path] Unclosed Anchor: [DEF:validate_path:Function] started at line 135
[validate_path] Unclosed Anchor: [DEF:validate_path:Function] started at line 135
[validate_path] Unclosed Anchor: [DEF:validate_path:Function] started at line 135
[validate_path] Unclosed Anchor: [DEF:validate_path:Function] started at line 135
[validate_path] Unclosed Anchor: [DEF:validate_path:Function] started at line 135
[validate_path] Unclosed Anchor: [DEF:validate_path:Function] started at line 135
[get_environments] Unclosed Anchor at end of file (started line 153)
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[has_environments] Unclosed Anchor at end of file (started line 160)
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[add_environment] Unclosed Anchor at end of file (started line 167)
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[update_environment] Unclosed Anchor at end of file (started line 186)
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[delete_environment] Unclosed Anchor at end of file (started line 215)
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215 | +| backend/src/core/superset_client.py | 🔴 0% | [backend.src.core.superset_client] Unclosed Anchor at end of file (started line 1)
[backend.src.core.superset_client] Unclosed Anchor: [DEF:backend.src.core.superset_client:Module] started at line 1
[SupersetClient] Unclosed Anchor at end of file (started line 16)
[SupersetClient] Unclosed Anchor: [DEF:SupersetClient:Class] started at line 16
[SupersetClient] Unclosed Anchor: [DEF:SupersetClient:Class] started at line 16
[SupersetClient.get_databases_summary] Unclosed Anchor at end of file (started line 20)
[SupersetClient.get_databases_summary] Unclosed Anchor: [DEF:SupersetClient.get_databases_summary:Function] started at line 20
[SupersetClient.get_databases_summary] Unclosed Anchor: [DEF:SupersetClient.get_databases_summary:Function] started at line 20
[SupersetClient.get_databases_summary] Unclosed Anchor: [DEF:SupersetClient.get_databases_summary:Function] started at line 20
[SupersetClient.get_database_by_uuid] Unclosed Anchor at end of file (started line 40)
[SupersetClient.get_database_by_uuid] Unclosed Anchor: [DEF:SupersetClient.get_database_by_uuid:Function] started at line 40
[SupersetClient.get_database_by_uuid] Unclosed Anchor: [DEF:SupersetClient.get_database_by_uuid:Function] started at line 40
[SupersetClient.get_database_by_uuid] Unclosed Anchor: [DEF:SupersetClient.get_database_by_uuid:Function] started at line 40
[SupersetClient.get_database_by_uuid] Unclosed Anchor: [DEF:SupersetClient.get_database_by_uuid:Function] started at line 40
[SupersetClient.get_dashboards_summary] Unclosed Anchor at end of file (started line 55)
[SupersetClient.get_dashboards_summary] Unclosed Anchor: [DEF:SupersetClient.get_dashboards_summary:Function] started at line 55
[SupersetClient.get_dashboards_summary] Unclosed Anchor: [DEF:SupersetClient.get_dashboards_summary:Function] started at line 55
[SupersetClient.get_dashboards_summary] Unclosed Anchor: [DEF:SupersetClient.get_dashboards_summary:Function] started at line 55
[SupersetClient.get_dashboards_summary] Unclosed Anchor: [DEF:SupersetClient.get_dashboards_summary:Function] started at line 55
[SupersetClient.get_dashboards_summary] Unclosed Anchor: [DEF:SupersetClient.get_dashboards_summary:Function] started at line 55 | +| backend/src/core/migration_engine.py | 🔴 0% | [backend.src.core.migration_engine] Unclosed Anchor at end of file (started line 1)
[backend.src.core.migration_engine] Unclosed Anchor: [DEF:backend.src.core.migration_engine:Module] started at line 1
[MigrationEngine] Unclosed Anchor at end of file (started line 22)
[MigrationEngine] Unclosed Anchor: [DEF:MigrationEngine:Class] started at line 22
[MigrationEngine] Unclosed Anchor: [DEF:MigrationEngine:Class] started at line 22
[MigrationEngine.transform_zip] Unclosed Anchor at end of file (started line 26)
[MigrationEngine.transform_zip] Unclosed Anchor: [DEF:MigrationEngine.transform_zip:Function] started at line 26
[MigrationEngine.transform_zip] Unclosed Anchor: [DEF:MigrationEngine.transform_zip:Function] started at line 26
[MigrationEngine.transform_zip] Unclosed Anchor: [DEF:MigrationEngine.transform_zip:Function] started at line 26
[MigrationEngine._transform_yaml] Unclosed Anchor at end of file (started line 77)
[MigrationEngine._transform_yaml] Unclosed Anchor: [DEF:MigrationEngine._transform_yaml:Function] started at line 77
[MigrationEngine._transform_yaml] Unclosed Anchor: [DEF:MigrationEngine._transform_yaml:Function] started at line 77
[MigrationEngine._transform_yaml] Unclosed Anchor: [DEF:MigrationEngine._transform_yaml:Function] started at line 77
[MigrationEngine._transform_yaml] Unclosed Anchor: [DEF:MigrationEngine._transform_yaml:Function] started at line 77 | +| backend/src/core/logger.py | 🔴 0% | [LoggerModule] Unclosed Anchor at end of file (started line 1)
[LoggerModule] Unclosed Anchor: [DEF:LoggerModule:Module] started at line 1
[BeliefFormatter] Unclosed Anchor at end of file (started line 22)
[BeliefFormatter] Unclosed Anchor: [DEF:BeliefFormatter:Class] started at line 22
[BeliefFormatter] Unclosed Anchor: [DEF:BeliefFormatter:Class] started at line 22
[LogEntry] Unclosed Anchor at end of file (started line 34)
[LogEntry] Unclosed Anchor: [DEF:LogEntry:Class] started at line 34
[LogEntry] Unclosed Anchor: [DEF:LogEntry:Class] started at line 34
[LogEntry] Unclosed Anchor: [DEF:LogEntry:Class] started at line 34
[BeliefScope] Unclosed Anchor at end of file (started line 45)
[BeliefScope] Unclosed Anchor: [DEF:BeliefScope:Function] started at line 45
[BeliefScope] Unclosed Anchor: [DEF:BeliefScope:Function] started at line 45
[BeliefScope] Unclosed Anchor: [DEF:BeliefScope:Function] started at line 45
[BeliefScope] Unclosed Anchor: [DEF:BeliefScope:Function] started at line 45
[ConfigureLogger] Unclosed Anchor at end of file (started line 76)
[ConfigureLogger] Unclosed Anchor: [DEF:ConfigureLogger:Function] started at line 76
[ConfigureLogger] Unclosed Anchor: [DEF:ConfigureLogger:Function] started at line 76
[ConfigureLogger] Unclosed Anchor: [DEF:ConfigureLogger:Function] started at line 76
[ConfigureLogger] Unclosed Anchor: [DEF:ConfigureLogger:Function] started at line 76
[ConfigureLogger] Unclosed Anchor: [DEF:ConfigureLogger:Function] started at line 76
[WebSocketLogHandler] Unclosed Anchor at end of file (started line 120)
[WebSocketLogHandler] Unclosed Anchor: [DEF:WebSocketLogHandler:Class] started at line 120
[WebSocketLogHandler] Unclosed Anchor: [DEF:WebSocketLogHandler:Class] started at line 120
[WebSocketLogHandler] Unclosed Anchor: [DEF:WebSocketLogHandler:Class] started at line 120
[WebSocketLogHandler] Unclosed Anchor: [DEF:WebSocketLogHandler:Class] started at line 120
[WebSocketLogHandler] Unclosed Anchor: [DEF:WebSocketLogHandler:Class] started at line 120
[WebSocketLogHandler] Unclosed Anchor: [DEF:WebSocketLogHandler:Class] started at line 120
[Logger] Unclosed Anchor at end of file (started line 163)
[Logger] Unclosed Anchor: [DEF:Logger:Global] started at line 163
[Logger] Unclosed Anchor: [DEF:Logger:Global] started at line 163
[Logger] Unclosed Anchor: [DEF:Logger:Global] started at line 163
[Logger] Unclosed Anchor: [DEF:Logger:Global] started at line 163
[Logger] Unclosed Anchor: [DEF:Logger:Global] started at line 163
[Logger] Unclosed Anchor: [DEF:Logger:Global] started at line 163
[Logger] Unclosed Anchor: [DEF:Logger:Global] started at line 163 | +| backend/src/core/database.py | 🔴 0% | [backend.src.core.database] Unclosed Anchor at end of file (started line 1)
[backend.src.core.database] Unclosed Anchor: [DEF:backend.src.core.database:Module] started at line 1
[DATABASE_URL] Unclosed Anchor at end of file (started line 20)
[DATABASE_URL] Unclosed Anchor: [DEF:DATABASE_URL:Constant] started at line 20
[DATABASE_URL] Unclosed Anchor: [DEF:DATABASE_URL:Constant] started at line 20
[TASKS_DATABASE_URL] Unclosed Anchor at end of file (started line 24)
[TASKS_DATABASE_URL] Unclosed Anchor: [DEF:TASKS_DATABASE_URL:Constant] started at line 24
[TASKS_DATABASE_URL] Unclosed Anchor: [DEF:TASKS_DATABASE_URL:Constant] started at line 24
[TASKS_DATABASE_URL] Unclosed Anchor: [DEF:TASKS_DATABASE_URL:Constant] started at line 24
[engine] Unclosed Anchor at end of file (started line 28)
[engine] Unclosed Anchor: [DEF:engine:Variable] started at line 28
[engine] Unclosed Anchor: [DEF:engine:Variable] started at line 28
[engine] Unclosed Anchor: [DEF:engine:Variable] started at line 28
[engine] Unclosed Anchor: [DEF:engine:Variable] started at line 28
[tasks_engine] Unclosed Anchor at end of file (started line 32)
[tasks_engine] Unclosed Anchor: [DEF:tasks_engine:Variable] started at line 32
[tasks_engine] Unclosed Anchor: [DEF:tasks_engine:Variable] started at line 32
[tasks_engine] Unclosed Anchor: [DEF:tasks_engine:Variable] started at line 32
[tasks_engine] Unclosed Anchor: [DEF:tasks_engine:Variable] started at line 32
[tasks_engine] Unclosed Anchor: [DEF:tasks_engine:Variable] started at line 32
[SessionLocal] Unclosed Anchor at end of file (started line 36)
[SessionLocal] Unclosed Anchor: [DEF:SessionLocal:Class] started at line 36
[SessionLocal] Missing Mandatory Tag: @PURPOSE
[SessionLocal] Unclosed Anchor: [DEF:SessionLocal:Class] started at line 36
[SessionLocal] Missing Mandatory Tag: @PURPOSE
[SessionLocal] Unclosed Anchor: [DEF:SessionLocal:Class] started at line 36
[SessionLocal] Missing Mandatory Tag: @PURPOSE
[SessionLocal] Unclosed Anchor: [DEF:SessionLocal:Class] started at line 36
[SessionLocal] Missing Mandatory Tag: @PURPOSE
[SessionLocal] Unclosed Anchor: [DEF:SessionLocal:Class] started at line 36
[SessionLocal] Missing Mandatory Tag: @PURPOSE
[SessionLocal] Unclosed Anchor: [DEF:SessionLocal:Class] started at line 36
[SessionLocal] Missing Mandatory Tag: @PURPOSE
[TasksSessionLocal] Unclosed Anchor at end of file (started line 40)
[TasksSessionLocal] Unclosed Anchor: [DEF:TasksSessionLocal:Class] started at line 40
[TasksSessionLocal] Missing Mandatory Tag: @PURPOSE
[TasksSessionLocal] Unclosed Anchor: [DEF:TasksSessionLocal:Class] started at line 40
[TasksSessionLocal] Missing Mandatory Tag: @PURPOSE
[TasksSessionLocal] Unclosed Anchor: [DEF:TasksSessionLocal:Class] started at line 40
[TasksSessionLocal] Missing Mandatory Tag: @PURPOSE
[TasksSessionLocal] Unclosed Anchor: [DEF:TasksSessionLocal:Class] started at line 40
[TasksSessionLocal] Missing Mandatory Tag: @PURPOSE
[TasksSessionLocal] Unclosed Anchor: [DEF:TasksSessionLocal:Class] started at line 40
[TasksSessionLocal] Missing Mandatory Tag: @PURPOSE
[TasksSessionLocal] Unclosed Anchor: [DEF:TasksSessionLocal:Class] started at line 40
[TasksSessionLocal] Missing Mandatory Tag: @PURPOSE
[TasksSessionLocal] Unclosed Anchor: [DEF:TasksSessionLocal:Class] started at line 40
[TasksSessionLocal] Missing Mandatory Tag: @PURPOSE
[init_db] Unclosed Anchor at end of file (started line 44)
[init_db] Unclosed Anchor: [DEF:init_db:Function] started at line 44
[init_db] Unclosed Anchor: [DEF:init_db:Function] started at line 44
[init_db] Unclosed Anchor: [DEF:init_db:Function] started at line 44
[init_db] Unclosed Anchor: [DEF:init_db:Function] started at line 44
[init_db] Unclosed Anchor: [DEF:init_db:Function] started at line 44
[init_db] Unclosed Anchor: [DEF:init_db:Function] started at line 44
[init_db] Unclosed Anchor: [DEF:init_db:Function] started at line 44
[init_db] Unclosed Anchor: [DEF:init_db:Function] started at line 44
[get_db] Unclosed Anchor at end of file (started line 51)
[get_db] Unclosed Anchor: [DEF:get_db:Function] started at line 51
[get_db] Unclosed Anchor: [DEF:get_db:Function] started at line 51
[get_db] Unclosed Anchor: [DEF:get_db:Function] started at line 51
[get_db] Unclosed Anchor: [DEF:get_db:Function] started at line 51
[get_db] Unclosed Anchor: [DEF:get_db:Function] started at line 51
[get_db] Unclosed Anchor: [DEF:get_db:Function] started at line 51
[get_db] Unclosed Anchor: [DEF:get_db:Function] started at line 51
[get_db] Unclosed Anchor: [DEF:get_db:Function] started at line 51
[get_db] Unclosed Anchor: [DEF:get_db:Function] started at line 51
[get_tasks_db] Unclosed Anchor at end of file (started line 63)
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63 | +| backend/src/core/config_models.py | 🔴 0% | [ConfigModels] Unclosed Anchor at end of file (started line 1)
[ConfigModels] Unclosed Anchor: [DEF:ConfigModels:Module] started at line 1
[Schedule] Unclosed Anchor at end of file (started line 11)
[Schedule] Unclosed Anchor: [DEF:Schedule:DataClass] started at line 11
[Schedule] Unclosed Anchor: [DEF:Schedule:DataClass] started at line 11
[Environment] Unclosed Anchor at end of file (started line 18)
[Environment] Unclosed Anchor: [DEF:Environment:DataClass] started at line 18
[Environment] Unclosed Anchor: [DEF:Environment:DataClass] started at line 18
[Environment] Unclosed Anchor: [DEF:Environment:DataClass] started at line 18
[LoggingConfig] Unclosed Anchor at end of file (started line 30)
[LoggingConfig] Unclosed Anchor: [DEF:LoggingConfig:DataClass] started at line 30
[LoggingConfig] Unclosed Anchor: [DEF:LoggingConfig:DataClass] started at line 30
[LoggingConfig] Unclosed Anchor: [DEF:LoggingConfig:DataClass] started at line 30
[LoggingConfig] Unclosed Anchor: [DEF:LoggingConfig:DataClass] started at line 30
[GlobalSettings] Unclosed Anchor at end of file (started line 40)
[GlobalSettings] Unclosed Anchor: [DEF:GlobalSettings:DataClass] started at line 40
[GlobalSettings] Unclosed Anchor: [DEF:GlobalSettings:DataClass] started at line 40
[GlobalSettings] Unclosed Anchor: [DEF:GlobalSettings:DataClass] started at line 40
[GlobalSettings] Unclosed Anchor: [DEF:GlobalSettings:DataClass] started at line 40
[GlobalSettings] Unclosed Anchor: [DEF:GlobalSettings:DataClass] started at line 40
[AppConfig] Unclosed Anchor at end of file (started line 53)
[AppConfig] Unclosed Anchor: [DEF:AppConfig:DataClass] started at line 53
[AppConfig] Unclosed Anchor: [DEF:AppConfig:DataClass] started at line 53
[AppConfig] Unclosed Anchor: [DEF:AppConfig:DataClass] started at line 53
[AppConfig] Unclosed Anchor: [DEF:AppConfig:DataClass] started at line 53
[AppConfig] Unclosed Anchor: [DEF:AppConfig:DataClass] started at line 53
[AppConfig] Unclosed Anchor: [DEF:AppConfig:DataClass] started at line 53 | +| backend/src/core/plugin_loader.py | 🔴 0% | [PluginLoader] Unclosed Anchor at end of file (started line 8)
[PluginLoader] Unclosed Anchor: [DEF:PluginLoader:Class] started at line 8 | +| backend/src/core/plugin_base.py | 🔴 0% | [PluginBase] Unclosed Anchor at end of file (started line 6)
[PluginBase] Unclosed Anchor: [DEF:PluginBase:Class] started at line 6
[PluginConfig] Unclosed Anchor at end of file (started line 59)
[PluginConfig] Unclosed Anchor: [DEF:PluginConfig:Class] started at line 59
[PluginConfig] Unclosed Anchor: [DEF:PluginConfig:Class] started at line 59 | +| backend/src/core/utils/matching.py | 🔴 0% | [backend.src.core.utils.matching] Unclosed Anchor at end of file (started line 1)
[backend.src.core.utils.matching] Unclosed Anchor: [DEF:backend.src.core.utils.matching:Module] started at line 1
[suggest_mappings] Unclosed Anchor at end of file (started line 15)
[suggest_mappings] Unclosed Anchor: [DEF:suggest_mappings:Function] started at line 15
[suggest_mappings] Unclosed Anchor: [DEF:suggest_mappings:Function] started at line 15 | +| backend/src/core/task_manager/cleanup.py | 🔴 0% | [TaskCleanupModule] Unclosed Anchor at end of file (started line 1)
[TaskCleanupModule] Unclosed Anchor: [DEF:TaskCleanupModule:Module] started at line 1
[TaskCleanupService] Unclosed Anchor at end of file (started line 12)
[TaskCleanupService] Unclosed Anchor: [DEF:TaskCleanupService:Class] started at line 12
[TaskCleanupService] Unclosed Anchor: [DEF:TaskCleanupService:Class] started at line 12
[TaskCleanupService.run_cleanup] Unclosed Anchor at end of file (started line 19)
[TaskCleanupService.run_cleanup] Unclosed Anchor: [DEF:TaskCleanupService.run_cleanup:Function] started at line 19
[TaskCleanupService.run_cleanup] Unclosed Anchor: [DEF:TaskCleanupService.run_cleanup:Function] started at line 19
[TaskCleanupService.run_cleanup] Unclosed Anchor: [DEF:TaskCleanupService.run_cleanup:Function] started at line 19 | +| backend/src/plugins/backup.py | 🔴 0% | [BackupPlugin] Unclosed Anchor at end of file (started line 1)
[BackupPlugin] Unclosed Anchor: [DEF:BackupPlugin:Module] started at line 1 | +| backend/src/plugins/migration.py | 🔴 0% | [MigrationPlugin] Unclosed Anchor at end of file (started line 1)
[MigrationPlugin] Unclosed Anchor: [DEF:MigrationPlugin:Module] started at line 1
[MigrationPlugin.execute] Unclosed Anchor at end of file (started line 103)
[MigrationPlugin.execute] Unclosed Anchor: [DEF:MigrationPlugin.execute:Action] started at line 103
[MigrationPlugin.execute] Unclosed Anchor: [DEF:MigrationPlugin.execute:Action] started at line 103 | +| backend/src/api/auth.py | 🔴 0% | [AuthModule] Unclosed Anchor at end of file (started line 1)
[AuthModule] Unclosed Anchor: [DEF:AuthModule:Module] started at line 1 | +| backend/src/api/routes/settings.py | 🔴 0% | [SettingsRouter] Unclosed Anchor at end of file (started line 1)
[SettingsRouter] Unclosed Anchor: [DEF:SettingsRouter:Module] started at line 1
[get_settings] Unclosed Anchor at end of file (started line 26)
[get_settings] Unclosed Anchor: [DEF:get_settings:Function] started at line 26
[get_settings] Unclosed Anchor: [DEF:get_settings:Function] started at line 26
[update_global_settings] Unclosed Anchor at end of file (started line 40)
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 40
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 40
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 40
[get_environments] Unclosed Anchor at end of file (started line 54)
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 54
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 54
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 54
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 54
[add_environment] Unclosed Anchor at end of file (started line 63)
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 63
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 63
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 63
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 63
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 63
[update_environment] Unclosed Anchor at end of file (started line 96)
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 96
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 96
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 96
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 96
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 96
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 96
[delete_environment] Unclosed Anchor at end of file (started line 139)
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 139
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 139
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 139
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 139
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 139
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 139
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 139
[test_environment_connection] Unclosed Anchor at end of file (started line 152)
[test_environment_connection] Unclosed Anchor: [DEF:test_environment_connection:Function] started at line 152
[test_environment_connection] Unclosed Anchor: [DEF:test_environment_connection:Function] started at line 152
[test_environment_connection] Unclosed Anchor: [DEF:test_environment_connection:Function] started at line 152
[test_environment_connection] Unclosed Anchor: [DEF:test_environment_connection:Function] started at line 152
[test_environment_connection] Unclosed Anchor: [DEF:test_environment_connection:Function] started at line 152
[test_environment_connection] Unclosed Anchor: [DEF:test_environment_connection:Function] started at line 152
[test_environment_connection] Unclosed Anchor: [DEF:test_environment_connection:Function] started at line 152
[test_environment_connection] Unclosed Anchor: [DEF:test_environment_connection:Function] started at line 152
[validate_backup_path] Unclosed Anchor at end of file (started line 195)
[validate_backup_path] Unclosed Anchor: [DEF:validate_backup_path:Function] started at line 195
[validate_backup_path] Unclosed Anchor: [DEF:validate_backup_path:Function] started at line 195
[validate_backup_path] Unclosed Anchor: [DEF:validate_backup_path:Function] started at line 195
[validate_backup_path] Unclosed Anchor: [DEF:validate_backup_path:Function] started at line 195
[validate_backup_path] Unclosed Anchor: [DEF:validate_backup_path:Function] started at line 195
[validate_backup_path] Unclosed Anchor: [DEF:validate_backup_path:Function] started at line 195
[validate_backup_path] Unclosed Anchor: [DEF:validate_backup_path:Function] started at line 195
[validate_backup_path] Unclosed Anchor: [DEF:validate_backup_path:Function] started at line 195
[validate_backup_path] Unclosed Anchor: [DEF:validate_backup_path:Function] started at line 195 | +| backend/src/api/routes/tasks.py | 🔴 0% | [TasksRouter] Unclosed Anchor at end of file (started line 1)
[TasksRouter] Unclosed Anchor: [DEF:TasksRouter:Module] started at line 1 | +| backend/src/api/routes/environments.py | 🔴 0% | [backend.src.api.routes.environments] Unclosed Anchor at end of file (started line 1)
[backend.src.api.routes.environments] Unclosed Anchor: [DEF:backend.src.api.routes.environments:Module] started at line 1
[ScheduleSchema] Unclosed Anchor at end of file (started line 23)
[ScheduleSchema] Unclosed Anchor: [DEF:ScheduleSchema:DataClass] started at line 23
[ScheduleSchema] Unclosed Anchor: [DEF:ScheduleSchema:DataClass] started at line 23
[EnvironmentResponse] Unclosed Anchor at end of file (started line 29)
[EnvironmentResponse] Unclosed Anchor: [DEF:EnvironmentResponse:DataClass] started at line 29
[EnvironmentResponse] Unclosed Anchor: [DEF:EnvironmentResponse:DataClass] started at line 29
[EnvironmentResponse] Unclosed Anchor: [DEF:EnvironmentResponse:DataClass] started at line 29
[DatabaseResponse] Unclosed Anchor at end of file (started line 37)
[DatabaseResponse] Unclosed Anchor: [DEF:DatabaseResponse:DataClass] started at line 37
[DatabaseResponse] Unclosed Anchor: [DEF:DatabaseResponse:DataClass] started at line 37
[DatabaseResponse] Unclosed Anchor: [DEF:DatabaseResponse:DataClass] started at line 37
[DatabaseResponse] Unclosed Anchor: [DEF:DatabaseResponse:DataClass] started at line 37
[get_environments] Unclosed Anchor at end of file (started line 44)
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 44
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 44
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 44
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 44
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 44
[update_environment_schedule] Unclosed Anchor at end of file (started line 66)
[update_environment_schedule] Unclosed Anchor: [DEF:update_environment_schedule:Function] started at line 66
[update_environment_schedule] Unclosed Anchor: [DEF:update_environment_schedule:Function] started at line 66
[update_environment_schedule] Unclosed Anchor: [DEF:update_environment_schedule:Function] started at line 66
[update_environment_schedule] Unclosed Anchor: [DEF:update_environment_schedule:Function] started at line 66
[update_environment_schedule] Unclosed Anchor: [DEF:update_environment_schedule:Function] started at line 66
[update_environment_schedule] Unclosed Anchor: [DEF:update_environment_schedule:Function] started at line 66
[get_environment_databases] Unclosed Anchor at end of file (started line 94)
[get_environment_databases] Unclosed Anchor: [DEF:get_environment_databases:Function] started at line 94
[get_environment_databases] Unclosed Anchor: [DEF:get_environment_databases:Function] started at line 94
[get_environment_databases] Unclosed Anchor: [DEF:get_environment_databases:Function] started at line 94
[get_environment_databases] Unclosed Anchor: [DEF:get_environment_databases:Function] started at line 94
[get_environment_databases] Unclosed Anchor: [DEF:get_environment_databases:Function] started at line 94
[get_environment_databases] Unclosed Anchor: [DEF:get_environment_databases:Function] started at line 94
[get_environment_databases] Unclosed Anchor: [DEF:get_environment_databases:Function] started at line 94 | +| backend/src/api/routes/plugins.py | 🔴 0% | [PluginsRouter] Unclosed Anchor at end of file (started line 1)
[PluginsRouter] Unclosed Anchor: [DEF:PluginsRouter:Module] started at line 1 | +| backend/src/api/routes/migration.py | 🔴 0% | [backend.src.api.routes.migration] Unclosed Anchor at end of file (started line 1)
[backend.src.api.routes.migration] Unclosed Anchor: [DEF:backend.src.api.routes.migration:Module] started at line 1
[get_dashboards] Unclosed Anchor at end of file (started line 17)
[get_dashboards] Unclosed Anchor: [DEF:get_dashboards:Function] started at line 17
[get_dashboards] Unclosed Anchor: [DEF:get_dashboards:Function] started at line 17
[execute_migration] Unclosed Anchor at end of file (started line 42)
[execute_migration] Unclosed Anchor: [DEF:execute_migration:Function] started at line 42
[execute_migration] Unclosed Anchor: [DEF:execute_migration:Function] started at line 42
[execute_migration] Unclosed Anchor: [DEF:execute_migration:Function] started at line 42 | +| backend/src/api/routes/mappings.py | 🔴 0% | [backend.src.api.routes.mappings] Unclosed Anchor at end of file (started line 1)
[backend.src.api.routes.mappings] Unclosed Anchor: [DEF:backend.src.api.routes.mappings:Module] started at line 1
[MappingCreate] Unclosed Anchor at end of file (started line 24)
[MappingCreate] Unclosed Anchor: [DEF:MappingCreate:DataClass] started at line 24
[MappingCreate] Unclosed Anchor: [DEF:MappingCreate:DataClass] started at line 24
[MappingResponse] Unclosed Anchor at end of file (started line 34)
[MappingResponse] Unclosed Anchor: [DEF:MappingResponse:DataClass] started at line 34
[MappingResponse] Unclosed Anchor: [DEF:MappingResponse:DataClass] started at line 34
[MappingResponse] Unclosed Anchor: [DEF:MappingResponse:DataClass] started at line 34
[SuggestRequest] Unclosed Anchor at end of file (started line 48)
[SuggestRequest] Unclosed Anchor: [DEF:SuggestRequest:DataClass] started at line 48
[SuggestRequest] Unclosed Anchor: [DEF:SuggestRequest:DataClass] started at line 48
[SuggestRequest] Unclosed Anchor: [DEF:SuggestRequest:DataClass] started at line 48
[SuggestRequest] Unclosed Anchor: [DEF:SuggestRequest:DataClass] started at line 48
[get_mappings] Unclosed Anchor at end of file (started line 54)
[get_mappings] Unclosed Anchor: [DEF:get_mappings:Function] started at line 54
[get_mappings] Unclosed Anchor: [DEF:get_mappings:Function] started at line 54
[get_mappings] Unclosed Anchor: [DEF:get_mappings:Function] started at line 54
[get_mappings] Unclosed Anchor: [DEF:get_mappings:Function] started at line 54
[get_mappings] Unclosed Anchor: [DEF:get_mappings:Function] started at line 54
[create_mapping] Unclosed Anchor at end of file (started line 70)
[create_mapping] Unclosed Anchor: [DEF:create_mapping:Function] started at line 70
[create_mapping] Unclosed Anchor: [DEF:create_mapping:Function] started at line 70
[create_mapping] Unclosed Anchor: [DEF:create_mapping:Function] started at line 70
[create_mapping] Unclosed Anchor: [DEF:create_mapping:Function] started at line 70
[create_mapping] Unclosed Anchor: [DEF:create_mapping:Function] started at line 70
[create_mapping] Unclosed Anchor: [DEF:create_mapping:Function] started at line 70
[suggest_mappings_api] Unclosed Anchor at end of file (started line 95)
[suggest_mappings_api] Unclosed Anchor: [DEF:suggest_mappings_api:Function] started at line 95
[suggest_mappings_api] Unclosed Anchor: [DEF:suggest_mappings_api:Function] started at line 95
[suggest_mappings_api] Unclosed Anchor: [DEF:suggest_mappings_api:Function] started at line 95
[suggest_mappings_api] Unclosed Anchor: [DEF:suggest_mappings_api:Function] started at line 95
[suggest_mappings_api] Unclosed Anchor: [DEF:suggest_mappings_api:Function] started at line 95
[suggest_mappings_api] Unclosed Anchor: [DEF:suggest_mappings_api:Function] started at line 95
[suggest_mappings_api] Unclosed Anchor: [DEF:suggest_mappings_api:Function] started at line 95 | +| backend/src/core/scheduler.py | 🔴 14% | [SchedulerModule] Unclosed Anchor at end of file (started line 1)
[SchedulerModule] Unclosed Anchor: [DEF:SchedulerModule:Module] started at line 1
[SchedulerService] Unclosed Anchor at end of file (started line 16)
[SchedulerService] Unclosed Anchor: [DEF:SchedulerService:Class] started at line 16
[SchedulerService] Unclosed Anchor: [DEF:SchedulerService:Class] started at line 16
[SchedulerService.start] Unclosed Anchor at end of file (started line 27)
[SchedulerService.start] Unclosed Anchor: [DEF:SchedulerService.start:Function] started at line 27
[SchedulerService.start] Unclosed Anchor: [DEF:SchedulerService.start:Function] started at line 27
[SchedulerService.start] Unclosed Anchor: [DEF:SchedulerService.start:Function] started at line 27
[SchedulerService.stop] Unclosed Anchor at end of file (started line 36)
[SchedulerService.stop] Unclosed Anchor: [DEF:SchedulerService.stop:Function] started at line 36
[SchedulerService.stop] Unclosed Anchor: [DEF:SchedulerService.stop:Function] started at line 36
[SchedulerService.stop] Unclosed Anchor: [DEF:SchedulerService.stop:Function] started at line 36
[SchedulerService.stop] Unclosed Anchor: [DEF:SchedulerService.stop:Function] started at line 36
[SchedulerService.load_schedules] Unclosed Anchor at end of file (started line 44)
[SchedulerService.load_schedules] Unclosed Anchor: [DEF:SchedulerService.load_schedules:Function] started at line 44
[SchedulerService.load_schedules] Unclosed Anchor: [DEF:SchedulerService.load_schedules:Function] started at line 44
[SchedulerService.load_schedules] Unclosed Anchor: [DEF:SchedulerService.load_schedules:Function] started at line 44
[SchedulerService.load_schedules] Unclosed Anchor: [DEF:SchedulerService.load_schedules:Function] started at line 44
[SchedulerService.load_schedules] Unclosed Anchor: [DEF:SchedulerService.load_schedules:Function] started at line 44
[SchedulerService.add_backup_job] Unclosed Anchor at end of file (started line 56)
[SchedulerService.add_backup_job] Unclosed Anchor: [DEF:SchedulerService.add_backup_job:Function] started at line 56
[SchedulerService.add_backup_job] Unclosed Anchor: [DEF:SchedulerService.add_backup_job:Function] started at line 56
[SchedulerService.add_backup_job] Unclosed Anchor: [DEF:SchedulerService.add_backup_job:Function] started at line 56
[SchedulerService.add_backup_job] Unclosed Anchor: [DEF:SchedulerService.add_backup_job:Function] started at line 56
[SchedulerService.add_backup_job] Unclosed Anchor: [DEF:SchedulerService.add_backup_job:Function] started at line 56
[SchedulerService.add_backup_job] Unclosed Anchor: [DEF:SchedulerService.add_backup_job:Function] started at line 56 | +| generate_semantic_map.py | 🟢 100% | OK | +| search_script.py | 🟢 100% | OK | +| get_dataset_structure.py | 🟢 100% | OK | +| debug_db_api.py | 🟢 100% | OK | +| run_mapper.py | 🟢 100% | OK | +| backend/src/core/task_manager/manager.py | 🟢 100% | OK | +| backend/src/core/task_manager/__init__.py | 🟢 100% | OK | +| backend/src/core/task_manager/models.py | 🟢 100% | OK | +| backend/src/core/task_manager/persistence.py | 🟢 100% | OK | diff --git a/semantics/reports/semantic_report_20260101_163047.md b/semantics/reports/semantic_report_20260101_163047.md new file mode 100644 index 0000000..3bb8370 --- /dev/null +++ b/semantics/reports/semantic_report_20260101_163047.md @@ -0,0 +1,81 @@ +# Semantic Compliance Report + +**Generated At:** 2026-01-01T16:30:47.469009 +**Global Compliance Score:** 13.7% +**Scanned Files:** 68 + +## Critical Parsing Errors +- 🔴 backend/src/core/scheduler.py:100 Mismatched closing anchor. Expected [/DEF:SchedulerService.load_schedules:Function], found [/DEF:SchedulerService:Class]. +- 🔴 backend/src/core/scheduler.py:101 Mismatched closing anchor. Expected [/DEF:SchedulerService.load_schedules:Function], found [/DEF:SchedulerModule:Module]. + +## File Compliance Status +| File | Score | Issues | +|------|-------|--------| +| migration_script.py | 🔴 0% | [migration_script] Unclosed Anchor at end of file (started line 1)
[migration_script] Unclosed Anchor: [DEF:migration_script:Module] started at line 1
[Migration] Unclosed Anchor at end of file (started line 25)
[Migration] Unclosed Anchor: [DEF:Migration:Class] started at line 25
[Migration] Unclosed Anchor: [DEF:Migration:Class] started at line 25
[Migration.__init__] Unclosed Anchor at end of file (started line 33)
[Migration.__init__] Unclosed Anchor: [DEF:Migration.__init__:Function] started at line 33
[Migration.__init__] Unclosed Anchor: [DEF:Migration.__init__:Function] started at line 33
[Migration.__init__] Unclosed Anchor: [DEF:Migration.__init__:Function] started at line 33
[Migration.run] Unclosed Anchor at end of file (started line 52)
[Migration.run] Unclosed Anchor: [DEF:Migration.run:Function] started at line 52
[Migration.run] Unclosed Anchor: [DEF:Migration.run:Function] started at line 52
[Migration.run] Unclosed Anchor: [DEF:Migration.run:Function] started at line 52
[Migration.run] Unclosed Anchor: [DEF:Migration.run:Function] started at line 52
[Migration.ask_delete_on_failure] Unclosed Anchor at end of file (started line 71)
[Migration.ask_delete_on_failure] Unclosed Anchor: [DEF:Migration.ask_delete_on_failure:Function] started at line 71
[Migration.ask_delete_on_failure] Unclosed Anchor: [DEF:Migration.ask_delete_on_failure:Function] started at line 71
[Migration.ask_delete_on_failure] Unclosed Anchor: [DEF:Migration.ask_delete_on_failure:Function] started at line 71
[Migration.ask_delete_on_failure] Unclosed Anchor: [DEF:Migration.ask_delete_on_failure:Function] started at line 71
[Migration.ask_delete_on_failure] Unclosed Anchor: [DEF:Migration.ask_delete_on_failure:Function] started at line 71
[Migration.select_environments] Unclosed Anchor at end of file (started line 86)
[Migration.select_environments] Unclosed Anchor: [DEF:Migration.select_environments:Function] started at line 86
[Migration.select_environments] Unclosed Anchor: [DEF:Migration.select_environments:Function] started at line 86
[Migration.select_environments] Unclosed Anchor: [DEF:Migration.select_environments:Function] started at line 86
[Migration.select_environments] Unclosed Anchor: [DEF:Migration.select_environments:Function] started at line 86
[Migration.select_environments] Unclosed Anchor: [DEF:Migration.select_environments:Function] started at line 86
[Migration.select_environments] Unclosed Anchor: [DEF:Migration.select_environments:Function] started at line 86
[Migration.select_dashboards] Unclosed Anchor at end of file (started line 127)
[Migration.select_dashboards] Unclosed Anchor: [DEF:Migration.select_dashboards:Function] started at line 127
[Migration.select_dashboards] Unclosed Anchor: [DEF:Migration.select_dashboards:Function] started at line 127
[Migration.select_dashboards] Unclosed Anchor: [DEF:Migration.select_dashboards:Function] started at line 127
[Migration.select_dashboards] Unclosed Anchor: [DEF:Migration.select_dashboards:Function] started at line 127
[Migration.select_dashboards] Unclosed Anchor: [DEF:Migration.select_dashboards:Function] started at line 127
[Migration.select_dashboards] Unclosed Anchor: [DEF:Migration.select_dashboards:Function] started at line 127
[Migration.select_dashboards] Unclosed Anchor: [DEF:Migration.select_dashboards:Function] started at line 127
[Migration.confirm_db_config_replacement] Unclosed Anchor at end of file (started line 184)
[Migration.confirm_db_config_replacement] Unclosed Anchor: [DEF:Migration.confirm_db_config_replacement:Function] started at line 184
[Migration.confirm_db_config_replacement] Unclosed Anchor: [DEF:Migration.confirm_db_config_replacement:Function] started at line 184
[Migration.confirm_db_config_replacement] Unclosed Anchor: [DEF:Migration.confirm_db_config_replacement:Function] started at line 184
[Migration.confirm_db_config_replacement] Unclosed Anchor: [DEF:Migration.confirm_db_config_replacement:Function] started at line 184
[Migration.confirm_db_config_replacement] Unclosed Anchor: [DEF:Migration.confirm_db_config_replacement:Function] started at line 184
[Migration.confirm_db_config_replacement] Unclosed Anchor: [DEF:Migration.confirm_db_config_replacement:Function] started at line 184
[Migration.confirm_db_config_replacement] Unclosed Anchor: [DEF:Migration.confirm_db_config_replacement:Function] started at line 184
[Migration.confirm_db_config_replacement] Unclosed Anchor: [DEF:Migration.confirm_db_config_replacement:Function] started at line 184
[Migration._select_databases] Unclosed Anchor at end of file (started line 219)
[Migration._select_databases] Unclosed Anchor: [DEF:Migration._select_databases:Function] started at line 219
[Migration._select_databases] Unclosed Anchor: [DEF:Migration._select_databases:Function] started at line 219
[Migration._select_databases] Unclosed Anchor: [DEF:Migration._select_databases:Function] started at line 219
[Migration._select_databases] Unclosed Anchor: [DEF:Migration._select_databases:Function] started at line 219
[Migration._select_databases] Unclosed Anchor: [DEF:Migration._select_databases:Function] started at line 219
[Migration._select_databases] Unclosed Anchor: [DEF:Migration._select_databases:Function] started at line 219
[Migration._select_databases] Unclosed Anchor: [DEF:Migration._select_databases:Function] started at line 219
[Migration._select_databases] Unclosed Anchor: [DEF:Migration._select_databases:Function] started at line 219
[Migration._select_databases] Unclosed Anchor: [DEF:Migration._select_databases:Function] started at line 219
[Migration._batch_delete_by_ids] Unclosed Anchor at end of file (started line 298)
[Migration._batch_delete_by_ids] Unclosed Anchor: [DEF:Migration._batch_delete_by_ids:Function] started at line 298
[Migration._batch_delete_by_ids] Unclosed Anchor: [DEF:Migration._batch_delete_by_ids:Function] started at line 298
[Migration._batch_delete_by_ids] Unclosed Anchor: [DEF:Migration._batch_delete_by_ids:Function] started at line 298
[Migration._batch_delete_by_ids] Unclosed Anchor: [DEF:Migration._batch_delete_by_ids:Function] started at line 298
[Migration._batch_delete_by_ids] Unclosed Anchor: [DEF:Migration._batch_delete_by_ids:Function] started at line 298
[Migration._batch_delete_by_ids] Unclosed Anchor: [DEF:Migration._batch_delete_by_ids:Function] started at line 298
[Migration._batch_delete_by_ids] Unclosed Anchor: [DEF:Migration._batch_delete_by_ids:Function] started at line 298
[Migration._batch_delete_by_ids] Unclosed Anchor: [DEF:Migration._batch_delete_by_ids:Function] started at line 298
[Migration._batch_delete_by_ids] Unclosed Anchor: [DEF:Migration._batch_delete_by_ids:Function] started at line 298
[Migration._batch_delete_by_ids] Unclosed Anchor: [DEF:Migration._batch_delete_by_ids:Function] started at line 298
[Migration.execute_migration] Unclosed Anchor at end of file (started line 324)
[Migration.execute_migration] Unclosed Anchor: [DEF:Migration.execute_migration:Function] started at line 324
[Migration.execute_migration] Unclosed Anchor: [DEF:Migration.execute_migration:Function] started at line 324
[Migration.execute_migration] Unclosed Anchor: [DEF:Migration.execute_migration:Function] started at line 324
[Migration.execute_migration] Unclosed Anchor: [DEF:Migration.execute_migration:Function] started at line 324
[Migration.execute_migration] Unclosed Anchor: [DEF:Migration.execute_migration:Function] started at line 324
[Migration.execute_migration] Unclosed Anchor: [DEF:Migration.execute_migration:Function] started at line 324
[Migration.execute_migration] Unclosed Anchor: [DEF:Migration.execute_migration:Function] started at line 324
[Migration.execute_migration] Unclosed Anchor: [DEF:Migration.execute_migration:Function] started at line 324
[Migration.execute_migration] Unclosed Anchor: [DEF:Migration.execute_migration:Function] started at line 324
[Migration.execute_migration] Unclosed Anchor: [DEF:Migration.execute_migration:Function] started at line 324
[Migration.execute_migration] Unclosed Anchor: [DEF:Migration.execute_migration:Function] started at line 324 | +| backup_script.py | 🔴 0% | [backup_script] Unclosed Anchor at end of file (started line 1)
[backup_script] Unclosed Anchor: [DEF:backup_script:Module] started at line 1
[BackupConfig] Unclosed Anchor at end of file (started line 30)
[BackupConfig] Unclosed Anchor: [DEF:BackupConfig:DataClass] started at line 30
[BackupConfig] Unclosed Anchor: [DEF:BackupConfig:DataClass] started at line 30
[backup_dashboards] Unclosed Anchor at end of file (started line 41)
[backup_dashboards] Unclosed Anchor: [DEF:backup_dashboards:Function] started at line 41
[backup_dashboards] Unclosed Anchor: [DEF:backup_dashboards:Function] started at line 41
[backup_dashboards] Unclosed Anchor: [DEF:backup_dashboards:Function] started at line 41
[main] Unclosed Anchor at end of file (started line 116)
[main] Unclosed Anchor: [DEF:main:Function] started at line 116
[main] Unclosed Anchor: [DEF:main:Function] started at line 116
[main] Unclosed Anchor: [DEF:main:Function] started at line 116
[main] Unclosed Anchor: [DEF:main:Function] started at line 116 | +| superset_tool/exceptions.py | 🔴 0% | [superset_tool.exceptions] Unclosed Anchor at end of file (started line 1)
[superset_tool.exceptions] Unclosed Anchor: [DEF:superset_tool.exceptions:Module] started at line 1
[SupersetToolError] Unclosed Anchor at end of file (started line 11)
[SupersetToolError] Unclosed Anchor: [DEF:SupersetToolError:Class] started at line 11
[SupersetToolError] Unclosed Anchor: [DEF:SupersetToolError:Class] started at line 11
[AuthenticationError] Unclosed Anchor at end of file (started line 22)
[AuthenticationError] Unclosed Anchor: [DEF:AuthenticationError:Class] started at line 22
[AuthenticationError] Unclosed Anchor: [DEF:AuthenticationError:Class] started at line 22
[AuthenticationError] Unclosed Anchor: [DEF:AuthenticationError:Class] started at line 22
[PermissionDeniedError] Unclosed Anchor at end of file (started line 32)
[PermissionDeniedError] Unclosed Anchor: [DEF:PermissionDeniedError:Class] started at line 32
[PermissionDeniedError] Unclosed Anchor: [DEF:PermissionDeniedError:Class] started at line 32
[PermissionDeniedError] Unclosed Anchor: [DEF:PermissionDeniedError:Class] started at line 32
[PermissionDeniedError] Unclosed Anchor: [DEF:PermissionDeniedError:Class] started at line 32
[SupersetAPIError] Unclosed Anchor at end of file (started line 44)
[SupersetAPIError] Unclosed Anchor: [DEF:SupersetAPIError:Class] started at line 44
[SupersetAPIError] Unclosed Anchor: [DEF:SupersetAPIError:Class] started at line 44
[SupersetAPIError] Unclosed Anchor: [DEF:SupersetAPIError:Class] started at line 44
[SupersetAPIError] Unclosed Anchor: [DEF:SupersetAPIError:Class] started at line 44
[SupersetAPIError] Unclosed Anchor: [DEF:SupersetAPIError:Class] started at line 44
[ExportError] Unclosed Anchor at end of file (started line 54)
[ExportError] Unclosed Anchor: [DEF:ExportError:Class] started at line 54
[ExportError] Unclosed Anchor: [DEF:ExportError:Class] started at line 54
[ExportError] Unclosed Anchor: [DEF:ExportError:Class] started at line 54
[ExportError] Unclosed Anchor: [DEF:ExportError:Class] started at line 54
[ExportError] Unclosed Anchor: [DEF:ExportError:Class] started at line 54
[ExportError] Unclosed Anchor: [DEF:ExportError:Class] started at line 54
[DashboardNotFoundError] Unclosed Anchor at end of file (started line 64)
[DashboardNotFoundError] Unclosed Anchor: [DEF:DashboardNotFoundError:Class] started at line 64
[DashboardNotFoundError] Unclosed Anchor: [DEF:DashboardNotFoundError:Class] started at line 64
[DashboardNotFoundError] Unclosed Anchor: [DEF:DashboardNotFoundError:Class] started at line 64
[DashboardNotFoundError] Unclosed Anchor: [DEF:DashboardNotFoundError:Class] started at line 64
[DashboardNotFoundError] Unclosed Anchor: [DEF:DashboardNotFoundError:Class] started at line 64
[DashboardNotFoundError] Unclosed Anchor: [DEF:DashboardNotFoundError:Class] started at line 64
[DashboardNotFoundError] Unclosed Anchor: [DEF:DashboardNotFoundError:Class] started at line 64
[DatasetNotFoundError] Unclosed Anchor at end of file (started line 75)
[DatasetNotFoundError] Unclosed Anchor: [DEF:DatasetNotFoundError:Class] started at line 75
[DatasetNotFoundError] Unclosed Anchor: [DEF:DatasetNotFoundError:Class] started at line 75
[DatasetNotFoundError] Unclosed Anchor: [DEF:DatasetNotFoundError:Class] started at line 75
[DatasetNotFoundError] Unclosed Anchor: [DEF:DatasetNotFoundError:Class] started at line 75
[DatasetNotFoundError] Unclosed Anchor: [DEF:DatasetNotFoundError:Class] started at line 75
[DatasetNotFoundError] Unclosed Anchor: [DEF:DatasetNotFoundError:Class] started at line 75
[DatasetNotFoundError] Unclosed Anchor: [DEF:DatasetNotFoundError:Class] started at line 75
[DatasetNotFoundError] Unclosed Anchor: [DEF:DatasetNotFoundError:Class] started at line 75
[InvalidZipFormatError] Unclosed Anchor at end of file (started line 86)
[InvalidZipFormatError] Unclosed Anchor: [DEF:InvalidZipFormatError:Class] started at line 86
[InvalidZipFormatError] Unclosed Anchor: [DEF:InvalidZipFormatError:Class] started at line 86
[InvalidZipFormatError] Unclosed Anchor: [DEF:InvalidZipFormatError:Class] started at line 86
[InvalidZipFormatError] Unclosed Anchor: [DEF:InvalidZipFormatError:Class] started at line 86
[InvalidZipFormatError] Unclosed Anchor: [DEF:InvalidZipFormatError:Class] started at line 86
[InvalidZipFormatError] Unclosed Anchor: [DEF:InvalidZipFormatError:Class] started at line 86
[InvalidZipFormatError] Unclosed Anchor: [DEF:InvalidZipFormatError:Class] started at line 86
[InvalidZipFormatError] Unclosed Anchor: [DEF:InvalidZipFormatError:Class] started at line 86
[InvalidZipFormatError] Unclosed Anchor: [DEF:InvalidZipFormatError:Class] started at line 86
[NetworkError] Unclosed Anchor at end of file (started line 97)
[NetworkError] Unclosed Anchor: [DEF:NetworkError:Class] started at line 97
[NetworkError] Unclosed Anchor: [DEF:NetworkError:Class] started at line 97
[NetworkError] Unclosed Anchor: [DEF:NetworkError:Class] started at line 97
[NetworkError] Unclosed Anchor: [DEF:NetworkError:Class] started at line 97
[NetworkError] Unclosed Anchor: [DEF:NetworkError:Class] started at line 97
[NetworkError] Unclosed Anchor: [DEF:NetworkError:Class] started at line 97
[NetworkError] Unclosed Anchor: [DEF:NetworkError:Class] started at line 97
[NetworkError] Unclosed Anchor: [DEF:NetworkError:Class] started at line 97
[NetworkError] Unclosed Anchor: [DEF:NetworkError:Class] started at line 97
[NetworkError] Unclosed Anchor: [DEF:NetworkError:Class] started at line 97
[FileOperationError] Unclosed Anchor at end of file (started line 107)
[FileOperationError] Unclosed Anchor: [DEF:FileOperationError:Class] started at line 107
[FileOperationError] Unclosed Anchor: [DEF:FileOperationError:Class] started at line 107
[FileOperationError] Unclosed Anchor: [DEF:FileOperationError:Class] started at line 107
[FileOperationError] Unclosed Anchor: [DEF:FileOperationError:Class] started at line 107
[FileOperationError] Unclosed Anchor: [DEF:FileOperationError:Class] started at line 107
[FileOperationError] Unclosed Anchor: [DEF:FileOperationError:Class] started at line 107
[FileOperationError] Unclosed Anchor: [DEF:FileOperationError:Class] started at line 107
[FileOperationError] Unclosed Anchor: [DEF:FileOperationError:Class] started at line 107
[FileOperationError] Unclosed Anchor: [DEF:FileOperationError:Class] started at line 107
[FileOperationError] Unclosed Anchor: [DEF:FileOperationError:Class] started at line 107
[FileOperationError] Unclosed Anchor: [DEF:FileOperationError:Class] started at line 107
[InvalidFileStructureError] Unclosed Anchor at end of file (started line 114)
[InvalidFileStructureError] Unclosed Anchor: [DEF:InvalidFileStructureError:Class] started at line 114
[InvalidFileStructureError] Unclosed Anchor: [DEF:InvalidFileStructureError:Class] started at line 114
[InvalidFileStructureError] Unclosed Anchor: [DEF:InvalidFileStructureError:Class] started at line 114
[InvalidFileStructureError] Unclosed Anchor: [DEF:InvalidFileStructureError:Class] started at line 114
[InvalidFileStructureError] Unclosed Anchor: [DEF:InvalidFileStructureError:Class] started at line 114
[InvalidFileStructureError] Unclosed Anchor: [DEF:InvalidFileStructureError:Class] started at line 114
[InvalidFileStructureError] Unclosed Anchor: [DEF:InvalidFileStructureError:Class] started at line 114
[InvalidFileStructureError] Unclosed Anchor: [DEF:InvalidFileStructureError:Class] started at line 114
[InvalidFileStructureError] Unclosed Anchor: [DEF:InvalidFileStructureError:Class] started at line 114
[InvalidFileStructureError] Unclosed Anchor: [DEF:InvalidFileStructureError:Class] started at line 114
[InvalidFileStructureError] Unclosed Anchor: [DEF:InvalidFileStructureError:Class] started at line 114
[InvalidFileStructureError] Unclosed Anchor: [DEF:InvalidFileStructureError:Class] started at line 114
[ConfigurationError] Unclosed Anchor at end of file (started line 121)
[ConfigurationError] Unclosed Anchor: [DEF:ConfigurationError:Class] started at line 121
[ConfigurationError] Unclosed Anchor: [DEF:ConfigurationError:Class] started at line 121
[ConfigurationError] Unclosed Anchor: [DEF:ConfigurationError:Class] started at line 121
[ConfigurationError] Unclosed Anchor: [DEF:ConfigurationError:Class] started at line 121
[ConfigurationError] Unclosed Anchor: [DEF:ConfigurationError:Class] started at line 121
[ConfigurationError] Unclosed Anchor: [DEF:ConfigurationError:Class] started at line 121
[ConfigurationError] Unclosed Anchor: [DEF:ConfigurationError:Class] started at line 121
[ConfigurationError] Unclosed Anchor: [DEF:ConfigurationError:Class] started at line 121
[ConfigurationError] Unclosed Anchor: [DEF:ConfigurationError:Class] started at line 121
[ConfigurationError] Unclosed Anchor: [DEF:ConfigurationError:Class] started at line 121
[ConfigurationError] Unclosed Anchor: [DEF:ConfigurationError:Class] started at line 121
[ConfigurationError] Unclosed Anchor: [DEF:ConfigurationError:Class] started at line 121
[ConfigurationError] Unclosed Anchor: [DEF:ConfigurationError:Class] started at line 121 | +| superset_tool/__init__.py | 🔴 0% | [superset_tool] Unclosed Anchor at end of file (started line 1)
[superset_tool] Unclosed Anchor: [DEF:superset_tool:Module] started at line 1 | +| superset_tool/client.py | 🔴 0% | [superset_tool.client] Unclosed Anchor at end of file (started line 1)
[superset_tool.client] Unclosed Anchor: [DEF:superset_tool.client:Module] started at line 1
[SupersetClient] Unclosed Anchor at end of file (started line 27)
[SupersetClient] Unclosed Anchor: [DEF:SupersetClient:Class] started at line 27
[SupersetClient] Unclosed Anchor: [DEF:SupersetClient:Class] started at line 27
[SupersetClient.__init__] Unclosed Anchor at end of file (started line 32)
[SupersetClient.__init__] Unclosed Anchor: [DEF:SupersetClient.__init__:Function] started at line 32
[SupersetClient.__init__] Unclosed Anchor: [DEF:SupersetClient.__init__:Function] started at line 32
[SupersetClient.__init__] Unclosed Anchor: [DEF:SupersetClient.__init__:Function] started at line 32
[SupersetClient._validate_config] Unclosed Anchor at end of file (started line 53)
[SupersetClient._validate_config] Unclosed Anchor: [DEF:SupersetClient._validate_config:Function] started at line 53
[SupersetClient._validate_config] Unclosed Anchor: [DEF:SupersetClient._validate_config:Function] started at line 53
[SupersetClient._validate_config] Unclosed Anchor: [DEF:SupersetClient._validate_config:Function] started at line 53
[SupersetClient._validate_config] Unclosed Anchor: [DEF:SupersetClient._validate_config:Function] started at line 53
[SupersetClient.headers] Unclosed Anchor at end of file (started line 67)
[SupersetClient.headers] Unclosed Anchor: [DEF:SupersetClient.headers:Function] started at line 67
[SupersetClient.headers] Unclosed Anchor: [DEF:SupersetClient.headers:Function] started at line 67
[SupersetClient.headers] Unclosed Anchor: [DEF:SupersetClient.headers:Function] started at line 67
[SupersetClient.headers] Unclosed Anchor: [DEF:SupersetClient.headers:Function] started at line 67
[SupersetClient.headers] Unclosed Anchor: [DEF:SupersetClient.headers:Function] started at line 67
[SupersetClient.get_dashboards] Unclosed Anchor at end of file (started line 74)
[SupersetClient.get_dashboards] Unclosed Anchor: [DEF:SupersetClient.get_dashboards:Function] started at line 74
[SupersetClient.get_dashboards] Unclosed Anchor: [DEF:SupersetClient.get_dashboards:Function] started at line 74
[SupersetClient.get_dashboards] Unclosed Anchor: [DEF:SupersetClient.get_dashboards:Function] started at line 74
[SupersetClient.get_dashboards] Unclosed Anchor: [DEF:SupersetClient.get_dashboards:Function] started at line 74
[SupersetClient.get_dashboards] Unclosed Anchor: [DEF:SupersetClient.get_dashboards:Function] started at line 74
[SupersetClient.get_dashboards] Unclosed Anchor: [DEF:SupersetClient.get_dashboards:Function] started at line 74
[SupersetClient.export_dashboard] Unclosed Anchor at end of file (started line 98)
[SupersetClient.export_dashboard] Unclosed Anchor: [DEF:SupersetClient.export_dashboard:Function] started at line 98
[SupersetClient.export_dashboard] Unclosed Anchor: [DEF:SupersetClient.export_dashboard:Function] started at line 98
[SupersetClient.export_dashboard] Unclosed Anchor: [DEF:SupersetClient.export_dashboard:Function] started at line 98
[SupersetClient.export_dashboard] Unclosed Anchor: [DEF:SupersetClient.export_dashboard:Function] started at line 98
[SupersetClient.export_dashboard] Unclosed Anchor: [DEF:SupersetClient.export_dashboard:Function] started at line 98
[SupersetClient.export_dashboard] Unclosed Anchor: [DEF:SupersetClient.export_dashboard:Function] started at line 98
[SupersetClient.export_dashboard] Unclosed Anchor: [DEF:SupersetClient.export_dashboard:Function] started at line 98
[SupersetClient.import_dashboard] Unclosed Anchor at end of file (started line 123)
[SupersetClient.import_dashboard] Unclosed Anchor: [DEF:SupersetClient.import_dashboard:Function] started at line 123
[SupersetClient.import_dashboard] Unclosed Anchor: [DEF:SupersetClient.import_dashboard:Function] started at line 123
[SupersetClient.import_dashboard] Unclosed Anchor: [DEF:SupersetClient.import_dashboard:Function] started at line 123
[SupersetClient.import_dashboard] Unclosed Anchor: [DEF:SupersetClient.import_dashboard:Function] started at line 123
[SupersetClient.import_dashboard] Unclosed Anchor: [DEF:SupersetClient.import_dashboard:Function] started at line 123
[SupersetClient.import_dashboard] Unclosed Anchor: [DEF:SupersetClient.import_dashboard:Function] started at line 123
[SupersetClient.import_dashboard] Unclosed Anchor: [DEF:SupersetClient.import_dashboard:Function] started at line 123
[SupersetClient.import_dashboard] Unclosed Anchor: [DEF:SupersetClient.import_dashboard:Function] started at line 123
[SupersetClient._resolve_target_id_for_delete] Unclosed Anchor at end of file (started line 157)
[SupersetClient._resolve_target_id_for_delete] Unclosed Anchor: [DEF:SupersetClient._resolve_target_id_for_delete:Function] started at line 157
[SupersetClient._resolve_target_id_for_delete] Unclosed Anchor: [DEF:SupersetClient._resolve_target_id_for_delete:Function] started at line 157
[SupersetClient._resolve_target_id_for_delete] Unclosed Anchor: [DEF:SupersetClient._resolve_target_id_for_delete:Function] started at line 157
[SupersetClient._resolve_target_id_for_delete] Unclosed Anchor: [DEF:SupersetClient._resolve_target_id_for_delete:Function] started at line 157
[SupersetClient._resolve_target_id_for_delete] Unclosed Anchor: [DEF:SupersetClient._resolve_target_id_for_delete:Function] started at line 157
[SupersetClient._resolve_target_id_for_delete] Unclosed Anchor: [DEF:SupersetClient._resolve_target_id_for_delete:Function] started at line 157
[SupersetClient._resolve_target_id_for_delete] Unclosed Anchor: [DEF:SupersetClient._resolve_target_id_for_delete:Function] started at line 157
[SupersetClient._resolve_target_id_for_delete] Unclosed Anchor: [DEF:SupersetClient._resolve_target_id_for_delete:Function] started at line 157
[SupersetClient._resolve_target_id_for_delete] Unclosed Anchor: [DEF:SupersetClient._resolve_target_id_for_delete:Function] started at line 157
[SupersetClient._do_import] Unclosed Anchor at end of file (started line 182)
[SupersetClient._do_import] Unclosed Anchor: [DEF:SupersetClient._do_import:Function] started at line 182
[SupersetClient._do_import] Unclosed Anchor: [DEF:SupersetClient._do_import:Function] started at line 182
[SupersetClient._do_import] Unclosed Anchor: [DEF:SupersetClient._do_import:Function] started at line 182
[SupersetClient._do_import] Unclosed Anchor: [DEF:SupersetClient._do_import:Function] started at line 182
[SupersetClient._do_import] Unclosed Anchor: [DEF:SupersetClient._do_import:Function] started at line 182
[SupersetClient._do_import] Unclosed Anchor: [DEF:SupersetClient._do_import:Function] started at line 182
[SupersetClient._do_import] Unclosed Anchor: [DEF:SupersetClient._do_import:Function] started at line 182
[SupersetClient._do_import] Unclosed Anchor: [DEF:SupersetClient._do_import:Function] started at line 182
[SupersetClient._do_import] Unclosed Anchor: [DEF:SupersetClient._do_import:Function] started at line 182
[SupersetClient._do_import] Unclosed Anchor: [DEF:SupersetClient._do_import:Function] started at line 182
[SupersetClient.delete_dashboard] Unclosed Anchor at end of file (started line 205)
[SupersetClient.delete_dashboard] Unclosed Anchor: [DEF:SupersetClient.delete_dashboard:Function] started at line 205
[SupersetClient.delete_dashboard] Unclosed Anchor: [DEF:SupersetClient.delete_dashboard:Function] started at line 205
[SupersetClient.delete_dashboard] Unclosed Anchor: [DEF:SupersetClient.delete_dashboard:Function] started at line 205
[SupersetClient.delete_dashboard] Unclosed Anchor: [DEF:SupersetClient.delete_dashboard:Function] started at line 205
[SupersetClient.delete_dashboard] Unclosed Anchor: [DEF:SupersetClient.delete_dashboard:Function] started at line 205
[SupersetClient.delete_dashboard] Unclosed Anchor: [DEF:SupersetClient.delete_dashboard:Function] started at line 205
[SupersetClient.delete_dashboard] Unclosed Anchor: [DEF:SupersetClient.delete_dashboard:Function] started at line 205
[SupersetClient.delete_dashboard] Unclosed Anchor: [DEF:SupersetClient.delete_dashboard:Function] started at line 205
[SupersetClient.delete_dashboard] Unclosed Anchor: [DEF:SupersetClient.delete_dashboard:Function] started at line 205
[SupersetClient.delete_dashboard] Unclosed Anchor: [DEF:SupersetClient.delete_dashboard:Function] started at line 205
[SupersetClient.delete_dashboard] Unclosed Anchor: [DEF:SupersetClient.delete_dashboard:Function] started at line 205
[SupersetClient._extract_dashboard_id_from_zip] Unclosed Anchor at end of file (started line 223)
[SupersetClient._extract_dashboard_id_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_id_from_zip:Function] started at line 223
[SupersetClient._extract_dashboard_id_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_id_from_zip:Function] started at line 223
[SupersetClient._extract_dashboard_id_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_id_from_zip:Function] started at line 223
[SupersetClient._extract_dashboard_id_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_id_from_zip:Function] started at line 223
[SupersetClient._extract_dashboard_id_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_id_from_zip:Function] started at line 223
[SupersetClient._extract_dashboard_id_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_id_from_zip:Function] started at line 223
[SupersetClient._extract_dashboard_id_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_id_from_zip:Function] started at line 223
[SupersetClient._extract_dashboard_id_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_id_from_zip:Function] started at line 223
[SupersetClient._extract_dashboard_id_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_id_from_zip:Function] started at line 223
[SupersetClient._extract_dashboard_id_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_id_from_zip:Function] started at line 223
[SupersetClient._extract_dashboard_id_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_id_from_zip:Function] started at line 223
[SupersetClient._extract_dashboard_id_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_id_from_zip:Function] started at line 223
[SupersetClient._extract_dashboard_slug_from_zip] Unclosed Anchor at end of file (started line 246)
[SupersetClient._extract_dashboard_slug_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_slug_from_zip:Function] started at line 246
[SupersetClient._extract_dashboard_slug_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_slug_from_zip:Function] started at line 246
[SupersetClient._extract_dashboard_slug_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_slug_from_zip:Function] started at line 246
[SupersetClient._extract_dashboard_slug_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_slug_from_zip:Function] started at line 246
[SupersetClient._extract_dashboard_slug_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_slug_from_zip:Function] started at line 246
[SupersetClient._extract_dashboard_slug_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_slug_from_zip:Function] started at line 246
[SupersetClient._extract_dashboard_slug_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_slug_from_zip:Function] started at line 246
[SupersetClient._extract_dashboard_slug_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_slug_from_zip:Function] started at line 246
[SupersetClient._extract_dashboard_slug_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_slug_from_zip:Function] started at line 246
[SupersetClient._extract_dashboard_slug_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_slug_from_zip:Function] started at line 246
[SupersetClient._extract_dashboard_slug_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_slug_from_zip:Function] started at line 246
[SupersetClient._extract_dashboard_slug_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_slug_from_zip:Function] started at line 246
[SupersetClient._extract_dashboard_slug_from_zip] Unclosed Anchor: [DEF:SupersetClient._extract_dashboard_slug_from_zip:Function] started at line 246
[SupersetClient._validate_export_response] Unclosed Anchor at end of file (started line 269)
[SupersetClient._validate_export_response] Unclosed Anchor: [DEF:SupersetClient._validate_export_response:Function] started at line 269
[SupersetClient._validate_export_response] Unclosed Anchor: [DEF:SupersetClient._validate_export_response:Function] started at line 269
[SupersetClient._validate_export_response] Unclosed Anchor: [DEF:SupersetClient._validate_export_response:Function] started at line 269
[SupersetClient._validate_export_response] Unclosed Anchor: [DEF:SupersetClient._validate_export_response:Function] started at line 269
[SupersetClient._validate_export_response] Unclosed Anchor: [DEF:SupersetClient._validate_export_response:Function] started at line 269
[SupersetClient._validate_export_response] Unclosed Anchor: [DEF:SupersetClient._validate_export_response:Function] started at line 269
[SupersetClient._validate_export_response] Unclosed Anchor: [DEF:SupersetClient._validate_export_response:Function] started at line 269
[SupersetClient._validate_export_response] Unclosed Anchor: [DEF:SupersetClient._validate_export_response:Function] started at line 269
[SupersetClient._validate_export_response] Unclosed Anchor: [DEF:SupersetClient._validate_export_response:Function] started at line 269
[SupersetClient._validate_export_response] Unclosed Anchor: [DEF:SupersetClient._validate_export_response:Function] started at line 269
[SupersetClient._validate_export_response] Unclosed Anchor: [DEF:SupersetClient._validate_export_response:Function] started at line 269
[SupersetClient._validate_export_response] Unclosed Anchor: [DEF:SupersetClient._validate_export_response:Function] started at line 269
[SupersetClient._validate_export_response] Unclosed Anchor: [DEF:SupersetClient._validate_export_response:Function] started at line 269
[SupersetClient._validate_export_response] Unclosed Anchor: [DEF:SupersetClient._validate_export_response:Function] started at line 269
[SupersetClient._resolve_export_filename] Unclosed Anchor at end of file (started line 285)
[SupersetClient._resolve_export_filename] Unclosed Anchor: [DEF:SupersetClient._resolve_export_filename:Function] started at line 285
[SupersetClient._resolve_export_filename] Unclosed Anchor: [DEF:SupersetClient._resolve_export_filename:Function] started at line 285
[SupersetClient._resolve_export_filename] Unclosed Anchor: [DEF:SupersetClient._resolve_export_filename:Function] started at line 285
[SupersetClient._resolve_export_filename] Unclosed Anchor: [DEF:SupersetClient._resolve_export_filename:Function] started at line 285
[SupersetClient._resolve_export_filename] Unclosed Anchor: [DEF:SupersetClient._resolve_export_filename:Function] started at line 285
[SupersetClient._resolve_export_filename] Unclosed Anchor: [DEF:SupersetClient._resolve_export_filename:Function] started at line 285
[SupersetClient._resolve_export_filename] Unclosed Anchor: [DEF:SupersetClient._resolve_export_filename:Function] started at line 285
[SupersetClient._resolve_export_filename] Unclosed Anchor: [DEF:SupersetClient._resolve_export_filename:Function] started at line 285
[SupersetClient._resolve_export_filename] Unclosed Anchor: [DEF:SupersetClient._resolve_export_filename:Function] started at line 285
[SupersetClient._resolve_export_filename] Unclosed Anchor: [DEF:SupersetClient._resolve_export_filename:Function] started at line 285
[SupersetClient._resolve_export_filename] Unclosed Anchor: [DEF:SupersetClient._resolve_export_filename:Function] started at line 285
[SupersetClient._resolve_export_filename] Unclosed Anchor: [DEF:SupersetClient._resolve_export_filename:Function] started at line 285
[SupersetClient._resolve_export_filename] Unclosed Anchor: [DEF:SupersetClient._resolve_export_filename:Function] started at line 285
[SupersetClient._resolve_export_filename] Unclosed Anchor: [DEF:SupersetClient._resolve_export_filename:Function] started at line 285
[SupersetClient._resolve_export_filename] Unclosed Anchor: [DEF:SupersetClient._resolve_export_filename:Function] started at line 285
[SupersetClient._validate_query_params] Unclosed Anchor at end of file (started line 303)
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._validate_query_params] Unclosed Anchor: [DEF:SupersetClient._validate_query_params:Function] started at line 303
[SupersetClient._fetch_total_object_count] Unclosed Anchor at end of file (started line 315)
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_total_object_count] Unclosed Anchor: [DEF:SupersetClient._fetch_total_object_count:Function] started at line 315
[SupersetClient._fetch_all_pages] Unclosed Anchor at end of file (started line 331)
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._fetch_all_pages] Unclosed Anchor: [DEF:SupersetClient._fetch_all_pages:Function] started at line 331
[SupersetClient._validate_import_file] Unclosed Anchor at end of file (started line 345)
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient._validate_import_file] Unclosed Anchor: [DEF:SupersetClient._validate_import_file:Function] started at line 345
[SupersetClient.get_datasets] Unclosed Anchor at end of file (started line 361)
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_datasets] Unclosed Anchor: [DEF:SupersetClient.get_datasets:Function] started at line 361
[SupersetClient.get_databases] Unclosed Anchor at end of file (started line 384)
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_databases] Unclosed Anchor: [DEF:SupersetClient.get_databases:Function] started at line 384
[SupersetClient.get_dataset] Unclosed Anchor at end of file (started line 408)
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_dataset] Unclosed Anchor: [DEF:SupersetClient.get_dataset:Function] started at line 408
[SupersetClient.get_database] Unclosed Anchor at end of file (started line 425)
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.get_database] Unclosed Anchor: [DEF:SupersetClient.get_database:Function] started at line 425
[SupersetClient.update_dataset] Unclosed Anchor at end of file (started line 442)
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442
[SupersetClient.update_dataset] Unclosed Anchor: [DEF:SupersetClient.update_dataset:Function] started at line 442 | +| superset_tool/models.py | 🔴 0% | [superset_tool.models] Unclosed Anchor at end of file (started line 1)
[superset_tool.models] Unclosed Anchor: [DEF:superset_tool.models:Module] started at line 1
[SupersetConfig] Unclosed Anchor at end of file (started line 17)
[SupersetConfig] Unclosed Anchor: [DEF:SupersetConfig:Class] started at line 17
[SupersetConfig] Unclosed Anchor: [DEF:SupersetConfig:Class] started at line 17
[SupersetConfig.validate_auth] Unclosed Anchor at end of file (started line 28)
[SupersetConfig.validate_auth] Unclosed Anchor: [DEF:SupersetConfig.validate_auth:Function] started at line 28
[SupersetConfig.validate_auth] Unclosed Anchor: [DEF:SupersetConfig.validate_auth:Function] started at line 28
[SupersetConfig.validate_auth] Unclosed Anchor: [DEF:SupersetConfig.validate_auth:Function] started at line 28
[SupersetConfig.normalize_base_url] Unclosed Anchor at end of file (started line 42)
[SupersetConfig.normalize_base_url] Unclosed Anchor: [DEF:SupersetConfig.normalize_base_url:Function] started at line 42
[SupersetConfig.normalize_base_url] Unclosed Anchor: [DEF:SupersetConfig.normalize_base_url:Function] started at line 42
[SupersetConfig.normalize_base_url] Unclosed Anchor: [DEF:SupersetConfig.normalize_base_url:Function] started at line 42
[SupersetConfig.normalize_base_url] Unclosed Anchor: [DEF:SupersetConfig.normalize_base_url:Function] started at line 42
[DatabaseConfig] Unclosed Anchor at end of file (started line 63)
[DatabaseConfig] Unclosed Anchor: [DEF:DatabaseConfig:Class] started at line 63
[DatabaseConfig] Unclosed Anchor: [DEF:DatabaseConfig:Class] started at line 63
[DatabaseConfig] Unclosed Anchor: [DEF:DatabaseConfig:Class] started at line 63
[DatabaseConfig] Unclosed Anchor: [DEF:DatabaseConfig:Class] started at line 63
[DatabaseConfig] Unclosed Anchor: [DEF:DatabaseConfig:Class] started at line 63
[DatabaseConfig.validate_config] Unclosed Anchor at end of file (started line 70)
[DatabaseConfig.validate_config] Unclosed Anchor: [DEF:DatabaseConfig.validate_config:Function] started at line 70
[DatabaseConfig.validate_config] Unclosed Anchor: [DEF:DatabaseConfig.validate_config:Function] started at line 70
[DatabaseConfig.validate_config] Unclosed Anchor: [DEF:DatabaseConfig.validate_config:Function] started at line 70
[DatabaseConfig.validate_config] Unclosed Anchor: [DEF:DatabaseConfig.validate_config:Function] started at line 70
[DatabaseConfig.validate_config] Unclosed Anchor: [DEF:DatabaseConfig.validate_config:Function] started at line 70
[DatabaseConfig.validate_config] Unclosed Anchor: [DEF:DatabaseConfig.validate_config:Function] started at line 70 | +| superset_tool/utils/logger.py | 🔴 0% | [superset_tool.utils.logger] Unclosed Anchor at end of file (started line 1)
[superset_tool.utils.logger] Unclosed Anchor: [DEF:superset_tool.utils.logger:Module] started at line 1
[SupersetLogger] Unclosed Anchor at end of file (started line 19)
[SupersetLogger] Unclosed Anchor: [DEF:SupersetLogger:Class] started at line 19
[SupersetLogger] Unclosed Anchor: [DEF:SupersetLogger:Class] started at line 19
[SupersetLogger.__init__] Unclosed Anchor at end of file (started line 23)
[SupersetLogger.__init__] Unclosed Anchor: [DEF:SupersetLogger.__init__:Function] started at line 23
[SupersetLogger.__init__] Unclosed Anchor: [DEF:SupersetLogger.__init__:Function] started at line 23
[SupersetLogger.__init__] Unclosed Anchor: [DEF:SupersetLogger.__init__:Function] started at line 23
[SupersetLogger._log] Unclosed Anchor at end of file (started line 58)
[SupersetLogger._log] Unclosed Anchor: [DEF:SupersetLogger._log:Function] started at line 58
[SupersetLogger._log] Unclosed Anchor: [DEF:SupersetLogger._log:Function] started at line 58
[SupersetLogger._log] Unclosed Anchor: [DEF:SupersetLogger._log:Function] started at line 58
[SupersetLogger._log] Unclosed Anchor: [DEF:SupersetLogger._log:Function] started at line 58
[SupersetLogger.info] Unclosed Anchor at end of file (started line 69)
[SupersetLogger.info] Unclosed Anchor: [DEF:SupersetLogger.info:Function] started at line 69
[SupersetLogger.info] Unclosed Anchor: [DEF:SupersetLogger.info:Function] started at line 69
[SupersetLogger.info] Unclosed Anchor: [DEF:SupersetLogger.info:Function] started at line 69
[SupersetLogger.info] Unclosed Anchor: [DEF:SupersetLogger.info:Function] started at line 69
[SupersetLogger.info] Unclosed Anchor: [DEF:SupersetLogger.info:Function] started at line 69
[SupersetLogger.debug] Unclosed Anchor at end of file (started line 75)
[SupersetLogger.debug] Unclosed Anchor: [DEF:SupersetLogger.debug:Function] started at line 75
[SupersetLogger.debug] Unclosed Anchor: [DEF:SupersetLogger.debug:Function] started at line 75
[SupersetLogger.debug] Unclosed Anchor: [DEF:SupersetLogger.debug:Function] started at line 75
[SupersetLogger.debug] Unclosed Anchor: [DEF:SupersetLogger.debug:Function] started at line 75
[SupersetLogger.debug] Unclosed Anchor: [DEF:SupersetLogger.debug:Function] started at line 75
[SupersetLogger.debug] Unclosed Anchor: [DEF:SupersetLogger.debug:Function] started at line 75
[SupersetLogger.warning] Unclosed Anchor at end of file (started line 81)
[SupersetLogger.warning] Unclosed Anchor: [DEF:SupersetLogger.warning:Function] started at line 81
[SupersetLogger.warning] Unclosed Anchor: [DEF:SupersetLogger.warning:Function] started at line 81
[SupersetLogger.warning] Unclosed Anchor: [DEF:SupersetLogger.warning:Function] started at line 81
[SupersetLogger.warning] Unclosed Anchor: [DEF:SupersetLogger.warning:Function] started at line 81
[SupersetLogger.warning] Unclosed Anchor: [DEF:SupersetLogger.warning:Function] started at line 81
[SupersetLogger.warning] Unclosed Anchor: [DEF:SupersetLogger.warning:Function] started at line 81
[SupersetLogger.warning] Unclosed Anchor: [DEF:SupersetLogger.warning:Function] started at line 81
[SupersetLogger.error] Unclosed Anchor at end of file (started line 87)
[SupersetLogger.error] Unclosed Anchor: [DEF:SupersetLogger.error:Function] started at line 87
[SupersetLogger.error] Unclosed Anchor: [DEF:SupersetLogger.error:Function] started at line 87
[SupersetLogger.error] Unclosed Anchor: [DEF:SupersetLogger.error:Function] started at line 87
[SupersetLogger.error] Unclosed Anchor: [DEF:SupersetLogger.error:Function] started at line 87
[SupersetLogger.error] Unclosed Anchor: [DEF:SupersetLogger.error:Function] started at line 87
[SupersetLogger.error] Unclosed Anchor: [DEF:SupersetLogger.error:Function] started at line 87
[SupersetLogger.error] Unclosed Anchor: [DEF:SupersetLogger.error:Function] started at line 87
[SupersetLogger.error] Unclosed Anchor: [DEF:SupersetLogger.error:Function] started at line 87
[SupersetLogger.critical] Unclosed Anchor at end of file (started line 93)
[SupersetLogger.critical] Unclosed Anchor: [DEF:SupersetLogger.critical:Function] started at line 93
[SupersetLogger.critical] Unclosed Anchor: [DEF:SupersetLogger.critical:Function] started at line 93
[SupersetLogger.critical] Unclosed Anchor: [DEF:SupersetLogger.critical:Function] started at line 93
[SupersetLogger.critical] Unclosed Anchor: [DEF:SupersetLogger.critical:Function] started at line 93
[SupersetLogger.critical] Unclosed Anchor: [DEF:SupersetLogger.critical:Function] started at line 93
[SupersetLogger.critical] Unclosed Anchor: [DEF:SupersetLogger.critical:Function] started at line 93
[SupersetLogger.critical] Unclosed Anchor: [DEF:SupersetLogger.critical:Function] started at line 93
[SupersetLogger.critical] Unclosed Anchor: [DEF:SupersetLogger.critical:Function] started at line 93
[SupersetLogger.critical] Unclosed Anchor: [DEF:SupersetLogger.critical:Function] started at line 93
[SupersetLogger.exception] Unclosed Anchor at end of file (started line 99)
[SupersetLogger.exception] Unclosed Anchor: [DEF:SupersetLogger.exception:Function] started at line 99
[SupersetLogger.exception] Unclosed Anchor: [DEF:SupersetLogger.exception:Function] started at line 99
[SupersetLogger.exception] Unclosed Anchor: [DEF:SupersetLogger.exception:Function] started at line 99
[SupersetLogger.exception] Unclosed Anchor: [DEF:SupersetLogger.exception:Function] started at line 99
[SupersetLogger.exception] Unclosed Anchor: [DEF:SupersetLogger.exception:Function] started at line 99
[SupersetLogger.exception] Unclosed Anchor: [DEF:SupersetLogger.exception:Function] started at line 99
[SupersetLogger.exception] Unclosed Anchor: [DEF:SupersetLogger.exception:Function] started at line 99
[SupersetLogger.exception] Unclosed Anchor: [DEF:SupersetLogger.exception:Function] started at line 99
[SupersetLogger.exception] Unclosed Anchor: [DEF:SupersetLogger.exception:Function] started at line 99
[SupersetLogger.exception] Unclosed Anchor: [DEF:SupersetLogger.exception:Function] started at line 99 | +| superset_tool/utils/network.py | 🔴 0% | [superset_tool.utils.network] Unclosed Anchor at end of file (started line 1)
[superset_tool.utils.network] Unclosed Anchor: [DEF:superset_tool.utils.network:Module] started at line 1
[APIClient] Unclosed Anchor at end of file (started line 24)
[APIClient] Unclosed Anchor: [DEF:APIClient:Class] started at line 24
[APIClient] Unclosed Anchor: [DEF:APIClient:Class] started at line 24
[APIClient.__init__] Unclosed Anchor at end of file (started line 29)
[APIClient.__init__] Unclosed Anchor: [DEF:APIClient.__init__:Function] started at line 29
[APIClient.__init__] Unclosed Anchor: [DEF:APIClient.__init__:Function] started at line 29
[APIClient.__init__] Unclosed Anchor: [DEF:APIClient.__init__:Function] started at line 29
[APIClient._init_session] Unclosed Anchor at end of file (started line 47)
[APIClient._init_session] Unclosed Anchor: [DEF:APIClient._init_session:Function] started at line 47
[APIClient._init_session] Unclosed Anchor: [DEF:APIClient._init_session:Function] started at line 47
[APIClient._init_session] Unclosed Anchor: [DEF:APIClient._init_session:Function] started at line 47
[APIClient._init_session] Unclosed Anchor: [DEF:APIClient._init_session:Function] started at line 47
[APIClient.authenticate] Unclosed Anchor at end of file (started line 63)
[APIClient.authenticate] Unclosed Anchor: [DEF:APIClient.authenticate:Function] started at line 63
[APIClient.authenticate] Unclosed Anchor: [DEF:APIClient.authenticate:Function] started at line 63
[APIClient.authenticate] Unclosed Anchor: [DEF:APIClient.authenticate:Function] started at line 63
[APIClient.authenticate] Unclosed Anchor: [DEF:APIClient.authenticate:Function] started at line 63
[APIClient.authenticate] Unclosed Anchor: [DEF:APIClient.authenticate:Function] started at line 63
[APIClient.headers] Unclosed Anchor at end of file (started line 92)
[APIClient.headers] Unclosed Anchor: [DEF:APIClient.headers:Function] started at line 92
[APIClient.headers] Unclosed Anchor: [DEF:APIClient.headers:Function] started at line 92
[APIClient.headers] Unclosed Anchor: [DEF:APIClient.headers:Function] started at line 92
[APIClient.headers] Unclosed Anchor: [DEF:APIClient.headers:Function] started at line 92
[APIClient.headers] Unclosed Anchor: [DEF:APIClient.headers:Function] started at line 92
[APIClient.headers] Unclosed Anchor: [DEF:APIClient.headers:Function] started at line 92
[APIClient.request] Unclosed Anchor at end of file (started line 103)
[APIClient.request] Unclosed Anchor: [DEF:APIClient.request:Function] started at line 103
[APIClient.request] Unclosed Anchor: [DEF:APIClient.request:Function] started at line 103
[APIClient.request] Unclosed Anchor: [DEF:APIClient.request:Function] started at line 103
[APIClient.request] Unclosed Anchor: [DEF:APIClient.request:Function] started at line 103
[APIClient.request] Unclosed Anchor: [DEF:APIClient.request:Function] started at line 103
[APIClient.request] Unclosed Anchor: [DEF:APIClient.request:Function] started at line 103
[APIClient.request] Unclosed Anchor: [DEF:APIClient.request:Function] started at line 103
[APIClient._handle_http_error] Unclosed Anchor at end of file (started line 126)
[APIClient._handle_http_error] Unclosed Anchor: [DEF:APIClient._handle_http_error:Function] started at line 126
[APIClient._handle_http_error] Unclosed Anchor: [DEF:APIClient._handle_http_error:Function] started at line 126
[APIClient._handle_http_error] Unclosed Anchor: [DEF:APIClient._handle_http_error:Function] started at line 126
[APIClient._handle_http_error] Unclosed Anchor: [DEF:APIClient._handle_http_error:Function] started at line 126
[APIClient._handle_http_error] Unclosed Anchor: [DEF:APIClient._handle_http_error:Function] started at line 126
[APIClient._handle_http_error] Unclosed Anchor: [DEF:APIClient._handle_http_error:Function] started at line 126
[APIClient._handle_http_error] Unclosed Anchor: [DEF:APIClient._handle_http_error:Function] started at line 126
[APIClient._handle_http_error] Unclosed Anchor: [DEF:APIClient._handle_http_error:Function] started at line 126
[APIClient._handle_network_error] Unclosed Anchor at end of file (started line 138)
[APIClient._handle_network_error] Unclosed Anchor: [DEF:APIClient._handle_network_error:Function] started at line 138
[APIClient._handle_network_error] Unclosed Anchor: [DEF:APIClient._handle_network_error:Function] started at line 138
[APIClient._handle_network_error] Unclosed Anchor: [DEF:APIClient._handle_network_error:Function] started at line 138
[APIClient._handle_network_error] Unclosed Anchor: [DEF:APIClient._handle_network_error:Function] started at line 138
[APIClient._handle_network_error] Unclosed Anchor: [DEF:APIClient._handle_network_error:Function] started at line 138
[APIClient._handle_network_error] Unclosed Anchor: [DEF:APIClient._handle_network_error:Function] started at line 138
[APIClient._handle_network_error] Unclosed Anchor: [DEF:APIClient._handle_network_error:Function] started at line 138
[APIClient._handle_network_error] Unclosed Anchor: [DEF:APIClient._handle_network_error:Function] started at line 138
[APIClient._handle_network_error] Unclosed Anchor: [DEF:APIClient._handle_network_error:Function] started at line 138
[APIClient.upload_file] Unclosed Anchor at end of file (started line 149)
[APIClient.upload_file] Unclosed Anchor: [DEF:APIClient.upload_file:Function] started at line 149
[APIClient.upload_file] Unclosed Anchor: [DEF:APIClient.upload_file:Function] started at line 149
[APIClient.upload_file] Unclosed Anchor: [DEF:APIClient.upload_file:Function] started at line 149
[APIClient.upload_file] Unclosed Anchor: [DEF:APIClient.upload_file:Function] started at line 149
[APIClient.upload_file] Unclosed Anchor: [DEF:APIClient.upload_file:Function] started at line 149
[APIClient.upload_file] Unclosed Anchor: [DEF:APIClient.upload_file:Function] started at line 149
[APIClient.upload_file] Unclosed Anchor: [DEF:APIClient.upload_file:Function] started at line 149
[APIClient.upload_file] Unclosed Anchor: [DEF:APIClient.upload_file:Function] started at line 149
[APIClient.upload_file] Unclosed Anchor: [DEF:APIClient.upload_file:Function] started at line 149
[APIClient.upload_file] Unclosed Anchor: [DEF:APIClient.upload_file:Function] started at line 149
[APIClient._perform_upload] Unclosed Anchor at end of file (started line 175)
[APIClient._perform_upload] Unclosed Anchor: [DEF:APIClient._perform_upload:Function] started at line 175
[APIClient._perform_upload] Unclosed Anchor: [DEF:APIClient._perform_upload:Function] started at line 175
[APIClient._perform_upload] Unclosed Anchor: [DEF:APIClient._perform_upload:Function] started at line 175
[APIClient._perform_upload] Unclosed Anchor: [DEF:APIClient._perform_upload:Function] started at line 175
[APIClient._perform_upload] Unclosed Anchor: [DEF:APIClient._perform_upload:Function] started at line 175
[APIClient._perform_upload] Unclosed Anchor: [DEF:APIClient._perform_upload:Function] started at line 175
[APIClient._perform_upload] Unclosed Anchor: [DEF:APIClient._perform_upload:Function] started at line 175
[APIClient._perform_upload] Unclosed Anchor: [DEF:APIClient._perform_upload:Function] started at line 175
[APIClient._perform_upload] Unclosed Anchor: [DEF:APIClient._perform_upload:Function] started at line 175
[APIClient._perform_upload] Unclosed Anchor: [DEF:APIClient._perform_upload:Function] started at line 175
[APIClient._perform_upload] Unclosed Anchor: [DEF:APIClient._perform_upload:Function] started at line 175
[APIClient.fetch_paginated_count] Unclosed Anchor at end of file (started line 201)
[APIClient.fetch_paginated_count] Unclosed Anchor: [DEF:APIClient.fetch_paginated_count:Function] started at line 201
[APIClient.fetch_paginated_count] Unclosed Anchor: [DEF:APIClient.fetch_paginated_count:Function] started at line 201
[APIClient.fetch_paginated_count] Unclosed Anchor: [DEF:APIClient.fetch_paginated_count:Function] started at line 201
[APIClient.fetch_paginated_count] Unclosed Anchor: [DEF:APIClient.fetch_paginated_count:Function] started at line 201
[APIClient.fetch_paginated_count] Unclosed Anchor: [DEF:APIClient.fetch_paginated_count:Function] started at line 201
[APIClient.fetch_paginated_count] Unclosed Anchor: [DEF:APIClient.fetch_paginated_count:Function] started at line 201
[APIClient.fetch_paginated_count] Unclosed Anchor: [DEF:APIClient.fetch_paginated_count:Function] started at line 201
[APIClient.fetch_paginated_count] Unclosed Anchor: [DEF:APIClient.fetch_paginated_count:Function] started at line 201
[APIClient.fetch_paginated_count] Unclosed Anchor: [DEF:APIClient.fetch_paginated_count:Function] started at line 201
[APIClient.fetch_paginated_count] Unclosed Anchor: [DEF:APIClient.fetch_paginated_count:Function] started at line 201
[APIClient.fetch_paginated_count] Unclosed Anchor: [DEF:APIClient.fetch_paginated_count:Function] started at line 201
[APIClient.fetch_paginated_count] Unclosed Anchor: [DEF:APIClient.fetch_paginated_count:Function] started at line 201
[APIClient.fetch_paginated_data] Unclosed Anchor at end of file (started line 212)
[APIClient.fetch_paginated_data] Unclosed Anchor: [DEF:APIClient.fetch_paginated_data:Function] started at line 212
[APIClient.fetch_paginated_data] Unclosed Anchor: [DEF:APIClient.fetch_paginated_data:Function] started at line 212
[APIClient.fetch_paginated_data] Unclosed Anchor: [DEF:APIClient.fetch_paginated_data:Function] started at line 212
[APIClient.fetch_paginated_data] Unclosed Anchor: [DEF:APIClient.fetch_paginated_data:Function] started at line 212
[APIClient.fetch_paginated_data] Unclosed Anchor: [DEF:APIClient.fetch_paginated_data:Function] started at line 212
[APIClient.fetch_paginated_data] Unclosed Anchor: [DEF:APIClient.fetch_paginated_data:Function] started at line 212
[APIClient.fetch_paginated_data] Unclosed Anchor: [DEF:APIClient.fetch_paginated_data:Function] started at line 212
[APIClient.fetch_paginated_data] Unclosed Anchor: [DEF:APIClient.fetch_paginated_data:Function] started at line 212
[APIClient.fetch_paginated_data] Unclosed Anchor: [DEF:APIClient.fetch_paginated_data:Function] started at line 212
[APIClient.fetch_paginated_data] Unclosed Anchor: [DEF:APIClient.fetch_paginated_data:Function] started at line 212
[APIClient.fetch_paginated_data] Unclosed Anchor: [DEF:APIClient.fetch_paginated_data:Function] started at line 212
[APIClient.fetch_paginated_data] Unclosed Anchor: [DEF:APIClient.fetch_paginated_data:Function] started at line 212
[APIClient.fetch_paginated_data] Unclosed Anchor: [DEF:APIClient.fetch_paginated_data:Function] started at line 212 | +| superset_tool/utils/whiptail_fallback.py | 🔴 0% | [superset_tool.utils.whiptail_fallback] Unclosed Anchor at end of file (started line 1)
[superset_tool.utils.whiptail_fallback] Unclosed Anchor: [DEF:superset_tool.utils.whiptail_fallback:Module] started at line 1
[menu] Unclosed Anchor at end of file (started line 13)
[menu] Unclosed Anchor: [DEF:menu:Function] started at line 13
[menu] Unclosed Anchor: [DEF:menu:Function] started at line 13
[checklist] Unclosed Anchor at end of file (started line 31)
[checklist] Unclosed Anchor: [DEF:checklist:Function] started at line 31
[checklist] Unclosed Anchor: [DEF:checklist:Function] started at line 31
[checklist] Unclosed Anchor: [DEF:checklist:Function] started at line 31
[yesno] Unclosed Anchor at end of file (started line 51)
[yesno] Unclosed Anchor: [DEF:yesno:Function] started at line 51
[yesno] Unclosed Anchor: [DEF:yesno:Function] started at line 51
[yesno] Unclosed Anchor: [DEF:yesno:Function] started at line 51
[yesno] Unclosed Anchor: [DEF:yesno:Function] started at line 51
[msgbox] Unclosed Anchor at end of file (started line 61)
[msgbox] Unclosed Anchor: [DEF:msgbox:Function] started at line 61
[msgbox] Unclosed Anchor: [DEF:msgbox:Function] started at line 61
[msgbox] Unclosed Anchor: [DEF:msgbox:Function] started at line 61
[msgbox] Unclosed Anchor: [DEF:msgbox:Function] started at line 61
[msgbox] Unclosed Anchor: [DEF:msgbox:Function] started at line 61
[inputbox] Unclosed Anchor at end of file (started line 69)
[inputbox] Unclosed Anchor: [DEF:inputbox:Function] started at line 69
[inputbox] Unclosed Anchor: [DEF:inputbox:Function] started at line 69
[inputbox] Unclosed Anchor: [DEF:inputbox:Function] started at line 69
[inputbox] Unclosed Anchor: [DEF:inputbox:Function] started at line 69
[inputbox] Unclosed Anchor: [DEF:inputbox:Function] started at line 69
[inputbox] Unclosed Anchor: [DEF:inputbox:Function] started at line 69
[_ConsoleGauge] Unclosed Anchor at end of file (started line 80)
[_ConsoleGauge] Unclosed Anchor: [DEF:_ConsoleGauge:Class] started at line 80
[_ConsoleGauge] Unclosed Anchor: [DEF:_ConsoleGauge:Class] started at line 80
[_ConsoleGauge] Unclosed Anchor: [DEF:_ConsoleGauge:Class] started at line 80
[_ConsoleGauge] Unclosed Anchor: [DEF:_ConsoleGauge:Class] started at line 80
[_ConsoleGauge] Unclosed Anchor: [DEF:_ConsoleGauge:Class] started at line 80
[_ConsoleGauge] Unclosed Anchor: [DEF:_ConsoleGauge:Class] started at line 80
[_ConsoleGauge] Unclosed Anchor: [DEF:_ConsoleGauge:Class] started at line 80
[gauge] Unclosed Anchor at end of file (started line 96)
[gauge] Unclosed Anchor: [DEF:gauge:Function] started at line 96
[gauge] Unclosed Anchor: [DEF:gauge:Function] started at line 96
[gauge] Unclosed Anchor: [DEF:gauge:Function] started at line 96
[gauge] Unclosed Anchor: [DEF:gauge:Function] started at line 96
[gauge] Unclosed Anchor: [DEF:gauge:Function] started at line 96
[gauge] Unclosed Anchor: [DEF:gauge:Function] started at line 96
[gauge] Unclosed Anchor: [DEF:gauge:Function] started at line 96
[gauge] Unclosed Anchor: [DEF:gauge:Function] started at line 96 | +| superset_tool/utils/dataset_mapper.py | 🔴 0% | [superset_tool.utils.dataset_mapper] Unclosed Anchor at end of file (started line 1)
[superset_tool.utils.dataset_mapper] Unclosed Anchor: [DEF:superset_tool.utils.dataset_mapper:Module] started at line 1
[DatasetMapper] Unclosed Anchor at end of file (started line 20)
[DatasetMapper] Unclosed Anchor: [DEF:DatasetMapper:Class] started at line 20
[DatasetMapper] Unclosed Anchor: [DEF:DatasetMapper:Class] started at line 20
[DatasetMapper.get_postgres_comments] Unclosed Anchor at end of file (started line 26)
[DatasetMapper.get_postgres_comments] Unclosed Anchor: [DEF:DatasetMapper.get_postgres_comments:Function] started at line 26
[DatasetMapper.get_postgres_comments] Unclosed Anchor: [DEF:DatasetMapper.get_postgres_comments:Function] started at line 26
[DatasetMapper.get_postgres_comments] Unclosed Anchor: [DEF:DatasetMapper.get_postgres_comments:Function] started at line 26
[DatasetMapper.load_excel_mappings] Unclosed Anchor at end of file (started line 90)
[DatasetMapper.load_excel_mappings] Unclosed Anchor: [DEF:DatasetMapper.load_excel_mappings:Function] started at line 90
[DatasetMapper.load_excel_mappings] Unclosed Anchor: [DEF:DatasetMapper.load_excel_mappings:Function] started at line 90
[DatasetMapper.load_excel_mappings] Unclosed Anchor: [DEF:DatasetMapper.load_excel_mappings:Function] started at line 90
[DatasetMapper.load_excel_mappings] Unclosed Anchor: [DEF:DatasetMapper.load_excel_mappings:Function] started at line 90
[DatasetMapper.run_mapping] Unclosed Anchor at end of file (started line 109)
[DatasetMapper.run_mapping] Unclosed Anchor: [DEF:DatasetMapper.run_mapping:Function] started at line 109
[DatasetMapper.run_mapping] Unclosed Anchor: [DEF:DatasetMapper.run_mapping:Function] started at line 109
[DatasetMapper.run_mapping] Unclosed Anchor: [DEF:DatasetMapper.run_mapping:Function] started at line 109
[DatasetMapper.run_mapping] Unclosed Anchor: [DEF:DatasetMapper.run_mapping:Function] started at line 109
[DatasetMapper.run_mapping] Unclosed Anchor: [DEF:DatasetMapper.run_mapping:Function] started at line 109 | +| superset_tool/utils/__init__.py | 🔴 0% | [superset_tool.utils] Unclosed Anchor at end of file (started line 1)
[superset_tool.utils] Unclosed Anchor: [DEF:superset_tool.utils:Module] started at line 1 | +| superset_tool/utils/init_clients.py | 🔴 0% | [superset_tool.utils.init_clients] Unclosed Anchor at end of file (started line 1)
[superset_tool.utils.init_clients] Unclosed Anchor: [DEF:superset_tool.utils.init_clients:Module] started at line 1
[setup_clients] Unclosed Anchor at end of file (started line 20)
[setup_clients] Unclosed Anchor: [DEF:setup_clients:Function] started at line 20
[setup_clients] Unclosed Anchor: [DEF:setup_clients:Function] started at line 20 | +| superset_tool/utils/fileio.py | 🔴 0% | [superset_tool.utils.fileio] Unclosed Anchor at end of file (started line 1)
[superset_tool.utils.fileio] Unclosed Anchor: [DEF:superset_tool.utils.fileio:Module] started at line 1
[create_temp_file] Unclosed Anchor at end of file (started line 29)
[create_temp_file] Unclosed Anchor: [DEF:create_temp_file:Function] started at line 29
[create_temp_file] Unclosed Anchor: [DEF:create_temp_file:Function] started at line 29
[remove_empty_directories] Unclosed Anchor at end of file (started line 69)
[remove_empty_directories] Unclosed Anchor: [DEF:remove_empty_directories:Function] started at line 69
[remove_empty_directories] Unclosed Anchor: [DEF:remove_empty_directories:Function] started at line 69
[remove_empty_directories] Unclosed Anchor: [DEF:remove_empty_directories:Function] started at line 69
[read_dashboard_from_disk] Unclosed Anchor at end of file (started line 93)
[read_dashboard_from_disk] Unclosed Anchor: [DEF:read_dashboard_from_disk:Function] started at line 93
[read_dashboard_from_disk] Unclosed Anchor: [DEF:read_dashboard_from_disk:Function] started at line 93
[read_dashboard_from_disk] Unclosed Anchor: [DEF:read_dashboard_from_disk:Function] started at line 93
[read_dashboard_from_disk] Unclosed Anchor: [DEF:read_dashboard_from_disk:Function] started at line 93
[calculate_crc32] Unclosed Anchor at end of file (started line 110)
[calculate_crc32] Unclosed Anchor: [DEF:calculate_crc32:Function] started at line 110
[calculate_crc32] Unclosed Anchor: [DEF:calculate_crc32:Function] started at line 110
[calculate_crc32] Unclosed Anchor: [DEF:calculate_crc32:Function] started at line 110
[calculate_crc32] Unclosed Anchor: [DEF:calculate_crc32:Function] started at line 110
[calculate_crc32] Unclosed Anchor: [DEF:calculate_crc32:Function] started at line 110
[RetentionPolicy] Unclosed Anchor at end of file (started line 121)
[RetentionPolicy] Unclosed Anchor: [DEF:RetentionPolicy:DataClass] started at line 121
[RetentionPolicy] Unclosed Anchor: [DEF:RetentionPolicy:DataClass] started at line 121
[RetentionPolicy] Unclosed Anchor: [DEF:RetentionPolicy:DataClass] started at line 121
[RetentionPolicy] Unclosed Anchor: [DEF:RetentionPolicy:DataClass] started at line 121
[RetentionPolicy] Unclosed Anchor: [DEF:RetentionPolicy:DataClass] started at line 121
[RetentionPolicy] Unclosed Anchor: [DEF:RetentionPolicy:DataClass] started at line 121
[archive_exports] Unclosed Anchor at end of file (started line 130)
[archive_exports] Unclosed Anchor: [DEF:archive_exports:Function] started at line 130
[archive_exports] Unclosed Anchor: [DEF:archive_exports:Function] started at line 130
[archive_exports] Unclosed Anchor: [DEF:archive_exports:Function] started at line 130
[archive_exports] Unclosed Anchor: [DEF:archive_exports:Function] started at line 130
[archive_exports] Unclosed Anchor: [DEF:archive_exports:Function] started at line 130
[archive_exports] Unclosed Anchor: [DEF:archive_exports:Function] started at line 130
[archive_exports] Unclosed Anchor: [DEF:archive_exports:Function] started at line 130
[apply_retention_policy] Unclosed Anchor at end of file (started line 212)
[apply_retention_policy] Unclosed Anchor: [DEF:apply_retention_policy:Function] started at line 212
[apply_retention_policy] Unclosed Anchor: [DEF:apply_retention_policy:Function] started at line 212
[apply_retention_policy] Unclosed Anchor: [DEF:apply_retention_policy:Function] started at line 212
[apply_retention_policy] Unclosed Anchor: [DEF:apply_retention_policy:Function] started at line 212
[apply_retention_policy] Unclosed Anchor: [DEF:apply_retention_policy:Function] started at line 212
[apply_retention_policy] Unclosed Anchor: [DEF:apply_retention_policy:Function] started at line 212
[apply_retention_policy] Unclosed Anchor: [DEF:apply_retention_policy:Function] started at line 212
[apply_retention_policy] Unclosed Anchor: [DEF:apply_retention_policy:Function] started at line 212
[save_and_unpack_dashboard] Unclosed Anchor at end of file (started line 245)
[save_and_unpack_dashboard] Unclosed Anchor: [DEF:save_and_unpack_dashboard:Function] started at line 245
[save_and_unpack_dashboard] Unclosed Anchor: [DEF:save_and_unpack_dashboard:Function] started at line 245
[save_and_unpack_dashboard] Unclosed Anchor: [DEF:save_and_unpack_dashboard:Function] started at line 245
[save_and_unpack_dashboard] Unclosed Anchor: [DEF:save_and_unpack_dashboard:Function] started at line 245
[save_and_unpack_dashboard] Unclosed Anchor: [DEF:save_and_unpack_dashboard:Function] started at line 245
[save_and_unpack_dashboard] Unclosed Anchor: [DEF:save_and_unpack_dashboard:Function] started at line 245
[save_and_unpack_dashboard] Unclosed Anchor: [DEF:save_and_unpack_dashboard:Function] started at line 245
[save_and_unpack_dashboard] Unclosed Anchor: [DEF:save_and_unpack_dashboard:Function] started at line 245
[save_and_unpack_dashboard] Unclosed Anchor: [DEF:save_and_unpack_dashboard:Function] started at line 245
[update_yamls] Unclosed Anchor at end of file (started line 275)
[update_yamls] Unclosed Anchor: [DEF:update_yamls:Function] started at line 275
[update_yamls] Unclosed Anchor: [DEF:update_yamls:Function] started at line 275
[update_yamls] Unclosed Anchor: [DEF:update_yamls:Function] started at line 275
[update_yamls] Unclosed Anchor: [DEF:update_yamls:Function] started at line 275
[update_yamls] Unclosed Anchor: [DEF:update_yamls:Function] started at line 275
[update_yamls] Unclosed Anchor: [DEF:update_yamls:Function] started at line 275
[update_yamls] Unclosed Anchor: [DEF:update_yamls:Function] started at line 275
[update_yamls] Unclosed Anchor: [DEF:update_yamls:Function] started at line 275
[update_yamls] Unclosed Anchor: [DEF:update_yamls:Function] started at line 275
[update_yamls] Unclosed Anchor: [DEF:update_yamls:Function] started at line 275
[_update_yaml_file] Unclosed Anchor at end of file (started line 296)
[_update_yaml_file] Unclosed Anchor: [DEF:_update_yaml_file:Function] started at line 296
[_update_yaml_file] Unclosed Anchor: [DEF:_update_yaml_file:Function] started at line 296
[_update_yaml_file] Unclosed Anchor: [DEF:_update_yaml_file:Function] started at line 296
[_update_yaml_file] Unclosed Anchor: [DEF:_update_yaml_file:Function] started at line 296
[_update_yaml_file] Unclosed Anchor: [DEF:_update_yaml_file:Function] started at line 296
[_update_yaml_file] Unclosed Anchor: [DEF:_update_yaml_file:Function] started at line 296
[_update_yaml_file] Unclosed Anchor: [DEF:_update_yaml_file:Function] started at line 296
[_update_yaml_file] Unclosed Anchor: [DEF:_update_yaml_file:Function] started at line 296
[_update_yaml_file] Unclosed Anchor: [DEF:_update_yaml_file:Function] started at line 296
[_update_yaml_file] Unclosed Anchor: [DEF:_update_yaml_file:Function] started at line 296
[_update_yaml_file] Unclosed Anchor: [DEF:_update_yaml_file:Function] started at line 296
[create_dashboard_export] Unclosed Anchor at end of file (started line 357)
[create_dashboard_export] Unclosed Anchor: [DEF:create_dashboard_export:Function] started at line 357
[create_dashboard_export] Unclosed Anchor: [DEF:create_dashboard_export:Function] started at line 357
[create_dashboard_export] Unclosed Anchor: [DEF:create_dashboard_export:Function] started at line 357
[create_dashboard_export] Unclosed Anchor: [DEF:create_dashboard_export:Function] started at line 357
[create_dashboard_export] Unclosed Anchor: [DEF:create_dashboard_export:Function] started at line 357
[create_dashboard_export] Unclosed Anchor: [DEF:create_dashboard_export:Function] started at line 357
[create_dashboard_export] Unclosed Anchor: [DEF:create_dashboard_export:Function] started at line 357
[create_dashboard_export] Unclosed Anchor: [DEF:create_dashboard_export:Function] started at line 357
[create_dashboard_export] Unclosed Anchor: [DEF:create_dashboard_export:Function] started at line 357
[create_dashboard_export] Unclosed Anchor: [DEF:create_dashboard_export:Function] started at line 357
[create_dashboard_export] Unclosed Anchor: [DEF:create_dashboard_export:Function] started at line 357
[create_dashboard_export] Unclosed Anchor: [DEF:create_dashboard_export:Function] started at line 357
[sanitize_filename] Unclosed Anchor at end of file (started line 384)
[sanitize_filename] Unclosed Anchor: [DEF:sanitize_filename:Function] started at line 384
[sanitize_filename] Unclosed Anchor: [DEF:sanitize_filename:Function] started at line 384
[sanitize_filename] Unclosed Anchor: [DEF:sanitize_filename:Function] started at line 384
[sanitize_filename] Unclosed Anchor: [DEF:sanitize_filename:Function] started at line 384
[sanitize_filename] Unclosed Anchor: [DEF:sanitize_filename:Function] started at line 384
[sanitize_filename] Unclosed Anchor: [DEF:sanitize_filename:Function] started at line 384
[sanitize_filename] Unclosed Anchor: [DEF:sanitize_filename:Function] started at line 384
[sanitize_filename] Unclosed Anchor: [DEF:sanitize_filename:Function] started at line 384
[sanitize_filename] Unclosed Anchor: [DEF:sanitize_filename:Function] started at line 384
[sanitize_filename] Unclosed Anchor: [DEF:sanitize_filename:Function] started at line 384
[sanitize_filename] Unclosed Anchor: [DEF:sanitize_filename:Function] started at line 384
[sanitize_filename] Unclosed Anchor: [DEF:sanitize_filename:Function] started at line 384
[sanitize_filename] Unclosed Anchor: [DEF:sanitize_filename:Function] started at line 384
[get_filename_from_headers] Unclosed Anchor at end of file (started line 392)
[get_filename_from_headers] Unclosed Anchor: [DEF:get_filename_from_headers:Function] started at line 392
[get_filename_from_headers] Unclosed Anchor: [DEF:get_filename_from_headers:Function] started at line 392
[get_filename_from_headers] Unclosed Anchor: [DEF:get_filename_from_headers:Function] started at line 392
[get_filename_from_headers] Unclosed Anchor: [DEF:get_filename_from_headers:Function] started at line 392
[get_filename_from_headers] Unclosed Anchor: [DEF:get_filename_from_headers:Function] started at line 392
[get_filename_from_headers] Unclosed Anchor: [DEF:get_filename_from_headers:Function] started at line 392
[get_filename_from_headers] Unclosed Anchor: [DEF:get_filename_from_headers:Function] started at line 392
[get_filename_from_headers] Unclosed Anchor: [DEF:get_filename_from_headers:Function] started at line 392
[get_filename_from_headers] Unclosed Anchor: [DEF:get_filename_from_headers:Function] started at line 392
[get_filename_from_headers] Unclosed Anchor: [DEF:get_filename_from_headers:Function] started at line 392
[get_filename_from_headers] Unclosed Anchor: [DEF:get_filename_from_headers:Function] started at line 392
[get_filename_from_headers] Unclosed Anchor: [DEF:get_filename_from_headers:Function] started at line 392
[get_filename_from_headers] Unclosed Anchor: [DEF:get_filename_from_headers:Function] started at line 392
[get_filename_from_headers] Unclosed Anchor: [DEF:get_filename_from_headers:Function] started at line 392
[consolidate_archive_folders] Unclosed Anchor at end of file (started line 403)
[consolidate_archive_folders] Unclosed Anchor: [DEF:consolidate_archive_folders:Function] started at line 403
[consolidate_archive_folders] Unclosed Anchor: [DEF:consolidate_archive_folders:Function] started at line 403
[consolidate_archive_folders] Unclosed Anchor: [DEF:consolidate_archive_folders:Function] started at line 403
[consolidate_archive_folders] Unclosed Anchor: [DEF:consolidate_archive_folders:Function] started at line 403
[consolidate_archive_folders] Unclosed Anchor: [DEF:consolidate_archive_folders:Function] started at line 403
[consolidate_archive_folders] Unclosed Anchor: [DEF:consolidate_archive_folders:Function] started at line 403
[consolidate_archive_folders] Unclosed Anchor: [DEF:consolidate_archive_folders:Function] started at line 403
[consolidate_archive_folders] Unclosed Anchor: [DEF:consolidate_archive_folders:Function] started at line 403
[consolidate_archive_folders] Unclosed Anchor: [DEF:consolidate_archive_folders:Function] started at line 403
[consolidate_archive_folders] Unclosed Anchor: [DEF:consolidate_archive_folders:Function] started at line 403
[consolidate_archive_folders] Unclosed Anchor: [DEF:consolidate_archive_folders:Function] started at line 403
[consolidate_archive_folders] Unclosed Anchor: [DEF:consolidate_archive_folders:Function] started at line 403
[consolidate_archive_folders] Unclosed Anchor: [DEF:consolidate_archive_folders:Function] started at line 403
[consolidate_archive_folders] Unclosed Anchor: [DEF:consolidate_archive_folders:Function] started at line 403
[consolidate_archive_folders] Unclosed Anchor: [DEF:consolidate_archive_folders:Function] started at line 403 | +| frontend/src/App.svelte | 🔴 0% | [App] Unclosed Anchor at end of file (started line 1)
[App] Unclosed Anchor: [DEF:App:Component] started at line 1
[handleFormSubmit] Unclosed Anchor at end of file (started line 24)
[handleFormSubmit] Unclosed Anchor: [DEF:handleFormSubmit:Function] started at line 24
[handleFormSubmit] Unclosed Anchor: [DEF:handleFormSubmit:Function] started at line 24
[navigate] Unclosed Anchor at end of file (started line 44)
[navigate] Unclosed Anchor: [DEF:navigate:Function] started at line 44
[navigate] Unclosed Anchor: [DEF:navigate:Function] started at line 44
[navigate] Unclosed Anchor: [DEF:navigate:Function] started at line 44 | +| frontend/src/main.js | 🔴 0% | [main] Unclosed Anchor at end of file (started line 1)
[main] Unclosed Anchor: [DEF:main:Module] started at line 1
[app_instance] Unclosed Anchor at end of file (started line 9)
[app_instance] Unclosed Anchor: [DEF:app_instance:Data] started at line 9
[app_instance] Unclosed Anchor: [DEF:app_instance:Data] started at line 9 | +| frontend/src/components/DashboardGrid.svelte | 🔴 0% | [DashboardGrid] Unclosed Anchor at end of file (started line 1)
[DashboardGrid] Unclosed Anchor: [DEF:DashboardGrid:Component] started at line 1
[handleSort] Unclosed Anchor at end of file (started line 62)
[handleSort] Unclosed Anchor: [DEF:handleSort:Function] started at line 62
[handleSort] Unclosed Anchor: [DEF:handleSort:Function] started at line 62
[handleSelectionChange] Unclosed Anchor at end of file (started line 74)
[handleSelectionChange] Unclosed Anchor: [DEF:handleSelectionChange:Function] started at line 74
[handleSelectionChange] Unclosed Anchor: [DEF:handleSelectionChange:Function] started at line 74
[handleSelectionChange] Unclosed Anchor: [DEF:handleSelectionChange:Function] started at line 74
[handleSelectAll] Unclosed Anchor at end of file (started line 88)
[handleSelectAll] Unclosed Anchor: [DEF:handleSelectAll:Function] started at line 88
[handleSelectAll] Unclosed Anchor: [DEF:handleSelectAll:Function] started at line 88
[handleSelectAll] Unclosed Anchor: [DEF:handleSelectAll:Function] started at line 88
[handleSelectAll] Unclosed Anchor: [DEF:handleSelectAll:Function] started at line 88
[goToPage] Unclosed Anchor at end of file (started line 106)
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106 | +| frontend/src/components/TaskHistory.svelte | 🔴 0% | [TaskHistory] Unclosed Anchor at end of file (started line 1)
[TaskHistory] Unclosed Anchor: [DEF:TaskHistory:Component] started at line 1 | +| frontend/src/components/MappingTable.svelte | 🔴 0% | [MappingTable] Unclosed Anchor at end of file (started line 1)
[MappingTable] Unclosed Anchor: [DEF:MappingTable:Component] started at line 1
[updateMapping] Unclosed Anchor at end of file (started line 25)
[updateMapping] Unclosed Anchor: [DEF:updateMapping:Function] started at line 25
[updateMapping] Unclosed Anchor: [DEF:updateMapping:Function] started at line 25
[getSuggestion] Unclosed Anchor at end of file (started line 34)
[getSuggestion] Unclosed Anchor: [DEF:getSuggestion:Function] started at line 34
[getSuggestion] Unclosed Anchor: [DEF:getSuggestion:Function] started at line 34
[getSuggestion] Unclosed Anchor: [DEF:getSuggestion:Function] started at line 34 | +| frontend/src/components/EnvSelector.svelte | 🔴 0% | [EnvSelector] Unclosed Anchor at end of file (started line 1)
[EnvSelector] Unclosed Anchor: [DEF:EnvSelector:Component] started at line 1
[handleSelect] Unclosed Anchor at end of file (started line 24)
[handleSelect] Unclosed Anchor: [DEF:handleSelect:Function] started at line 24
[handleSelect] Unclosed Anchor: [DEF:handleSelect:Function] started at line 24 | +| frontend/src/components/TaskList.svelte | 🔴 0% | [TaskList] Unclosed Anchor at end of file (started line 1)
[TaskList] Unclosed Anchor: [DEF:TaskList:Component] started at line 1 | +| frontend/src/components/DynamicForm.svelte | 🔴 0% | [DynamicForm] Unclosed Anchor at end of file (started line 1)
[DynamicForm] Unclosed Anchor: [DEF:DynamicForm:Component] started at line 1
[handleSubmit] Unclosed Anchor at end of file (started line 23)
[handleSubmit] Unclosed Anchor: [DEF:handleSubmit:Function] started at line 23
[handleSubmit] Unclosed Anchor: [DEF:handleSubmit:Function] started at line 23
[initializeForm] Unclosed Anchor at end of file (started line 33)
[initializeForm] Unclosed Anchor: [DEF:initializeForm:Function] started at line 33
[initializeForm] Unclosed Anchor: [DEF:initializeForm:Function] started at line 33
[initializeForm] Unclosed Anchor: [DEF:initializeForm:Function] started at line 33 | +| frontend/src/components/TaskRunner.svelte | 🔴 0% | [TaskRunner] Unclosed Anchor at end of file (started line 1)
[TaskRunner] Unclosed Anchor: [DEF:TaskRunner:Component] started at line 1
[connect] Unclosed Anchor at end of file (started line 38)
[connect] Unclosed Anchor: [DEF:connect:Function] started at line 38
[connect] Unclosed Anchor: [DEF:connect:Function] started at line 38
[onMount] Unclosed Anchor at end of file (started line 225)
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 225
[onMount] Missing Mandatory Tag: @PURPOSE
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 225
[onMount] Missing Mandatory Tag: @PURPOSE
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 225
[onMount] Missing Mandatory Tag: @PURPOSE
[onDestroy] Unclosed Anchor at end of file (started line 251)
[onDestroy] Unclosed Anchor: [DEF:onDestroy:Function] started at line 251
[onDestroy] Unclosed Anchor: [DEF:onDestroy:Function] started at line 251
[onDestroy] Unclosed Anchor: [DEF:onDestroy:Function] started at line 251
[onDestroy] Unclosed Anchor: [DEF:onDestroy:Function] started at line 251 | +| frontend/src/components/TaskLogViewer.svelte | 🔴 0% | [TaskLogViewer] Unclosed Anchor at end of file (started line 1)
[TaskLogViewer] Unclosed Anchor: [DEF:TaskLogViewer:Component] started at line 1 | +| frontend/src/components/PasswordPrompt.svelte | 🔴 0% | [PasswordPrompt] Unclosed Anchor at end of file (started line 1)
[PasswordPrompt] Unclosed Anchor: [DEF:PasswordPrompt:Component] started at line 1 | +| frontend/src/components/MissingMappingModal.svelte | 🔴 0% | [MissingMappingModal] Unclosed Anchor at end of file (started line 1)
[MissingMappingModal] Unclosed Anchor: [DEF:MissingMappingModal:Component] started at line 1
[resolve] Unclosed Anchor at end of file (started line 26)
[resolve] Unclosed Anchor: [DEF:resolve:Function] started at line 26
[resolve] Missing Mandatory Tag: @PURPOSE
[resolve] Unclosed Anchor: [DEF:resolve:Function] started at line 26
[resolve] Missing Mandatory Tag: @PURPOSE
[cancel] Unclosed Anchor at end of file (started line 38)
[cancel] Unclosed Anchor: [DEF:cancel:Function] started at line 38
[cancel] Missing Mandatory Tag: @PURPOSE
[cancel] Unclosed Anchor: [DEF:cancel:Function] started at line 38
[cancel] Missing Mandatory Tag: @PURPOSE
[cancel] Unclosed Anchor: [DEF:cancel:Function] started at line 38
[cancel] Missing Mandatory Tag: @PURPOSE | +| frontend/src/components/Toast.svelte | 🔴 0% | [Toast] Unclosed Anchor at end of file (started line 1)
[Toast] Unclosed Anchor: [DEF:Toast:Component] started at line 1 | +| frontend/src/pages/Settings.svelte | 🔴 0% | [Settings] Unclosed Anchor at end of file (started line 1)
[Settings] Unclosed Anchor: [DEF:Settings:Component] started at line 1
[loadSettings] Unclosed Anchor at end of file (started line 50)
[loadSettings] Unclosed Anchor: [DEF:loadSettings:Function] started at line 50
[loadSettings] Unclosed Anchor: [DEF:loadSettings:Function] started at line 50
[handleSaveGlobal] Unclosed Anchor at end of file (started line 67)
[handleSaveGlobal] Unclosed Anchor: [DEF:handleSaveGlobal:Function] started at line 67
[handleSaveGlobal] Unclosed Anchor: [DEF:handleSaveGlobal:Function] started at line 67
[handleSaveGlobal] Unclosed Anchor: [DEF:handleSaveGlobal:Function] started at line 67
[handleAddOrUpdateEnv] Unclosed Anchor at end of file (started line 84)
[handleAddOrUpdateEnv] Unclosed Anchor: [DEF:handleAddOrUpdateEnv:Function] started at line 84
[handleAddOrUpdateEnv] Unclosed Anchor: [DEF:handleAddOrUpdateEnv:Function] started at line 84
[handleAddOrUpdateEnv] Unclosed Anchor: [DEF:handleAddOrUpdateEnv:Function] started at line 84
[handleAddOrUpdateEnv] Unclosed Anchor: [DEF:handleAddOrUpdateEnv:Function] started at line 84
[handleDeleteEnv] Unclosed Anchor at end of file (started line 108)
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleTestEnv] Unclosed Anchor at end of file (started line 129)
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[editEnv] Unclosed Anchor at end of file (started line 152)
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[resetEnvForm] Unclosed Anchor at end of file (started line 163)
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163 | +| frontend/src/pages/Dashboard.svelte | 🔴 0% | [Dashboard] Unclosed Anchor at end of file (started line 1)
[Dashboard] Unclosed Anchor: [DEF:Dashboard:Component] started at line 1
[onMount] Unclosed Anchor at end of file (started line 17)
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 17
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 17
[selectPlugin] Unclosed Anchor at end of file (started line 27)
[selectPlugin] Unclosed Anchor: [DEF:selectPlugin:Function] started at line 27
[selectPlugin] Unclosed Anchor: [DEF:selectPlugin:Function] started at line 27
[selectPlugin] Unclosed Anchor: [DEF:selectPlugin:Function] started at line 27 | +| frontend/src/lib/stores.js | 🔴 0% | [stores_module] Unclosed Anchor at end of file (started line 1)
[stores_module] Unclosed Anchor: [DEF:stores_module:Module] started at line 1
[plugins] Unclosed Anchor at end of file (started line 9)
[plugins] Unclosed Anchor: [DEF:plugins:Data] started at line 9
[plugins] Unclosed Anchor: [DEF:plugins:Data] started at line 9
[tasks] Unclosed Anchor at end of file (started line 13)
[tasks] Unclosed Anchor: [DEF:tasks:Data] started at line 13
[tasks] Unclosed Anchor: [DEF:tasks:Data] started at line 13
[tasks] Unclosed Anchor: [DEF:tasks:Data] started at line 13
[selectedPlugin] Unclosed Anchor at end of file (started line 17)
[selectedPlugin] Unclosed Anchor: [DEF:selectedPlugin:Data] started at line 17
[selectedPlugin] Unclosed Anchor: [DEF:selectedPlugin:Data] started at line 17
[selectedPlugin] Unclosed Anchor: [DEF:selectedPlugin:Data] started at line 17
[selectedPlugin] Unclosed Anchor: [DEF:selectedPlugin:Data] started at line 17
[selectedTask] Unclosed Anchor at end of file (started line 21)
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[currentPage] Unclosed Anchor at end of file (started line 25)
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[taskLogs] Unclosed Anchor at end of file (started line 29)
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[fetchPlugins] Unclosed Anchor at end of file (started line 33)
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchTasks] Unclosed Anchor at end of file (started line 47)
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47 | +| frontend/src/lib/toasts.js | 🔴 0% | [toasts_module] Unclosed Anchor at end of file (started line 1)
[toasts_module] Unclosed Anchor: [DEF:toasts_module:Module] started at line 1
[toasts] Unclosed Anchor at end of file (started line 8)
[toasts] Unclosed Anchor: [DEF:toasts:Data] started at line 8
[toasts] Unclosed Anchor: [DEF:toasts:Data] started at line 8
[addToast] Unclosed Anchor at end of file (started line 12)
[addToast] Unclosed Anchor: [DEF:addToast:Function] started at line 12
[addToast] Unclosed Anchor: [DEF:addToast:Function] started at line 12
[addToast] Unclosed Anchor: [DEF:addToast:Function] started at line 12
[removeToast] Unclosed Anchor at end of file (started line 25)
[removeToast] Unclosed Anchor: [DEF:removeToast:Function] started at line 25
[removeToast] Unclosed Anchor: [DEF:removeToast:Function] started at line 25
[removeToast] Unclosed Anchor: [DEF:removeToast:Function] started at line 25
[removeToast] Unclosed Anchor: [DEF:removeToast:Function] started at line 25 | +| frontend/src/lib/api.js | 🔴 0% | [api_module] Unclosed Anchor at end of file (started line 1)
[api_module] Unclosed Anchor: [DEF:api_module:Module] started at line 1
[fetchApi] Unclosed Anchor at end of file (started line 26)
[fetchApi] Unclosed Anchor: [DEF:fetchApi:Function] started at line 26
[fetchApi] Unclosed Anchor: [DEF:fetchApi:Function] started at line 26
[postApi] Unclosed Anchor at end of file (started line 46)
[postApi] Unclosed Anchor: [DEF:postApi:Function] started at line 46
[postApi] Unclosed Anchor: [DEF:postApi:Function] started at line 46
[postApi] Unclosed Anchor: [DEF:postApi:Function] started at line 46
[requestApi] Unclosed Anchor at end of file (started line 73)
[requestApi] Unclosed Anchor: [DEF:requestApi:Function] started at line 73
[requestApi] Unclosed Anchor: [DEF:requestApi:Function] started at line 73
[requestApi] Unclosed Anchor: [DEF:requestApi:Function] started at line 73
[requestApi] Unclosed Anchor: [DEF:requestApi:Function] started at line 73
[api] Unclosed Anchor at end of file (started line 100)
[api] Unclosed Anchor: [DEF:api:Data] started at line 100
[api] Unclosed Anchor: [DEF:api:Data] started at line 100
[api] Unclosed Anchor: [DEF:api:Data] started at line 100
[api] Unclosed Anchor: [DEF:api:Data] started at line 100
[api] Unclosed Anchor: [DEF:api:Data] started at line 100 | +| frontend/src/routes/migration/+page.svelte | 🔴 0% | [MigrationDashboard] Unclosed Anchor at end of file (started line 1)
[MigrationDashboard] Unclosed Anchor: [DEF:MigrationDashboard:Component] started at line 1
[fetchEnvironments] Unclosed Anchor at end of file (started line 51)
[fetchEnvironments] Unclosed Anchor: [DEF:fetchEnvironments:Function] started at line 51
[fetchEnvironments] Unclosed Anchor: [DEF:fetchEnvironments:Function] started at line 51
[fetchDashboards] Unclosed Anchor at end of file (started line 69)
[fetchDashboards] Unclosed Anchor: [DEF:fetchDashboards:Function] started at line 69
[fetchDashboards] Unclosed Anchor: [DEF:fetchDashboards:Function] started at line 69
[fetchDashboards] Unclosed Anchor: [DEF:fetchDashboards:Function] started at line 69
[fetchDatabases] Unclosed Anchor at end of file (started line 93)
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 93
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 93
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 93
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 93
[handleMappingUpdate] Unclosed Anchor at end of file (started line 128)
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleViewLogs] Unclosed Anchor at end of file (started line 163)
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor at end of file (started line 172)
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[startMigration] Unclosed Anchor at end of file (started line 207)
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207 | +| frontend/src/routes/migration/mappings/+page.svelte | 🔴 0% | [MappingManagement] Unclosed Anchor at end of file (started line 1)
[MappingManagement] Unclosed Anchor: [DEF:MappingManagement:Component] started at line 1
[fetchDatabases] Unclosed Anchor at end of file (started line 47)
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 47
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 47
[handleUpdate] Unclosed Anchor at end of file (started line 83)
[handleUpdate] Unclosed Anchor: [DEF:handleUpdate:Function] started at line 83
[handleUpdate] Unclosed Anchor: [DEF:handleUpdate:Function] started at line 83
[handleUpdate] Unclosed Anchor: [DEF:handleUpdate:Function] started at line 83 | +| backend/src/dependencies.py | 🔴 0% | [Dependencies] Unclosed Anchor at end of file (started line 1)
[Dependencies] Unclosed Anchor: [DEF:Dependencies:Module] started at line 1 | +| backend/src/app.py | 🔴 0% | [AppModule] Unclosed Anchor at end of file (started line 1)
[AppModule] Unclosed Anchor: [DEF:AppModule:Module] started at line 1
[App] Unclosed Anchor at end of file (started line 26)
[App] Unclosed Anchor: [DEF:App:Global] started at line 26
[App] Unclosed Anchor: [DEF:App:Global] started at line 26
[WebSocketEndpoint] Unclosed Anchor at end of file (started line 72)
[WebSocketEndpoint] Unclosed Anchor: [DEF:WebSocketEndpoint:Endpoint] started at line 72
[WebSocketEndpoint] Unclosed Anchor: [DEF:WebSocketEndpoint:Endpoint] started at line 72
[WebSocketEndpoint] Unclosed Anchor: [DEF:WebSocketEndpoint:Endpoint] started at line 72
[StaticFiles] Unclosed Anchor at end of file (started line 130)
[StaticFiles] Unclosed Anchor: [DEF:StaticFiles:Mount] started at line 130
[StaticFiles] Unclosed Anchor: [DEF:StaticFiles:Mount] started at line 130
[StaticFiles] Unclosed Anchor: [DEF:StaticFiles:Mount] started at line 130
[StaticFiles] Unclosed Anchor: [DEF:StaticFiles:Mount] started at line 130
[RootEndpoint] Unclosed Anchor at end of file (started line 146)
[RootEndpoint] Unclosed Anchor: [DEF:RootEndpoint:Endpoint] started at line 146
[RootEndpoint] Unclosed Anchor: [DEF:RootEndpoint:Endpoint] started at line 146
[RootEndpoint] Unclosed Anchor: [DEF:RootEndpoint:Endpoint] started at line 146
[RootEndpoint] Unclosed Anchor: [DEF:RootEndpoint:Endpoint] started at line 146
[RootEndpoint] Unclosed Anchor: [DEF:RootEndpoint:Endpoint] started at line 146 | +| backend/src/models/mapping.py | 🔴 0% | [backend.src.models.mapping] Unclosed Anchor at end of file (started line 1)
[backend.src.models.mapping] Unclosed Anchor: [DEF:backend.src.models.mapping:Module] started at line 1
[MigrationStatus] Unclosed Anchor at end of file (started line 21)
[MigrationStatus] Unclosed Anchor: [DEF:MigrationStatus:Class] started at line 21
[MigrationStatus] Unclosed Anchor: [DEF:MigrationStatus:Class] started at line 21
[Environment] Unclosed Anchor at end of file (started line 31)
[Environment] Unclosed Anchor: [DEF:Environment:Class] started at line 31
[Environment] Unclosed Anchor: [DEF:Environment:Class] started at line 31
[Environment] Unclosed Anchor: [DEF:Environment:Class] started at line 31
[DatabaseMapping] Unclosed Anchor at end of file (started line 42)
[DatabaseMapping] Unclosed Anchor: [DEF:DatabaseMapping:Class] started at line 42
[DatabaseMapping] Unclosed Anchor: [DEF:DatabaseMapping:Class] started at line 42
[DatabaseMapping] Unclosed Anchor: [DEF:DatabaseMapping:Class] started at line 42
[DatabaseMapping] Unclosed Anchor: [DEF:DatabaseMapping:Class] started at line 42
[MigrationJob] Unclosed Anchor at end of file (started line 57)
[MigrationJob] Unclosed Anchor: [DEF:MigrationJob:Class] started at line 57
[MigrationJob] Unclosed Anchor: [DEF:MigrationJob:Class] started at line 57
[MigrationJob] Unclosed Anchor: [DEF:MigrationJob:Class] started at line 57
[MigrationJob] Unclosed Anchor: [DEF:MigrationJob:Class] started at line 57
[MigrationJob] Unclosed Anchor: [DEF:MigrationJob:Class] started at line 57 | +| backend/src/models/dashboard.py | 🔴 0% | [backend.src.models.dashboard] Unclosed Anchor at end of file (started line 1)
[backend.src.models.dashboard] Unclosed Anchor: [DEF:backend.src.models.dashboard:Module] started at line 1
[DashboardMetadata] Unclosed Anchor at end of file (started line 10)
[DashboardMetadata] Unclosed Anchor: [DEF:DashboardMetadata:Class] started at line 10
[DashboardMetadata] Unclosed Anchor: [DEF:DashboardMetadata:Class] started at line 10
[DashboardSelection] Unclosed Anchor at end of file (started line 19)
[DashboardSelection] Unclosed Anchor: [DEF:DashboardSelection:Class] started at line 19
[DashboardSelection] Unclosed Anchor: [DEF:DashboardSelection:Class] started at line 19
[DashboardSelection] Unclosed Anchor: [DEF:DashboardSelection:Class] started at line 19 | +| backend/src/models/task.py | 🔴 0% | [backend.src.models.task] Unclosed Anchor at end of file (started line 1)
[backend.src.models.task] Unclosed Anchor: [DEF:backend.src.models.task:Module] started at line 1
[TaskRecord] Unclosed Anchor at end of file (started line 17)
[TaskRecord] Unclosed Anchor: [DEF:TaskRecord:Class] started at line 17
[TaskRecord] Unclosed Anchor: [DEF:TaskRecord:Class] started at line 17 | +| backend/src/services/mapping_service.py | 🔴 0% | [backend.src.services.mapping_service] Unclosed Anchor at end of file (started line 1)
[backend.src.services.mapping_service] Unclosed Anchor: [DEF:backend.src.services.mapping_service:Module] started at line 1
[MappingService] Unclosed Anchor at end of file (started line 18)
[MappingService] Unclosed Anchor: [DEF:MappingService:Class] started at line 18
[MappingService] Unclosed Anchor: [DEF:MappingService:Class] started at line 18
[MappingService.__init__] Unclosed Anchor at end of file (started line 22)
[MappingService.__init__] Unclosed Anchor: [DEF:MappingService.__init__:Function] started at line 22
[MappingService.__init__] Missing Mandatory Tag: @PURPOSE
[MappingService.__init__] Unclosed Anchor: [DEF:MappingService.__init__:Function] started at line 22
[MappingService.__init__] Missing Mandatory Tag: @PURPOSE
[MappingService.__init__] Unclosed Anchor: [DEF:MappingService.__init__:Function] started at line 22
[MappingService.__init__] Missing Mandatory Tag: @PURPOSE
[MappingService._get_client] Unclosed Anchor at end of file (started line 26)
[MappingService._get_client] Unclosed Anchor: [DEF:MappingService._get_client:Function] started at line 26
[MappingService._get_client] Unclosed Anchor: [DEF:MappingService._get_client:Function] started at line 26
[MappingService._get_client] Unclosed Anchor: [DEF:MappingService._get_client:Function] started at line 26
[MappingService._get_client] Unclosed Anchor: [DEF:MappingService._get_client:Function] started at line 26
[MappingService.get_suggestions] Unclosed Anchor at end of file (started line 46)
[MappingService.get_suggestions] Unclosed Anchor: [DEF:MappingService.get_suggestions:Function] started at line 46
[MappingService.get_suggestions] Unclosed Anchor: [DEF:MappingService.get_suggestions:Function] started at line 46
[MappingService.get_suggestions] Unclosed Anchor: [DEF:MappingService.get_suggestions:Function] started at line 46
[MappingService.get_suggestions] Unclosed Anchor: [DEF:MappingService.get_suggestions:Function] started at line 46
[MappingService.get_suggestions] Unclosed Anchor: [DEF:MappingService.get_suggestions:Function] started at line 46 | +| backend/src/core/config_manager.py | 🔴 0% | [ConfigManagerModule] Unclosed Anchor at end of file (started line 1)
[ConfigManagerModule] Unclosed Anchor: [DEF:ConfigManagerModule:Module] started at line 1
[ConfigManager] Unclosed Anchor at end of file (started line 22)
[ConfigManager] Unclosed Anchor: [DEF:ConfigManager:Class] started at line 22
[ConfigManager] Unclosed Anchor: [DEF:ConfigManager:Class] started at line 22
[__init__] Unclosed Anchor at end of file (started line 27)
[__init__] Unclosed Anchor: [DEF:__init__:Function] started at line 27
[__init__] Unclosed Anchor: [DEF:__init__:Function] started at line 27
[__init__] Unclosed Anchor: [DEF:__init__:Function] started at line 27
[_load_config] Unclosed Anchor at end of file (started line 51)
[_load_config] Unclosed Anchor: [DEF:_load_config:Function] started at line 51
[_load_config] Unclosed Anchor: [DEF:_load_config:Function] started at line 51
[_load_config] Unclosed Anchor: [DEF:_load_config:Function] started at line 51
[_load_config] Unclosed Anchor: [DEF:_load_config:Function] started at line 51
[_save_config_to_disk] Unclosed Anchor at end of file (started line 83)
[_save_config_to_disk] Unclosed Anchor: [DEF:_save_config_to_disk:Function] started at line 83
[_save_config_to_disk] Unclosed Anchor: [DEF:_save_config_to_disk:Function] started at line 83
[_save_config_to_disk] Unclosed Anchor: [DEF:_save_config_to_disk:Function] started at line 83
[_save_config_to_disk] Unclosed Anchor: [DEF:_save_config_to_disk:Function] started at line 83
[_save_config_to_disk] Unclosed Anchor: [DEF:_save_config_to_disk:Function] started at line 83
[save] Unclosed Anchor at end of file (started line 102)
[save] Unclosed Anchor: [DEF:save:Function] started at line 102
[save] Unclosed Anchor: [DEF:save:Function] started at line 102
[save] Unclosed Anchor: [DEF:save:Function] started at line 102
[save] Unclosed Anchor: [DEF:save:Function] started at line 102
[save] Unclosed Anchor: [DEF:save:Function] started at line 102
[save] Unclosed Anchor: [DEF:save:Function] started at line 102
[get_config] Unclosed Anchor at end of file (started line 108)
[get_config] Unclosed Anchor: [DEF:get_config:Function] started at line 108
[get_config] Unclosed Anchor: [DEF:get_config:Function] started at line 108
[get_config] Unclosed Anchor: [DEF:get_config:Function] started at line 108
[get_config] Unclosed Anchor: [DEF:get_config:Function] started at line 108
[get_config] Unclosed Anchor: [DEF:get_config:Function] started at line 108
[get_config] Unclosed Anchor: [DEF:get_config:Function] started at line 108
[get_config] Unclosed Anchor: [DEF:get_config:Function] started at line 108
[update_global_settings] Unclosed Anchor at end of file (started line 115)
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 115
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 115
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 115
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 115
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 115
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 115
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 115
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 115
[validate_path] Unclosed Anchor at end of file (started line 135)
[validate_path] Unclosed Anchor: [DEF:validate_path:Function] started at line 135
[validate_path] Unclosed Anchor: [DEF:validate_path:Function] started at line 135
[validate_path] Unclosed Anchor: [DEF:validate_path:Function] started at line 135
[validate_path] Unclosed Anchor: [DEF:validate_path:Function] started at line 135
[validate_path] Unclosed Anchor: [DEF:validate_path:Function] started at line 135
[validate_path] Unclosed Anchor: [DEF:validate_path:Function] started at line 135
[validate_path] Unclosed Anchor: [DEF:validate_path:Function] started at line 135
[validate_path] Unclosed Anchor: [DEF:validate_path:Function] started at line 135
[validate_path] Unclosed Anchor: [DEF:validate_path:Function] started at line 135
[get_environments] Unclosed Anchor at end of file (started line 153)
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[has_environments] Unclosed Anchor at end of file (started line 160)
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[add_environment] Unclosed Anchor at end of file (started line 167)
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[update_environment] Unclosed Anchor at end of file (started line 186)
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[delete_environment] Unclosed Anchor at end of file (started line 215)
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215 | +| backend/src/core/superset_client.py | 🔴 0% | [backend.src.core.superset_client] Unclosed Anchor at end of file (started line 1)
[backend.src.core.superset_client] Unclosed Anchor: [DEF:backend.src.core.superset_client:Module] started at line 1
[SupersetClient] Unclosed Anchor at end of file (started line 16)
[SupersetClient] Unclosed Anchor: [DEF:SupersetClient:Class] started at line 16
[SupersetClient] Unclosed Anchor: [DEF:SupersetClient:Class] started at line 16
[SupersetClient.get_databases_summary] Unclosed Anchor at end of file (started line 20)
[SupersetClient.get_databases_summary] Unclosed Anchor: [DEF:SupersetClient.get_databases_summary:Function] started at line 20
[SupersetClient.get_databases_summary] Unclosed Anchor: [DEF:SupersetClient.get_databases_summary:Function] started at line 20
[SupersetClient.get_databases_summary] Unclosed Anchor: [DEF:SupersetClient.get_databases_summary:Function] started at line 20
[SupersetClient.get_database_by_uuid] Unclosed Anchor at end of file (started line 40)
[SupersetClient.get_database_by_uuid] Unclosed Anchor: [DEF:SupersetClient.get_database_by_uuid:Function] started at line 40
[SupersetClient.get_database_by_uuid] Unclosed Anchor: [DEF:SupersetClient.get_database_by_uuid:Function] started at line 40
[SupersetClient.get_database_by_uuid] Unclosed Anchor: [DEF:SupersetClient.get_database_by_uuid:Function] started at line 40
[SupersetClient.get_database_by_uuid] Unclosed Anchor: [DEF:SupersetClient.get_database_by_uuid:Function] started at line 40
[SupersetClient.get_dashboards_summary] Unclosed Anchor at end of file (started line 55)
[SupersetClient.get_dashboards_summary] Unclosed Anchor: [DEF:SupersetClient.get_dashboards_summary:Function] started at line 55
[SupersetClient.get_dashboards_summary] Unclosed Anchor: [DEF:SupersetClient.get_dashboards_summary:Function] started at line 55
[SupersetClient.get_dashboards_summary] Unclosed Anchor: [DEF:SupersetClient.get_dashboards_summary:Function] started at line 55
[SupersetClient.get_dashboards_summary] Unclosed Anchor: [DEF:SupersetClient.get_dashboards_summary:Function] started at line 55
[SupersetClient.get_dashboards_summary] Unclosed Anchor: [DEF:SupersetClient.get_dashboards_summary:Function] started at line 55 | +| backend/src/core/migration_engine.py | 🔴 0% | [backend.src.core.migration_engine] Unclosed Anchor at end of file (started line 1)
[backend.src.core.migration_engine] Unclosed Anchor: [DEF:backend.src.core.migration_engine:Module] started at line 1
[MigrationEngine] Unclosed Anchor at end of file (started line 22)
[MigrationEngine] Unclosed Anchor: [DEF:MigrationEngine:Class] started at line 22
[MigrationEngine] Unclosed Anchor: [DEF:MigrationEngine:Class] started at line 22
[MigrationEngine.transform_zip] Unclosed Anchor at end of file (started line 26)
[MigrationEngine.transform_zip] Unclosed Anchor: [DEF:MigrationEngine.transform_zip:Function] started at line 26
[MigrationEngine.transform_zip] Unclosed Anchor: [DEF:MigrationEngine.transform_zip:Function] started at line 26
[MigrationEngine.transform_zip] Unclosed Anchor: [DEF:MigrationEngine.transform_zip:Function] started at line 26
[MigrationEngine._transform_yaml] Unclosed Anchor at end of file (started line 77)
[MigrationEngine._transform_yaml] Unclosed Anchor: [DEF:MigrationEngine._transform_yaml:Function] started at line 77
[MigrationEngine._transform_yaml] Unclosed Anchor: [DEF:MigrationEngine._transform_yaml:Function] started at line 77
[MigrationEngine._transform_yaml] Unclosed Anchor: [DEF:MigrationEngine._transform_yaml:Function] started at line 77
[MigrationEngine._transform_yaml] Unclosed Anchor: [DEF:MigrationEngine._transform_yaml:Function] started at line 77 | +| backend/src/core/logger.py | 🔴 0% | [LoggerModule] Unclosed Anchor at end of file (started line 1)
[LoggerModule] Unclosed Anchor: [DEF:LoggerModule:Module] started at line 1
[BeliefFormatter] Unclosed Anchor at end of file (started line 22)
[BeliefFormatter] Unclosed Anchor: [DEF:BeliefFormatter:Class] started at line 22
[BeliefFormatter] Unclosed Anchor: [DEF:BeliefFormatter:Class] started at line 22
[LogEntry] Unclosed Anchor at end of file (started line 34)
[LogEntry] Unclosed Anchor: [DEF:LogEntry:Class] started at line 34
[LogEntry] Unclosed Anchor: [DEF:LogEntry:Class] started at line 34
[LogEntry] Unclosed Anchor: [DEF:LogEntry:Class] started at line 34
[BeliefScope] Unclosed Anchor at end of file (started line 45)
[BeliefScope] Unclosed Anchor: [DEF:BeliefScope:Function] started at line 45
[BeliefScope] Unclosed Anchor: [DEF:BeliefScope:Function] started at line 45
[BeliefScope] Unclosed Anchor: [DEF:BeliefScope:Function] started at line 45
[BeliefScope] Unclosed Anchor: [DEF:BeliefScope:Function] started at line 45
[ConfigureLogger] Unclosed Anchor at end of file (started line 76)
[ConfigureLogger] Unclosed Anchor: [DEF:ConfigureLogger:Function] started at line 76
[ConfigureLogger] Unclosed Anchor: [DEF:ConfigureLogger:Function] started at line 76
[ConfigureLogger] Unclosed Anchor: [DEF:ConfigureLogger:Function] started at line 76
[ConfigureLogger] Unclosed Anchor: [DEF:ConfigureLogger:Function] started at line 76
[ConfigureLogger] Unclosed Anchor: [DEF:ConfigureLogger:Function] started at line 76
[WebSocketLogHandler] Unclosed Anchor at end of file (started line 120)
[WebSocketLogHandler] Unclosed Anchor: [DEF:WebSocketLogHandler:Class] started at line 120
[WebSocketLogHandler] Unclosed Anchor: [DEF:WebSocketLogHandler:Class] started at line 120
[WebSocketLogHandler] Unclosed Anchor: [DEF:WebSocketLogHandler:Class] started at line 120
[WebSocketLogHandler] Unclosed Anchor: [DEF:WebSocketLogHandler:Class] started at line 120
[WebSocketLogHandler] Unclosed Anchor: [DEF:WebSocketLogHandler:Class] started at line 120
[WebSocketLogHandler] Unclosed Anchor: [DEF:WebSocketLogHandler:Class] started at line 120
[Logger] Unclosed Anchor at end of file (started line 163)
[Logger] Unclosed Anchor: [DEF:Logger:Global] started at line 163
[Logger] Unclosed Anchor: [DEF:Logger:Global] started at line 163
[Logger] Unclosed Anchor: [DEF:Logger:Global] started at line 163
[Logger] Unclosed Anchor: [DEF:Logger:Global] started at line 163
[Logger] Unclosed Anchor: [DEF:Logger:Global] started at line 163
[Logger] Unclosed Anchor: [DEF:Logger:Global] started at line 163
[Logger] Unclosed Anchor: [DEF:Logger:Global] started at line 163 | +| backend/src/core/database.py | 🔴 0% | [backend.src.core.database] Unclosed Anchor at end of file (started line 1)
[backend.src.core.database] Unclosed Anchor: [DEF:backend.src.core.database:Module] started at line 1
[DATABASE_URL] Unclosed Anchor at end of file (started line 20)
[DATABASE_URL] Unclosed Anchor: [DEF:DATABASE_URL:Constant] started at line 20
[DATABASE_URL] Unclosed Anchor: [DEF:DATABASE_URL:Constant] started at line 20
[TASKS_DATABASE_URL] Unclosed Anchor at end of file (started line 24)
[TASKS_DATABASE_URL] Unclosed Anchor: [DEF:TASKS_DATABASE_URL:Constant] started at line 24
[TASKS_DATABASE_URL] Unclosed Anchor: [DEF:TASKS_DATABASE_URL:Constant] started at line 24
[TASKS_DATABASE_URL] Unclosed Anchor: [DEF:TASKS_DATABASE_URL:Constant] started at line 24
[engine] Unclosed Anchor at end of file (started line 28)
[engine] Unclosed Anchor: [DEF:engine:Variable] started at line 28
[engine] Unclosed Anchor: [DEF:engine:Variable] started at line 28
[engine] Unclosed Anchor: [DEF:engine:Variable] started at line 28
[engine] Unclosed Anchor: [DEF:engine:Variable] started at line 28
[tasks_engine] Unclosed Anchor at end of file (started line 32)
[tasks_engine] Unclosed Anchor: [DEF:tasks_engine:Variable] started at line 32
[tasks_engine] Unclosed Anchor: [DEF:tasks_engine:Variable] started at line 32
[tasks_engine] Unclosed Anchor: [DEF:tasks_engine:Variable] started at line 32
[tasks_engine] Unclosed Anchor: [DEF:tasks_engine:Variable] started at line 32
[tasks_engine] Unclosed Anchor: [DEF:tasks_engine:Variable] started at line 32
[SessionLocal] Unclosed Anchor at end of file (started line 36)
[SessionLocal] Unclosed Anchor: [DEF:SessionLocal:Class] started at line 36
[SessionLocal] Missing Mandatory Tag: @PURPOSE
[SessionLocal] Unclosed Anchor: [DEF:SessionLocal:Class] started at line 36
[SessionLocal] Missing Mandatory Tag: @PURPOSE
[SessionLocal] Unclosed Anchor: [DEF:SessionLocal:Class] started at line 36
[SessionLocal] Missing Mandatory Tag: @PURPOSE
[SessionLocal] Unclosed Anchor: [DEF:SessionLocal:Class] started at line 36
[SessionLocal] Missing Mandatory Tag: @PURPOSE
[SessionLocal] Unclosed Anchor: [DEF:SessionLocal:Class] started at line 36
[SessionLocal] Missing Mandatory Tag: @PURPOSE
[SessionLocal] Unclosed Anchor: [DEF:SessionLocal:Class] started at line 36
[SessionLocal] Missing Mandatory Tag: @PURPOSE
[TasksSessionLocal] Unclosed Anchor at end of file (started line 40)
[TasksSessionLocal] Unclosed Anchor: [DEF:TasksSessionLocal:Class] started at line 40
[TasksSessionLocal] Missing Mandatory Tag: @PURPOSE
[TasksSessionLocal] Unclosed Anchor: [DEF:TasksSessionLocal:Class] started at line 40
[TasksSessionLocal] Missing Mandatory Tag: @PURPOSE
[TasksSessionLocal] Unclosed Anchor: [DEF:TasksSessionLocal:Class] started at line 40
[TasksSessionLocal] Missing Mandatory Tag: @PURPOSE
[TasksSessionLocal] Unclosed Anchor: [DEF:TasksSessionLocal:Class] started at line 40
[TasksSessionLocal] Missing Mandatory Tag: @PURPOSE
[TasksSessionLocal] Unclosed Anchor: [DEF:TasksSessionLocal:Class] started at line 40
[TasksSessionLocal] Missing Mandatory Tag: @PURPOSE
[TasksSessionLocal] Unclosed Anchor: [DEF:TasksSessionLocal:Class] started at line 40
[TasksSessionLocal] Missing Mandatory Tag: @PURPOSE
[TasksSessionLocal] Unclosed Anchor: [DEF:TasksSessionLocal:Class] started at line 40
[TasksSessionLocal] Missing Mandatory Tag: @PURPOSE
[init_db] Unclosed Anchor at end of file (started line 44)
[init_db] Unclosed Anchor: [DEF:init_db:Function] started at line 44
[init_db] Unclosed Anchor: [DEF:init_db:Function] started at line 44
[init_db] Unclosed Anchor: [DEF:init_db:Function] started at line 44
[init_db] Unclosed Anchor: [DEF:init_db:Function] started at line 44
[init_db] Unclosed Anchor: [DEF:init_db:Function] started at line 44
[init_db] Unclosed Anchor: [DEF:init_db:Function] started at line 44
[init_db] Unclosed Anchor: [DEF:init_db:Function] started at line 44
[init_db] Unclosed Anchor: [DEF:init_db:Function] started at line 44
[get_db] Unclosed Anchor at end of file (started line 51)
[get_db] Unclosed Anchor: [DEF:get_db:Function] started at line 51
[get_db] Unclosed Anchor: [DEF:get_db:Function] started at line 51
[get_db] Unclosed Anchor: [DEF:get_db:Function] started at line 51
[get_db] Unclosed Anchor: [DEF:get_db:Function] started at line 51
[get_db] Unclosed Anchor: [DEF:get_db:Function] started at line 51
[get_db] Unclosed Anchor: [DEF:get_db:Function] started at line 51
[get_db] Unclosed Anchor: [DEF:get_db:Function] started at line 51
[get_db] Unclosed Anchor: [DEF:get_db:Function] started at line 51
[get_db] Unclosed Anchor: [DEF:get_db:Function] started at line 51
[get_tasks_db] Unclosed Anchor at end of file (started line 63)
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63 | +| backend/src/core/config_models.py | 🔴 0% | [ConfigModels] Unclosed Anchor at end of file (started line 1)
[ConfigModels] Unclosed Anchor: [DEF:ConfigModels:Module] started at line 1
[Schedule] Unclosed Anchor at end of file (started line 11)
[Schedule] Unclosed Anchor: [DEF:Schedule:DataClass] started at line 11
[Schedule] Unclosed Anchor: [DEF:Schedule:DataClass] started at line 11
[Environment] Unclosed Anchor at end of file (started line 18)
[Environment] Unclosed Anchor: [DEF:Environment:DataClass] started at line 18
[Environment] Unclosed Anchor: [DEF:Environment:DataClass] started at line 18
[Environment] Unclosed Anchor: [DEF:Environment:DataClass] started at line 18
[LoggingConfig] Unclosed Anchor at end of file (started line 30)
[LoggingConfig] Unclosed Anchor: [DEF:LoggingConfig:DataClass] started at line 30
[LoggingConfig] Unclosed Anchor: [DEF:LoggingConfig:DataClass] started at line 30
[LoggingConfig] Unclosed Anchor: [DEF:LoggingConfig:DataClass] started at line 30
[LoggingConfig] Unclosed Anchor: [DEF:LoggingConfig:DataClass] started at line 30
[GlobalSettings] Unclosed Anchor at end of file (started line 40)
[GlobalSettings] Unclosed Anchor: [DEF:GlobalSettings:DataClass] started at line 40
[GlobalSettings] Unclosed Anchor: [DEF:GlobalSettings:DataClass] started at line 40
[GlobalSettings] Unclosed Anchor: [DEF:GlobalSettings:DataClass] started at line 40
[GlobalSettings] Unclosed Anchor: [DEF:GlobalSettings:DataClass] started at line 40
[GlobalSettings] Unclosed Anchor: [DEF:GlobalSettings:DataClass] started at line 40
[AppConfig] Unclosed Anchor at end of file (started line 53)
[AppConfig] Unclosed Anchor: [DEF:AppConfig:DataClass] started at line 53
[AppConfig] Unclosed Anchor: [DEF:AppConfig:DataClass] started at line 53
[AppConfig] Unclosed Anchor: [DEF:AppConfig:DataClass] started at line 53
[AppConfig] Unclosed Anchor: [DEF:AppConfig:DataClass] started at line 53
[AppConfig] Unclosed Anchor: [DEF:AppConfig:DataClass] started at line 53
[AppConfig] Unclosed Anchor: [DEF:AppConfig:DataClass] started at line 53 | +| backend/src/core/plugin_loader.py | 🔴 0% | [PluginLoader] Unclosed Anchor at end of file (started line 8)
[PluginLoader] Unclosed Anchor: [DEF:PluginLoader:Class] started at line 8 | +| backend/src/core/plugin_base.py | 🔴 0% | [PluginBase] Unclosed Anchor at end of file (started line 6)
[PluginBase] Unclosed Anchor: [DEF:PluginBase:Class] started at line 6
[PluginConfig] Unclosed Anchor at end of file (started line 59)
[PluginConfig] Unclosed Anchor: [DEF:PluginConfig:Class] started at line 59
[PluginConfig] Unclosed Anchor: [DEF:PluginConfig:Class] started at line 59 | +| backend/src/core/utils/matching.py | 🔴 0% | [backend.src.core.utils.matching] Unclosed Anchor at end of file (started line 1)
[backend.src.core.utils.matching] Unclosed Anchor: [DEF:backend.src.core.utils.matching:Module] started at line 1
[suggest_mappings] Unclosed Anchor at end of file (started line 15)
[suggest_mappings] Unclosed Anchor: [DEF:suggest_mappings:Function] started at line 15
[suggest_mappings] Unclosed Anchor: [DEF:suggest_mappings:Function] started at line 15 | +| backend/src/core/task_manager/cleanup.py | 🔴 0% | [TaskCleanupModule] Unclosed Anchor at end of file (started line 1)
[TaskCleanupModule] Unclosed Anchor: [DEF:TaskCleanupModule:Module] started at line 1
[TaskCleanupService] Unclosed Anchor at end of file (started line 12)
[TaskCleanupService] Unclosed Anchor: [DEF:TaskCleanupService:Class] started at line 12
[TaskCleanupService] Unclosed Anchor: [DEF:TaskCleanupService:Class] started at line 12
[TaskCleanupService.run_cleanup] Unclosed Anchor at end of file (started line 19)
[TaskCleanupService.run_cleanup] Unclosed Anchor: [DEF:TaskCleanupService.run_cleanup:Function] started at line 19
[TaskCleanupService.run_cleanup] Unclosed Anchor: [DEF:TaskCleanupService.run_cleanup:Function] started at line 19
[TaskCleanupService.run_cleanup] Unclosed Anchor: [DEF:TaskCleanupService.run_cleanup:Function] started at line 19 | +| backend/src/plugins/backup.py | 🔴 0% | [BackupPlugin] Unclosed Anchor at end of file (started line 1)
[BackupPlugin] Unclosed Anchor: [DEF:BackupPlugin:Module] started at line 1 | +| backend/src/plugins/migration.py | 🔴 0% | [MigrationPlugin] Unclosed Anchor at end of file (started line 1)
[MigrationPlugin] Unclosed Anchor: [DEF:MigrationPlugin:Module] started at line 1
[MigrationPlugin.execute] Unclosed Anchor at end of file (started line 103)
[MigrationPlugin.execute] Unclosed Anchor: [DEF:MigrationPlugin.execute:Action] started at line 103
[MigrationPlugin.execute] Unclosed Anchor: [DEF:MigrationPlugin.execute:Action] started at line 103 | +| backend/src/api/auth.py | 🔴 0% | [AuthModule] Unclosed Anchor at end of file (started line 1)
[AuthModule] Unclosed Anchor: [DEF:AuthModule:Module] started at line 1 | +| backend/src/api/routes/settings.py | 🔴 0% | [SettingsRouter] Unclosed Anchor at end of file (started line 1)
[SettingsRouter] Unclosed Anchor: [DEF:SettingsRouter:Module] started at line 1
[get_settings] Unclosed Anchor at end of file (started line 26)
[get_settings] Unclosed Anchor: [DEF:get_settings:Function] started at line 26
[get_settings] Unclosed Anchor: [DEF:get_settings:Function] started at line 26
[update_global_settings] Unclosed Anchor at end of file (started line 40)
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 40
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 40
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 40
[get_environments] Unclosed Anchor at end of file (started line 54)
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 54
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 54
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 54
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 54
[add_environment] Unclosed Anchor at end of file (started line 63)
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 63
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 63
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 63
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 63
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 63
[update_environment] Unclosed Anchor at end of file (started line 96)
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 96
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 96
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 96
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 96
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 96
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 96
[delete_environment] Unclosed Anchor at end of file (started line 139)
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 139
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 139
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 139
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 139
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 139
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 139
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 139
[test_environment_connection] Unclosed Anchor at end of file (started line 152)
[test_environment_connection] Unclosed Anchor: [DEF:test_environment_connection:Function] started at line 152
[test_environment_connection] Unclosed Anchor: [DEF:test_environment_connection:Function] started at line 152
[test_environment_connection] Unclosed Anchor: [DEF:test_environment_connection:Function] started at line 152
[test_environment_connection] Unclosed Anchor: [DEF:test_environment_connection:Function] started at line 152
[test_environment_connection] Unclosed Anchor: [DEF:test_environment_connection:Function] started at line 152
[test_environment_connection] Unclosed Anchor: [DEF:test_environment_connection:Function] started at line 152
[test_environment_connection] Unclosed Anchor: [DEF:test_environment_connection:Function] started at line 152
[test_environment_connection] Unclosed Anchor: [DEF:test_environment_connection:Function] started at line 152
[validate_backup_path] Unclosed Anchor at end of file (started line 195)
[validate_backup_path] Unclosed Anchor: [DEF:validate_backup_path:Function] started at line 195
[validate_backup_path] Unclosed Anchor: [DEF:validate_backup_path:Function] started at line 195
[validate_backup_path] Unclosed Anchor: [DEF:validate_backup_path:Function] started at line 195
[validate_backup_path] Unclosed Anchor: [DEF:validate_backup_path:Function] started at line 195
[validate_backup_path] Unclosed Anchor: [DEF:validate_backup_path:Function] started at line 195
[validate_backup_path] Unclosed Anchor: [DEF:validate_backup_path:Function] started at line 195
[validate_backup_path] Unclosed Anchor: [DEF:validate_backup_path:Function] started at line 195
[validate_backup_path] Unclosed Anchor: [DEF:validate_backup_path:Function] started at line 195
[validate_backup_path] Unclosed Anchor: [DEF:validate_backup_path:Function] started at line 195 | +| backend/src/api/routes/tasks.py | 🔴 0% | [TasksRouter] Unclosed Anchor at end of file (started line 1)
[TasksRouter] Unclosed Anchor: [DEF:TasksRouter:Module] started at line 1 | +| backend/src/api/routes/environments.py | 🔴 0% | [backend.src.api.routes.environments] Unclosed Anchor at end of file (started line 1)
[backend.src.api.routes.environments] Unclosed Anchor: [DEF:backend.src.api.routes.environments:Module] started at line 1
[ScheduleSchema] Unclosed Anchor at end of file (started line 23)
[ScheduleSchema] Unclosed Anchor: [DEF:ScheduleSchema:DataClass] started at line 23
[ScheduleSchema] Unclosed Anchor: [DEF:ScheduleSchema:DataClass] started at line 23
[EnvironmentResponse] Unclosed Anchor at end of file (started line 29)
[EnvironmentResponse] Unclosed Anchor: [DEF:EnvironmentResponse:DataClass] started at line 29
[EnvironmentResponse] Unclosed Anchor: [DEF:EnvironmentResponse:DataClass] started at line 29
[EnvironmentResponse] Unclosed Anchor: [DEF:EnvironmentResponse:DataClass] started at line 29
[DatabaseResponse] Unclosed Anchor at end of file (started line 37)
[DatabaseResponse] Unclosed Anchor: [DEF:DatabaseResponse:DataClass] started at line 37
[DatabaseResponse] Unclosed Anchor: [DEF:DatabaseResponse:DataClass] started at line 37
[DatabaseResponse] Unclosed Anchor: [DEF:DatabaseResponse:DataClass] started at line 37
[DatabaseResponse] Unclosed Anchor: [DEF:DatabaseResponse:DataClass] started at line 37
[get_environments] Unclosed Anchor at end of file (started line 44)
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 44
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 44
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 44
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 44
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 44
[update_environment_schedule] Unclosed Anchor at end of file (started line 66)
[update_environment_schedule] Unclosed Anchor: [DEF:update_environment_schedule:Function] started at line 66
[update_environment_schedule] Unclosed Anchor: [DEF:update_environment_schedule:Function] started at line 66
[update_environment_schedule] Unclosed Anchor: [DEF:update_environment_schedule:Function] started at line 66
[update_environment_schedule] Unclosed Anchor: [DEF:update_environment_schedule:Function] started at line 66
[update_environment_schedule] Unclosed Anchor: [DEF:update_environment_schedule:Function] started at line 66
[update_environment_schedule] Unclosed Anchor: [DEF:update_environment_schedule:Function] started at line 66
[get_environment_databases] Unclosed Anchor at end of file (started line 94)
[get_environment_databases] Unclosed Anchor: [DEF:get_environment_databases:Function] started at line 94
[get_environment_databases] Unclosed Anchor: [DEF:get_environment_databases:Function] started at line 94
[get_environment_databases] Unclosed Anchor: [DEF:get_environment_databases:Function] started at line 94
[get_environment_databases] Unclosed Anchor: [DEF:get_environment_databases:Function] started at line 94
[get_environment_databases] Unclosed Anchor: [DEF:get_environment_databases:Function] started at line 94
[get_environment_databases] Unclosed Anchor: [DEF:get_environment_databases:Function] started at line 94
[get_environment_databases] Unclosed Anchor: [DEF:get_environment_databases:Function] started at line 94 | +| backend/src/api/routes/plugins.py | 🔴 0% | [PluginsRouter] Unclosed Anchor at end of file (started line 1)
[PluginsRouter] Unclosed Anchor: [DEF:PluginsRouter:Module] started at line 1 | +| backend/src/api/routes/migration.py | 🔴 0% | [backend.src.api.routes.migration] Unclosed Anchor at end of file (started line 1)
[backend.src.api.routes.migration] Unclosed Anchor: [DEF:backend.src.api.routes.migration:Module] started at line 1
[get_dashboards] Unclosed Anchor at end of file (started line 17)
[get_dashboards] Unclosed Anchor: [DEF:get_dashboards:Function] started at line 17
[get_dashboards] Unclosed Anchor: [DEF:get_dashboards:Function] started at line 17
[execute_migration] Unclosed Anchor at end of file (started line 42)
[execute_migration] Unclosed Anchor: [DEF:execute_migration:Function] started at line 42
[execute_migration] Unclosed Anchor: [DEF:execute_migration:Function] started at line 42
[execute_migration] Unclosed Anchor: [DEF:execute_migration:Function] started at line 42 | +| backend/src/api/routes/mappings.py | 🔴 0% | [backend.src.api.routes.mappings] Unclosed Anchor at end of file (started line 1)
[backend.src.api.routes.mappings] Unclosed Anchor: [DEF:backend.src.api.routes.mappings:Module] started at line 1
[MappingCreate] Unclosed Anchor at end of file (started line 24)
[MappingCreate] Unclosed Anchor: [DEF:MappingCreate:DataClass] started at line 24
[MappingCreate] Unclosed Anchor: [DEF:MappingCreate:DataClass] started at line 24
[MappingResponse] Unclosed Anchor at end of file (started line 34)
[MappingResponse] Unclosed Anchor: [DEF:MappingResponse:DataClass] started at line 34
[MappingResponse] Unclosed Anchor: [DEF:MappingResponse:DataClass] started at line 34
[MappingResponse] Unclosed Anchor: [DEF:MappingResponse:DataClass] started at line 34
[SuggestRequest] Unclosed Anchor at end of file (started line 48)
[SuggestRequest] Unclosed Anchor: [DEF:SuggestRequest:DataClass] started at line 48
[SuggestRequest] Unclosed Anchor: [DEF:SuggestRequest:DataClass] started at line 48
[SuggestRequest] Unclosed Anchor: [DEF:SuggestRequest:DataClass] started at line 48
[SuggestRequest] Unclosed Anchor: [DEF:SuggestRequest:DataClass] started at line 48
[get_mappings] Unclosed Anchor at end of file (started line 54)
[get_mappings] Unclosed Anchor: [DEF:get_mappings:Function] started at line 54
[get_mappings] Unclosed Anchor: [DEF:get_mappings:Function] started at line 54
[get_mappings] Unclosed Anchor: [DEF:get_mappings:Function] started at line 54
[get_mappings] Unclosed Anchor: [DEF:get_mappings:Function] started at line 54
[get_mappings] Unclosed Anchor: [DEF:get_mappings:Function] started at line 54
[create_mapping] Unclosed Anchor at end of file (started line 70)
[create_mapping] Unclosed Anchor: [DEF:create_mapping:Function] started at line 70
[create_mapping] Unclosed Anchor: [DEF:create_mapping:Function] started at line 70
[create_mapping] Unclosed Anchor: [DEF:create_mapping:Function] started at line 70
[create_mapping] Unclosed Anchor: [DEF:create_mapping:Function] started at line 70
[create_mapping] Unclosed Anchor: [DEF:create_mapping:Function] started at line 70
[create_mapping] Unclosed Anchor: [DEF:create_mapping:Function] started at line 70
[suggest_mappings_api] Unclosed Anchor at end of file (started line 95)
[suggest_mappings_api] Unclosed Anchor: [DEF:suggest_mappings_api:Function] started at line 95
[suggest_mappings_api] Unclosed Anchor: [DEF:suggest_mappings_api:Function] started at line 95
[suggest_mappings_api] Unclosed Anchor: [DEF:suggest_mappings_api:Function] started at line 95
[suggest_mappings_api] Unclosed Anchor: [DEF:suggest_mappings_api:Function] started at line 95
[suggest_mappings_api] Unclosed Anchor: [DEF:suggest_mappings_api:Function] started at line 95
[suggest_mappings_api] Unclosed Anchor: [DEF:suggest_mappings_api:Function] started at line 95
[suggest_mappings_api] Unclosed Anchor: [DEF:suggest_mappings_api:Function] started at line 95 | +| backend/src/core/scheduler.py | 🔴 29% | [SchedulerModule] Unclosed Anchor at end of file (started line 1)
[SchedulerModule] Unclosed Anchor: [DEF:SchedulerModule:Module] started at line 1
[SchedulerService] Unclosed Anchor at end of file (started line 16)
[SchedulerService] Unclosed Anchor: [DEF:SchedulerService:Class] started at line 16
[SchedulerService] Unclosed Anchor: [DEF:SchedulerService:Class] started at line 16
[SchedulerService.start] Unclosed Anchor at end of file (started line 27)
[SchedulerService.start] Unclosed Anchor: [DEF:SchedulerService.start:Function] started at line 27
[SchedulerService.start] Unclosed Anchor: [DEF:SchedulerService.start:Function] started at line 27
[SchedulerService.start] Unclosed Anchor: [DEF:SchedulerService.start:Function] started at line 27
[SchedulerService.stop] Unclosed Anchor at end of file (started line 36)
[SchedulerService.stop] Unclosed Anchor: [DEF:SchedulerService.stop:Function] started at line 36
[SchedulerService.stop] Unclosed Anchor: [DEF:SchedulerService.stop:Function] started at line 36
[SchedulerService.stop] Unclosed Anchor: [DEF:SchedulerService.stop:Function] started at line 36
[SchedulerService.stop] Unclosed Anchor: [DEF:SchedulerService.stop:Function] started at line 36
[SchedulerService.load_schedules] Unclosed Anchor at end of file (started line 44)
[SchedulerService.load_schedules] Unclosed Anchor: [DEF:SchedulerService.load_schedules:Function] started at line 44
[SchedulerService.load_schedules] Unclosed Anchor: [DEF:SchedulerService.load_schedules:Function] started at line 44
[SchedulerService.load_schedules] Unclosed Anchor: [DEF:SchedulerService.load_schedules:Function] started at line 44
[SchedulerService.load_schedules] Unclosed Anchor: [DEF:SchedulerService.load_schedules:Function] started at line 44
[SchedulerService.load_schedules] Unclosed Anchor: [DEF:SchedulerService.load_schedules:Function] started at line 44 | +| generate_semantic_map.py | 🟢 100% | OK | +| search_script.py | 🟢 100% | OK | +| get_dataset_structure.py | 🟢 100% | OK | +| debug_db_api.py | 🟢 100% | OK | +| run_mapper.py | 🟢 100% | OK | +| backend/src/core/task_manager/manager.py | 🟢 100% | OK | +| backend/src/core/task_manager/__init__.py | 🟢 100% | OK | +| backend/src/core/task_manager/models.py | 🟢 100% | OK | +| backend/src/core/task_manager/persistence.py | 🟢 100% | OK | diff --git a/semantics/reports/semantic_report_20260101_163539.md b/semantics/reports/semantic_report_20260101_163539.md new file mode 100644 index 0000000..3fbb86f --- /dev/null +++ b/semantics/reports/semantic_report_20260101_163539.md @@ -0,0 +1,80 @@ +# Semantic Compliance Report + +**Generated At:** 2026-01-01T16:35:39.152636 +**Global Compliance Score:** 36.2% +**Scanned Files:** 68 + +## Critical Parsing Errors +- 🔴 backend/src/app.py:153 Mismatched closing anchor. Expected [/DEF:App:Global], found [/DEF:AppModule:Module]. + +## File Compliance Status +| File | Score | Issues | +|------|-------|--------| +| frontend/src/App.svelte | 🔴 0% | [App] Unclosed Anchor at end of file (started line 1)
[App] Unclosed Anchor: [DEF:App:Component] started at line 1
[handleFormSubmit] Unclosed Anchor at end of file (started line 24)
[handleFormSubmit] Unclosed Anchor: [DEF:handleFormSubmit:Function] started at line 24
[handleFormSubmit] Unclosed Anchor: [DEF:handleFormSubmit:Function] started at line 24
[navigate] Unclosed Anchor at end of file (started line 44)
[navigate] Unclosed Anchor: [DEF:navigate:Function] started at line 44
[navigate] Unclosed Anchor: [DEF:navigate:Function] started at line 44
[navigate] Unclosed Anchor: [DEF:navigate:Function] started at line 44 | +| frontend/src/main.js | 🔴 0% | [main] Unclosed Anchor at end of file (started line 1)
[main] Unclosed Anchor: [DEF:main:Module] started at line 1
[app_instance] Unclosed Anchor at end of file (started line 9)
[app_instance] Unclosed Anchor: [DEF:app_instance:Data] started at line 9
[app_instance] Unclosed Anchor: [DEF:app_instance:Data] started at line 9 | +| frontend/src/components/DashboardGrid.svelte | 🔴 0% | [DashboardGrid] Unclosed Anchor at end of file (started line 1)
[DashboardGrid] Unclosed Anchor: [DEF:DashboardGrid:Component] started at line 1
[handleSort] Unclosed Anchor at end of file (started line 62)
[handleSort] Unclosed Anchor: [DEF:handleSort:Function] started at line 62
[handleSort] Unclosed Anchor: [DEF:handleSort:Function] started at line 62
[handleSelectionChange] Unclosed Anchor at end of file (started line 74)
[handleSelectionChange] Unclosed Anchor: [DEF:handleSelectionChange:Function] started at line 74
[handleSelectionChange] Unclosed Anchor: [DEF:handleSelectionChange:Function] started at line 74
[handleSelectionChange] Unclosed Anchor: [DEF:handleSelectionChange:Function] started at line 74
[handleSelectAll] Unclosed Anchor at end of file (started line 88)
[handleSelectAll] Unclosed Anchor: [DEF:handleSelectAll:Function] started at line 88
[handleSelectAll] Unclosed Anchor: [DEF:handleSelectAll:Function] started at line 88
[handleSelectAll] Unclosed Anchor: [DEF:handleSelectAll:Function] started at line 88
[handleSelectAll] Unclosed Anchor: [DEF:handleSelectAll:Function] started at line 88
[goToPage] Unclosed Anchor at end of file (started line 106)
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106 | +| frontend/src/components/TaskHistory.svelte | 🔴 0% | [TaskHistory] Unclosed Anchor at end of file (started line 1)
[TaskHistory] Unclosed Anchor: [DEF:TaskHistory:Component] started at line 1 | +| frontend/src/components/MappingTable.svelte | 🔴 0% | [MappingTable] Unclosed Anchor at end of file (started line 1)
[MappingTable] Unclosed Anchor: [DEF:MappingTable:Component] started at line 1
[updateMapping] Unclosed Anchor at end of file (started line 25)
[updateMapping] Unclosed Anchor: [DEF:updateMapping:Function] started at line 25
[updateMapping] Unclosed Anchor: [DEF:updateMapping:Function] started at line 25
[getSuggestion] Unclosed Anchor at end of file (started line 34)
[getSuggestion] Unclosed Anchor: [DEF:getSuggestion:Function] started at line 34
[getSuggestion] Unclosed Anchor: [DEF:getSuggestion:Function] started at line 34
[getSuggestion] Unclosed Anchor: [DEF:getSuggestion:Function] started at line 34 | +| frontend/src/components/EnvSelector.svelte | 🔴 0% | [EnvSelector] Unclosed Anchor at end of file (started line 1)
[EnvSelector] Unclosed Anchor: [DEF:EnvSelector:Component] started at line 1
[handleSelect] Unclosed Anchor at end of file (started line 24)
[handleSelect] Unclosed Anchor: [DEF:handleSelect:Function] started at line 24
[handleSelect] Unclosed Anchor: [DEF:handleSelect:Function] started at line 24 | +| frontend/src/components/TaskList.svelte | 🔴 0% | [TaskList] Unclosed Anchor at end of file (started line 1)
[TaskList] Unclosed Anchor: [DEF:TaskList:Component] started at line 1 | +| frontend/src/components/DynamicForm.svelte | 🔴 0% | [DynamicForm] Unclosed Anchor at end of file (started line 1)
[DynamicForm] Unclosed Anchor: [DEF:DynamicForm:Component] started at line 1
[handleSubmit] Unclosed Anchor at end of file (started line 23)
[handleSubmit] Unclosed Anchor: [DEF:handleSubmit:Function] started at line 23
[handleSubmit] Unclosed Anchor: [DEF:handleSubmit:Function] started at line 23
[initializeForm] Unclosed Anchor at end of file (started line 33)
[initializeForm] Unclosed Anchor: [DEF:initializeForm:Function] started at line 33
[initializeForm] Unclosed Anchor: [DEF:initializeForm:Function] started at line 33
[initializeForm] Unclosed Anchor: [DEF:initializeForm:Function] started at line 33 | +| frontend/src/components/TaskRunner.svelte | 🔴 0% | [TaskRunner] Unclosed Anchor at end of file (started line 1)
[TaskRunner] Unclosed Anchor: [DEF:TaskRunner:Component] started at line 1
[connect] Unclosed Anchor at end of file (started line 38)
[connect] Unclosed Anchor: [DEF:connect:Function] started at line 38
[connect] Unclosed Anchor: [DEF:connect:Function] started at line 38
[onMount] Unclosed Anchor at end of file (started line 225)
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 225
[onMount] Missing Mandatory Tag: @PURPOSE
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 225
[onMount] Missing Mandatory Tag: @PURPOSE
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 225
[onMount] Missing Mandatory Tag: @PURPOSE
[onDestroy] Unclosed Anchor at end of file (started line 251)
[onDestroy] Unclosed Anchor: [DEF:onDestroy:Function] started at line 251
[onDestroy] Unclosed Anchor: [DEF:onDestroy:Function] started at line 251
[onDestroy] Unclosed Anchor: [DEF:onDestroy:Function] started at line 251
[onDestroy] Unclosed Anchor: [DEF:onDestroy:Function] started at line 251 | +| frontend/src/components/TaskLogViewer.svelte | 🔴 0% | [TaskLogViewer] Unclosed Anchor at end of file (started line 1)
[TaskLogViewer] Unclosed Anchor: [DEF:TaskLogViewer:Component] started at line 1 | +| frontend/src/components/PasswordPrompt.svelte | 🔴 0% | [PasswordPrompt] Unclosed Anchor at end of file (started line 1)
[PasswordPrompt] Unclosed Anchor: [DEF:PasswordPrompt:Component] started at line 1 | +| frontend/src/components/MissingMappingModal.svelte | 🔴 0% | [MissingMappingModal] Unclosed Anchor at end of file (started line 1)
[MissingMappingModal] Unclosed Anchor: [DEF:MissingMappingModal:Component] started at line 1
[resolve] Unclosed Anchor at end of file (started line 26)
[resolve] Unclosed Anchor: [DEF:resolve:Function] started at line 26
[resolve] Missing Mandatory Tag: @PURPOSE
[resolve] Unclosed Anchor: [DEF:resolve:Function] started at line 26
[resolve] Missing Mandatory Tag: @PURPOSE
[cancel] Unclosed Anchor at end of file (started line 38)
[cancel] Unclosed Anchor: [DEF:cancel:Function] started at line 38
[cancel] Missing Mandatory Tag: @PURPOSE
[cancel] Unclosed Anchor: [DEF:cancel:Function] started at line 38
[cancel] Missing Mandatory Tag: @PURPOSE
[cancel] Unclosed Anchor: [DEF:cancel:Function] started at line 38
[cancel] Missing Mandatory Tag: @PURPOSE | +| frontend/src/components/Toast.svelte | 🔴 0% | [Toast] Unclosed Anchor at end of file (started line 1)
[Toast] Unclosed Anchor: [DEF:Toast:Component] started at line 1 | +| frontend/src/pages/Settings.svelte | 🔴 0% | [Settings] Unclosed Anchor at end of file (started line 1)
[Settings] Unclosed Anchor: [DEF:Settings:Component] started at line 1
[loadSettings] Unclosed Anchor at end of file (started line 50)
[loadSettings] Unclosed Anchor: [DEF:loadSettings:Function] started at line 50
[loadSettings] Unclosed Anchor: [DEF:loadSettings:Function] started at line 50
[handleSaveGlobal] Unclosed Anchor at end of file (started line 67)
[handleSaveGlobal] Unclosed Anchor: [DEF:handleSaveGlobal:Function] started at line 67
[handleSaveGlobal] Unclosed Anchor: [DEF:handleSaveGlobal:Function] started at line 67
[handleSaveGlobal] Unclosed Anchor: [DEF:handleSaveGlobal:Function] started at line 67
[handleAddOrUpdateEnv] Unclosed Anchor at end of file (started line 84)
[handleAddOrUpdateEnv] Unclosed Anchor: [DEF:handleAddOrUpdateEnv:Function] started at line 84
[handleAddOrUpdateEnv] Unclosed Anchor: [DEF:handleAddOrUpdateEnv:Function] started at line 84
[handleAddOrUpdateEnv] Unclosed Anchor: [DEF:handleAddOrUpdateEnv:Function] started at line 84
[handleAddOrUpdateEnv] Unclosed Anchor: [DEF:handleAddOrUpdateEnv:Function] started at line 84
[handleDeleteEnv] Unclosed Anchor at end of file (started line 108)
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleTestEnv] Unclosed Anchor at end of file (started line 129)
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[editEnv] Unclosed Anchor at end of file (started line 152)
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[resetEnvForm] Unclosed Anchor at end of file (started line 163)
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163 | +| frontend/src/pages/Dashboard.svelte | 🔴 0% | [Dashboard] Unclosed Anchor at end of file (started line 1)
[Dashboard] Unclosed Anchor: [DEF:Dashboard:Component] started at line 1
[onMount] Unclosed Anchor at end of file (started line 17)
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 17
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 17
[selectPlugin] Unclosed Anchor at end of file (started line 27)
[selectPlugin] Unclosed Anchor: [DEF:selectPlugin:Function] started at line 27
[selectPlugin] Unclosed Anchor: [DEF:selectPlugin:Function] started at line 27
[selectPlugin] Unclosed Anchor: [DEF:selectPlugin:Function] started at line 27 | +| frontend/src/lib/stores.js | 🔴 0% | [stores_module] Unclosed Anchor at end of file (started line 1)
[stores_module] Unclosed Anchor: [DEF:stores_module:Module] started at line 1
[plugins] Unclosed Anchor at end of file (started line 9)
[plugins] Unclosed Anchor: [DEF:plugins:Data] started at line 9
[plugins] Unclosed Anchor: [DEF:plugins:Data] started at line 9
[tasks] Unclosed Anchor at end of file (started line 13)
[tasks] Unclosed Anchor: [DEF:tasks:Data] started at line 13
[tasks] Unclosed Anchor: [DEF:tasks:Data] started at line 13
[tasks] Unclosed Anchor: [DEF:tasks:Data] started at line 13
[selectedPlugin] Unclosed Anchor at end of file (started line 17)
[selectedPlugin] Unclosed Anchor: [DEF:selectedPlugin:Data] started at line 17
[selectedPlugin] Unclosed Anchor: [DEF:selectedPlugin:Data] started at line 17
[selectedPlugin] Unclosed Anchor: [DEF:selectedPlugin:Data] started at line 17
[selectedPlugin] Unclosed Anchor: [DEF:selectedPlugin:Data] started at line 17
[selectedTask] Unclosed Anchor at end of file (started line 21)
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[currentPage] Unclosed Anchor at end of file (started line 25)
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[taskLogs] Unclosed Anchor at end of file (started line 29)
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[fetchPlugins] Unclosed Anchor at end of file (started line 33)
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchTasks] Unclosed Anchor at end of file (started line 47)
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47 | +| frontend/src/lib/toasts.js | 🔴 0% | [toasts_module] Unclosed Anchor at end of file (started line 1)
[toasts_module] Unclosed Anchor: [DEF:toasts_module:Module] started at line 1
[toasts] Unclosed Anchor at end of file (started line 8)
[toasts] Unclosed Anchor: [DEF:toasts:Data] started at line 8
[toasts] Unclosed Anchor: [DEF:toasts:Data] started at line 8
[addToast] Unclosed Anchor at end of file (started line 12)
[addToast] Unclosed Anchor: [DEF:addToast:Function] started at line 12
[addToast] Unclosed Anchor: [DEF:addToast:Function] started at line 12
[addToast] Unclosed Anchor: [DEF:addToast:Function] started at line 12
[removeToast] Unclosed Anchor at end of file (started line 25)
[removeToast] Unclosed Anchor: [DEF:removeToast:Function] started at line 25
[removeToast] Unclosed Anchor: [DEF:removeToast:Function] started at line 25
[removeToast] Unclosed Anchor: [DEF:removeToast:Function] started at line 25
[removeToast] Unclosed Anchor: [DEF:removeToast:Function] started at line 25 | +| frontend/src/lib/api.js | 🔴 0% | [api_module] Unclosed Anchor at end of file (started line 1)
[api_module] Unclosed Anchor: [DEF:api_module:Module] started at line 1
[fetchApi] Unclosed Anchor at end of file (started line 26)
[fetchApi] Unclosed Anchor: [DEF:fetchApi:Function] started at line 26
[fetchApi] Unclosed Anchor: [DEF:fetchApi:Function] started at line 26
[postApi] Unclosed Anchor at end of file (started line 46)
[postApi] Unclosed Anchor: [DEF:postApi:Function] started at line 46
[postApi] Unclosed Anchor: [DEF:postApi:Function] started at line 46
[postApi] Unclosed Anchor: [DEF:postApi:Function] started at line 46
[requestApi] Unclosed Anchor at end of file (started line 73)
[requestApi] Unclosed Anchor: [DEF:requestApi:Function] started at line 73
[requestApi] Unclosed Anchor: [DEF:requestApi:Function] started at line 73
[requestApi] Unclosed Anchor: [DEF:requestApi:Function] started at line 73
[requestApi] Unclosed Anchor: [DEF:requestApi:Function] started at line 73
[api] Unclosed Anchor at end of file (started line 100)
[api] Unclosed Anchor: [DEF:api:Data] started at line 100
[api] Unclosed Anchor: [DEF:api:Data] started at line 100
[api] Unclosed Anchor: [DEF:api:Data] started at line 100
[api] Unclosed Anchor: [DEF:api:Data] started at line 100
[api] Unclosed Anchor: [DEF:api:Data] started at line 100 | +| frontend/src/routes/migration/+page.svelte | 🔴 0% | [MigrationDashboard] Unclosed Anchor at end of file (started line 1)
[MigrationDashboard] Unclosed Anchor: [DEF:MigrationDashboard:Component] started at line 1
[fetchEnvironments] Unclosed Anchor at end of file (started line 51)
[fetchEnvironments] Unclosed Anchor: [DEF:fetchEnvironments:Function] started at line 51
[fetchEnvironments] Unclosed Anchor: [DEF:fetchEnvironments:Function] started at line 51
[fetchDashboards] Unclosed Anchor at end of file (started line 69)
[fetchDashboards] Unclosed Anchor: [DEF:fetchDashboards:Function] started at line 69
[fetchDashboards] Unclosed Anchor: [DEF:fetchDashboards:Function] started at line 69
[fetchDashboards] Unclosed Anchor: [DEF:fetchDashboards:Function] started at line 69
[fetchDatabases] Unclosed Anchor at end of file (started line 93)
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 93
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 93
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 93
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 93
[handleMappingUpdate] Unclosed Anchor at end of file (started line 128)
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleViewLogs] Unclosed Anchor at end of file (started line 163)
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor at end of file (started line 172)
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[startMigration] Unclosed Anchor at end of file (started line 207)
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207 | +| frontend/src/routes/migration/mappings/+page.svelte | 🔴 0% | [MappingManagement] Unclosed Anchor at end of file (started line 1)
[MappingManagement] Unclosed Anchor: [DEF:MappingManagement:Component] started at line 1
[fetchDatabases] Unclosed Anchor at end of file (started line 47)
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 47
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 47
[handleUpdate] Unclosed Anchor at end of file (started line 83)
[handleUpdate] Unclosed Anchor: [DEF:handleUpdate:Function] started at line 83
[handleUpdate] Unclosed Anchor: [DEF:handleUpdate:Function] started at line 83
[handleUpdate] Unclosed Anchor: [DEF:handleUpdate:Function] started at line 83 | +| backend/src/models/mapping.py | 🔴 0% | [backend.src.models.mapping] Unclosed Anchor at end of file (started line 1)
[backend.src.models.mapping] Unclosed Anchor: [DEF:backend.src.models.mapping:Module] started at line 1
[MigrationStatus] Unclosed Anchor at end of file (started line 21)
[MigrationStatus] Unclosed Anchor: [DEF:MigrationStatus:Class] started at line 21
[MigrationStatus] Unclosed Anchor: [DEF:MigrationStatus:Class] started at line 21
[Environment] Unclosed Anchor at end of file (started line 31)
[Environment] Unclosed Anchor: [DEF:Environment:Class] started at line 31
[Environment] Unclosed Anchor: [DEF:Environment:Class] started at line 31
[Environment] Unclosed Anchor: [DEF:Environment:Class] started at line 31
[DatabaseMapping] Unclosed Anchor at end of file (started line 42)
[DatabaseMapping] Unclosed Anchor: [DEF:DatabaseMapping:Class] started at line 42
[DatabaseMapping] Unclosed Anchor: [DEF:DatabaseMapping:Class] started at line 42
[DatabaseMapping] Unclosed Anchor: [DEF:DatabaseMapping:Class] started at line 42
[DatabaseMapping] Unclosed Anchor: [DEF:DatabaseMapping:Class] started at line 42
[MigrationJob] Unclosed Anchor at end of file (started line 57)
[MigrationJob] Unclosed Anchor: [DEF:MigrationJob:Class] started at line 57
[MigrationJob] Unclosed Anchor: [DEF:MigrationJob:Class] started at line 57
[MigrationJob] Unclosed Anchor: [DEF:MigrationJob:Class] started at line 57
[MigrationJob] Unclosed Anchor: [DEF:MigrationJob:Class] started at line 57
[MigrationJob] Unclosed Anchor: [DEF:MigrationJob:Class] started at line 57 | +| backend/src/models/dashboard.py | 🔴 0% | [backend.src.models.dashboard] Unclosed Anchor at end of file (started line 1)
[backend.src.models.dashboard] Unclosed Anchor: [DEF:backend.src.models.dashboard:Module] started at line 1
[DashboardMetadata] Unclosed Anchor at end of file (started line 10)
[DashboardMetadata] Unclosed Anchor: [DEF:DashboardMetadata:Class] started at line 10
[DashboardMetadata] Unclosed Anchor: [DEF:DashboardMetadata:Class] started at line 10
[DashboardSelection] Unclosed Anchor at end of file (started line 19)
[DashboardSelection] Unclosed Anchor: [DEF:DashboardSelection:Class] started at line 19
[DashboardSelection] Unclosed Anchor: [DEF:DashboardSelection:Class] started at line 19
[DashboardSelection] Unclosed Anchor: [DEF:DashboardSelection:Class] started at line 19 | +| backend/src/models/task.py | 🔴 0% | [backend.src.models.task] Unclosed Anchor at end of file (started line 1)
[backend.src.models.task] Unclosed Anchor: [DEF:backend.src.models.task:Module] started at line 1
[TaskRecord] Unclosed Anchor at end of file (started line 17)
[TaskRecord] Unclosed Anchor: [DEF:TaskRecord:Class] started at line 17
[TaskRecord] Unclosed Anchor: [DEF:TaskRecord:Class] started at line 17 | +| backend/src/services/mapping_service.py | 🔴 0% | [backend.src.services.mapping_service] Unclosed Anchor at end of file (started line 1)
[backend.src.services.mapping_service] Unclosed Anchor: [DEF:backend.src.services.mapping_service:Module] started at line 1
[MappingService] Unclosed Anchor at end of file (started line 18)
[MappingService] Unclosed Anchor: [DEF:MappingService:Class] started at line 18
[MappingService] Unclosed Anchor: [DEF:MappingService:Class] started at line 18
[MappingService.__init__] Unclosed Anchor at end of file (started line 22)
[MappingService.__init__] Unclosed Anchor: [DEF:MappingService.__init__:Function] started at line 22
[MappingService.__init__] Missing Mandatory Tag: @PURPOSE
[MappingService.__init__] Unclosed Anchor: [DEF:MappingService.__init__:Function] started at line 22
[MappingService.__init__] Missing Mandatory Tag: @PURPOSE
[MappingService.__init__] Unclosed Anchor: [DEF:MappingService.__init__:Function] started at line 22
[MappingService.__init__] Missing Mandatory Tag: @PURPOSE
[MappingService._get_client] Unclosed Anchor at end of file (started line 26)
[MappingService._get_client] Unclosed Anchor: [DEF:MappingService._get_client:Function] started at line 26
[MappingService._get_client] Unclosed Anchor: [DEF:MappingService._get_client:Function] started at line 26
[MappingService._get_client] Unclosed Anchor: [DEF:MappingService._get_client:Function] started at line 26
[MappingService._get_client] Unclosed Anchor: [DEF:MappingService._get_client:Function] started at line 26
[MappingService.get_suggestions] Unclosed Anchor at end of file (started line 46)
[MappingService.get_suggestions] Unclosed Anchor: [DEF:MappingService.get_suggestions:Function] started at line 46
[MappingService.get_suggestions] Unclosed Anchor: [DEF:MappingService.get_suggestions:Function] started at line 46
[MappingService.get_suggestions] Unclosed Anchor: [DEF:MappingService.get_suggestions:Function] started at line 46
[MappingService.get_suggestions] Unclosed Anchor: [DEF:MappingService.get_suggestions:Function] started at line 46
[MappingService.get_suggestions] Unclosed Anchor: [DEF:MappingService.get_suggestions:Function] started at line 46 | +| backend/src/core/config_manager.py | 🔴 0% | [ConfigManagerModule] Unclosed Anchor at end of file (started line 1)
[ConfigManagerModule] Unclosed Anchor: [DEF:ConfigManagerModule:Module] started at line 1
[ConfigManager] Unclosed Anchor at end of file (started line 22)
[ConfigManager] Unclosed Anchor: [DEF:ConfigManager:Class] started at line 22
[ConfigManager] Unclosed Anchor: [DEF:ConfigManager:Class] started at line 22
[__init__] Unclosed Anchor at end of file (started line 27)
[__init__] Unclosed Anchor: [DEF:__init__:Function] started at line 27
[__init__] Unclosed Anchor: [DEF:__init__:Function] started at line 27
[__init__] Unclosed Anchor: [DEF:__init__:Function] started at line 27
[_load_config] Unclosed Anchor at end of file (started line 51)
[_load_config] Unclosed Anchor: [DEF:_load_config:Function] started at line 51
[_load_config] Unclosed Anchor: [DEF:_load_config:Function] started at line 51
[_load_config] Unclosed Anchor: [DEF:_load_config:Function] started at line 51
[_load_config] Unclosed Anchor: [DEF:_load_config:Function] started at line 51
[_save_config_to_disk] Unclosed Anchor at end of file (started line 83)
[_save_config_to_disk] Unclosed Anchor: [DEF:_save_config_to_disk:Function] started at line 83
[_save_config_to_disk] Unclosed Anchor: [DEF:_save_config_to_disk:Function] started at line 83
[_save_config_to_disk] Unclosed Anchor: [DEF:_save_config_to_disk:Function] started at line 83
[_save_config_to_disk] Unclosed Anchor: [DEF:_save_config_to_disk:Function] started at line 83
[_save_config_to_disk] Unclosed Anchor: [DEF:_save_config_to_disk:Function] started at line 83
[save] Unclosed Anchor at end of file (started line 102)
[save] Unclosed Anchor: [DEF:save:Function] started at line 102
[save] Unclosed Anchor: [DEF:save:Function] started at line 102
[save] Unclosed Anchor: [DEF:save:Function] started at line 102
[save] Unclosed Anchor: [DEF:save:Function] started at line 102
[save] Unclosed Anchor: [DEF:save:Function] started at line 102
[save] Unclosed Anchor: [DEF:save:Function] started at line 102
[get_config] Unclosed Anchor at end of file (started line 108)
[get_config] Unclosed Anchor: [DEF:get_config:Function] started at line 108
[get_config] Unclosed Anchor: [DEF:get_config:Function] started at line 108
[get_config] Unclosed Anchor: [DEF:get_config:Function] started at line 108
[get_config] Unclosed Anchor: [DEF:get_config:Function] started at line 108
[get_config] Unclosed Anchor: [DEF:get_config:Function] started at line 108
[get_config] Unclosed Anchor: [DEF:get_config:Function] started at line 108
[get_config] Unclosed Anchor: [DEF:get_config:Function] started at line 108
[update_global_settings] Unclosed Anchor at end of file (started line 115)
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 115
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 115
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 115
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 115
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 115
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 115
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 115
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 115
[validate_path] Unclosed Anchor at end of file (started line 135)
[validate_path] Unclosed Anchor: [DEF:validate_path:Function] started at line 135
[validate_path] Unclosed Anchor: [DEF:validate_path:Function] started at line 135
[validate_path] Unclosed Anchor: [DEF:validate_path:Function] started at line 135
[validate_path] Unclosed Anchor: [DEF:validate_path:Function] started at line 135
[validate_path] Unclosed Anchor: [DEF:validate_path:Function] started at line 135
[validate_path] Unclosed Anchor: [DEF:validate_path:Function] started at line 135
[validate_path] Unclosed Anchor: [DEF:validate_path:Function] started at line 135
[validate_path] Unclosed Anchor: [DEF:validate_path:Function] started at line 135
[validate_path] Unclosed Anchor: [DEF:validate_path:Function] started at line 135
[get_environments] Unclosed Anchor at end of file (started line 153)
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[has_environments] Unclosed Anchor at end of file (started line 160)
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[add_environment] Unclosed Anchor at end of file (started line 167)
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[update_environment] Unclosed Anchor at end of file (started line 186)
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[delete_environment] Unclosed Anchor at end of file (started line 215)
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215 | +| backend/src/core/superset_client.py | 🔴 0% | [backend.src.core.superset_client] Unclosed Anchor at end of file (started line 1)
[backend.src.core.superset_client] Unclosed Anchor: [DEF:backend.src.core.superset_client:Module] started at line 1
[SupersetClient] Unclosed Anchor at end of file (started line 16)
[SupersetClient] Unclosed Anchor: [DEF:SupersetClient:Class] started at line 16
[SupersetClient] Unclosed Anchor: [DEF:SupersetClient:Class] started at line 16
[SupersetClient.get_databases_summary] Unclosed Anchor at end of file (started line 20)
[SupersetClient.get_databases_summary] Unclosed Anchor: [DEF:SupersetClient.get_databases_summary:Function] started at line 20
[SupersetClient.get_databases_summary] Unclosed Anchor: [DEF:SupersetClient.get_databases_summary:Function] started at line 20
[SupersetClient.get_databases_summary] Unclosed Anchor: [DEF:SupersetClient.get_databases_summary:Function] started at line 20
[SupersetClient.get_database_by_uuid] Unclosed Anchor at end of file (started line 40)
[SupersetClient.get_database_by_uuid] Unclosed Anchor: [DEF:SupersetClient.get_database_by_uuid:Function] started at line 40
[SupersetClient.get_database_by_uuid] Unclosed Anchor: [DEF:SupersetClient.get_database_by_uuid:Function] started at line 40
[SupersetClient.get_database_by_uuid] Unclosed Anchor: [DEF:SupersetClient.get_database_by_uuid:Function] started at line 40
[SupersetClient.get_database_by_uuid] Unclosed Anchor: [DEF:SupersetClient.get_database_by_uuid:Function] started at line 40
[SupersetClient.get_dashboards_summary] Unclosed Anchor at end of file (started line 55)
[SupersetClient.get_dashboards_summary] Unclosed Anchor: [DEF:SupersetClient.get_dashboards_summary:Function] started at line 55
[SupersetClient.get_dashboards_summary] Unclosed Anchor: [DEF:SupersetClient.get_dashboards_summary:Function] started at line 55
[SupersetClient.get_dashboards_summary] Unclosed Anchor: [DEF:SupersetClient.get_dashboards_summary:Function] started at line 55
[SupersetClient.get_dashboards_summary] Unclosed Anchor: [DEF:SupersetClient.get_dashboards_summary:Function] started at line 55
[SupersetClient.get_dashboards_summary] Unclosed Anchor: [DEF:SupersetClient.get_dashboards_summary:Function] started at line 55 | +| backend/src/core/migration_engine.py | 🔴 0% | [backend.src.core.migration_engine] Unclosed Anchor at end of file (started line 1)
[backend.src.core.migration_engine] Unclosed Anchor: [DEF:backend.src.core.migration_engine:Module] started at line 1
[MigrationEngine] Unclosed Anchor at end of file (started line 22)
[MigrationEngine] Unclosed Anchor: [DEF:MigrationEngine:Class] started at line 22
[MigrationEngine] Unclosed Anchor: [DEF:MigrationEngine:Class] started at line 22
[MigrationEngine.transform_zip] Unclosed Anchor at end of file (started line 26)
[MigrationEngine.transform_zip] Unclosed Anchor: [DEF:MigrationEngine.transform_zip:Function] started at line 26
[MigrationEngine.transform_zip] Unclosed Anchor: [DEF:MigrationEngine.transform_zip:Function] started at line 26
[MigrationEngine.transform_zip] Unclosed Anchor: [DEF:MigrationEngine.transform_zip:Function] started at line 26
[MigrationEngine._transform_yaml] Unclosed Anchor at end of file (started line 77)
[MigrationEngine._transform_yaml] Unclosed Anchor: [DEF:MigrationEngine._transform_yaml:Function] started at line 77
[MigrationEngine._transform_yaml] Unclosed Anchor: [DEF:MigrationEngine._transform_yaml:Function] started at line 77
[MigrationEngine._transform_yaml] Unclosed Anchor: [DEF:MigrationEngine._transform_yaml:Function] started at line 77
[MigrationEngine._transform_yaml] Unclosed Anchor: [DEF:MigrationEngine._transform_yaml:Function] started at line 77 | +| backend/src/core/logger.py | 🔴 0% | [LoggerModule] Unclosed Anchor at end of file (started line 1)
[LoggerModule] Unclosed Anchor: [DEF:LoggerModule:Module] started at line 1
[BeliefFormatter] Unclosed Anchor at end of file (started line 22)
[BeliefFormatter] Unclosed Anchor: [DEF:BeliefFormatter:Class] started at line 22
[BeliefFormatter] Unclosed Anchor: [DEF:BeliefFormatter:Class] started at line 22
[LogEntry] Unclosed Anchor at end of file (started line 34)
[LogEntry] Unclosed Anchor: [DEF:LogEntry:Class] started at line 34
[LogEntry] Unclosed Anchor: [DEF:LogEntry:Class] started at line 34
[LogEntry] Unclosed Anchor: [DEF:LogEntry:Class] started at line 34
[BeliefScope] Unclosed Anchor at end of file (started line 45)
[BeliefScope] Unclosed Anchor: [DEF:BeliefScope:Function] started at line 45
[BeliefScope] Unclosed Anchor: [DEF:BeliefScope:Function] started at line 45
[BeliefScope] Unclosed Anchor: [DEF:BeliefScope:Function] started at line 45
[BeliefScope] Unclosed Anchor: [DEF:BeliefScope:Function] started at line 45
[ConfigureLogger] Unclosed Anchor at end of file (started line 76)
[ConfigureLogger] Unclosed Anchor: [DEF:ConfigureLogger:Function] started at line 76
[ConfigureLogger] Unclosed Anchor: [DEF:ConfigureLogger:Function] started at line 76
[ConfigureLogger] Unclosed Anchor: [DEF:ConfigureLogger:Function] started at line 76
[ConfigureLogger] Unclosed Anchor: [DEF:ConfigureLogger:Function] started at line 76
[ConfigureLogger] Unclosed Anchor: [DEF:ConfigureLogger:Function] started at line 76
[WebSocketLogHandler] Unclosed Anchor at end of file (started line 120)
[WebSocketLogHandler] Unclosed Anchor: [DEF:WebSocketLogHandler:Class] started at line 120
[WebSocketLogHandler] Unclosed Anchor: [DEF:WebSocketLogHandler:Class] started at line 120
[WebSocketLogHandler] Unclosed Anchor: [DEF:WebSocketLogHandler:Class] started at line 120
[WebSocketLogHandler] Unclosed Anchor: [DEF:WebSocketLogHandler:Class] started at line 120
[WebSocketLogHandler] Unclosed Anchor: [DEF:WebSocketLogHandler:Class] started at line 120
[WebSocketLogHandler] Unclosed Anchor: [DEF:WebSocketLogHandler:Class] started at line 120
[Logger] Unclosed Anchor at end of file (started line 163)
[Logger] Unclosed Anchor: [DEF:Logger:Global] started at line 163
[Logger] Unclosed Anchor: [DEF:Logger:Global] started at line 163
[Logger] Unclosed Anchor: [DEF:Logger:Global] started at line 163
[Logger] Unclosed Anchor: [DEF:Logger:Global] started at line 163
[Logger] Unclosed Anchor: [DEF:Logger:Global] started at line 163
[Logger] Unclosed Anchor: [DEF:Logger:Global] started at line 163
[Logger] Unclosed Anchor: [DEF:Logger:Global] started at line 163 | +| backend/src/core/database.py | 🔴 0% | [backend.src.core.database] Unclosed Anchor at end of file (started line 1)
[backend.src.core.database] Unclosed Anchor: [DEF:backend.src.core.database:Module] started at line 1
[DATABASE_URL] Unclosed Anchor at end of file (started line 20)
[DATABASE_URL] Unclosed Anchor: [DEF:DATABASE_URL:Constant] started at line 20
[DATABASE_URL] Unclosed Anchor: [DEF:DATABASE_URL:Constant] started at line 20
[TASKS_DATABASE_URL] Unclosed Anchor at end of file (started line 24)
[TASKS_DATABASE_URL] Unclosed Anchor: [DEF:TASKS_DATABASE_URL:Constant] started at line 24
[TASKS_DATABASE_URL] Unclosed Anchor: [DEF:TASKS_DATABASE_URL:Constant] started at line 24
[TASKS_DATABASE_URL] Unclosed Anchor: [DEF:TASKS_DATABASE_URL:Constant] started at line 24
[engine] Unclosed Anchor at end of file (started line 28)
[engine] Unclosed Anchor: [DEF:engine:Variable] started at line 28
[engine] Unclosed Anchor: [DEF:engine:Variable] started at line 28
[engine] Unclosed Anchor: [DEF:engine:Variable] started at line 28
[engine] Unclosed Anchor: [DEF:engine:Variable] started at line 28
[tasks_engine] Unclosed Anchor at end of file (started line 32)
[tasks_engine] Unclosed Anchor: [DEF:tasks_engine:Variable] started at line 32
[tasks_engine] Unclosed Anchor: [DEF:tasks_engine:Variable] started at line 32
[tasks_engine] Unclosed Anchor: [DEF:tasks_engine:Variable] started at line 32
[tasks_engine] Unclosed Anchor: [DEF:tasks_engine:Variable] started at line 32
[tasks_engine] Unclosed Anchor: [DEF:tasks_engine:Variable] started at line 32
[SessionLocal] Unclosed Anchor at end of file (started line 36)
[SessionLocal] Unclosed Anchor: [DEF:SessionLocal:Class] started at line 36
[SessionLocal] Missing Mandatory Tag: @PURPOSE
[SessionLocal] Unclosed Anchor: [DEF:SessionLocal:Class] started at line 36
[SessionLocal] Missing Mandatory Tag: @PURPOSE
[SessionLocal] Unclosed Anchor: [DEF:SessionLocal:Class] started at line 36
[SessionLocal] Missing Mandatory Tag: @PURPOSE
[SessionLocal] Unclosed Anchor: [DEF:SessionLocal:Class] started at line 36
[SessionLocal] Missing Mandatory Tag: @PURPOSE
[SessionLocal] Unclosed Anchor: [DEF:SessionLocal:Class] started at line 36
[SessionLocal] Missing Mandatory Tag: @PURPOSE
[SessionLocal] Unclosed Anchor: [DEF:SessionLocal:Class] started at line 36
[SessionLocal] Missing Mandatory Tag: @PURPOSE
[TasksSessionLocal] Unclosed Anchor at end of file (started line 40)
[TasksSessionLocal] Unclosed Anchor: [DEF:TasksSessionLocal:Class] started at line 40
[TasksSessionLocal] Missing Mandatory Tag: @PURPOSE
[TasksSessionLocal] Unclosed Anchor: [DEF:TasksSessionLocal:Class] started at line 40
[TasksSessionLocal] Missing Mandatory Tag: @PURPOSE
[TasksSessionLocal] Unclosed Anchor: [DEF:TasksSessionLocal:Class] started at line 40
[TasksSessionLocal] Missing Mandatory Tag: @PURPOSE
[TasksSessionLocal] Unclosed Anchor: [DEF:TasksSessionLocal:Class] started at line 40
[TasksSessionLocal] Missing Mandatory Tag: @PURPOSE
[TasksSessionLocal] Unclosed Anchor: [DEF:TasksSessionLocal:Class] started at line 40
[TasksSessionLocal] Missing Mandatory Tag: @PURPOSE
[TasksSessionLocal] Unclosed Anchor: [DEF:TasksSessionLocal:Class] started at line 40
[TasksSessionLocal] Missing Mandatory Tag: @PURPOSE
[TasksSessionLocal] Unclosed Anchor: [DEF:TasksSessionLocal:Class] started at line 40
[TasksSessionLocal] Missing Mandatory Tag: @PURPOSE
[init_db] Unclosed Anchor at end of file (started line 44)
[init_db] Unclosed Anchor: [DEF:init_db:Function] started at line 44
[init_db] Unclosed Anchor: [DEF:init_db:Function] started at line 44
[init_db] Unclosed Anchor: [DEF:init_db:Function] started at line 44
[init_db] Unclosed Anchor: [DEF:init_db:Function] started at line 44
[init_db] Unclosed Anchor: [DEF:init_db:Function] started at line 44
[init_db] Unclosed Anchor: [DEF:init_db:Function] started at line 44
[init_db] Unclosed Anchor: [DEF:init_db:Function] started at line 44
[init_db] Unclosed Anchor: [DEF:init_db:Function] started at line 44
[get_db] Unclosed Anchor at end of file (started line 51)
[get_db] Unclosed Anchor: [DEF:get_db:Function] started at line 51
[get_db] Unclosed Anchor: [DEF:get_db:Function] started at line 51
[get_db] Unclosed Anchor: [DEF:get_db:Function] started at line 51
[get_db] Unclosed Anchor: [DEF:get_db:Function] started at line 51
[get_db] Unclosed Anchor: [DEF:get_db:Function] started at line 51
[get_db] Unclosed Anchor: [DEF:get_db:Function] started at line 51
[get_db] Unclosed Anchor: [DEF:get_db:Function] started at line 51
[get_db] Unclosed Anchor: [DEF:get_db:Function] started at line 51
[get_db] Unclosed Anchor: [DEF:get_db:Function] started at line 51
[get_tasks_db] Unclosed Anchor at end of file (started line 63)
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63 | +| backend/src/core/config_models.py | 🔴 0% | [ConfigModels] Unclosed Anchor at end of file (started line 1)
[ConfigModels] Unclosed Anchor: [DEF:ConfigModels:Module] started at line 1
[Schedule] Unclosed Anchor at end of file (started line 11)
[Schedule] Unclosed Anchor: [DEF:Schedule:DataClass] started at line 11
[Schedule] Unclosed Anchor: [DEF:Schedule:DataClass] started at line 11
[Environment] Unclosed Anchor at end of file (started line 18)
[Environment] Unclosed Anchor: [DEF:Environment:DataClass] started at line 18
[Environment] Unclosed Anchor: [DEF:Environment:DataClass] started at line 18
[Environment] Unclosed Anchor: [DEF:Environment:DataClass] started at line 18
[LoggingConfig] Unclosed Anchor at end of file (started line 30)
[LoggingConfig] Unclosed Anchor: [DEF:LoggingConfig:DataClass] started at line 30
[LoggingConfig] Unclosed Anchor: [DEF:LoggingConfig:DataClass] started at line 30
[LoggingConfig] Unclosed Anchor: [DEF:LoggingConfig:DataClass] started at line 30
[LoggingConfig] Unclosed Anchor: [DEF:LoggingConfig:DataClass] started at line 30
[GlobalSettings] Unclosed Anchor at end of file (started line 40)
[GlobalSettings] Unclosed Anchor: [DEF:GlobalSettings:DataClass] started at line 40
[GlobalSettings] Unclosed Anchor: [DEF:GlobalSettings:DataClass] started at line 40
[GlobalSettings] Unclosed Anchor: [DEF:GlobalSettings:DataClass] started at line 40
[GlobalSettings] Unclosed Anchor: [DEF:GlobalSettings:DataClass] started at line 40
[GlobalSettings] Unclosed Anchor: [DEF:GlobalSettings:DataClass] started at line 40
[AppConfig] Unclosed Anchor at end of file (started line 53)
[AppConfig] Unclosed Anchor: [DEF:AppConfig:DataClass] started at line 53
[AppConfig] Unclosed Anchor: [DEF:AppConfig:DataClass] started at line 53
[AppConfig] Unclosed Anchor: [DEF:AppConfig:DataClass] started at line 53
[AppConfig] Unclosed Anchor: [DEF:AppConfig:DataClass] started at line 53
[AppConfig] Unclosed Anchor: [DEF:AppConfig:DataClass] started at line 53
[AppConfig] Unclosed Anchor: [DEF:AppConfig:DataClass] started at line 53 | +| backend/src/core/plugin_loader.py | 🔴 0% | [PluginLoader] Unclosed Anchor at end of file (started line 8)
[PluginLoader] Unclosed Anchor: [DEF:PluginLoader:Class] started at line 8 | +| backend/src/core/plugin_base.py | 🔴 0% | [PluginBase] Unclosed Anchor at end of file (started line 6)
[PluginBase] Unclosed Anchor: [DEF:PluginBase:Class] started at line 6
[PluginConfig] Unclosed Anchor at end of file (started line 59)
[PluginConfig] Unclosed Anchor: [DEF:PluginConfig:Class] started at line 59
[PluginConfig] Unclosed Anchor: [DEF:PluginConfig:Class] started at line 59 | +| backend/src/core/utils/matching.py | 🔴 0% | [backend.src.core.utils.matching] Unclosed Anchor at end of file (started line 1)
[backend.src.core.utils.matching] Unclosed Anchor: [DEF:backend.src.core.utils.matching:Module] started at line 1
[suggest_mappings] Unclosed Anchor at end of file (started line 15)
[suggest_mappings] Unclosed Anchor: [DEF:suggest_mappings:Function] started at line 15
[suggest_mappings] Unclosed Anchor: [DEF:suggest_mappings:Function] started at line 15 | +| backend/src/core/task_manager/cleanup.py | 🔴 0% | [TaskCleanupModule] Unclosed Anchor at end of file (started line 1)
[TaskCleanupModule] Unclosed Anchor: [DEF:TaskCleanupModule:Module] started at line 1
[TaskCleanupService] Unclosed Anchor at end of file (started line 12)
[TaskCleanupService] Unclosed Anchor: [DEF:TaskCleanupService:Class] started at line 12
[TaskCleanupService] Unclosed Anchor: [DEF:TaskCleanupService:Class] started at line 12
[TaskCleanupService.run_cleanup] Unclosed Anchor at end of file (started line 19)
[TaskCleanupService.run_cleanup] Unclosed Anchor: [DEF:TaskCleanupService.run_cleanup:Function] started at line 19
[TaskCleanupService.run_cleanup] Unclosed Anchor: [DEF:TaskCleanupService.run_cleanup:Function] started at line 19
[TaskCleanupService.run_cleanup] Unclosed Anchor: [DEF:TaskCleanupService.run_cleanup:Function] started at line 19 | +| backend/src/plugins/backup.py | 🔴 0% | [BackupPlugin] Unclosed Anchor at end of file (started line 1)
[BackupPlugin] Unclosed Anchor: [DEF:BackupPlugin:Module] started at line 1 | +| backend/src/plugins/migration.py | 🔴 0% | [MigrationPlugin] Unclosed Anchor at end of file (started line 1)
[MigrationPlugin] Unclosed Anchor: [DEF:MigrationPlugin:Module] started at line 1
[MigrationPlugin.execute] Unclosed Anchor at end of file (started line 103)
[MigrationPlugin.execute] Unclosed Anchor: [DEF:MigrationPlugin.execute:Action] started at line 103
[MigrationPlugin.execute] Unclosed Anchor: [DEF:MigrationPlugin.execute:Action] started at line 103 | +| backend/src/api/auth.py | 🔴 0% | [AuthModule] Unclosed Anchor at end of file (started line 1)
[AuthModule] Unclosed Anchor: [DEF:AuthModule:Module] started at line 1 | +| backend/src/api/routes/settings.py | 🔴 0% | [SettingsRouter] Unclosed Anchor at end of file (started line 1)
[SettingsRouter] Unclosed Anchor: [DEF:SettingsRouter:Module] started at line 1
[get_settings] Unclosed Anchor at end of file (started line 26)
[get_settings] Unclosed Anchor: [DEF:get_settings:Function] started at line 26
[get_settings] Unclosed Anchor: [DEF:get_settings:Function] started at line 26
[update_global_settings] Unclosed Anchor at end of file (started line 40)
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 40
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 40
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 40
[get_environments] Unclosed Anchor at end of file (started line 54)
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 54
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 54
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 54
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 54
[add_environment] Unclosed Anchor at end of file (started line 63)
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 63
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 63
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 63
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 63
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 63
[update_environment] Unclosed Anchor at end of file (started line 96)
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 96
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 96
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 96
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 96
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 96
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 96
[delete_environment] Unclosed Anchor at end of file (started line 139)
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 139
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 139
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 139
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 139
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 139
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 139
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 139
[test_environment_connection] Unclosed Anchor at end of file (started line 152)
[test_environment_connection] Unclosed Anchor: [DEF:test_environment_connection:Function] started at line 152
[test_environment_connection] Unclosed Anchor: [DEF:test_environment_connection:Function] started at line 152
[test_environment_connection] Unclosed Anchor: [DEF:test_environment_connection:Function] started at line 152
[test_environment_connection] Unclosed Anchor: [DEF:test_environment_connection:Function] started at line 152
[test_environment_connection] Unclosed Anchor: [DEF:test_environment_connection:Function] started at line 152
[test_environment_connection] Unclosed Anchor: [DEF:test_environment_connection:Function] started at line 152
[test_environment_connection] Unclosed Anchor: [DEF:test_environment_connection:Function] started at line 152
[test_environment_connection] Unclosed Anchor: [DEF:test_environment_connection:Function] started at line 152
[validate_backup_path] Unclosed Anchor at end of file (started line 195)
[validate_backup_path] Unclosed Anchor: [DEF:validate_backup_path:Function] started at line 195
[validate_backup_path] Unclosed Anchor: [DEF:validate_backup_path:Function] started at line 195
[validate_backup_path] Unclosed Anchor: [DEF:validate_backup_path:Function] started at line 195
[validate_backup_path] Unclosed Anchor: [DEF:validate_backup_path:Function] started at line 195
[validate_backup_path] Unclosed Anchor: [DEF:validate_backup_path:Function] started at line 195
[validate_backup_path] Unclosed Anchor: [DEF:validate_backup_path:Function] started at line 195
[validate_backup_path] Unclosed Anchor: [DEF:validate_backup_path:Function] started at line 195
[validate_backup_path] Unclosed Anchor: [DEF:validate_backup_path:Function] started at line 195
[validate_backup_path] Unclosed Anchor: [DEF:validate_backup_path:Function] started at line 195 | +| backend/src/api/routes/tasks.py | 🔴 0% | [TasksRouter] Unclosed Anchor at end of file (started line 1)
[TasksRouter] Unclosed Anchor: [DEF:TasksRouter:Module] started at line 1 | +| backend/src/api/routes/environments.py | 🔴 0% | [backend.src.api.routes.environments] Unclosed Anchor at end of file (started line 1)
[backend.src.api.routes.environments] Unclosed Anchor: [DEF:backend.src.api.routes.environments:Module] started at line 1
[ScheduleSchema] Unclosed Anchor at end of file (started line 23)
[ScheduleSchema] Unclosed Anchor: [DEF:ScheduleSchema:DataClass] started at line 23
[ScheduleSchema] Unclosed Anchor: [DEF:ScheduleSchema:DataClass] started at line 23
[EnvironmentResponse] Unclosed Anchor at end of file (started line 29)
[EnvironmentResponse] Unclosed Anchor: [DEF:EnvironmentResponse:DataClass] started at line 29
[EnvironmentResponse] Unclosed Anchor: [DEF:EnvironmentResponse:DataClass] started at line 29
[EnvironmentResponse] Unclosed Anchor: [DEF:EnvironmentResponse:DataClass] started at line 29
[DatabaseResponse] Unclosed Anchor at end of file (started line 37)
[DatabaseResponse] Unclosed Anchor: [DEF:DatabaseResponse:DataClass] started at line 37
[DatabaseResponse] Unclosed Anchor: [DEF:DatabaseResponse:DataClass] started at line 37
[DatabaseResponse] Unclosed Anchor: [DEF:DatabaseResponse:DataClass] started at line 37
[DatabaseResponse] Unclosed Anchor: [DEF:DatabaseResponse:DataClass] started at line 37
[get_environments] Unclosed Anchor at end of file (started line 44)
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 44
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 44
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 44
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 44
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 44
[update_environment_schedule] Unclosed Anchor at end of file (started line 66)
[update_environment_schedule] Unclosed Anchor: [DEF:update_environment_schedule:Function] started at line 66
[update_environment_schedule] Unclosed Anchor: [DEF:update_environment_schedule:Function] started at line 66
[update_environment_schedule] Unclosed Anchor: [DEF:update_environment_schedule:Function] started at line 66
[update_environment_schedule] Unclosed Anchor: [DEF:update_environment_schedule:Function] started at line 66
[update_environment_schedule] Unclosed Anchor: [DEF:update_environment_schedule:Function] started at line 66
[update_environment_schedule] Unclosed Anchor: [DEF:update_environment_schedule:Function] started at line 66
[get_environment_databases] Unclosed Anchor at end of file (started line 94)
[get_environment_databases] Unclosed Anchor: [DEF:get_environment_databases:Function] started at line 94
[get_environment_databases] Unclosed Anchor: [DEF:get_environment_databases:Function] started at line 94
[get_environment_databases] Unclosed Anchor: [DEF:get_environment_databases:Function] started at line 94
[get_environment_databases] Unclosed Anchor: [DEF:get_environment_databases:Function] started at line 94
[get_environment_databases] Unclosed Anchor: [DEF:get_environment_databases:Function] started at line 94
[get_environment_databases] Unclosed Anchor: [DEF:get_environment_databases:Function] started at line 94
[get_environment_databases] Unclosed Anchor: [DEF:get_environment_databases:Function] started at line 94 | +| backend/src/api/routes/plugins.py | 🔴 0% | [PluginsRouter] Unclosed Anchor at end of file (started line 1)
[PluginsRouter] Unclosed Anchor: [DEF:PluginsRouter:Module] started at line 1 | +| backend/src/api/routes/migration.py | 🔴 0% | [backend.src.api.routes.migration] Unclosed Anchor at end of file (started line 1)
[backend.src.api.routes.migration] Unclosed Anchor: [DEF:backend.src.api.routes.migration:Module] started at line 1
[get_dashboards] Unclosed Anchor at end of file (started line 17)
[get_dashboards] Unclosed Anchor: [DEF:get_dashboards:Function] started at line 17
[get_dashboards] Unclosed Anchor: [DEF:get_dashboards:Function] started at line 17
[execute_migration] Unclosed Anchor at end of file (started line 42)
[execute_migration] Unclosed Anchor: [DEF:execute_migration:Function] started at line 42
[execute_migration] Unclosed Anchor: [DEF:execute_migration:Function] started at line 42
[execute_migration] Unclosed Anchor: [DEF:execute_migration:Function] started at line 42 | +| backend/src/api/routes/mappings.py | 🔴 0% | [backend.src.api.routes.mappings] Unclosed Anchor at end of file (started line 1)
[backend.src.api.routes.mappings] Unclosed Anchor: [DEF:backend.src.api.routes.mappings:Module] started at line 1
[MappingCreate] Unclosed Anchor at end of file (started line 24)
[MappingCreate] Unclosed Anchor: [DEF:MappingCreate:DataClass] started at line 24
[MappingCreate] Unclosed Anchor: [DEF:MappingCreate:DataClass] started at line 24
[MappingResponse] Unclosed Anchor at end of file (started line 34)
[MappingResponse] Unclosed Anchor: [DEF:MappingResponse:DataClass] started at line 34
[MappingResponse] Unclosed Anchor: [DEF:MappingResponse:DataClass] started at line 34
[MappingResponse] Unclosed Anchor: [DEF:MappingResponse:DataClass] started at line 34
[SuggestRequest] Unclosed Anchor at end of file (started line 48)
[SuggestRequest] Unclosed Anchor: [DEF:SuggestRequest:DataClass] started at line 48
[SuggestRequest] Unclosed Anchor: [DEF:SuggestRequest:DataClass] started at line 48
[SuggestRequest] Unclosed Anchor: [DEF:SuggestRequest:DataClass] started at line 48
[SuggestRequest] Unclosed Anchor: [DEF:SuggestRequest:DataClass] started at line 48
[get_mappings] Unclosed Anchor at end of file (started line 54)
[get_mappings] Unclosed Anchor: [DEF:get_mappings:Function] started at line 54
[get_mappings] Unclosed Anchor: [DEF:get_mappings:Function] started at line 54
[get_mappings] Unclosed Anchor: [DEF:get_mappings:Function] started at line 54
[get_mappings] Unclosed Anchor: [DEF:get_mappings:Function] started at line 54
[get_mappings] Unclosed Anchor: [DEF:get_mappings:Function] started at line 54
[create_mapping] Unclosed Anchor at end of file (started line 70)
[create_mapping] Unclosed Anchor: [DEF:create_mapping:Function] started at line 70
[create_mapping] Unclosed Anchor: [DEF:create_mapping:Function] started at line 70
[create_mapping] Unclosed Anchor: [DEF:create_mapping:Function] started at line 70
[create_mapping] Unclosed Anchor: [DEF:create_mapping:Function] started at line 70
[create_mapping] Unclosed Anchor: [DEF:create_mapping:Function] started at line 70
[create_mapping] Unclosed Anchor: [DEF:create_mapping:Function] started at line 70
[suggest_mappings_api] Unclosed Anchor at end of file (started line 95)
[suggest_mappings_api] Unclosed Anchor: [DEF:suggest_mappings_api:Function] started at line 95
[suggest_mappings_api] Unclosed Anchor: [DEF:suggest_mappings_api:Function] started at line 95
[suggest_mappings_api] Unclosed Anchor: [DEF:suggest_mappings_api:Function] started at line 95
[suggest_mappings_api] Unclosed Anchor: [DEF:suggest_mappings_api:Function] started at line 95
[suggest_mappings_api] Unclosed Anchor: [DEF:suggest_mappings_api:Function] started at line 95
[suggest_mappings_api] Unclosed Anchor: [DEF:suggest_mappings_api:Function] started at line 95
[suggest_mappings_api] Unclosed Anchor: [DEF:suggest_mappings_api:Function] started at line 95 | +| backend/src/app.py | 🟡 60% | [AppModule] Unclosed Anchor at end of file (started line 1)
[AppModule] Unclosed Anchor: [DEF:AppModule:Module] started at line 1
[App] Unclosed Anchor at end of file (started line 26)
[App] Unclosed Anchor: [DEF:App:Global] started at line 26
[App] Unclosed Anchor: [DEF:App:Global] started at line 26 | +| generate_semantic_map.py | 🟢 100% | OK | +| search_script.py | 🟢 100% | OK | +| get_dataset_structure.py | 🟢 100% | OK | +| debug_db_api.py | 🟢 100% | OK | +| run_mapper.py | 🟢 100% | OK | +| migration_script.py | 🟢 100% | OK | +| backup_script.py | 🟢 100% | OK | +| superset_tool/exceptions.py | 🟢 100% | OK | +| superset_tool/__init__.py | 🟢 100% | OK | +| superset_tool/client.py | 🟢 100% | OK | +| superset_tool/models.py | 🟢 100% | OK | +| superset_tool/utils/logger.py | 🟢 100% | OK | +| superset_tool/utils/network.py | 🟢 100% | OK | +| superset_tool/utils/whiptail_fallback.py | 🟢 100% | OK | +| superset_tool/utils/dataset_mapper.py | 🟢 100% | OK | +| superset_tool/utils/__init__.py | 🟢 100% | OK | +| superset_tool/utils/init_clients.py | 🟢 100% | OK | +| superset_tool/utils/fileio.py | 🟢 100% | OK | +| backend/src/dependencies.py | 🟢 100% | OK | +| backend/src/core/scheduler.py | 🟢 100% | OK | +| backend/src/core/task_manager/manager.py | 🟢 100% | OK | +| backend/src/core/task_manager/__init__.py | 🟢 100% | OK | +| backend/src/core/task_manager/models.py | 🟢 100% | OK | +| backend/src/core/task_manager/persistence.py | 🟢 100% | OK | diff --git a/semantics/reports/semantic_report_20260101_163627.md b/semantics/reports/semantic_report_20260101_163627.md new file mode 100644 index 0000000..f09ffe5 --- /dev/null +++ b/semantics/reports/semantic_report_20260101_163627.md @@ -0,0 +1,77 @@ +# Semantic Compliance Report + +**Generated At:** 2026-01-01T16:36:27.207490 +**Global Compliance Score:** 36.8% +**Scanned Files:** 68 + +## File Compliance Status +| File | Score | Issues | +|------|-------|--------| +| frontend/src/App.svelte | 🔴 0% | [App] Unclosed Anchor at end of file (started line 1)
[App] Unclosed Anchor: [DEF:App:Component] started at line 1
[handleFormSubmit] Unclosed Anchor at end of file (started line 24)
[handleFormSubmit] Unclosed Anchor: [DEF:handleFormSubmit:Function] started at line 24
[handleFormSubmit] Unclosed Anchor: [DEF:handleFormSubmit:Function] started at line 24
[navigate] Unclosed Anchor at end of file (started line 44)
[navigate] Unclosed Anchor: [DEF:navigate:Function] started at line 44
[navigate] Unclosed Anchor: [DEF:navigate:Function] started at line 44
[navigate] Unclosed Anchor: [DEF:navigate:Function] started at line 44 | +| frontend/src/main.js | 🔴 0% | [main] Unclosed Anchor at end of file (started line 1)
[main] Unclosed Anchor: [DEF:main:Module] started at line 1
[app_instance] Unclosed Anchor at end of file (started line 9)
[app_instance] Unclosed Anchor: [DEF:app_instance:Data] started at line 9
[app_instance] Unclosed Anchor: [DEF:app_instance:Data] started at line 9 | +| frontend/src/components/DashboardGrid.svelte | 🔴 0% | [DashboardGrid] Unclosed Anchor at end of file (started line 1)
[DashboardGrid] Unclosed Anchor: [DEF:DashboardGrid:Component] started at line 1
[handleSort] Unclosed Anchor at end of file (started line 62)
[handleSort] Unclosed Anchor: [DEF:handleSort:Function] started at line 62
[handleSort] Unclosed Anchor: [DEF:handleSort:Function] started at line 62
[handleSelectionChange] Unclosed Anchor at end of file (started line 74)
[handleSelectionChange] Unclosed Anchor: [DEF:handleSelectionChange:Function] started at line 74
[handleSelectionChange] Unclosed Anchor: [DEF:handleSelectionChange:Function] started at line 74
[handleSelectionChange] Unclosed Anchor: [DEF:handleSelectionChange:Function] started at line 74
[handleSelectAll] Unclosed Anchor at end of file (started line 88)
[handleSelectAll] Unclosed Anchor: [DEF:handleSelectAll:Function] started at line 88
[handleSelectAll] Unclosed Anchor: [DEF:handleSelectAll:Function] started at line 88
[handleSelectAll] Unclosed Anchor: [DEF:handleSelectAll:Function] started at line 88
[handleSelectAll] Unclosed Anchor: [DEF:handleSelectAll:Function] started at line 88
[goToPage] Unclosed Anchor at end of file (started line 106)
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106 | +| frontend/src/components/TaskHistory.svelte | 🔴 0% | [TaskHistory] Unclosed Anchor at end of file (started line 1)
[TaskHistory] Unclosed Anchor: [DEF:TaskHistory:Component] started at line 1 | +| frontend/src/components/MappingTable.svelte | 🔴 0% | [MappingTable] Unclosed Anchor at end of file (started line 1)
[MappingTable] Unclosed Anchor: [DEF:MappingTable:Component] started at line 1
[updateMapping] Unclosed Anchor at end of file (started line 25)
[updateMapping] Unclosed Anchor: [DEF:updateMapping:Function] started at line 25
[updateMapping] Unclosed Anchor: [DEF:updateMapping:Function] started at line 25
[getSuggestion] Unclosed Anchor at end of file (started line 34)
[getSuggestion] Unclosed Anchor: [DEF:getSuggestion:Function] started at line 34
[getSuggestion] Unclosed Anchor: [DEF:getSuggestion:Function] started at line 34
[getSuggestion] Unclosed Anchor: [DEF:getSuggestion:Function] started at line 34 | +| frontend/src/components/EnvSelector.svelte | 🔴 0% | [EnvSelector] Unclosed Anchor at end of file (started line 1)
[EnvSelector] Unclosed Anchor: [DEF:EnvSelector:Component] started at line 1
[handleSelect] Unclosed Anchor at end of file (started line 24)
[handleSelect] Unclosed Anchor: [DEF:handleSelect:Function] started at line 24
[handleSelect] Unclosed Anchor: [DEF:handleSelect:Function] started at line 24 | +| frontend/src/components/TaskList.svelte | 🔴 0% | [TaskList] Unclosed Anchor at end of file (started line 1)
[TaskList] Unclosed Anchor: [DEF:TaskList:Component] started at line 1 | +| frontend/src/components/DynamicForm.svelte | 🔴 0% | [DynamicForm] Unclosed Anchor at end of file (started line 1)
[DynamicForm] Unclosed Anchor: [DEF:DynamicForm:Component] started at line 1
[handleSubmit] Unclosed Anchor at end of file (started line 23)
[handleSubmit] Unclosed Anchor: [DEF:handleSubmit:Function] started at line 23
[handleSubmit] Unclosed Anchor: [DEF:handleSubmit:Function] started at line 23
[initializeForm] Unclosed Anchor at end of file (started line 33)
[initializeForm] Unclosed Anchor: [DEF:initializeForm:Function] started at line 33
[initializeForm] Unclosed Anchor: [DEF:initializeForm:Function] started at line 33
[initializeForm] Unclosed Anchor: [DEF:initializeForm:Function] started at line 33 | +| frontend/src/components/TaskRunner.svelte | 🔴 0% | [TaskRunner] Unclosed Anchor at end of file (started line 1)
[TaskRunner] Unclosed Anchor: [DEF:TaskRunner:Component] started at line 1
[connect] Unclosed Anchor at end of file (started line 38)
[connect] Unclosed Anchor: [DEF:connect:Function] started at line 38
[connect] Unclosed Anchor: [DEF:connect:Function] started at line 38
[onMount] Unclosed Anchor at end of file (started line 225)
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 225
[onMount] Missing Mandatory Tag: @PURPOSE
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 225
[onMount] Missing Mandatory Tag: @PURPOSE
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 225
[onMount] Missing Mandatory Tag: @PURPOSE
[onDestroy] Unclosed Anchor at end of file (started line 251)
[onDestroy] Unclosed Anchor: [DEF:onDestroy:Function] started at line 251
[onDestroy] Unclosed Anchor: [DEF:onDestroy:Function] started at line 251
[onDestroy] Unclosed Anchor: [DEF:onDestroy:Function] started at line 251
[onDestroy] Unclosed Anchor: [DEF:onDestroy:Function] started at line 251 | +| frontend/src/components/TaskLogViewer.svelte | 🔴 0% | [TaskLogViewer] Unclosed Anchor at end of file (started line 1)
[TaskLogViewer] Unclosed Anchor: [DEF:TaskLogViewer:Component] started at line 1 | +| frontend/src/components/PasswordPrompt.svelte | 🔴 0% | [PasswordPrompt] Unclosed Anchor at end of file (started line 1)
[PasswordPrompt] Unclosed Anchor: [DEF:PasswordPrompt:Component] started at line 1 | +| frontend/src/components/MissingMappingModal.svelte | 🔴 0% | [MissingMappingModal] Unclosed Anchor at end of file (started line 1)
[MissingMappingModal] Unclosed Anchor: [DEF:MissingMappingModal:Component] started at line 1
[resolve] Unclosed Anchor at end of file (started line 26)
[resolve] Unclosed Anchor: [DEF:resolve:Function] started at line 26
[resolve] Missing Mandatory Tag: @PURPOSE
[resolve] Unclosed Anchor: [DEF:resolve:Function] started at line 26
[resolve] Missing Mandatory Tag: @PURPOSE
[cancel] Unclosed Anchor at end of file (started line 38)
[cancel] Unclosed Anchor: [DEF:cancel:Function] started at line 38
[cancel] Missing Mandatory Tag: @PURPOSE
[cancel] Unclosed Anchor: [DEF:cancel:Function] started at line 38
[cancel] Missing Mandatory Tag: @PURPOSE
[cancel] Unclosed Anchor: [DEF:cancel:Function] started at line 38
[cancel] Missing Mandatory Tag: @PURPOSE | +| frontend/src/components/Toast.svelte | 🔴 0% | [Toast] Unclosed Anchor at end of file (started line 1)
[Toast] Unclosed Anchor: [DEF:Toast:Component] started at line 1 | +| frontend/src/pages/Settings.svelte | 🔴 0% | [Settings] Unclosed Anchor at end of file (started line 1)
[Settings] Unclosed Anchor: [DEF:Settings:Component] started at line 1
[loadSettings] Unclosed Anchor at end of file (started line 50)
[loadSettings] Unclosed Anchor: [DEF:loadSettings:Function] started at line 50
[loadSettings] Unclosed Anchor: [DEF:loadSettings:Function] started at line 50
[handleSaveGlobal] Unclosed Anchor at end of file (started line 67)
[handleSaveGlobal] Unclosed Anchor: [DEF:handleSaveGlobal:Function] started at line 67
[handleSaveGlobal] Unclosed Anchor: [DEF:handleSaveGlobal:Function] started at line 67
[handleSaveGlobal] Unclosed Anchor: [DEF:handleSaveGlobal:Function] started at line 67
[handleAddOrUpdateEnv] Unclosed Anchor at end of file (started line 84)
[handleAddOrUpdateEnv] Unclosed Anchor: [DEF:handleAddOrUpdateEnv:Function] started at line 84
[handleAddOrUpdateEnv] Unclosed Anchor: [DEF:handleAddOrUpdateEnv:Function] started at line 84
[handleAddOrUpdateEnv] Unclosed Anchor: [DEF:handleAddOrUpdateEnv:Function] started at line 84
[handleAddOrUpdateEnv] Unclosed Anchor: [DEF:handleAddOrUpdateEnv:Function] started at line 84
[handleDeleteEnv] Unclosed Anchor at end of file (started line 108)
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleTestEnv] Unclosed Anchor at end of file (started line 129)
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[editEnv] Unclosed Anchor at end of file (started line 152)
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[resetEnvForm] Unclosed Anchor at end of file (started line 163)
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163 | +| frontend/src/pages/Dashboard.svelte | 🔴 0% | [Dashboard] Unclosed Anchor at end of file (started line 1)
[Dashboard] Unclosed Anchor: [DEF:Dashboard:Component] started at line 1
[onMount] Unclosed Anchor at end of file (started line 17)
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 17
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 17
[selectPlugin] Unclosed Anchor at end of file (started line 27)
[selectPlugin] Unclosed Anchor: [DEF:selectPlugin:Function] started at line 27
[selectPlugin] Unclosed Anchor: [DEF:selectPlugin:Function] started at line 27
[selectPlugin] Unclosed Anchor: [DEF:selectPlugin:Function] started at line 27 | +| frontend/src/lib/stores.js | 🔴 0% | [stores_module] Unclosed Anchor at end of file (started line 1)
[stores_module] Unclosed Anchor: [DEF:stores_module:Module] started at line 1
[plugins] Unclosed Anchor at end of file (started line 9)
[plugins] Unclosed Anchor: [DEF:plugins:Data] started at line 9
[plugins] Unclosed Anchor: [DEF:plugins:Data] started at line 9
[tasks] Unclosed Anchor at end of file (started line 13)
[tasks] Unclosed Anchor: [DEF:tasks:Data] started at line 13
[tasks] Unclosed Anchor: [DEF:tasks:Data] started at line 13
[tasks] Unclosed Anchor: [DEF:tasks:Data] started at line 13
[selectedPlugin] Unclosed Anchor at end of file (started line 17)
[selectedPlugin] Unclosed Anchor: [DEF:selectedPlugin:Data] started at line 17
[selectedPlugin] Unclosed Anchor: [DEF:selectedPlugin:Data] started at line 17
[selectedPlugin] Unclosed Anchor: [DEF:selectedPlugin:Data] started at line 17
[selectedPlugin] Unclosed Anchor: [DEF:selectedPlugin:Data] started at line 17
[selectedTask] Unclosed Anchor at end of file (started line 21)
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[currentPage] Unclosed Anchor at end of file (started line 25)
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[taskLogs] Unclosed Anchor at end of file (started line 29)
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[fetchPlugins] Unclosed Anchor at end of file (started line 33)
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchTasks] Unclosed Anchor at end of file (started line 47)
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47 | +| frontend/src/lib/toasts.js | 🔴 0% | [toasts_module] Unclosed Anchor at end of file (started line 1)
[toasts_module] Unclosed Anchor: [DEF:toasts_module:Module] started at line 1
[toasts] Unclosed Anchor at end of file (started line 8)
[toasts] Unclosed Anchor: [DEF:toasts:Data] started at line 8
[toasts] Unclosed Anchor: [DEF:toasts:Data] started at line 8
[addToast] Unclosed Anchor at end of file (started line 12)
[addToast] Unclosed Anchor: [DEF:addToast:Function] started at line 12
[addToast] Unclosed Anchor: [DEF:addToast:Function] started at line 12
[addToast] Unclosed Anchor: [DEF:addToast:Function] started at line 12
[removeToast] Unclosed Anchor at end of file (started line 25)
[removeToast] Unclosed Anchor: [DEF:removeToast:Function] started at line 25
[removeToast] Unclosed Anchor: [DEF:removeToast:Function] started at line 25
[removeToast] Unclosed Anchor: [DEF:removeToast:Function] started at line 25
[removeToast] Unclosed Anchor: [DEF:removeToast:Function] started at line 25 | +| frontend/src/lib/api.js | 🔴 0% | [api_module] Unclosed Anchor at end of file (started line 1)
[api_module] Unclosed Anchor: [DEF:api_module:Module] started at line 1
[fetchApi] Unclosed Anchor at end of file (started line 26)
[fetchApi] Unclosed Anchor: [DEF:fetchApi:Function] started at line 26
[fetchApi] Unclosed Anchor: [DEF:fetchApi:Function] started at line 26
[postApi] Unclosed Anchor at end of file (started line 46)
[postApi] Unclosed Anchor: [DEF:postApi:Function] started at line 46
[postApi] Unclosed Anchor: [DEF:postApi:Function] started at line 46
[postApi] Unclosed Anchor: [DEF:postApi:Function] started at line 46
[requestApi] Unclosed Anchor at end of file (started line 73)
[requestApi] Unclosed Anchor: [DEF:requestApi:Function] started at line 73
[requestApi] Unclosed Anchor: [DEF:requestApi:Function] started at line 73
[requestApi] Unclosed Anchor: [DEF:requestApi:Function] started at line 73
[requestApi] Unclosed Anchor: [DEF:requestApi:Function] started at line 73
[api] Unclosed Anchor at end of file (started line 100)
[api] Unclosed Anchor: [DEF:api:Data] started at line 100
[api] Unclosed Anchor: [DEF:api:Data] started at line 100
[api] Unclosed Anchor: [DEF:api:Data] started at line 100
[api] Unclosed Anchor: [DEF:api:Data] started at line 100
[api] Unclosed Anchor: [DEF:api:Data] started at line 100 | +| frontend/src/routes/migration/+page.svelte | 🔴 0% | [MigrationDashboard] Unclosed Anchor at end of file (started line 1)
[MigrationDashboard] Unclosed Anchor: [DEF:MigrationDashboard:Component] started at line 1
[fetchEnvironments] Unclosed Anchor at end of file (started line 51)
[fetchEnvironments] Unclosed Anchor: [DEF:fetchEnvironments:Function] started at line 51
[fetchEnvironments] Unclosed Anchor: [DEF:fetchEnvironments:Function] started at line 51
[fetchDashboards] Unclosed Anchor at end of file (started line 69)
[fetchDashboards] Unclosed Anchor: [DEF:fetchDashboards:Function] started at line 69
[fetchDashboards] Unclosed Anchor: [DEF:fetchDashboards:Function] started at line 69
[fetchDashboards] Unclosed Anchor: [DEF:fetchDashboards:Function] started at line 69
[fetchDatabases] Unclosed Anchor at end of file (started line 93)
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 93
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 93
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 93
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 93
[handleMappingUpdate] Unclosed Anchor at end of file (started line 128)
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleViewLogs] Unclosed Anchor at end of file (started line 163)
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor at end of file (started line 172)
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[startMigration] Unclosed Anchor at end of file (started line 207)
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207 | +| frontend/src/routes/migration/mappings/+page.svelte | 🔴 0% | [MappingManagement] Unclosed Anchor at end of file (started line 1)
[MappingManagement] Unclosed Anchor: [DEF:MappingManagement:Component] started at line 1
[fetchDatabases] Unclosed Anchor at end of file (started line 47)
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 47
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 47
[handleUpdate] Unclosed Anchor at end of file (started line 83)
[handleUpdate] Unclosed Anchor: [DEF:handleUpdate:Function] started at line 83
[handleUpdate] Unclosed Anchor: [DEF:handleUpdate:Function] started at line 83
[handleUpdate] Unclosed Anchor: [DEF:handleUpdate:Function] started at line 83 | +| backend/src/models/mapping.py | 🔴 0% | [backend.src.models.mapping] Unclosed Anchor at end of file (started line 1)
[backend.src.models.mapping] Unclosed Anchor: [DEF:backend.src.models.mapping:Module] started at line 1
[MigrationStatus] Unclosed Anchor at end of file (started line 21)
[MigrationStatus] Unclosed Anchor: [DEF:MigrationStatus:Class] started at line 21
[MigrationStatus] Unclosed Anchor: [DEF:MigrationStatus:Class] started at line 21
[Environment] Unclosed Anchor at end of file (started line 31)
[Environment] Unclosed Anchor: [DEF:Environment:Class] started at line 31
[Environment] Unclosed Anchor: [DEF:Environment:Class] started at line 31
[Environment] Unclosed Anchor: [DEF:Environment:Class] started at line 31
[DatabaseMapping] Unclosed Anchor at end of file (started line 42)
[DatabaseMapping] Unclosed Anchor: [DEF:DatabaseMapping:Class] started at line 42
[DatabaseMapping] Unclosed Anchor: [DEF:DatabaseMapping:Class] started at line 42
[DatabaseMapping] Unclosed Anchor: [DEF:DatabaseMapping:Class] started at line 42
[DatabaseMapping] Unclosed Anchor: [DEF:DatabaseMapping:Class] started at line 42
[MigrationJob] Unclosed Anchor at end of file (started line 57)
[MigrationJob] Unclosed Anchor: [DEF:MigrationJob:Class] started at line 57
[MigrationJob] Unclosed Anchor: [DEF:MigrationJob:Class] started at line 57
[MigrationJob] Unclosed Anchor: [DEF:MigrationJob:Class] started at line 57
[MigrationJob] Unclosed Anchor: [DEF:MigrationJob:Class] started at line 57
[MigrationJob] Unclosed Anchor: [DEF:MigrationJob:Class] started at line 57 | +| backend/src/models/dashboard.py | 🔴 0% | [backend.src.models.dashboard] Unclosed Anchor at end of file (started line 1)
[backend.src.models.dashboard] Unclosed Anchor: [DEF:backend.src.models.dashboard:Module] started at line 1
[DashboardMetadata] Unclosed Anchor at end of file (started line 10)
[DashboardMetadata] Unclosed Anchor: [DEF:DashboardMetadata:Class] started at line 10
[DashboardMetadata] Unclosed Anchor: [DEF:DashboardMetadata:Class] started at line 10
[DashboardSelection] Unclosed Anchor at end of file (started line 19)
[DashboardSelection] Unclosed Anchor: [DEF:DashboardSelection:Class] started at line 19
[DashboardSelection] Unclosed Anchor: [DEF:DashboardSelection:Class] started at line 19
[DashboardSelection] Unclosed Anchor: [DEF:DashboardSelection:Class] started at line 19 | +| backend/src/models/task.py | 🔴 0% | [backend.src.models.task] Unclosed Anchor at end of file (started line 1)
[backend.src.models.task] Unclosed Anchor: [DEF:backend.src.models.task:Module] started at line 1
[TaskRecord] Unclosed Anchor at end of file (started line 17)
[TaskRecord] Unclosed Anchor: [DEF:TaskRecord:Class] started at line 17
[TaskRecord] Unclosed Anchor: [DEF:TaskRecord:Class] started at line 17 | +| backend/src/services/mapping_service.py | 🔴 0% | [backend.src.services.mapping_service] Unclosed Anchor at end of file (started line 1)
[backend.src.services.mapping_service] Unclosed Anchor: [DEF:backend.src.services.mapping_service:Module] started at line 1
[MappingService] Unclosed Anchor at end of file (started line 18)
[MappingService] Unclosed Anchor: [DEF:MappingService:Class] started at line 18
[MappingService] Unclosed Anchor: [DEF:MappingService:Class] started at line 18
[MappingService.__init__] Unclosed Anchor at end of file (started line 22)
[MappingService.__init__] Unclosed Anchor: [DEF:MappingService.__init__:Function] started at line 22
[MappingService.__init__] Missing Mandatory Tag: @PURPOSE
[MappingService.__init__] Unclosed Anchor: [DEF:MappingService.__init__:Function] started at line 22
[MappingService.__init__] Missing Mandatory Tag: @PURPOSE
[MappingService.__init__] Unclosed Anchor: [DEF:MappingService.__init__:Function] started at line 22
[MappingService.__init__] Missing Mandatory Tag: @PURPOSE
[MappingService._get_client] Unclosed Anchor at end of file (started line 26)
[MappingService._get_client] Unclosed Anchor: [DEF:MappingService._get_client:Function] started at line 26
[MappingService._get_client] Unclosed Anchor: [DEF:MappingService._get_client:Function] started at line 26
[MappingService._get_client] Unclosed Anchor: [DEF:MappingService._get_client:Function] started at line 26
[MappingService._get_client] Unclosed Anchor: [DEF:MappingService._get_client:Function] started at line 26
[MappingService.get_suggestions] Unclosed Anchor at end of file (started line 46)
[MappingService.get_suggestions] Unclosed Anchor: [DEF:MappingService.get_suggestions:Function] started at line 46
[MappingService.get_suggestions] Unclosed Anchor: [DEF:MappingService.get_suggestions:Function] started at line 46
[MappingService.get_suggestions] Unclosed Anchor: [DEF:MappingService.get_suggestions:Function] started at line 46
[MappingService.get_suggestions] Unclosed Anchor: [DEF:MappingService.get_suggestions:Function] started at line 46
[MappingService.get_suggestions] Unclosed Anchor: [DEF:MappingService.get_suggestions:Function] started at line 46 | +| backend/src/core/config_manager.py | 🔴 0% | [ConfigManagerModule] Unclosed Anchor at end of file (started line 1)
[ConfigManagerModule] Unclosed Anchor: [DEF:ConfigManagerModule:Module] started at line 1
[ConfigManager] Unclosed Anchor at end of file (started line 22)
[ConfigManager] Unclosed Anchor: [DEF:ConfigManager:Class] started at line 22
[ConfigManager] Unclosed Anchor: [DEF:ConfigManager:Class] started at line 22
[__init__] Unclosed Anchor at end of file (started line 27)
[__init__] Unclosed Anchor: [DEF:__init__:Function] started at line 27
[__init__] Unclosed Anchor: [DEF:__init__:Function] started at line 27
[__init__] Unclosed Anchor: [DEF:__init__:Function] started at line 27
[_load_config] Unclosed Anchor at end of file (started line 51)
[_load_config] Unclosed Anchor: [DEF:_load_config:Function] started at line 51
[_load_config] Unclosed Anchor: [DEF:_load_config:Function] started at line 51
[_load_config] Unclosed Anchor: [DEF:_load_config:Function] started at line 51
[_load_config] Unclosed Anchor: [DEF:_load_config:Function] started at line 51
[_save_config_to_disk] Unclosed Anchor at end of file (started line 83)
[_save_config_to_disk] Unclosed Anchor: [DEF:_save_config_to_disk:Function] started at line 83
[_save_config_to_disk] Unclosed Anchor: [DEF:_save_config_to_disk:Function] started at line 83
[_save_config_to_disk] Unclosed Anchor: [DEF:_save_config_to_disk:Function] started at line 83
[_save_config_to_disk] Unclosed Anchor: [DEF:_save_config_to_disk:Function] started at line 83
[_save_config_to_disk] Unclosed Anchor: [DEF:_save_config_to_disk:Function] started at line 83
[save] Unclosed Anchor at end of file (started line 102)
[save] Unclosed Anchor: [DEF:save:Function] started at line 102
[save] Unclosed Anchor: [DEF:save:Function] started at line 102
[save] Unclosed Anchor: [DEF:save:Function] started at line 102
[save] Unclosed Anchor: [DEF:save:Function] started at line 102
[save] Unclosed Anchor: [DEF:save:Function] started at line 102
[save] Unclosed Anchor: [DEF:save:Function] started at line 102
[get_config] Unclosed Anchor at end of file (started line 108)
[get_config] Unclosed Anchor: [DEF:get_config:Function] started at line 108
[get_config] Unclosed Anchor: [DEF:get_config:Function] started at line 108
[get_config] Unclosed Anchor: [DEF:get_config:Function] started at line 108
[get_config] Unclosed Anchor: [DEF:get_config:Function] started at line 108
[get_config] Unclosed Anchor: [DEF:get_config:Function] started at line 108
[get_config] Unclosed Anchor: [DEF:get_config:Function] started at line 108
[get_config] Unclosed Anchor: [DEF:get_config:Function] started at line 108
[update_global_settings] Unclosed Anchor at end of file (started line 115)
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 115
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 115
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 115
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 115
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 115
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 115
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 115
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 115
[validate_path] Unclosed Anchor at end of file (started line 135)
[validate_path] Unclosed Anchor: [DEF:validate_path:Function] started at line 135
[validate_path] Unclosed Anchor: [DEF:validate_path:Function] started at line 135
[validate_path] Unclosed Anchor: [DEF:validate_path:Function] started at line 135
[validate_path] Unclosed Anchor: [DEF:validate_path:Function] started at line 135
[validate_path] Unclosed Anchor: [DEF:validate_path:Function] started at line 135
[validate_path] Unclosed Anchor: [DEF:validate_path:Function] started at line 135
[validate_path] Unclosed Anchor: [DEF:validate_path:Function] started at line 135
[validate_path] Unclosed Anchor: [DEF:validate_path:Function] started at line 135
[validate_path] Unclosed Anchor: [DEF:validate_path:Function] started at line 135
[get_environments] Unclosed Anchor at end of file (started line 153)
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 153
[has_environments] Unclosed Anchor at end of file (started line 160)
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[has_environments] Unclosed Anchor: [DEF:has_environments:Function] started at line 160
[add_environment] Unclosed Anchor at end of file (started line 167)
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 167
[update_environment] Unclosed Anchor at end of file (started line 186)
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 186
[delete_environment] Unclosed Anchor at end of file (started line 215)
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 215 | +| backend/src/core/superset_client.py | 🔴 0% | [backend.src.core.superset_client] Unclosed Anchor at end of file (started line 1)
[backend.src.core.superset_client] Unclosed Anchor: [DEF:backend.src.core.superset_client:Module] started at line 1
[SupersetClient] Unclosed Anchor at end of file (started line 16)
[SupersetClient] Unclosed Anchor: [DEF:SupersetClient:Class] started at line 16
[SupersetClient] Unclosed Anchor: [DEF:SupersetClient:Class] started at line 16
[SupersetClient.get_databases_summary] Unclosed Anchor at end of file (started line 20)
[SupersetClient.get_databases_summary] Unclosed Anchor: [DEF:SupersetClient.get_databases_summary:Function] started at line 20
[SupersetClient.get_databases_summary] Unclosed Anchor: [DEF:SupersetClient.get_databases_summary:Function] started at line 20
[SupersetClient.get_databases_summary] Unclosed Anchor: [DEF:SupersetClient.get_databases_summary:Function] started at line 20
[SupersetClient.get_database_by_uuid] Unclosed Anchor at end of file (started line 40)
[SupersetClient.get_database_by_uuid] Unclosed Anchor: [DEF:SupersetClient.get_database_by_uuid:Function] started at line 40
[SupersetClient.get_database_by_uuid] Unclosed Anchor: [DEF:SupersetClient.get_database_by_uuid:Function] started at line 40
[SupersetClient.get_database_by_uuid] Unclosed Anchor: [DEF:SupersetClient.get_database_by_uuid:Function] started at line 40
[SupersetClient.get_database_by_uuid] Unclosed Anchor: [DEF:SupersetClient.get_database_by_uuid:Function] started at line 40
[SupersetClient.get_dashboards_summary] Unclosed Anchor at end of file (started line 55)
[SupersetClient.get_dashboards_summary] Unclosed Anchor: [DEF:SupersetClient.get_dashboards_summary:Function] started at line 55
[SupersetClient.get_dashboards_summary] Unclosed Anchor: [DEF:SupersetClient.get_dashboards_summary:Function] started at line 55
[SupersetClient.get_dashboards_summary] Unclosed Anchor: [DEF:SupersetClient.get_dashboards_summary:Function] started at line 55
[SupersetClient.get_dashboards_summary] Unclosed Anchor: [DEF:SupersetClient.get_dashboards_summary:Function] started at line 55
[SupersetClient.get_dashboards_summary] Unclosed Anchor: [DEF:SupersetClient.get_dashboards_summary:Function] started at line 55 | +| backend/src/core/migration_engine.py | 🔴 0% | [backend.src.core.migration_engine] Unclosed Anchor at end of file (started line 1)
[backend.src.core.migration_engine] Unclosed Anchor: [DEF:backend.src.core.migration_engine:Module] started at line 1
[MigrationEngine] Unclosed Anchor at end of file (started line 22)
[MigrationEngine] Unclosed Anchor: [DEF:MigrationEngine:Class] started at line 22
[MigrationEngine] Unclosed Anchor: [DEF:MigrationEngine:Class] started at line 22
[MigrationEngine.transform_zip] Unclosed Anchor at end of file (started line 26)
[MigrationEngine.transform_zip] Unclosed Anchor: [DEF:MigrationEngine.transform_zip:Function] started at line 26
[MigrationEngine.transform_zip] Unclosed Anchor: [DEF:MigrationEngine.transform_zip:Function] started at line 26
[MigrationEngine.transform_zip] Unclosed Anchor: [DEF:MigrationEngine.transform_zip:Function] started at line 26
[MigrationEngine._transform_yaml] Unclosed Anchor at end of file (started line 77)
[MigrationEngine._transform_yaml] Unclosed Anchor: [DEF:MigrationEngine._transform_yaml:Function] started at line 77
[MigrationEngine._transform_yaml] Unclosed Anchor: [DEF:MigrationEngine._transform_yaml:Function] started at line 77
[MigrationEngine._transform_yaml] Unclosed Anchor: [DEF:MigrationEngine._transform_yaml:Function] started at line 77
[MigrationEngine._transform_yaml] Unclosed Anchor: [DEF:MigrationEngine._transform_yaml:Function] started at line 77 | +| backend/src/core/logger.py | 🔴 0% | [LoggerModule] Unclosed Anchor at end of file (started line 1)
[LoggerModule] Unclosed Anchor: [DEF:LoggerModule:Module] started at line 1
[BeliefFormatter] Unclosed Anchor at end of file (started line 22)
[BeliefFormatter] Unclosed Anchor: [DEF:BeliefFormatter:Class] started at line 22
[BeliefFormatter] Unclosed Anchor: [DEF:BeliefFormatter:Class] started at line 22
[LogEntry] Unclosed Anchor at end of file (started line 34)
[LogEntry] Unclosed Anchor: [DEF:LogEntry:Class] started at line 34
[LogEntry] Unclosed Anchor: [DEF:LogEntry:Class] started at line 34
[LogEntry] Unclosed Anchor: [DEF:LogEntry:Class] started at line 34
[BeliefScope] Unclosed Anchor at end of file (started line 45)
[BeliefScope] Unclosed Anchor: [DEF:BeliefScope:Function] started at line 45
[BeliefScope] Unclosed Anchor: [DEF:BeliefScope:Function] started at line 45
[BeliefScope] Unclosed Anchor: [DEF:BeliefScope:Function] started at line 45
[BeliefScope] Unclosed Anchor: [DEF:BeliefScope:Function] started at line 45
[ConfigureLogger] Unclosed Anchor at end of file (started line 76)
[ConfigureLogger] Unclosed Anchor: [DEF:ConfigureLogger:Function] started at line 76
[ConfigureLogger] Unclosed Anchor: [DEF:ConfigureLogger:Function] started at line 76
[ConfigureLogger] Unclosed Anchor: [DEF:ConfigureLogger:Function] started at line 76
[ConfigureLogger] Unclosed Anchor: [DEF:ConfigureLogger:Function] started at line 76
[ConfigureLogger] Unclosed Anchor: [DEF:ConfigureLogger:Function] started at line 76
[WebSocketLogHandler] Unclosed Anchor at end of file (started line 120)
[WebSocketLogHandler] Unclosed Anchor: [DEF:WebSocketLogHandler:Class] started at line 120
[WebSocketLogHandler] Unclosed Anchor: [DEF:WebSocketLogHandler:Class] started at line 120
[WebSocketLogHandler] Unclosed Anchor: [DEF:WebSocketLogHandler:Class] started at line 120
[WebSocketLogHandler] Unclosed Anchor: [DEF:WebSocketLogHandler:Class] started at line 120
[WebSocketLogHandler] Unclosed Anchor: [DEF:WebSocketLogHandler:Class] started at line 120
[WebSocketLogHandler] Unclosed Anchor: [DEF:WebSocketLogHandler:Class] started at line 120
[Logger] Unclosed Anchor at end of file (started line 163)
[Logger] Unclosed Anchor: [DEF:Logger:Global] started at line 163
[Logger] Unclosed Anchor: [DEF:Logger:Global] started at line 163
[Logger] Unclosed Anchor: [DEF:Logger:Global] started at line 163
[Logger] Unclosed Anchor: [DEF:Logger:Global] started at line 163
[Logger] Unclosed Anchor: [DEF:Logger:Global] started at line 163
[Logger] Unclosed Anchor: [DEF:Logger:Global] started at line 163
[Logger] Unclosed Anchor: [DEF:Logger:Global] started at line 163 | +| backend/src/core/database.py | 🔴 0% | [backend.src.core.database] Unclosed Anchor at end of file (started line 1)
[backend.src.core.database] Unclosed Anchor: [DEF:backend.src.core.database:Module] started at line 1
[DATABASE_URL] Unclosed Anchor at end of file (started line 20)
[DATABASE_URL] Unclosed Anchor: [DEF:DATABASE_URL:Constant] started at line 20
[DATABASE_URL] Unclosed Anchor: [DEF:DATABASE_URL:Constant] started at line 20
[TASKS_DATABASE_URL] Unclosed Anchor at end of file (started line 24)
[TASKS_DATABASE_URL] Unclosed Anchor: [DEF:TASKS_DATABASE_URL:Constant] started at line 24
[TASKS_DATABASE_URL] Unclosed Anchor: [DEF:TASKS_DATABASE_URL:Constant] started at line 24
[TASKS_DATABASE_URL] Unclosed Anchor: [DEF:TASKS_DATABASE_URL:Constant] started at line 24
[engine] Unclosed Anchor at end of file (started line 28)
[engine] Unclosed Anchor: [DEF:engine:Variable] started at line 28
[engine] Unclosed Anchor: [DEF:engine:Variable] started at line 28
[engine] Unclosed Anchor: [DEF:engine:Variable] started at line 28
[engine] Unclosed Anchor: [DEF:engine:Variable] started at line 28
[tasks_engine] Unclosed Anchor at end of file (started line 32)
[tasks_engine] Unclosed Anchor: [DEF:tasks_engine:Variable] started at line 32
[tasks_engine] Unclosed Anchor: [DEF:tasks_engine:Variable] started at line 32
[tasks_engine] Unclosed Anchor: [DEF:tasks_engine:Variable] started at line 32
[tasks_engine] Unclosed Anchor: [DEF:tasks_engine:Variable] started at line 32
[tasks_engine] Unclosed Anchor: [DEF:tasks_engine:Variable] started at line 32
[SessionLocal] Unclosed Anchor at end of file (started line 36)
[SessionLocal] Unclosed Anchor: [DEF:SessionLocal:Class] started at line 36
[SessionLocal] Missing Mandatory Tag: @PURPOSE
[SessionLocal] Unclosed Anchor: [DEF:SessionLocal:Class] started at line 36
[SessionLocal] Missing Mandatory Tag: @PURPOSE
[SessionLocal] Unclosed Anchor: [DEF:SessionLocal:Class] started at line 36
[SessionLocal] Missing Mandatory Tag: @PURPOSE
[SessionLocal] Unclosed Anchor: [DEF:SessionLocal:Class] started at line 36
[SessionLocal] Missing Mandatory Tag: @PURPOSE
[SessionLocal] Unclosed Anchor: [DEF:SessionLocal:Class] started at line 36
[SessionLocal] Missing Mandatory Tag: @PURPOSE
[SessionLocal] Unclosed Anchor: [DEF:SessionLocal:Class] started at line 36
[SessionLocal] Missing Mandatory Tag: @PURPOSE
[TasksSessionLocal] Unclosed Anchor at end of file (started line 40)
[TasksSessionLocal] Unclosed Anchor: [DEF:TasksSessionLocal:Class] started at line 40
[TasksSessionLocal] Missing Mandatory Tag: @PURPOSE
[TasksSessionLocal] Unclosed Anchor: [DEF:TasksSessionLocal:Class] started at line 40
[TasksSessionLocal] Missing Mandatory Tag: @PURPOSE
[TasksSessionLocal] Unclosed Anchor: [DEF:TasksSessionLocal:Class] started at line 40
[TasksSessionLocal] Missing Mandatory Tag: @PURPOSE
[TasksSessionLocal] Unclosed Anchor: [DEF:TasksSessionLocal:Class] started at line 40
[TasksSessionLocal] Missing Mandatory Tag: @PURPOSE
[TasksSessionLocal] Unclosed Anchor: [DEF:TasksSessionLocal:Class] started at line 40
[TasksSessionLocal] Missing Mandatory Tag: @PURPOSE
[TasksSessionLocal] Unclosed Anchor: [DEF:TasksSessionLocal:Class] started at line 40
[TasksSessionLocal] Missing Mandatory Tag: @PURPOSE
[TasksSessionLocal] Unclosed Anchor: [DEF:TasksSessionLocal:Class] started at line 40
[TasksSessionLocal] Missing Mandatory Tag: @PURPOSE
[init_db] Unclosed Anchor at end of file (started line 44)
[init_db] Unclosed Anchor: [DEF:init_db:Function] started at line 44
[init_db] Unclosed Anchor: [DEF:init_db:Function] started at line 44
[init_db] Unclosed Anchor: [DEF:init_db:Function] started at line 44
[init_db] Unclosed Anchor: [DEF:init_db:Function] started at line 44
[init_db] Unclosed Anchor: [DEF:init_db:Function] started at line 44
[init_db] Unclosed Anchor: [DEF:init_db:Function] started at line 44
[init_db] Unclosed Anchor: [DEF:init_db:Function] started at line 44
[init_db] Unclosed Anchor: [DEF:init_db:Function] started at line 44
[get_db] Unclosed Anchor at end of file (started line 51)
[get_db] Unclosed Anchor: [DEF:get_db:Function] started at line 51
[get_db] Unclosed Anchor: [DEF:get_db:Function] started at line 51
[get_db] Unclosed Anchor: [DEF:get_db:Function] started at line 51
[get_db] Unclosed Anchor: [DEF:get_db:Function] started at line 51
[get_db] Unclosed Anchor: [DEF:get_db:Function] started at line 51
[get_db] Unclosed Anchor: [DEF:get_db:Function] started at line 51
[get_db] Unclosed Anchor: [DEF:get_db:Function] started at line 51
[get_db] Unclosed Anchor: [DEF:get_db:Function] started at line 51
[get_db] Unclosed Anchor: [DEF:get_db:Function] started at line 51
[get_tasks_db] Unclosed Anchor at end of file (started line 63)
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63
[get_tasks_db] Unclosed Anchor: [DEF:get_tasks_db:Function] started at line 63 | +| backend/src/core/config_models.py | 🔴 0% | [ConfigModels] Unclosed Anchor at end of file (started line 1)
[ConfigModels] Unclosed Anchor: [DEF:ConfigModels:Module] started at line 1
[Schedule] Unclosed Anchor at end of file (started line 11)
[Schedule] Unclosed Anchor: [DEF:Schedule:DataClass] started at line 11
[Schedule] Unclosed Anchor: [DEF:Schedule:DataClass] started at line 11
[Environment] Unclosed Anchor at end of file (started line 18)
[Environment] Unclosed Anchor: [DEF:Environment:DataClass] started at line 18
[Environment] Unclosed Anchor: [DEF:Environment:DataClass] started at line 18
[Environment] Unclosed Anchor: [DEF:Environment:DataClass] started at line 18
[LoggingConfig] Unclosed Anchor at end of file (started line 30)
[LoggingConfig] Unclosed Anchor: [DEF:LoggingConfig:DataClass] started at line 30
[LoggingConfig] Unclosed Anchor: [DEF:LoggingConfig:DataClass] started at line 30
[LoggingConfig] Unclosed Anchor: [DEF:LoggingConfig:DataClass] started at line 30
[LoggingConfig] Unclosed Anchor: [DEF:LoggingConfig:DataClass] started at line 30
[GlobalSettings] Unclosed Anchor at end of file (started line 40)
[GlobalSettings] Unclosed Anchor: [DEF:GlobalSettings:DataClass] started at line 40
[GlobalSettings] Unclosed Anchor: [DEF:GlobalSettings:DataClass] started at line 40
[GlobalSettings] Unclosed Anchor: [DEF:GlobalSettings:DataClass] started at line 40
[GlobalSettings] Unclosed Anchor: [DEF:GlobalSettings:DataClass] started at line 40
[GlobalSettings] Unclosed Anchor: [DEF:GlobalSettings:DataClass] started at line 40
[AppConfig] Unclosed Anchor at end of file (started line 53)
[AppConfig] Unclosed Anchor: [DEF:AppConfig:DataClass] started at line 53
[AppConfig] Unclosed Anchor: [DEF:AppConfig:DataClass] started at line 53
[AppConfig] Unclosed Anchor: [DEF:AppConfig:DataClass] started at line 53
[AppConfig] Unclosed Anchor: [DEF:AppConfig:DataClass] started at line 53
[AppConfig] Unclosed Anchor: [DEF:AppConfig:DataClass] started at line 53
[AppConfig] Unclosed Anchor: [DEF:AppConfig:DataClass] started at line 53 | +| backend/src/core/plugin_loader.py | 🔴 0% | [PluginLoader] Unclosed Anchor at end of file (started line 8)
[PluginLoader] Unclosed Anchor: [DEF:PluginLoader:Class] started at line 8 | +| backend/src/core/plugin_base.py | 🔴 0% | [PluginBase] Unclosed Anchor at end of file (started line 6)
[PluginBase] Unclosed Anchor: [DEF:PluginBase:Class] started at line 6
[PluginConfig] Unclosed Anchor at end of file (started line 59)
[PluginConfig] Unclosed Anchor: [DEF:PluginConfig:Class] started at line 59
[PluginConfig] Unclosed Anchor: [DEF:PluginConfig:Class] started at line 59 | +| backend/src/core/utils/matching.py | 🔴 0% | [backend.src.core.utils.matching] Unclosed Anchor at end of file (started line 1)
[backend.src.core.utils.matching] Unclosed Anchor: [DEF:backend.src.core.utils.matching:Module] started at line 1
[suggest_mappings] Unclosed Anchor at end of file (started line 15)
[suggest_mappings] Unclosed Anchor: [DEF:suggest_mappings:Function] started at line 15
[suggest_mappings] Unclosed Anchor: [DEF:suggest_mappings:Function] started at line 15 | +| backend/src/core/task_manager/cleanup.py | 🔴 0% | [TaskCleanupModule] Unclosed Anchor at end of file (started line 1)
[TaskCleanupModule] Unclosed Anchor: [DEF:TaskCleanupModule:Module] started at line 1
[TaskCleanupService] Unclosed Anchor at end of file (started line 12)
[TaskCleanupService] Unclosed Anchor: [DEF:TaskCleanupService:Class] started at line 12
[TaskCleanupService] Unclosed Anchor: [DEF:TaskCleanupService:Class] started at line 12
[TaskCleanupService.run_cleanup] Unclosed Anchor at end of file (started line 19)
[TaskCleanupService.run_cleanup] Unclosed Anchor: [DEF:TaskCleanupService.run_cleanup:Function] started at line 19
[TaskCleanupService.run_cleanup] Unclosed Anchor: [DEF:TaskCleanupService.run_cleanup:Function] started at line 19
[TaskCleanupService.run_cleanup] Unclosed Anchor: [DEF:TaskCleanupService.run_cleanup:Function] started at line 19 | +| backend/src/plugins/backup.py | 🔴 0% | [BackupPlugin] Unclosed Anchor at end of file (started line 1)
[BackupPlugin] Unclosed Anchor: [DEF:BackupPlugin:Module] started at line 1 | +| backend/src/plugins/migration.py | 🔴 0% | [MigrationPlugin] Unclosed Anchor at end of file (started line 1)
[MigrationPlugin] Unclosed Anchor: [DEF:MigrationPlugin:Module] started at line 1
[MigrationPlugin.execute] Unclosed Anchor at end of file (started line 103)
[MigrationPlugin.execute] Unclosed Anchor: [DEF:MigrationPlugin.execute:Action] started at line 103
[MigrationPlugin.execute] Unclosed Anchor: [DEF:MigrationPlugin.execute:Action] started at line 103 | +| backend/src/api/auth.py | 🔴 0% | [AuthModule] Unclosed Anchor at end of file (started line 1)
[AuthModule] Unclosed Anchor: [DEF:AuthModule:Module] started at line 1 | +| backend/src/api/routes/settings.py | 🔴 0% | [SettingsRouter] Unclosed Anchor at end of file (started line 1)
[SettingsRouter] Unclosed Anchor: [DEF:SettingsRouter:Module] started at line 1
[get_settings] Unclosed Anchor at end of file (started line 26)
[get_settings] Unclosed Anchor: [DEF:get_settings:Function] started at line 26
[get_settings] Unclosed Anchor: [DEF:get_settings:Function] started at line 26
[update_global_settings] Unclosed Anchor at end of file (started line 40)
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 40
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 40
[update_global_settings] Unclosed Anchor: [DEF:update_global_settings:Function] started at line 40
[get_environments] Unclosed Anchor at end of file (started line 54)
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 54
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 54
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 54
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 54
[add_environment] Unclosed Anchor at end of file (started line 63)
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 63
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 63
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 63
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 63
[add_environment] Unclosed Anchor: [DEF:add_environment:Function] started at line 63
[update_environment] Unclosed Anchor at end of file (started line 96)
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 96
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 96
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 96
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 96
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 96
[update_environment] Unclosed Anchor: [DEF:update_environment:Function] started at line 96
[delete_environment] Unclosed Anchor at end of file (started line 139)
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 139
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 139
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 139
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 139
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 139
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 139
[delete_environment] Unclosed Anchor: [DEF:delete_environment:Function] started at line 139
[test_environment_connection] Unclosed Anchor at end of file (started line 152)
[test_environment_connection] Unclosed Anchor: [DEF:test_environment_connection:Function] started at line 152
[test_environment_connection] Unclosed Anchor: [DEF:test_environment_connection:Function] started at line 152
[test_environment_connection] Unclosed Anchor: [DEF:test_environment_connection:Function] started at line 152
[test_environment_connection] Unclosed Anchor: [DEF:test_environment_connection:Function] started at line 152
[test_environment_connection] Unclosed Anchor: [DEF:test_environment_connection:Function] started at line 152
[test_environment_connection] Unclosed Anchor: [DEF:test_environment_connection:Function] started at line 152
[test_environment_connection] Unclosed Anchor: [DEF:test_environment_connection:Function] started at line 152
[test_environment_connection] Unclosed Anchor: [DEF:test_environment_connection:Function] started at line 152
[validate_backup_path] Unclosed Anchor at end of file (started line 195)
[validate_backup_path] Unclosed Anchor: [DEF:validate_backup_path:Function] started at line 195
[validate_backup_path] Unclosed Anchor: [DEF:validate_backup_path:Function] started at line 195
[validate_backup_path] Unclosed Anchor: [DEF:validate_backup_path:Function] started at line 195
[validate_backup_path] Unclosed Anchor: [DEF:validate_backup_path:Function] started at line 195
[validate_backup_path] Unclosed Anchor: [DEF:validate_backup_path:Function] started at line 195
[validate_backup_path] Unclosed Anchor: [DEF:validate_backup_path:Function] started at line 195
[validate_backup_path] Unclosed Anchor: [DEF:validate_backup_path:Function] started at line 195
[validate_backup_path] Unclosed Anchor: [DEF:validate_backup_path:Function] started at line 195
[validate_backup_path] Unclosed Anchor: [DEF:validate_backup_path:Function] started at line 195 | +| backend/src/api/routes/tasks.py | 🔴 0% | [TasksRouter] Unclosed Anchor at end of file (started line 1)
[TasksRouter] Unclosed Anchor: [DEF:TasksRouter:Module] started at line 1 | +| backend/src/api/routes/environments.py | 🔴 0% | [backend.src.api.routes.environments] Unclosed Anchor at end of file (started line 1)
[backend.src.api.routes.environments] Unclosed Anchor: [DEF:backend.src.api.routes.environments:Module] started at line 1
[ScheduleSchema] Unclosed Anchor at end of file (started line 23)
[ScheduleSchema] Unclosed Anchor: [DEF:ScheduleSchema:DataClass] started at line 23
[ScheduleSchema] Unclosed Anchor: [DEF:ScheduleSchema:DataClass] started at line 23
[EnvironmentResponse] Unclosed Anchor at end of file (started line 29)
[EnvironmentResponse] Unclosed Anchor: [DEF:EnvironmentResponse:DataClass] started at line 29
[EnvironmentResponse] Unclosed Anchor: [DEF:EnvironmentResponse:DataClass] started at line 29
[EnvironmentResponse] Unclosed Anchor: [DEF:EnvironmentResponse:DataClass] started at line 29
[DatabaseResponse] Unclosed Anchor at end of file (started line 37)
[DatabaseResponse] Unclosed Anchor: [DEF:DatabaseResponse:DataClass] started at line 37
[DatabaseResponse] Unclosed Anchor: [DEF:DatabaseResponse:DataClass] started at line 37
[DatabaseResponse] Unclosed Anchor: [DEF:DatabaseResponse:DataClass] started at line 37
[DatabaseResponse] Unclosed Anchor: [DEF:DatabaseResponse:DataClass] started at line 37
[get_environments] Unclosed Anchor at end of file (started line 44)
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 44
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 44
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 44
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 44
[get_environments] Unclosed Anchor: [DEF:get_environments:Function] started at line 44
[update_environment_schedule] Unclosed Anchor at end of file (started line 66)
[update_environment_schedule] Unclosed Anchor: [DEF:update_environment_schedule:Function] started at line 66
[update_environment_schedule] Unclosed Anchor: [DEF:update_environment_schedule:Function] started at line 66
[update_environment_schedule] Unclosed Anchor: [DEF:update_environment_schedule:Function] started at line 66
[update_environment_schedule] Unclosed Anchor: [DEF:update_environment_schedule:Function] started at line 66
[update_environment_schedule] Unclosed Anchor: [DEF:update_environment_schedule:Function] started at line 66
[update_environment_schedule] Unclosed Anchor: [DEF:update_environment_schedule:Function] started at line 66
[get_environment_databases] Unclosed Anchor at end of file (started line 94)
[get_environment_databases] Unclosed Anchor: [DEF:get_environment_databases:Function] started at line 94
[get_environment_databases] Unclosed Anchor: [DEF:get_environment_databases:Function] started at line 94
[get_environment_databases] Unclosed Anchor: [DEF:get_environment_databases:Function] started at line 94
[get_environment_databases] Unclosed Anchor: [DEF:get_environment_databases:Function] started at line 94
[get_environment_databases] Unclosed Anchor: [DEF:get_environment_databases:Function] started at line 94
[get_environment_databases] Unclosed Anchor: [DEF:get_environment_databases:Function] started at line 94
[get_environment_databases] Unclosed Anchor: [DEF:get_environment_databases:Function] started at line 94 | +| backend/src/api/routes/plugins.py | 🔴 0% | [PluginsRouter] Unclosed Anchor at end of file (started line 1)
[PluginsRouter] Unclosed Anchor: [DEF:PluginsRouter:Module] started at line 1 | +| backend/src/api/routes/migration.py | 🔴 0% | [backend.src.api.routes.migration] Unclosed Anchor at end of file (started line 1)
[backend.src.api.routes.migration] Unclosed Anchor: [DEF:backend.src.api.routes.migration:Module] started at line 1
[get_dashboards] Unclosed Anchor at end of file (started line 17)
[get_dashboards] Unclosed Anchor: [DEF:get_dashboards:Function] started at line 17
[get_dashboards] Unclosed Anchor: [DEF:get_dashboards:Function] started at line 17
[execute_migration] Unclosed Anchor at end of file (started line 42)
[execute_migration] Unclosed Anchor: [DEF:execute_migration:Function] started at line 42
[execute_migration] Unclosed Anchor: [DEF:execute_migration:Function] started at line 42
[execute_migration] Unclosed Anchor: [DEF:execute_migration:Function] started at line 42 | +| backend/src/api/routes/mappings.py | 🔴 0% | [backend.src.api.routes.mappings] Unclosed Anchor at end of file (started line 1)
[backend.src.api.routes.mappings] Unclosed Anchor: [DEF:backend.src.api.routes.mappings:Module] started at line 1
[MappingCreate] Unclosed Anchor at end of file (started line 24)
[MappingCreate] Unclosed Anchor: [DEF:MappingCreate:DataClass] started at line 24
[MappingCreate] Unclosed Anchor: [DEF:MappingCreate:DataClass] started at line 24
[MappingResponse] Unclosed Anchor at end of file (started line 34)
[MappingResponse] Unclosed Anchor: [DEF:MappingResponse:DataClass] started at line 34
[MappingResponse] Unclosed Anchor: [DEF:MappingResponse:DataClass] started at line 34
[MappingResponse] Unclosed Anchor: [DEF:MappingResponse:DataClass] started at line 34
[SuggestRequest] Unclosed Anchor at end of file (started line 48)
[SuggestRequest] Unclosed Anchor: [DEF:SuggestRequest:DataClass] started at line 48
[SuggestRequest] Unclosed Anchor: [DEF:SuggestRequest:DataClass] started at line 48
[SuggestRequest] Unclosed Anchor: [DEF:SuggestRequest:DataClass] started at line 48
[SuggestRequest] Unclosed Anchor: [DEF:SuggestRequest:DataClass] started at line 48
[get_mappings] Unclosed Anchor at end of file (started line 54)
[get_mappings] Unclosed Anchor: [DEF:get_mappings:Function] started at line 54
[get_mappings] Unclosed Anchor: [DEF:get_mappings:Function] started at line 54
[get_mappings] Unclosed Anchor: [DEF:get_mappings:Function] started at line 54
[get_mappings] Unclosed Anchor: [DEF:get_mappings:Function] started at line 54
[get_mappings] Unclosed Anchor: [DEF:get_mappings:Function] started at line 54
[create_mapping] Unclosed Anchor at end of file (started line 70)
[create_mapping] Unclosed Anchor: [DEF:create_mapping:Function] started at line 70
[create_mapping] Unclosed Anchor: [DEF:create_mapping:Function] started at line 70
[create_mapping] Unclosed Anchor: [DEF:create_mapping:Function] started at line 70
[create_mapping] Unclosed Anchor: [DEF:create_mapping:Function] started at line 70
[create_mapping] Unclosed Anchor: [DEF:create_mapping:Function] started at line 70
[create_mapping] Unclosed Anchor: [DEF:create_mapping:Function] started at line 70
[suggest_mappings_api] Unclosed Anchor at end of file (started line 95)
[suggest_mappings_api] Unclosed Anchor: [DEF:suggest_mappings_api:Function] started at line 95
[suggest_mappings_api] Unclosed Anchor: [DEF:suggest_mappings_api:Function] started at line 95
[suggest_mappings_api] Unclosed Anchor: [DEF:suggest_mappings_api:Function] started at line 95
[suggest_mappings_api] Unclosed Anchor: [DEF:suggest_mappings_api:Function] started at line 95
[suggest_mappings_api] Unclosed Anchor: [DEF:suggest_mappings_api:Function] started at line 95
[suggest_mappings_api] Unclosed Anchor: [DEF:suggest_mappings_api:Function] started at line 95
[suggest_mappings_api] Unclosed Anchor: [DEF:suggest_mappings_api:Function] started at line 95 | +| generate_semantic_map.py | 🟢 100% | OK | +| search_script.py | 🟢 100% | OK | +| get_dataset_structure.py | 🟢 100% | OK | +| debug_db_api.py | 🟢 100% | OK | +| run_mapper.py | 🟢 100% | OK | +| migration_script.py | 🟢 100% | OK | +| backup_script.py | 🟢 100% | OK | +| superset_tool/exceptions.py | 🟢 100% | OK | +| superset_tool/__init__.py | 🟢 100% | OK | +| superset_tool/client.py | 🟢 100% | OK | +| superset_tool/models.py | 🟢 100% | OK | +| superset_tool/utils/logger.py | 🟢 100% | OK | +| superset_tool/utils/network.py | 🟢 100% | OK | +| superset_tool/utils/whiptail_fallback.py | 🟢 100% | OK | +| superset_tool/utils/dataset_mapper.py | 🟢 100% | OK | +| superset_tool/utils/__init__.py | 🟢 100% | OK | +| superset_tool/utils/init_clients.py | 🟢 100% | OK | +| superset_tool/utils/fileio.py | 🟢 100% | OK | +| backend/src/dependencies.py | 🟢 100% | OK | +| backend/src/app.py | 🟢 100% | OK | +| backend/src/core/scheduler.py | 🟢 100% | OK | +| backend/src/core/task_manager/manager.py | 🟢 100% | OK | +| backend/src/core/task_manager/__init__.py | 🟢 100% | OK | +| backend/src/core/task_manager/models.py | 🟢 100% | OK | +| backend/src/core/task_manager/persistence.py | 🟢 100% | OK | diff --git a/semantics/reports/semantic_report_20260101_164125.md b/semantics/reports/semantic_report_20260101_164125.md new file mode 100644 index 0000000..c7c1812 --- /dev/null +++ b/semantics/reports/semantic_report_20260101_164125.md @@ -0,0 +1,83 @@ +# Semantic Compliance Report + +**Generated At:** 2026-01-01T16:41:25.515146 +**Global Compliance Score:** 62.4% +**Scanned Files:** 68 + +## Critical Parsing Errors +- 🔴 backend/src/core/database.py:75 Mismatched closing anchor. Expected [/DEF:tasks_engine:Variable], found [/DEF:backend.src.core.database:Module]. +- 🔴 backend/src/plugins/backup.py:146 Mismatched closing anchor. Expected [/DEF:BackupPlugin:Module], found [/DEF:BackupPlugin:Class]. +- 🔴 backend/src/plugins/migration.py:296 Mismatched closing anchor. Expected [/DEF:MigrationPlugin.execute:Action], found [/DEF:MigrationPlugin:Class]. +- 🔴 backend/src/plugins/migration.py:297 Mismatched closing anchor. Expected [/DEF:MigrationPlugin.execute:Action], found [/DEF:MigrationPlugin:Module]. + +## File Compliance Status +| File | Score | Issues | +|------|-------|--------| +| frontend/src/App.svelte | 🔴 0% | [App] Unclosed Anchor at end of file (started line 1)
[App] Unclosed Anchor: [DEF:App:Component] started at line 1
[handleFormSubmit] Unclosed Anchor at end of file (started line 24)
[handleFormSubmit] Unclosed Anchor: [DEF:handleFormSubmit:Function] started at line 24
[handleFormSubmit] Unclosed Anchor: [DEF:handleFormSubmit:Function] started at line 24
[navigate] Unclosed Anchor at end of file (started line 44)
[navigate] Unclosed Anchor: [DEF:navigate:Function] started at line 44
[navigate] Unclosed Anchor: [DEF:navigate:Function] started at line 44
[navigate] Unclosed Anchor: [DEF:navigate:Function] started at line 44 | +| frontend/src/main.js | 🔴 0% | [main] Unclosed Anchor at end of file (started line 1)
[main] Unclosed Anchor: [DEF:main:Module] started at line 1
[app_instance] Unclosed Anchor at end of file (started line 9)
[app_instance] Unclosed Anchor: [DEF:app_instance:Data] started at line 9
[app_instance] Unclosed Anchor: [DEF:app_instance:Data] started at line 9 | +| frontend/src/components/DashboardGrid.svelte | 🔴 0% | [DashboardGrid] Unclosed Anchor at end of file (started line 1)
[DashboardGrid] Unclosed Anchor: [DEF:DashboardGrid:Component] started at line 1
[handleSort] Unclosed Anchor at end of file (started line 62)
[handleSort] Unclosed Anchor: [DEF:handleSort:Function] started at line 62
[handleSort] Unclosed Anchor: [DEF:handleSort:Function] started at line 62
[handleSelectionChange] Unclosed Anchor at end of file (started line 74)
[handleSelectionChange] Unclosed Anchor: [DEF:handleSelectionChange:Function] started at line 74
[handleSelectionChange] Unclosed Anchor: [DEF:handleSelectionChange:Function] started at line 74
[handleSelectionChange] Unclosed Anchor: [DEF:handleSelectionChange:Function] started at line 74
[handleSelectAll] Unclosed Anchor at end of file (started line 88)
[handleSelectAll] Unclosed Anchor: [DEF:handleSelectAll:Function] started at line 88
[handleSelectAll] Unclosed Anchor: [DEF:handleSelectAll:Function] started at line 88
[handleSelectAll] Unclosed Anchor: [DEF:handleSelectAll:Function] started at line 88
[handleSelectAll] Unclosed Anchor: [DEF:handleSelectAll:Function] started at line 88
[goToPage] Unclosed Anchor at end of file (started line 106)
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106 | +| frontend/src/components/TaskHistory.svelte | 🔴 0% | [TaskHistory] Unclosed Anchor at end of file (started line 1)
[TaskHistory] Unclosed Anchor: [DEF:TaskHistory:Component] started at line 1 | +| frontend/src/components/MappingTable.svelte | 🔴 0% | [MappingTable] Unclosed Anchor at end of file (started line 1)
[MappingTable] Unclosed Anchor: [DEF:MappingTable:Component] started at line 1
[updateMapping] Unclosed Anchor at end of file (started line 25)
[updateMapping] Unclosed Anchor: [DEF:updateMapping:Function] started at line 25
[updateMapping] Unclosed Anchor: [DEF:updateMapping:Function] started at line 25
[getSuggestion] Unclosed Anchor at end of file (started line 34)
[getSuggestion] Unclosed Anchor: [DEF:getSuggestion:Function] started at line 34
[getSuggestion] Unclosed Anchor: [DEF:getSuggestion:Function] started at line 34
[getSuggestion] Unclosed Anchor: [DEF:getSuggestion:Function] started at line 34 | +| frontend/src/components/EnvSelector.svelte | 🔴 0% | [EnvSelector] Unclosed Anchor at end of file (started line 1)
[EnvSelector] Unclosed Anchor: [DEF:EnvSelector:Component] started at line 1
[handleSelect] Unclosed Anchor at end of file (started line 24)
[handleSelect] Unclosed Anchor: [DEF:handleSelect:Function] started at line 24
[handleSelect] Unclosed Anchor: [DEF:handleSelect:Function] started at line 24 | +| frontend/src/components/TaskList.svelte | 🔴 0% | [TaskList] Unclosed Anchor at end of file (started line 1)
[TaskList] Unclosed Anchor: [DEF:TaskList:Component] started at line 1 | +| frontend/src/components/DynamicForm.svelte | 🔴 0% | [DynamicForm] Unclosed Anchor at end of file (started line 1)
[DynamicForm] Unclosed Anchor: [DEF:DynamicForm:Component] started at line 1
[handleSubmit] Unclosed Anchor at end of file (started line 23)
[handleSubmit] Unclosed Anchor: [DEF:handleSubmit:Function] started at line 23
[handleSubmit] Unclosed Anchor: [DEF:handleSubmit:Function] started at line 23
[initializeForm] Unclosed Anchor at end of file (started line 33)
[initializeForm] Unclosed Anchor: [DEF:initializeForm:Function] started at line 33
[initializeForm] Unclosed Anchor: [DEF:initializeForm:Function] started at line 33
[initializeForm] Unclosed Anchor: [DEF:initializeForm:Function] started at line 33 | +| frontend/src/components/TaskRunner.svelte | 🔴 0% | [TaskRunner] Unclosed Anchor at end of file (started line 1)
[TaskRunner] Unclosed Anchor: [DEF:TaskRunner:Component] started at line 1
[connect] Unclosed Anchor at end of file (started line 38)
[connect] Unclosed Anchor: [DEF:connect:Function] started at line 38
[connect] Unclosed Anchor: [DEF:connect:Function] started at line 38
[onMount] Unclosed Anchor at end of file (started line 225)
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 225
[onMount] Missing Mandatory Tag: @PURPOSE
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 225
[onMount] Missing Mandatory Tag: @PURPOSE
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 225
[onMount] Missing Mandatory Tag: @PURPOSE
[onDestroy] Unclosed Anchor at end of file (started line 251)
[onDestroy] Unclosed Anchor: [DEF:onDestroy:Function] started at line 251
[onDestroy] Unclosed Anchor: [DEF:onDestroy:Function] started at line 251
[onDestroy] Unclosed Anchor: [DEF:onDestroy:Function] started at line 251
[onDestroy] Unclosed Anchor: [DEF:onDestroy:Function] started at line 251 | +| frontend/src/components/TaskLogViewer.svelte | 🔴 0% | [TaskLogViewer] Unclosed Anchor at end of file (started line 1)
[TaskLogViewer] Unclosed Anchor: [DEF:TaskLogViewer:Component] started at line 1 | +| frontend/src/components/PasswordPrompt.svelte | 🔴 0% | [PasswordPrompt] Unclosed Anchor at end of file (started line 1)
[PasswordPrompt] Unclosed Anchor: [DEF:PasswordPrompt:Component] started at line 1 | +| frontend/src/components/MissingMappingModal.svelte | 🔴 0% | [MissingMappingModal] Unclosed Anchor at end of file (started line 1)
[MissingMappingModal] Unclosed Anchor: [DEF:MissingMappingModal:Component] started at line 1
[resolve] Unclosed Anchor at end of file (started line 26)
[resolve] Unclosed Anchor: [DEF:resolve:Function] started at line 26
[resolve] Missing Mandatory Tag: @PURPOSE
[resolve] Unclosed Anchor: [DEF:resolve:Function] started at line 26
[resolve] Missing Mandatory Tag: @PURPOSE
[cancel] Unclosed Anchor at end of file (started line 38)
[cancel] Unclosed Anchor: [DEF:cancel:Function] started at line 38
[cancel] Missing Mandatory Tag: @PURPOSE
[cancel] Unclosed Anchor: [DEF:cancel:Function] started at line 38
[cancel] Missing Mandatory Tag: @PURPOSE
[cancel] Unclosed Anchor: [DEF:cancel:Function] started at line 38
[cancel] Missing Mandatory Tag: @PURPOSE | +| frontend/src/components/Toast.svelte | 🔴 0% | [Toast] Unclosed Anchor at end of file (started line 1)
[Toast] Unclosed Anchor: [DEF:Toast:Component] started at line 1 | +| frontend/src/pages/Settings.svelte | 🔴 0% | [Settings] Unclosed Anchor at end of file (started line 1)
[Settings] Unclosed Anchor: [DEF:Settings:Component] started at line 1
[loadSettings] Unclosed Anchor at end of file (started line 50)
[loadSettings] Unclosed Anchor: [DEF:loadSettings:Function] started at line 50
[loadSettings] Unclosed Anchor: [DEF:loadSettings:Function] started at line 50
[handleSaveGlobal] Unclosed Anchor at end of file (started line 67)
[handleSaveGlobal] Unclosed Anchor: [DEF:handleSaveGlobal:Function] started at line 67
[handleSaveGlobal] Unclosed Anchor: [DEF:handleSaveGlobal:Function] started at line 67
[handleSaveGlobal] Unclosed Anchor: [DEF:handleSaveGlobal:Function] started at line 67
[handleAddOrUpdateEnv] Unclosed Anchor at end of file (started line 84)
[handleAddOrUpdateEnv] Unclosed Anchor: [DEF:handleAddOrUpdateEnv:Function] started at line 84
[handleAddOrUpdateEnv] Unclosed Anchor: [DEF:handleAddOrUpdateEnv:Function] started at line 84
[handleAddOrUpdateEnv] Unclosed Anchor: [DEF:handleAddOrUpdateEnv:Function] started at line 84
[handleAddOrUpdateEnv] Unclosed Anchor: [DEF:handleAddOrUpdateEnv:Function] started at line 84
[handleDeleteEnv] Unclosed Anchor at end of file (started line 108)
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleTestEnv] Unclosed Anchor at end of file (started line 129)
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[editEnv] Unclosed Anchor at end of file (started line 152)
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[resetEnvForm] Unclosed Anchor at end of file (started line 163)
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163 | +| frontend/src/pages/Dashboard.svelte | 🔴 0% | [Dashboard] Unclosed Anchor at end of file (started line 1)
[Dashboard] Unclosed Anchor: [DEF:Dashboard:Component] started at line 1
[onMount] Unclosed Anchor at end of file (started line 17)
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 17
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 17
[selectPlugin] Unclosed Anchor at end of file (started line 27)
[selectPlugin] Unclosed Anchor: [DEF:selectPlugin:Function] started at line 27
[selectPlugin] Unclosed Anchor: [DEF:selectPlugin:Function] started at line 27
[selectPlugin] Unclosed Anchor: [DEF:selectPlugin:Function] started at line 27 | +| frontend/src/lib/stores.js | 🔴 0% | [stores_module] Unclosed Anchor at end of file (started line 1)
[stores_module] Unclosed Anchor: [DEF:stores_module:Module] started at line 1
[plugins] Unclosed Anchor at end of file (started line 9)
[plugins] Unclosed Anchor: [DEF:plugins:Data] started at line 9
[plugins] Unclosed Anchor: [DEF:plugins:Data] started at line 9
[tasks] Unclosed Anchor at end of file (started line 13)
[tasks] Unclosed Anchor: [DEF:tasks:Data] started at line 13
[tasks] Unclosed Anchor: [DEF:tasks:Data] started at line 13
[tasks] Unclosed Anchor: [DEF:tasks:Data] started at line 13
[selectedPlugin] Unclosed Anchor at end of file (started line 17)
[selectedPlugin] Unclosed Anchor: [DEF:selectedPlugin:Data] started at line 17
[selectedPlugin] Unclosed Anchor: [DEF:selectedPlugin:Data] started at line 17
[selectedPlugin] Unclosed Anchor: [DEF:selectedPlugin:Data] started at line 17
[selectedPlugin] Unclosed Anchor: [DEF:selectedPlugin:Data] started at line 17
[selectedTask] Unclosed Anchor at end of file (started line 21)
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[currentPage] Unclosed Anchor at end of file (started line 25)
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[taskLogs] Unclosed Anchor at end of file (started line 29)
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[fetchPlugins] Unclosed Anchor at end of file (started line 33)
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchTasks] Unclosed Anchor at end of file (started line 47)
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47 | +| frontend/src/lib/toasts.js | 🔴 0% | [toasts_module] Unclosed Anchor at end of file (started line 1)
[toasts_module] Unclosed Anchor: [DEF:toasts_module:Module] started at line 1
[toasts] Unclosed Anchor at end of file (started line 8)
[toasts] Unclosed Anchor: [DEF:toasts:Data] started at line 8
[toasts] Unclosed Anchor: [DEF:toasts:Data] started at line 8
[addToast] Unclosed Anchor at end of file (started line 12)
[addToast] Unclosed Anchor: [DEF:addToast:Function] started at line 12
[addToast] Unclosed Anchor: [DEF:addToast:Function] started at line 12
[addToast] Unclosed Anchor: [DEF:addToast:Function] started at line 12
[removeToast] Unclosed Anchor at end of file (started line 25)
[removeToast] Unclosed Anchor: [DEF:removeToast:Function] started at line 25
[removeToast] Unclosed Anchor: [DEF:removeToast:Function] started at line 25
[removeToast] Unclosed Anchor: [DEF:removeToast:Function] started at line 25
[removeToast] Unclosed Anchor: [DEF:removeToast:Function] started at line 25 | +| frontend/src/lib/api.js | 🔴 0% | [api_module] Unclosed Anchor at end of file (started line 1)
[api_module] Unclosed Anchor: [DEF:api_module:Module] started at line 1
[fetchApi] Unclosed Anchor at end of file (started line 26)
[fetchApi] Unclosed Anchor: [DEF:fetchApi:Function] started at line 26
[fetchApi] Unclosed Anchor: [DEF:fetchApi:Function] started at line 26
[postApi] Unclosed Anchor at end of file (started line 46)
[postApi] Unclosed Anchor: [DEF:postApi:Function] started at line 46
[postApi] Unclosed Anchor: [DEF:postApi:Function] started at line 46
[postApi] Unclosed Anchor: [DEF:postApi:Function] started at line 46
[requestApi] Unclosed Anchor at end of file (started line 73)
[requestApi] Unclosed Anchor: [DEF:requestApi:Function] started at line 73
[requestApi] Unclosed Anchor: [DEF:requestApi:Function] started at line 73
[requestApi] Unclosed Anchor: [DEF:requestApi:Function] started at line 73
[requestApi] Unclosed Anchor: [DEF:requestApi:Function] started at line 73
[api] Unclosed Anchor at end of file (started line 100)
[api] Unclosed Anchor: [DEF:api:Data] started at line 100
[api] Unclosed Anchor: [DEF:api:Data] started at line 100
[api] Unclosed Anchor: [DEF:api:Data] started at line 100
[api] Unclosed Anchor: [DEF:api:Data] started at line 100
[api] Unclosed Anchor: [DEF:api:Data] started at line 100 | +| frontend/src/routes/migration/+page.svelte | 🔴 0% | [MigrationDashboard] Unclosed Anchor at end of file (started line 1)
[MigrationDashboard] Unclosed Anchor: [DEF:MigrationDashboard:Component] started at line 1
[fetchEnvironments] Unclosed Anchor at end of file (started line 51)
[fetchEnvironments] Unclosed Anchor: [DEF:fetchEnvironments:Function] started at line 51
[fetchEnvironments] Unclosed Anchor: [DEF:fetchEnvironments:Function] started at line 51
[fetchDashboards] Unclosed Anchor at end of file (started line 69)
[fetchDashboards] Unclosed Anchor: [DEF:fetchDashboards:Function] started at line 69
[fetchDashboards] Unclosed Anchor: [DEF:fetchDashboards:Function] started at line 69
[fetchDashboards] Unclosed Anchor: [DEF:fetchDashboards:Function] started at line 69
[fetchDatabases] Unclosed Anchor at end of file (started line 93)
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 93
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 93
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 93
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 93
[handleMappingUpdate] Unclosed Anchor at end of file (started line 128)
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleViewLogs] Unclosed Anchor at end of file (started line 163)
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor at end of file (started line 172)
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[startMigration] Unclosed Anchor at end of file (started line 207)
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207 | +| frontend/src/routes/migration/mappings/+page.svelte | 🔴 0% | [MappingManagement] Unclosed Anchor at end of file (started line 1)
[MappingManagement] Unclosed Anchor: [DEF:MappingManagement:Component] started at line 1
[fetchDatabases] Unclosed Anchor at end of file (started line 47)
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 47
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 47
[handleUpdate] Unclosed Anchor at end of file (started line 83)
[handleUpdate] Unclosed Anchor: [DEF:handleUpdate:Function] started at line 83
[handleUpdate] Unclosed Anchor: [DEF:handleUpdate:Function] started at line 83
[handleUpdate] Unclosed Anchor: [DEF:handleUpdate:Function] started at line 83 | +| backend/src/services/mapping_service.py | 🔴 0% | [backend.src.services.mapping_service] Unclosed Anchor at end of file (started line 1)
[backend.src.services.mapping_service] Unclosed Anchor: [DEF:backend.src.services.mapping_service:Module] started at line 1
[MappingService] Unclosed Anchor at end of file (started line 18)
[MappingService] Unclosed Anchor: [DEF:MappingService:Class] started at line 18
[MappingService] Unclosed Anchor: [DEF:MappingService:Class] started at line 18
[MappingService.__init__] Unclosed Anchor at end of file (started line 22)
[MappingService.__init__] Unclosed Anchor: [DEF:MappingService.__init__:Function] started at line 22
[MappingService.__init__] Missing Mandatory Tag: @PURPOSE
[MappingService.__init__] Unclosed Anchor: [DEF:MappingService.__init__:Function] started at line 22
[MappingService.__init__] Missing Mandatory Tag: @PURPOSE
[MappingService.__init__] Unclosed Anchor: [DEF:MappingService.__init__:Function] started at line 22
[MappingService.__init__] Missing Mandatory Tag: @PURPOSE
[MappingService._get_client] Unclosed Anchor at end of file (started line 26)
[MappingService._get_client] Unclosed Anchor: [DEF:MappingService._get_client:Function] started at line 26
[MappingService._get_client] Unclosed Anchor: [DEF:MappingService._get_client:Function] started at line 26
[MappingService._get_client] Unclosed Anchor: [DEF:MappingService._get_client:Function] started at line 26
[MappingService._get_client] Unclosed Anchor: [DEF:MappingService._get_client:Function] started at line 26
[MappingService.get_suggestions] Unclosed Anchor at end of file (started line 46)
[MappingService.get_suggestions] Unclosed Anchor: [DEF:MappingService.get_suggestions:Function] started at line 46
[MappingService.get_suggestions] Unclosed Anchor: [DEF:MappingService.get_suggestions:Function] started at line 46
[MappingService.get_suggestions] Unclosed Anchor: [DEF:MappingService.get_suggestions:Function] started at line 46
[MappingService.get_suggestions] Unclosed Anchor: [DEF:MappingService.get_suggestions:Function] started at line 46
[MappingService.get_suggestions] Unclosed Anchor: [DEF:MappingService.get_suggestions:Function] started at line 46 | +| backend/src/core/superset_client.py | 🔴 0% | [backend.src.core.superset_client] Unclosed Anchor at end of file (started line 1)
[backend.src.core.superset_client] Unclosed Anchor: [DEF:backend.src.core.superset_client:Module] started at line 1
[SupersetClient] Unclosed Anchor at end of file (started line 16)
[SupersetClient] Unclosed Anchor: [DEF:SupersetClient:Class] started at line 16
[SupersetClient] Unclosed Anchor: [DEF:SupersetClient:Class] started at line 16
[SupersetClient.get_databases_summary] Unclosed Anchor at end of file (started line 20)
[SupersetClient.get_databases_summary] Unclosed Anchor: [DEF:SupersetClient.get_databases_summary:Function] started at line 20
[SupersetClient.get_databases_summary] Unclosed Anchor: [DEF:SupersetClient.get_databases_summary:Function] started at line 20
[SupersetClient.get_databases_summary] Unclosed Anchor: [DEF:SupersetClient.get_databases_summary:Function] started at line 20
[SupersetClient.get_database_by_uuid] Unclosed Anchor at end of file (started line 40)
[SupersetClient.get_database_by_uuid] Unclosed Anchor: [DEF:SupersetClient.get_database_by_uuid:Function] started at line 40
[SupersetClient.get_database_by_uuid] Unclosed Anchor: [DEF:SupersetClient.get_database_by_uuid:Function] started at line 40
[SupersetClient.get_database_by_uuid] Unclosed Anchor: [DEF:SupersetClient.get_database_by_uuid:Function] started at line 40
[SupersetClient.get_database_by_uuid] Unclosed Anchor: [DEF:SupersetClient.get_database_by_uuid:Function] started at line 40
[SupersetClient.get_dashboards_summary] Unclosed Anchor at end of file (started line 55)
[SupersetClient.get_dashboards_summary] Unclosed Anchor: [DEF:SupersetClient.get_dashboards_summary:Function] started at line 55
[SupersetClient.get_dashboards_summary] Unclosed Anchor: [DEF:SupersetClient.get_dashboards_summary:Function] started at line 55
[SupersetClient.get_dashboards_summary] Unclosed Anchor: [DEF:SupersetClient.get_dashboards_summary:Function] started at line 55
[SupersetClient.get_dashboards_summary] Unclosed Anchor: [DEF:SupersetClient.get_dashboards_summary:Function] started at line 55
[SupersetClient.get_dashboards_summary] Unclosed Anchor: [DEF:SupersetClient.get_dashboards_summary:Function] started at line 55 | +| backend/src/core/migration_engine.py | 🔴 0% | [backend.src.core.migration_engine] Unclosed Anchor at end of file (started line 1)
[backend.src.core.migration_engine] Unclosed Anchor: [DEF:backend.src.core.migration_engine:Module] started at line 1
[MigrationEngine] Unclosed Anchor at end of file (started line 22)
[MigrationEngine] Unclosed Anchor: [DEF:MigrationEngine:Class] started at line 22
[MigrationEngine] Unclosed Anchor: [DEF:MigrationEngine:Class] started at line 22
[MigrationEngine.transform_zip] Unclosed Anchor at end of file (started line 26)
[MigrationEngine.transform_zip] Unclosed Anchor: [DEF:MigrationEngine.transform_zip:Function] started at line 26
[MigrationEngine.transform_zip] Unclosed Anchor: [DEF:MigrationEngine.transform_zip:Function] started at line 26
[MigrationEngine.transform_zip] Unclosed Anchor: [DEF:MigrationEngine.transform_zip:Function] started at line 26
[MigrationEngine._transform_yaml] Unclosed Anchor at end of file (started line 77)
[MigrationEngine._transform_yaml] Unclosed Anchor: [DEF:MigrationEngine._transform_yaml:Function] started at line 77
[MigrationEngine._transform_yaml] Unclosed Anchor: [DEF:MigrationEngine._transform_yaml:Function] started at line 77
[MigrationEngine._transform_yaml] Unclosed Anchor: [DEF:MigrationEngine._transform_yaml:Function] started at line 77
[MigrationEngine._transform_yaml] Unclosed Anchor: [DEF:MigrationEngine._transform_yaml:Function] started at line 77 | +| backend/src/plugins/backup.py | 🔴 0% | [BackupPlugin] Unclosed Anchor at end of file (started line 1)
[BackupPlugin] Unclosed Anchor: [DEF:BackupPlugin:Module] started at line 1 | +| backend/src/plugins/migration.py | 🔴 0% | [MigrationPlugin] Unclosed Anchor at end of file (started line 1)
[MigrationPlugin] Unclosed Anchor: [DEF:MigrationPlugin:Module] started at line 1
[MigrationPlugin.execute] Unclosed Anchor at end of file (started line 103)
[MigrationPlugin.execute] Unclosed Anchor: [DEF:MigrationPlugin.execute:Action] started at line 103
[MigrationPlugin.execute] Unclosed Anchor: [DEF:MigrationPlugin.execute:Action] started at line 103 | +| backend/src/core/database.py | 🔴 40% | [backend.src.core.database] Unclosed Anchor at end of file (started line 1)
[backend.src.core.database] Unclosed Anchor: [DEF:backend.src.core.database:Module] started at line 1
[DATABASE_URL] Unclosed Anchor at end of file (started line 20)
[DATABASE_URL] Unclosed Anchor: [DEF:DATABASE_URL:Constant] started at line 20
[DATABASE_URL] Unclosed Anchor: [DEF:DATABASE_URL:Constant] started at line 20
[TASKS_DATABASE_URL] Unclosed Anchor at end of file (started line 24)
[TASKS_DATABASE_URL] Unclosed Anchor: [DEF:TASKS_DATABASE_URL:Constant] started at line 24
[TASKS_DATABASE_URL] Unclosed Anchor: [DEF:TASKS_DATABASE_URL:Constant] started at line 24
[TASKS_DATABASE_URL] Unclosed Anchor: [DEF:TASKS_DATABASE_URL:Constant] started at line 24
[engine] Unclosed Anchor at end of file (started line 28)
[engine] Unclosed Anchor: [DEF:engine:Variable] started at line 28
[engine] Unclosed Anchor: [DEF:engine:Variable] started at line 28
[engine] Unclosed Anchor: [DEF:engine:Variable] started at line 28
[engine] Unclosed Anchor: [DEF:engine:Variable] started at line 28
[tasks_engine] Unclosed Anchor at end of file (started line 32)
[tasks_engine] Unclosed Anchor: [DEF:tasks_engine:Variable] started at line 32
[tasks_engine] Unclosed Anchor: [DEF:tasks_engine:Variable] started at line 32
[tasks_engine] Unclosed Anchor: [DEF:tasks_engine:Variable] started at line 32
[tasks_engine] Unclosed Anchor: [DEF:tasks_engine:Variable] started at line 32
[tasks_engine] Unclosed Anchor: [DEF:tasks_engine:Variable] started at line 32
[SessionLocal] Missing Mandatory Tag: @PURPOSE
[SessionLocal] Missing Mandatory Tag: @PURPOSE
[SessionLocal] Missing Mandatory Tag: @PURPOSE
[SessionLocal] Missing Mandatory Tag: @PURPOSE
[SessionLocal] Missing Mandatory Tag: @PURPOSE
[SessionLocal] Missing Mandatory Tag: @PURPOSE
[TasksSessionLocal] Missing Mandatory Tag: @PURPOSE
[TasksSessionLocal] Missing Mandatory Tag: @PURPOSE
[TasksSessionLocal] Missing Mandatory Tag: @PURPOSE
[TasksSessionLocal] Missing Mandatory Tag: @PURPOSE
[TasksSessionLocal] Missing Mandatory Tag: @PURPOSE
[TasksSessionLocal] Missing Mandatory Tag: @PURPOSE | +| generate_semantic_map.py | 🟢 100% | OK | +| search_script.py | 🟢 100% | OK | +| get_dataset_structure.py | 🟢 100% | OK | +| debug_db_api.py | 🟢 100% | OK | +| run_mapper.py | 🟢 100% | OK | +| migration_script.py | 🟢 100% | OK | +| backup_script.py | 🟢 100% | OK | +| superset_tool/exceptions.py | 🟢 100% | OK | +| superset_tool/__init__.py | 🟢 100% | OK | +| superset_tool/client.py | 🟢 100% | OK | +| superset_tool/models.py | 🟢 100% | OK | +| superset_tool/utils/logger.py | 🟢 100% | OK | +| superset_tool/utils/network.py | 🟢 100% | OK | +| superset_tool/utils/whiptail_fallback.py | 🟢 100% | OK | +| superset_tool/utils/dataset_mapper.py | 🟢 100% | OK | +| superset_tool/utils/__init__.py | 🟢 100% | OK | +| superset_tool/utils/init_clients.py | 🟢 100% | OK | +| superset_tool/utils/fileio.py | 🟢 100% | OK | +| backend/src/dependencies.py | 🟢 100% | OK | +| backend/src/app.py | 🟢 100% | OK | +| backend/src/models/mapping.py | 🟢 100% | OK | +| backend/src/models/dashboard.py | 🟢 100% | OK | +| backend/src/models/task.py | 🟢 100% | OK | +| backend/src/core/config_manager.py | 🟢 100% | OK | +| backend/src/core/logger.py | 🟢 100% | OK | +| backend/src/core/config_models.py | 🟢 100% | OK | +| backend/src/core/scheduler.py | 🟢 100% | OK | +| backend/src/core/plugin_loader.py | 🟢 100% | OK | +| backend/src/core/plugin_base.py | 🟢 100% | OK | +| backend/src/core/utils/matching.py | 🟢 100% | OK | +| backend/src/core/task_manager/manager.py | 🟢 100% | OK | +| backend/src/core/task_manager/__init__.py | 🟢 100% | OK | +| backend/src/core/task_manager/cleanup.py | 🟢 100% | OK | +| backend/src/core/task_manager/models.py | 🟢 100% | OK | +| backend/src/core/task_manager/persistence.py | 🟢 100% | OK | +| backend/src/api/auth.py | 🟢 100% | OK | +| backend/src/api/routes/settings.py | 🟢 100% | OK | +| backend/src/api/routes/tasks.py | 🟢 100% | OK | +| backend/src/api/routes/environments.py | 🟢 100% | OK | +| backend/src/api/routes/plugins.py | 🟢 100% | OK | +| backend/src/api/routes/migration.py | 🟢 100% | OK | +| backend/src/api/routes/mappings.py | 🟢 100% | OK | diff --git a/semantics/reports/semantic_report_20260101_164254.md b/semantics/reports/semantic_report_20260101_164254.md new file mode 100644 index 0000000..cc014cf --- /dev/null +++ b/semantics/reports/semantic_report_20260101_164254.md @@ -0,0 +1,81 @@ +# Semantic Compliance Report + +**Generated At:** 2026-01-01T16:42:54.849752 +**Global Compliance Score:** 65.6% +**Scanned Files:** 68 + +## Critical Parsing Errors +- 🔴 backend/src/core/database.py:77 Mismatched closing anchor. Expected [/DEF:engine:Variable], found [/DEF:backend.src.core.database:Module]. +- 🔴 backend/src/plugins/migration.py:297 Mismatched closing anchor. Expected [/DEF:MigrationPlugin:Module], found [/DEF:MigrationPlugin:Class]. + +## File Compliance Status +| File | Score | Issues | +|------|-------|--------| +| frontend/src/App.svelte | 🔴 0% | [App] Unclosed Anchor at end of file (started line 1)
[App] Unclosed Anchor: [DEF:App:Component] started at line 1
[handleFormSubmit] Unclosed Anchor at end of file (started line 24)
[handleFormSubmit] Unclosed Anchor: [DEF:handleFormSubmit:Function] started at line 24
[handleFormSubmit] Unclosed Anchor: [DEF:handleFormSubmit:Function] started at line 24
[navigate] Unclosed Anchor at end of file (started line 44)
[navigate] Unclosed Anchor: [DEF:navigate:Function] started at line 44
[navigate] Unclosed Anchor: [DEF:navigate:Function] started at line 44
[navigate] Unclosed Anchor: [DEF:navigate:Function] started at line 44 | +| frontend/src/main.js | 🔴 0% | [main] Unclosed Anchor at end of file (started line 1)
[main] Unclosed Anchor: [DEF:main:Module] started at line 1
[app_instance] Unclosed Anchor at end of file (started line 9)
[app_instance] Unclosed Anchor: [DEF:app_instance:Data] started at line 9
[app_instance] Unclosed Anchor: [DEF:app_instance:Data] started at line 9 | +| frontend/src/components/DashboardGrid.svelte | 🔴 0% | [DashboardGrid] Unclosed Anchor at end of file (started line 1)
[DashboardGrid] Unclosed Anchor: [DEF:DashboardGrid:Component] started at line 1
[handleSort] Unclosed Anchor at end of file (started line 62)
[handleSort] Unclosed Anchor: [DEF:handleSort:Function] started at line 62
[handleSort] Unclosed Anchor: [DEF:handleSort:Function] started at line 62
[handleSelectionChange] Unclosed Anchor at end of file (started line 74)
[handleSelectionChange] Unclosed Anchor: [DEF:handleSelectionChange:Function] started at line 74
[handleSelectionChange] Unclosed Anchor: [DEF:handleSelectionChange:Function] started at line 74
[handleSelectionChange] Unclosed Anchor: [DEF:handleSelectionChange:Function] started at line 74
[handleSelectAll] Unclosed Anchor at end of file (started line 88)
[handleSelectAll] Unclosed Anchor: [DEF:handleSelectAll:Function] started at line 88
[handleSelectAll] Unclosed Anchor: [DEF:handleSelectAll:Function] started at line 88
[handleSelectAll] Unclosed Anchor: [DEF:handleSelectAll:Function] started at line 88
[handleSelectAll] Unclosed Anchor: [DEF:handleSelectAll:Function] started at line 88
[goToPage] Unclosed Anchor at end of file (started line 106)
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106 | +| frontend/src/components/TaskHistory.svelte | 🔴 0% | [TaskHistory] Unclosed Anchor at end of file (started line 1)
[TaskHistory] Unclosed Anchor: [DEF:TaskHistory:Component] started at line 1 | +| frontend/src/components/MappingTable.svelte | 🔴 0% | [MappingTable] Unclosed Anchor at end of file (started line 1)
[MappingTable] Unclosed Anchor: [DEF:MappingTable:Component] started at line 1
[updateMapping] Unclosed Anchor at end of file (started line 25)
[updateMapping] Unclosed Anchor: [DEF:updateMapping:Function] started at line 25
[updateMapping] Unclosed Anchor: [DEF:updateMapping:Function] started at line 25
[getSuggestion] Unclosed Anchor at end of file (started line 34)
[getSuggestion] Unclosed Anchor: [DEF:getSuggestion:Function] started at line 34
[getSuggestion] Unclosed Anchor: [DEF:getSuggestion:Function] started at line 34
[getSuggestion] Unclosed Anchor: [DEF:getSuggestion:Function] started at line 34 | +| frontend/src/components/EnvSelector.svelte | 🔴 0% | [EnvSelector] Unclosed Anchor at end of file (started line 1)
[EnvSelector] Unclosed Anchor: [DEF:EnvSelector:Component] started at line 1
[handleSelect] Unclosed Anchor at end of file (started line 24)
[handleSelect] Unclosed Anchor: [DEF:handleSelect:Function] started at line 24
[handleSelect] Unclosed Anchor: [DEF:handleSelect:Function] started at line 24 | +| frontend/src/components/TaskList.svelte | 🔴 0% | [TaskList] Unclosed Anchor at end of file (started line 1)
[TaskList] Unclosed Anchor: [DEF:TaskList:Component] started at line 1 | +| frontend/src/components/DynamicForm.svelte | 🔴 0% | [DynamicForm] Unclosed Anchor at end of file (started line 1)
[DynamicForm] Unclosed Anchor: [DEF:DynamicForm:Component] started at line 1
[handleSubmit] Unclosed Anchor at end of file (started line 23)
[handleSubmit] Unclosed Anchor: [DEF:handleSubmit:Function] started at line 23
[handleSubmit] Unclosed Anchor: [DEF:handleSubmit:Function] started at line 23
[initializeForm] Unclosed Anchor at end of file (started line 33)
[initializeForm] Unclosed Anchor: [DEF:initializeForm:Function] started at line 33
[initializeForm] Unclosed Anchor: [DEF:initializeForm:Function] started at line 33
[initializeForm] Unclosed Anchor: [DEF:initializeForm:Function] started at line 33 | +| frontend/src/components/TaskRunner.svelte | 🔴 0% | [TaskRunner] Unclosed Anchor at end of file (started line 1)
[TaskRunner] Unclosed Anchor: [DEF:TaskRunner:Component] started at line 1
[connect] Unclosed Anchor at end of file (started line 38)
[connect] Unclosed Anchor: [DEF:connect:Function] started at line 38
[connect] Unclosed Anchor: [DEF:connect:Function] started at line 38
[onMount] Unclosed Anchor at end of file (started line 225)
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 225
[onMount] Missing Mandatory Tag: @PURPOSE
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 225
[onMount] Missing Mandatory Tag: @PURPOSE
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 225
[onMount] Missing Mandatory Tag: @PURPOSE
[onDestroy] Unclosed Anchor at end of file (started line 251)
[onDestroy] Unclosed Anchor: [DEF:onDestroy:Function] started at line 251
[onDestroy] Unclosed Anchor: [DEF:onDestroy:Function] started at line 251
[onDestroy] Unclosed Anchor: [DEF:onDestroy:Function] started at line 251
[onDestroy] Unclosed Anchor: [DEF:onDestroy:Function] started at line 251 | +| frontend/src/components/TaskLogViewer.svelte | 🔴 0% | [TaskLogViewer] Unclosed Anchor at end of file (started line 1)
[TaskLogViewer] Unclosed Anchor: [DEF:TaskLogViewer:Component] started at line 1 | +| frontend/src/components/PasswordPrompt.svelte | 🔴 0% | [PasswordPrompt] Unclosed Anchor at end of file (started line 1)
[PasswordPrompt] Unclosed Anchor: [DEF:PasswordPrompt:Component] started at line 1 | +| frontend/src/components/MissingMappingModal.svelte | 🔴 0% | [MissingMappingModal] Unclosed Anchor at end of file (started line 1)
[MissingMappingModal] Unclosed Anchor: [DEF:MissingMappingModal:Component] started at line 1
[resolve] Unclosed Anchor at end of file (started line 26)
[resolve] Unclosed Anchor: [DEF:resolve:Function] started at line 26
[resolve] Missing Mandatory Tag: @PURPOSE
[resolve] Unclosed Anchor: [DEF:resolve:Function] started at line 26
[resolve] Missing Mandatory Tag: @PURPOSE
[cancel] Unclosed Anchor at end of file (started line 38)
[cancel] Unclosed Anchor: [DEF:cancel:Function] started at line 38
[cancel] Missing Mandatory Tag: @PURPOSE
[cancel] Unclosed Anchor: [DEF:cancel:Function] started at line 38
[cancel] Missing Mandatory Tag: @PURPOSE
[cancel] Unclosed Anchor: [DEF:cancel:Function] started at line 38
[cancel] Missing Mandatory Tag: @PURPOSE | +| frontend/src/components/Toast.svelte | 🔴 0% | [Toast] Unclosed Anchor at end of file (started line 1)
[Toast] Unclosed Anchor: [DEF:Toast:Component] started at line 1 | +| frontend/src/pages/Settings.svelte | 🔴 0% | [Settings] Unclosed Anchor at end of file (started line 1)
[Settings] Unclosed Anchor: [DEF:Settings:Component] started at line 1
[loadSettings] Unclosed Anchor at end of file (started line 50)
[loadSettings] Unclosed Anchor: [DEF:loadSettings:Function] started at line 50
[loadSettings] Unclosed Anchor: [DEF:loadSettings:Function] started at line 50
[handleSaveGlobal] Unclosed Anchor at end of file (started line 67)
[handleSaveGlobal] Unclosed Anchor: [DEF:handleSaveGlobal:Function] started at line 67
[handleSaveGlobal] Unclosed Anchor: [DEF:handleSaveGlobal:Function] started at line 67
[handleSaveGlobal] Unclosed Anchor: [DEF:handleSaveGlobal:Function] started at line 67
[handleAddOrUpdateEnv] Unclosed Anchor at end of file (started line 84)
[handleAddOrUpdateEnv] Unclosed Anchor: [DEF:handleAddOrUpdateEnv:Function] started at line 84
[handleAddOrUpdateEnv] Unclosed Anchor: [DEF:handleAddOrUpdateEnv:Function] started at line 84
[handleAddOrUpdateEnv] Unclosed Anchor: [DEF:handleAddOrUpdateEnv:Function] started at line 84
[handleAddOrUpdateEnv] Unclosed Anchor: [DEF:handleAddOrUpdateEnv:Function] started at line 84
[handleDeleteEnv] Unclosed Anchor at end of file (started line 108)
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleTestEnv] Unclosed Anchor at end of file (started line 129)
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[editEnv] Unclosed Anchor at end of file (started line 152)
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[resetEnvForm] Unclosed Anchor at end of file (started line 163)
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163 | +| frontend/src/pages/Dashboard.svelte | 🔴 0% | [Dashboard] Unclosed Anchor at end of file (started line 1)
[Dashboard] Unclosed Anchor: [DEF:Dashboard:Component] started at line 1
[onMount] Unclosed Anchor at end of file (started line 17)
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 17
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 17
[selectPlugin] Unclosed Anchor at end of file (started line 27)
[selectPlugin] Unclosed Anchor: [DEF:selectPlugin:Function] started at line 27
[selectPlugin] Unclosed Anchor: [DEF:selectPlugin:Function] started at line 27
[selectPlugin] Unclosed Anchor: [DEF:selectPlugin:Function] started at line 27 | +| frontend/src/lib/stores.js | 🔴 0% | [stores_module] Unclosed Anchor at end of file (started line 1)
[stores_module] Unclosed Anchor: [DEF:stores_module:Module] started at line 1
[plugins] Unclosed Anchor at end of file (started line 9)
[plugins] Unclosed Anchor: [DEF:plugins:Data] started at line 9
[plugins] Unclosed Anchor: [DEF:plugins:Data] started at line 9
[tasks] Unclosed Anchor at end of file (started line 13)
[tasks] Unclosed Anchor: [DEF:tasks:Data] started at line 13
[tasks] Unclosed Anchor: [DEF:tasks:Data] started at line 13
[tasks] Unclosed Anchor: [DEF:tasks:Data] started at line 13
[selectedPlugin] Unclosed Anchor at end of file (started line 17)
[selectedPlugin] Unclosed Anchor: [DEF:selectedPlugin:Data] started at line 17
[selectedPlugin] Unclosed Anchor: [DEF:selectedPlugin:Data] started at line 17
[selectedPlugin] Unclosed Anchor: [DEF:selectedPlugin:Data] started at line 17
[selectedPlugin] Unclosed Anchor: [DEF:selectedPlugin:Data] started at line 17
[selectedTask] Unclosed Anchor at end of file (started line 21)
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[currentPage] Unclosed Anchor at end of file (started line 25)
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[taskLogs] Unclosed Anchor at end of file (started line 29)
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[fetchPlugins] Unclosed Anchor at end of file (started line 33)
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchTasks] Unclosed Anchor at end of file (started line 47)
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47 | +| frontend/src/lib/toasts.js | 🔴 0% | [toasts_module] Unclosed Anchor at end of file (started line 1)
[toasts_module] Unclosed Anchor: [DEF:toasts_module:Module] started at line 1
[toasts] Unclosed Anchor at end of file (started line 8)
[toasts] Unclosed Anchor: [DEF:toasts:Data] started at line 8
[toasts] Unclosed Anchor: [DEF:toasts:Data] started at line 8
[addToast] Unclosed Anchor at end of file (started line 12)
[addToast] Unclosed Anchor: [DEF:addToast:Function] started at line 12
[addToast] Unclosed Anchor: [DEF:addToast:Function] started at line 12
[addToast] Unclosed Anchor: [DEF:addToast:Function] started at line 12
[removeToast] Unclosed Anchor at end of file (started line 25)
[removeToast] Unclosed Anchor: [DEF:removeToast:Function] started at line 25
[removeToast] Unclosed Anchor: [DEF:removeToast:Function] started at line 25
[removeToast] Unclosed Anchor: [DEF:removeToast:Function] started at line 25
[removeToast] Unclosed Anchor: [DEF:removeToast:Function] started at line 25 | +| frontend/src/lib/api.js | 🔴 0% | [api_module] Unclosed Anchor at end of file (started line 1)
[api_module] Unclosed Anchor: [DEF:api_module:Module] started at line 1
[fetchApi] Unclosed Anchor at end of file (started line 26)
[fetchApi] Unclosed Anchor: [DEF:fetchApi:Function] started at line 26
[fetchApi] Unclosed Anchor: [DEF:fetchApi:Function] started at line 26
[postApi] Unclosed Anchor at end of file (started line 46)
[postApi] Unclosed Anchor: [DEF:postApi:Function] started at line 46
[postApi] Unclosed Anchor: [DEF:postApi:Function] started at line 46
[postApi] Unclosed Anchor: [DEF:postApi:Function] started at line 46
[requestApi] Unclosed Anchor at end of file (started line 73)
[requestApi] Unclosed Anchor: [DEF:requestApi:Function] started at line 73
[requestApi] Unclosed Anchor: [DEF:requestApi:Function] started at line 73
[requestApi] Unclosed Anchor: [DEF:requestApi:Function] started at line 73
[requestApi] Unclosed Anchor: [DEF:requestApi:Function] started at line 73
[api] Unclosed Anchor at end of file (started line 100)
[api] Unclosed Anchor: [DEF:api:Data] started at line 100
[api] Unclosed Anchor: [DEF:api:Data] started at line 100
[api] Unclosed Anchor: [DEF:api:Data] started at line 100
[api] Unclosed Anchor: [DEF:api:Data] started at line 100
[api] Unclosed Anchor: [DEF:api:Data] started at line 100 | +| frontend/src/routes/migration/+page.svelte | 🔴 0% | [MigrationDashboard] Unclosed Anchor at end of file (started line 1)
[MigrationDashboard] Unclosed Anchor: [DEF:MigrationDashboard:Component] started at line 1
[fetchEnvironments] Unclosed Anchor at end of file (started line 51)
[fetchEnvironments] Unclosed Anchor: [DEF:fetchEnvironments:Function] started at line 51
[fetchEnvironments] Unclosed Anchor: [DEF:fetchEnvironments:Function] started at line 51
[fetchDashboards] Unclosed Anchor at end of file (started line 69)
[fetchDashboards] Unclosed Anchor: [DEF:fetchDashboards:Function] started at line 69
[fetchDashboards] Unclosed Anchor: [DEF:fetchDashboards:Function] started at line 69
[fetchDashboards] Unclosed Anchor: [DEF:fetchDashboards:Function] started at line 69
[fetchDatabases] Unclosed Anchor at end of file (started line 93)
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 93
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 93
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 93
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 93
[handleMappingUpdate] Unclosed Anchor at end of file (started line 128)
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleViewLogs] Unclosed Anchor at end of file (started line 163)
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor at end of file (started line 172)
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[startMigration] Unclosed Anchor at end of file (started line 207)
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207 | +| frontend/src/routes/migration/mappings/+page.svelte | 🔴 0% | [MappingManagement] Unclosed Anchor at end of file (started line 1)
[MappingManagement] Unclosed Anchor: [DEF:MappingManagement:Component] started at line 1
[fetchDatabases] Unclosed Anchor at end of file (started line 47)
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 47
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 47
[handleUpdate] Unclosed Anchor at end of file (started line 83)
[handleUpdate] Unclosed Anchor: [DEF:handleUpdate:Function] started at line 83
[handleUpdate] Unclosed Anchor: [DEF:handleUpdate:Function] started at line 83
[handleUpdate] Unclosed Anchor: [DEF:handleUpdate:Function] started at line 83 | +| backend/src/services/mapping_service.py | 🔴 0% | [backend.src.services.mapping_service] Unclosed Anchor at end of file (started line 1)
[backend.src.services.mapping_service] Unclosed Anchor: [DEF:backend.src.services.mapping_service:Module] started at line 1
[MappingService] Unclosed Anchor at end of file (started line 18)
[MappingService] Unclosed Anchor: [DEF:MappingService:Class] started at line 18
[MappingService] Unclosed Anchor: [DEF:MappingService:Class] started at line 18
[MappingService.__init__] Unclosed Anchor at end of file (started line 22)
[MappingService.__init__] Unclosed Anchor: [DEF:MappingService.__init__:Function] started at line 22
[MappingService.__init__] Missing Mandatory Tag: @PURPOSE
[MappingService.__init__] Unclosed Anchor: [DEF:MappingService.__init__:Function] started at line 22
[MappingService.__init__] Missing Mandatory Tag: @PURPOSE
[MappingService.__init__] Unclosed Anchor: [DEF:MappingService.__init__:Function] started at line 22
[MappingService.__init__] Missing Mandatory Tag: @PURPOSE
[MappingService._get_client] Unclosed Anchor at end of file (started line 26)
[MappingService._get_client] Unclosed Anchor: [DEF:MappingService._get_client:Function] started at line 26
[MappingService._get_client] Unclosed Anchor: [DEF:MappingService._get_client:Function] started at line 26
[MappingService._get_client] Unclosed Anchor: [DEF:MappingService._get_client:Function] started at line 26
[MappingService._get_client] Unclosed Anchor: [DEF:MappingService._get_client:Function] started at line 26
[MappingService.get_suggestions] Unclosed Anchor at end of file (started line 46)
[MappingService.get_suggestions] Unclosed Anchor: [DEF:MappingService.get_suggestions:Function] started at line 46
[MappingService.get_suggestions] Unclosed Anchor: [DEF:MappingService.get_suggestions:Function] started at line 46
[MappingService.get_suggestions] Unclosed Anchor: [DEF:MappingService.get_suggestions:Function] started at line 46
[MappingService.get_suggestions] Unclosed Anchor: [DEF:MappingService.get_suggestions:Function] started at line 46
[MappingService.get_suggestions] Unclosed Anchor: [DEF:MappingService.get_suggestions:Function] started at line 46 | +| backend/src/core/superset_client.py | 🔴 0% | [backend.src.core.superset_client] Unclosed Anchor at end of file (started line 1)
[backend.src.core.superset_client] Unclosed Anchor: [DEF:backend.src.core.superset_client:Module] started at line 1
[SupersetClient] Unclosed Anchor at end of file (started line 16)
[SupersetClient] Unclosed Anchor: [DEF:SupersetClient:Class] started at line 16
[SupersetClient] Unclosed Anchor: [DEF:SupersetClient:Class] started at line 16
[SupersetClient.get_databases_summary] Unclosed Anchor at end of file (started line 20)
[SupersetClient.get_databases_summary] Unclosed Anchor: [DEF:SupersetClient.get_databases_summary:Function] started at line 20
[SupersetClient.get_databases_summary] Unclosed Anchor: [DEF:SupersetClient.get_databases_summary:Function] started at line 20
[SupersetClient.get_databases_summary] Unclosed Anchor: [DEF:SupersetClient.get_databases_summary:Function] started at line 20
[SupersetClient.get_database_by_uuid] Unclosed Anchor at end of file (started line 40)
[SupersetClient.get_database_by_uuid] Unclosed Anchor: [DEF:SupersetClient.get_database_by_uuid:Function] started at line 40
[SupersetClient.get_database_by_uuid] Unclosed Anchor: [DEF:SupersetClient.get_database_by_uuid:Function] started at line 40
[SupersetClient.get_database_by_uuid] Unclosed Anchor: [DEF:SupersetClient.get_database_by_uuid:Function] started at line 40
[SupersetClient.get_database_by_uuid] Unclosed Anchor: [DEF:SupersetClient.get_database_by_uuid:Function] started at line 40
[SupersetClient.get_dashboards_summary] Unclosed Anchor at end of file (started line 55)
[SupersetClient.get_dashboards_summary] Unclosed Anchor: [DEF:SupersetClient.get_dashboards_summary:Function] started at line 55
[SupersetClient.get_dashboards_summary] Unclosed Anchor: [DEF:SupersetClient.get_dashboards_summary:Function] started at line 55
[SupersetClient.get_dashboards_summary] Unclosed Anchor: [DEF:SupersetClient.get_dashboards_summary:Function] started at line 55
[SupersetClient.get_dashboards_summary] Unclosed Anchor: [DEF:SupersetClient.get_dashboards_summary:Function] started at line 55
[SupersetClient.get_dashboards_summary] Unclosed Anchor: [DEF:SupersetClient.get_dashboards_summary:Function] started at line 55 | +| backend/src/core/migration_engine.py | 🔴 0% | [backend.src.core.migration_engine] Unclosed Anchor at end of file (started line 1)
[backend.src.core.migration_engine] Unclosed Anchor: [DEF:backend.src.core.migration_engine:Module] started at line 1
[MigrationEngine] Unclosed Anchor at end of file (started line 22)
[MigrationEngine] Unclosed Anchor: [DEF:MigrationEngine:Class] started at line 22
[MigrationEngine] Unclosed Anchor: [DEF:MigrationEngine:Class] started at line 22
[MigrationEngine.transform_zip] Unclosed Anchor at end of file (started line 26)
[MigrationEngine.transform_zip] Unclosed Anchor: [DEF:MigrationEngine.transform_zip:Function] started at line 26
[MigrationEngine.transform_zip] Unclosed Anchor: [DEF:MigrationEngine.transform_zip:Function] started at line 26
[MigrationEngine.transform_zip] Unclosed Anchor: [DEF:MigrationEngine.transform_zip:Function] started at line 26
[MigrationEngine._transform_yaml] Unclosed Anchor at end of file (started line 77)
[MigrationEngine._transform_yaml] Unclosed Anchor: [DEF:MigrationEngine._transform_yaml:Function] started at line 77
[MigrationEngine._transform_yaml] Unclosed Anchor: [DEF:MigrationEngine._transform_yaml:Function] started at line 77
[MigrationEngine._transform_yaml] Unclosed Anchor: [DEF:MigrationEngine._transform_yaml:Function] started at line 77
[MigrationEngine._transform_yaml] Unclosed Anchor: [DEF:MigrationEngine._transform_yaml:Function] started at line 77 | +| backend/src/core/database.py | 🟡 60% | [backend.src.core.database] Unclosed Anchor at end of file (started line 1)
[backend.src.core.database] Unclosed Anchor: [DEF:backend.src.core.database:Module] started at line 1
[DATABASE_URL] Unclosed Anchor at end of file (started line 20)
[DATABASE_URL] Unclosed Anchor: [DEF:DATABASE_URL:Constant] started at line 20
[DATABASE_URL] Unclosed Anchor: [DEF:DATABASE_URL:Constant] started at line 20
[TASKS_DATABASE_URL] Unclosed Anchor at end of file (started line 24)
[TASKS_DATABASE_URL] Unclosed Anchor: [DEF:TASKS_DATABASE_URL:Constant] started at line 24
[TASKS_DATABASE_URL] Unclosed Anchor: [DEF:TASKS_DATABASE_URL:Constant] started at line 24
[TASKS_DATABASE_URL] Unclosed Anchor: [DEF:TASKS_DATABASE_URL:Constant] started at line 24
[engine] Unclosed Anchor at end of file (started line 28)
[engine] Unclosed Anchor: [DEF:engine:Variable] started at line 28
[engine] Unclosed Anchor: [DEF:engine:Variable] started at line 28
[engine] Unclosed Anchor: [DEF:engine:Variable] started at line 28
[engine] Unclosed Anchor: [DEF:engine:Variable] started at line 28 | +| generate_semantic_map.py | 🟢 100% | OK | +| search_script.py | 🟢 100% | OK | +| get_dataset_structure.py | 🟢 100% | OK | +| debug_db_api.py | 🟢 100% | OK | +| run_mapper.py | 🟢 100% | OK | +| migration_script.py | 🟢 100% | OK | +| backup_script.py | 🟢 100% | OK | +| superset_tool/exceptions.py | 🟢 100% | OK | +| superset_tool/__init__.py | 🟢 100% | OK | +| superset_tool/client.py | 🟢 100% | OK | +| superset_tool/models.py | 🟢 100% | OK | +| superset_tool/utils/logger.py | 🟢 100% | OK | +| superset_tool/utils/network.py | 🟢 100% | OK | +| superset_tool/utils/whiptail_fallback.py | 🟢 100% | OK | +| superset_tool/utils/dataset_mapper.py | 🟢 100% | OK | +| superset_tool/utils/__init__.py | 🟢 100% | OK | +| superset_tool/utils/init_clients.py | 🟢 100% | OK | +| superset_tool/utils/fileio.py | 🟢 100% | OK | +| backend/src/dependencies.py | 🟢 100% | OK | +| backend/src/app.py | 🟢 100% | OK | +| backend/src/models/mapping.py | 🟢 100% | OK | +| backend/src/models/dashboard.py | 🟢 100% | OK | +| backend/src/models/task.py | 🟢 100% | OK | +| backend/src/core/config_manager.py | 🟢 100% | OK | +| backend/src/core/logger.py | 🟢 100% | OK | +| backend/src/core/config_models.py | 🟢 100% | OK | +| backend/src/core/scheduler.py | 🟢 100% | OK | +| backend/src/core/plugin_loader.py | 🟢 100% | OK | +| backend/src/core/plugin_base.py | 🟢 100% | OK | +| backend/src/core/utils/matching.py | 🟢 100% | OK | +| backend/src/core/task_manager/manager.py | 🟢 100% | OK | +| backend/src/core/task_manager/__init__.py | 🟢 100% | OK | +| backend/src/core/task_manager/cleanup.py | 🟢 100% | OK | +| backend/src/core/task_manager/models.py | 🟢 100% | OK | +| backend/src/core/task_manager/persistence.py | 🟢 100% | OK | +| backend/src/plugins/backup.py | 🟢 100% | OK | +| backend/src/plugins/migration.py | 🟢 100% | OK | +| backend/src/api/auth.py | 🟢 100% | OK | +| backend/src/api/routes/settings.py | 🟢 100% | OK | +| backend/src/api/routes/tasks.py | 🟢 100% | OK | +| backend/src/api/routes/environments.py | 🟢 100% | OK | +| backend/src/api/routes/plugins.py | 🟢 100% | OK | +| backend/src/api/routes/migration.py | 🟢 100% | OK | +| backend/src/api/routes/mappings.py | 🟢 100% | OK | diff --git a/semantics/reports/semantic_report_20260101_164326.md b/semantics/reports/semantic_report_20260101_164326.md new file mode 100644 index 0000000..bc69826 --- /dev/null +++ b/semantics/reports/semantic_report_20260101_164326.md @@ -0,0 +1,81 @@ +# Semantic Compliance Report + +**Generated At:** 2026-01-01T16:43:26.440577 +**Global Compliance Score:** 65.7% +**Scanned Files:** 68 + +## Critical Parsing Errors +- 🔴 backend/src/core/database.py:77 Mismatched closing anchor. Expected [/DEF:TASKS_DATABASE_URL:Constant], found [/DEF:backend.src.core.database:Module]. +- 🔴 backend/src/plugins/migration.py:297 Mismatched closing anchor. Expected [/DEF:MigrationPlugin:Module], found [/DEF:MigrationPlugin:Class]. + +## File Compliance Status +| File | Score | Issues | +|------|-------|--------| +| frontend/src/App.svelte | 🔴 0% | [App] Unclosed Anchor at end of file (started line 1)
[App] Unclosed Anchor: [DEF:App:Component] started at line 1
[handleFormSubmit] Unclosed Anchor at end of file (started line 24)
[handleFormSubmit] Unclosed Anchor: [DEF:handleFormSubmit:Function] started at line 24
[handleFormSubmit] Unclosed Anchor: [DEF:handleFormSubmit:Function] started at line 24
[navigate] Unclosed Anchor at end of file (started line 44)
[navigate] Unclosed Anchor: [DEF:navigate:Function] started at line 44
[navigate] Unclosed Anchor: [DEF:navigate:Function] started at line 44
[navigate] Unclosed Anchor: [DEF:navigate:Function] started at line 44 | +| frontend/src/main.js | 🔴 0% | [main] Unclosed Anchor at end of file (started line 1)
[main] Unclosed Anchor: [DEF:main:Module] started at line 1
[app_instance] Unclosed Anchor at end of file (started line 9)
[app_instance] Unclosed Anchor: [DEF:app_instance:Data] started at line 9
[app_instance] Unclosed Anchor: [DEF:app_instance:Data] started at line 9 | +| frontend/src/components/DashboardGrid.svelte | 🔴 0% | [DashboardGrid] Unclosed Anchor at end of file (started line 1)
[DashboardGrid] Unclosed Anchor: [DEF:DashboardGrid:Component] started at line 1
[handleSort] Unclosed Anchor at end of file (started line 62)
[handleSort] Unclosed Anchor: [DEF:handleSort:Function] started at line 62
[handleSort] Unclosed Anchor: [DEF:handleSort:Function] started at line 62
[handleSelectionChange] Unclosed Anchor at end of file (started line 74)
[handleSelectionChange] Unclosed Anchor: [DEF:handleSelectionChange:Function] started at line 74
[handleSelectionChange] Unclosed Anchor: [DEF:handleSelectionChange:Function] started at line 74
[handleSelectionChange] Unclosed Anchor: [DEF:handleSelectionChange:Function] started at line 74
[handleSelectAll] Unclosed Anchor at end of file (started line 88)
[handleSelectAll] Unclosed Anchor: [DEF:handleSelectAll:Function] started at line 88
[handleSelectAll] Unclosed Anchor: [DEF:handleSelectAll:Function] started at line 88
[handleSelectAll] Unclosed Anchor: [DEF:handleSelectAll:Function] started at line 88
[handleSelectAll] Unclosed Anchor: [DEF:handleSelectAll:Function] started at line 88
[goToPage] Unclosed Anchor at end of file (started line 106)
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106 | +| frontend/src/components/TaskHistory.svelte | 🔴 0% | [TaskHistory] Unclosed Anchor at end of file (started line 1)
[TaskHistory] Unclosed Anchor: [DEF:TaskHistory:Component] started at line 1 | +| frontend/src/components/MappingTable.svelte | 🔴 0% | [MappingTable] Unclosed Anchor at end of file (started line 1)
[MappingTable] Unclosed Anchor: [DEF:MappingTable:Component] started at line 1
[updateMapping] Unclosed Anchor at end of file (started line 25)
[updateMapping] Unclosed Anchor: [DEF:updateMapping:Function] started at line 25
[updateMapping] Unclosed Anchor: [DEF:updateMapping:Function] started at line 25
[getSuggestion] Unclosed Anchor at end of file (started line 34)
[getSuggestion] Unclosed Anchor: [DEF:getSuggestion:Function] started at line 34
[getSuggestion] Unclosed Anchor: [DEF:getSuggestion:Function] started at line 34
[getSuggestion] Unclosed Anchor: [DEF:getSuggestion:Function] started at line 34 | +| frontend/src/components/EnvSelector.svelte | 🔴 0% | [EnvSelector] Unclosed Anchor at end of file (started line 1)
[EnvSelector] Unclosed Anchor: [DEF:EnvSelector:Component] started at line 1
[handleSelect] Unclosed Anchor at end of file (started line 24)
[handleSelect] Unclosed Anchor: [DEF:handleSelect:Function] started at line 24
[handleSelect] Unclosed Anchor: [DEF:handleSelect:Function] started at line 24 | +| frontend/src/components/TaskList.svelte | 🔴 0% | [TaskList] Unclosed Anchor at end of file (started line 1)
[TaskList] Unclosed Anchor: [DEF:TaskList:Component] started at line 1 | +| frontend/src/components/DynamicForm.svelte | 🔴 0% | [DynamicForm] Unclosed Anchor at end of file (started line 1)
[DynamicForm] Unclosed Anchor: [DEF:DynamicForm:Component] started at line 1
[handleSubmit] Unclosed Anchor at end of file (started line 23)
[handleSubmit] Unclosed Anchor: [DEF:handleSubmit:Function] started at line 23
[handleSubmit] Unclosed Anchor: [DEF:handleSubmit:Function] started at line 23
[initializeForm] Unclosed Anchor at end of file (started line 33)
[initializeForm] Unclosed Anchor: [DEF:initializeForm:Function] started at line 33
[initializeForm] Unclosed Anchor: [DEF:initializeForm:Function] started at line 33
[initializeForm] Unclosed Anchor: [DEF:initializeForm:Function] started at line 33 | +| frontend/src/components/TaskRunner.svelte | 🔴 0% | [TaskRunner] Unclosed Anchor at end of file (started line 1)
[TaskRunner] Unclosed Anchor: [DEF:TaskRunner:Component] started at line 1
[connect] Unclosed Anchor at end of file (started line 38)
[connect] Unclosed Anchor: [DEF:connect:Function] started at line 38
[connect] Unclosed Anchor: [DEF:connect:Function] started at line 38
[onMount] Unclosed Anchor at end of file (started line 225)
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 225
[onMount] Missing Mandatory Tag: @PURPOSE
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 225
[onMount] Missing Mandatory Tag: @PURPOSE
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 225
[onMount] Missing Mandatory Tag: @PURPOSE
[onDestroy] Unclosed Anchor at end of file (started line 251)
[onDestroy] Unclosed Anchor: [DEF:onDestroy:Function] started at line 251
[onDestroy] Unclosed Anchor: [DEF:onDestroy:Function] started at line 251
[onDestroy] Unclosed Anchor: [DEF:onDestroy:Function] started at line 251
[onDestroy] Unclosed Anchor: [DEF:onDestroy:Function] started at line 251 | +| frontend/src/components/TaskLogViewer.svelte | 🔴 0% | [TaskLogViewer] Unclosed Anchor at end of file (started line 1)
[TaskLogViewer] Unclosed Anchor: [DEF:TaskLogViewer:Component] started at line 1 | +| frontend/src/components/PasswordPrompt.svelte | 🔴 0% | [PasswordPrompt] Unclosed Anchor at end of file (started line 1)
[PasswordPrompt] Unclosed Anchor: [DEF:PasswordPrompt:Component] started at line 1 | +| frontend/src/components/MissingMappingModal.svelte | 🔴 0% | [MissingMappingModal] Unclosed Anchor at end of file (started line 1)
[MissingMappingModal] Unclosed Anchor: [DEF:MissingMappingModal:Component] started at line 1
[resolve] Unclosed Anchor at end of file (started line 26)
[resolve] Unclosed Anchor: [DEF:resolve:Function] started at line 26
[resolve] Missing Mandatory Tag: @PURPOSE
[resolve] Unclosed Anchor: [DEF:resolve:Function] started at line 26
[resolve] Missing Mandatory Tag: @PURPOSE
[cancel] Unclosed Anchor at end of file (started line 38)
[cancel] Unclosed Anchor: [DEF:cancel:Function] started at line 38
[cancel] Missing Mandatory Tag: @PURPOSE
[cancel] Unclosed Anchor: [DEF:cancel:Function] started at line 38
[cancel] Missing Mandatory Tag: @PURPOSE
[cancel] Unclosed Anchor: [DEF:cancel:Function] started at line 38
[cancel] Missing Mandatory Tag: @PURPOSE | +| frontend/src/components/Toast.svelte | 🔴 0% | [Toast] Unclosed Anchor at end of file (started line 1)
[Toast] Unclosed Anchor: [DEF:Toast:Component] started at line 1 | +| frontend/src/pages/Settings.svelte | 🔴 0% | [Settings] Unclosed Anchor at end of file (started line 1)
[Settings] Unclosed Anchor: [DEF:Settings:Component] started at line 1
[loadSettings] Unclosed Anchor at end of file (started line 50)
[loadSettings] Unclosed Anchor: [DEF:loadSettings:Function] started at line 50
[loadSettings] Unclosed Anchor: [DEF:loadSettings:Function] started at line 50
[handleSaveGlobal] Unclosed Anchor at end of file (started line 67)
[handleSaveGlobal] Unclosed Anchor: [DEF:handleSaveGlobal:Function] started at line 67
[handleSaveGlobal] Unclosed Anchor: [DEF:handleSaveGlobal:Function] started at line 67
[handleSaveGlobal] Unclosed Anchor: [DEF:handleSaveGlobal:Function] started at line 67
[handleAddOrUpdateEnv] Unclosed Anchor at end of file (started line 84)
[handleAddOrUpdateEnv] Unclosed Anchor: [DEF:handleAddOrUpdateEnv:Function] started at line 84
[handleAddOrUpdateEnv] Unclosed Anchor: [DEF:handleAddOrUpdateEnv:Function] started at line 84
[handleAddOrUpdateEnv] Unclosed Anchor: [DEF:handleAddOrUpdateEnv:Function] started at line 84
[handleAddOrUpdateEnv] Unclosed Anchor: [DEF:handleAddOrUpdateEnv:Function] started at line 84
[handleDeleteEnv] Unclosed Anchor at end of file (started line 108)
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleTestEnv] Unclosed Anchor at end of file (started line 129)
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[editEnv] Unclosed Anchor at end of file (started line 152)
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[resetEnvForm] Unclosed Anchor at end of file (started line 163)
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163 | +| frontend/src/pages/Dashboard.svelte | 🔴 0% | [Dashboard] Unclosed Anchor at end of file (started line 1)
[Dashboard] Unclosed Anchor: [DEF:Dashboard:Component] started at line 1
[onMount] Unclosed Anchor at end of file (started line 17)
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 17
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 17
[selectPlugin] Unclosed Anchor at end of file (started line 27)
[selectPlugin] Unclosed Anchor: [DEF:selectPlugin:Function] started at line 27
[selectPlugin] Unclosed Anchor: [DEF:selectPlugin:Function] started at line 27
[selectPlugin] Unclosed Anchor: [DEF:selectPlugin:Function] started at line 27 | +| frontend/src/lib/stores.js | 🔴 0% | [stores_module] Unclosed Anchor at end of file (started line 1)
[stores_module] Unclosed Anchor: [DEF:stores_module:Module] started at line 1
[plugins] Unclosed Anchor at end of file (started line 9)
[plugins] Unclosed Anchor: [DEF:plugins:Data] started at line 9
[plugins] Unclosed Anchor: [DEF:plugins:Data] started at line 9
[tasks] Unclosed Anchor at end of file (started line 13)
[tasks] Unclosed Anchor: [DEF:tasks:Data] started at line 13
[tasks] Unclosed Anchor: [DEF:tasks:Data] started at line 13
[tasks] Unclosed Anchor: [DEF:tasks:Data] started at line 13
[selectedPlugin] Unclosed Anchor at end of file (started line 17)
[selectedPlugin] Unclosed Anchor: [DEF:selectedPlugin:Data] started at line 17
[selectedPlugin] Unclosed Anchor: [DEF:selectedPlugin:Data] started at line 17
[selectedPlugin] Unclosed Anchor: [DEF:selectedPlugin:Data] started at line 17
[selectedPlugin] Unclosed Anchor: [DEF:selectedPlugin:Data] started at line 17
[selectedTask] Unclosed Anchor at end of file (started line 21)
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[currentPage] Unclosed Anchor at end of file (started line 25)
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[taskLogs] Unclosed Anchor at end of file (started line 29)
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[fetchPlugins] Unclosed Anchor at end of file (started line 33)
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchTasks] Unclosed Anchor at end of file (started line 47)
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47 | +| frontend/src/lib/toasts.js | 🔴 0% | [toasts_module] Unclosed Anchor at end of file (started line 1)
[toasts_module] Unclosed Anchor: [DEF:toasts_module:Module] started at line 1
[toasts] Unclosed Anchor at end of file (started line 8)
[toasts] Unclosed Anchor: [DEF:toasts:Data] started at line 8
[toasts] Unclosed Anchor: [DEF:toasts:Data] started at line 8
[addToast] Unclosed Anchor at end of file (started line 12)
[addToast] Unclosed Anchor: [DEF:addToast:Function] started at line 12
[addToast] Unclosed Anchor: [DEF:addToast:Function] started at line 12
[addToast] Unclosed Anchor: [DEF:addToast:Function] started at line 12
[removeToast] Unclosed Anchor at end of file (started line 25)
[removeToast] Unclosed Anchor: [DEF:removeToast:Function] started at line 25
[removeToast] Unclosed Anchor: [DEF:removeToast:Function] started at line 25
[removeToast] Unclosed Anchor: [DEF:removeToast:Function] started at line 25
[removeToast] Unclosed Anchor: [DEF:removeToast:Function] started at line 25 | +| frontend/src/lib/api.js | 🔴 0% | [api_module] Unclosed Anchor at end of file (started line 1)
[api_module] Unclosed Anchor: [DEF:api_module:Module] started at line 1
[fetchApi] Unclosed Anchor at end of file (started line 26)
[fetchApi] Unclosed Anchor: [DEF:fetchApi:Function] started at line 26
[fetchApi] Unclosed Anchor: [DEF:fetchApi:Function] started at line 26
[postApi] Unclosed Anchor at end of file (started line 46)
[postApi] Unclosed Anchor: [DEF:postApi:Function] started at line 46
[postApi] Unclosed Anchor: [DEF:postApi:Function] started at line 46
[postApi] Unclosed Anchor: [DEF:postApi:Function] started at line 46
[requestApi] Unclosed Anchor at end of file (started line 73)
[requestApi] Unclosed Anchor: [DEF:requestApi:Function] started at line 73
[requestApi] Unclosed Anchor: [DEF:requestApi:Function] started at line 73
[requestApi] Unclosed Anchor: [DEF:requestApi:Function] started at line 73
[requestApi] Unclosed Anchor: [DEF:requestApi:Function] started at line 73
[api] Unclosed Anchor at end of file (started line 100)
[api] Unclosed Anchor: [DEF:api:Data] started at line 100
[api] Unclosed Anchor: [DEF:api:Data] started at line 100
[api] Unclosed Anchor: [DEF:api:Data] started at line 100
[api] Unclosed Anchor: [DEF:api:Data] started at line 100
[api] Unclosed Anchor: [DEF:api:Data] started at line 100 | +| frontend/src/routes/migration/+page.svelte | 🔴 0% | [MigrationDashboard] Unclosed Anchor at end of file (started line 1)
[MigrationDashboard] Unclosed Anchor: [DEF:MigrationDashboard:Component] started at line 1
[fetchEnvironments] Unclosed Anchor at end of file (started line 51)
[fetchEnvironments] Unclosed Anchor: [DEF:fetchEnvironments:Function] started at line 51
[fetchEnvironments] Unclosed Anchor: [DEF:fetchEnvironments:Function] started at line 51
[fetchDashboards] Unclosed Anchor at end of file (started line 69)
[fetchDashboards] Unclosed Anchor: [DEF:fetchDashboards:Function] started at line 69
[fetchDashboards] Unclosed Anchor: [DEF:fetchDashboards:Function] started at line 69
[fetchDashboards] Unclosed Anchor: [DEF:fetchDashboards:Function] started at line 69
[fetchDatabases] Unclosed Anchor at end of file (started line 93)
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 93
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 93
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 93
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 93
[handleMappingUpdate] Unclosed Anchor at end of file (started line 128)
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleViewLogs] Unclosed Anchor at end of file (started line 163)
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor at end of file (started line 172)
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[startMigration] Unclosed Anchor at end of file (started line 207)
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207 | +| frontend/src/routes/migration/mappings/+page.svelte | 🔴 0% | [MappingManagement] Unclosed Anchor at end of file (started line 1)
[MappingManagement] Unclosed Anchor: [DEF:MappingManagement:Component] started at line 1
[fetchDatabases] Unclosed Anchor at end of file (started line 47)
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 47
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 47
[handleUpdate] Unclosed Anchor at end of file (started line 83)
[handleUpdate] Unclosed Anchor: [DEF:handleUpdate:Function] started at line 83
[handleUpdate] Unclosed Anchor: [DEF:handleUpdate:Function] started at line 83
[handleUpdate] Unclosed Anchor: [DEF:handleUpdate:Function] started at line 83 | +| backend/src/services/mapping_service.py | 🔴 0% | [backend.src.services.mapping_service] Unclosed Anchor at end of file (started line 1)
[backend.src.services.mapping_service] Unclosed Anchor: [DEF:backend.src.services.mapping_service:Module] started at line 1
[MappingService] Unclosed Anchor at end of file (started line 18)
[MappingService] Unclosed Anchor: [DEF:MappingService:Class] started at line 18
[MappingService] Unclosed Anchor: [DEF:MappingService:Class] started at line 18
[MappingService.__init__] Unclosed Anchor at end of file (started line 22)
[MappingService.__init__] Unclosed Anchor: [DEF:MappingService.__init__:Function] started at line 22
[MappingService.__init__] Missing Mandatory Tag: @PURPOSE
[MappingService.__init__] Unclosed Anchor: [DEF:MappingService.__init__:Function] started at line 22
[MappingService.__init__] Missing Mandatory Tag: @PURPOSE
[MappingService.__init__] Unclosed Anchor: [DEF:MappingService.__init__:Function] started at line 22
[MappingService.__init__] Missing Mandatory Tag: @PURPOSE
[MappingService._get_client] Unclosed Anchor at end of file (started line 26)
[MappingService._get_client] Unclosed Anchor: [DEF:MappingService._get_client:Function] started at line 26
[MappingService._get_client] Unclosed Anchor: [DEF:MappingService._get_client:Function] started at line 26
[MappingService._get_client] Unclosed Anchor: [DEF:MappingService._get_client:Function] started at line 26
[MappingService._get_client] Unclosed Anchor: [DEF:MappingService._get_client:Function] started at line 26
[MappingService.get_suggestions] Unclosed Anchor at end of file (started line 46)
[MappingService.get_suggestions] Unclosed Anchor: [DEF:MappingService.get_suggestions:Function] started at line 46
[MappingService.get_suggestions] Unclosed Anchor: [DEF:MappingService.get_suggestions:Function] started at line 46
[MappingService.get_suggestions] Unclosed Anchor: [DEF:MappingService.get_suggestions:Function] started at line 46
[MappingService.get_suggestions] Unclosed Anchor: [DEF:MappingService.get_suggestions:Function] started at line 46
[MappingService.get_suggestions] Unclosed Anchor: [DEF:MappingService.get_suggestions:Function] started at line 46 | +| backend/src/core/superset_client.py | 🔴 0% | [backend.src.core.superset_client] Unclosed Anchor at end of file (started line 1)
[backend.src.core.superset_client] Unclosed Anchor: [DEF:backend.src.core.superset_client:Module] started at line 1
[SupersetClient] Unclosed Anchor at end of file (started line 16)
[SupersetClient] Unclosed Anchor: [DEF:SupersetClient:Class] started at line 16
[SupersetClient] Unclosed Anchor: [DEF:SupersetClient:Class] started at line 16
[SupersetClient.get_databases_summary] Unclosed Anchor at end of file (started line 20)
[SupersetClient.get_databases_summary] Unclosed Anchor: [DEF:SupersetClient.get_databases_summary:Function] started at line 20
[SupersetClient.get_databases_summary] Unclosed Anchor: [DEF:SupersetClient.get_databases_summary:Function] started at line 20
[SupersetClient.get_databases_summary] Unclosed Anchor: [DEF:SupersetClient.get_databases_summary:Function] started at line 20
[SupersetClient.get_database_by_uuid] Unclosed Anchor at end of file (started line 40)
[SupersetClient.get_database_by_uuid] Unclosed Anchor: [DEF:SupersetClient.get_database_by_uuid:Function] started at line 40
[SupersetClient.get_database_by_uuid] Unclosed Anchor: [DEF:SupersetClient.get_database_by_uuid:Function] started at line 40
[SupersetClient.get_database_by_uuid] Unclosed Anchor: [DEF:SupersetClient.get_database_by_uuid:Function] started at line 40
[SupersetClient.get_database_by_uuid] Unclosed Anchor: [DEF:SupersetClient.get_database_by_uuid:Function] started at line 40
[SupersetClient.get_dashboards_summary] Unclosed Anchor at end of file (started line 55)
[SupersetClient.get_dashboards_summary] Unclosed Anchor: [DEF:SupersetClient.get_dashboards_summary:Function] started at line 55
[SupersetClient.get_dashboards_summary] Unclosed Anchor: [DEF:SupersetClient.get_dashboards_summary:Function] started at line 55
[SupersetClient.get_dashboards_summary] Unclosed Anchor: [DEF:SupersetClient.get_dashboards_summary:Function] started at line 55
[SupersetClient.get_dashboards_summary] Unclosed Anchor: [DEF:SupersetClient.get_dashboards_summary:Function] started at line 55
[SupersetClient.get_dashboards_summary] Unclosed Anchor: [DEF:SupersetClient.get_dashboards_summary:Function] started at line 55 | +| backend/src/core/migration_engine.py | 🔴 0% | [backend.src.core.migration_engine] Unclosed Anchor at end of file (started line 1)
[backend.src.core.migration_engine] Unclosed Anchor: [DEF:backend.src.core.migration_engine:Module] started at line 1
[MigrationEngine] Unclosed Anchor at end of file (started line 22)
[MigrationEngine] Unclosed Anchor: [DEF:MigrationEngine:Class] started at line 22
[MigrationEngine] Unclosed Anchor: [DEF:MigrationEngine:Class] started at line 22
[MigrationEngine.transform_zip] Unclosed Anchor at end of file (started line 26)
[MigrationEngine.transform_zip] Unclosed Anchor: [DEF:MigrationEngine.transform_zip:Function] started at line 26
[MigrationEngine.transform_zip] Unclosed Anchor: [DEF:MigrationEngine.transform_zip:Function] started at line 26
[MigrationEngine.transform_zip] Unclosed Anchor: [DEF:MigrationEngine.transform_zip:Function] started at line 26
[MigrationEngine._transform_yaml] Unclosed Anchor at end of file (started line 77)
[MigrationEngine._transform_yaml] Unclosed Anchor: [DEF:MigrationEngine._transform_yaml:Function] started at line 77
[MigrationEngine._transform_yaml] Unclosed Anchor: [DEF:MigrationEngine._transform_yaml:Function] started at line 77
[MigrationEngine._transform_yaml] Unclosed Anchor: [DEF:MigrationEngine._transform_yaml:Function] started at line 77
[MigrationEngine._transform_yaml] Unclosed Anchor: [DEF:MigrationEngine._transform_yaml:Function] started at line 77 | +| backend/src/core/database.py | 🟡 70% | [backend.src.core.database] Unclosed Anchor at end of file (started line 1)
[backend.src.core.database] Unclosed Anchor: [DEF:backend.src.core.database:Module] started at line 1
[DATABASE_URL] Unclosed Anchor at end of file (started line 20)
[DATABASE_URL] Unclosed Anchor: [DEF:DATABASE_URL:Constant] started at line 20
[DATABASE_URL] Unclosed Anchor: [DEF:DATABASE_URL:Constant] started at line 20
[TASKS_DATABASE_URL] Unclosed Anchor at end of file (started line 24)
[TASKS_DATABASE_URL] Unclosed Anchor: [DEF:TASKS_DATABASE_URL:Constant] started at line 24
[TASKS_DATABASE_URL] Unclosed Anchor: [DEF:TASKS_DATABASE_URL:Constant] started at line 24
[TASKS_DATABASE_URL] Unclosed Anchor: [DEF:TASKS_DATABASE_URL:Constant] started at line 24 | +| generate_semantic_map.py | 🟢 100% | OK | +| search_script.py | 🟢 100% | OK | +| get_dataset_structure.py | 🟢 100% | OK | +| debug_db_api.py | 🟢 100% | OK | +| run_mapper.py | 🟢 100% | OK | +| migration_script.py | 🟢 100% | OK | +| backup_script.py | 🟢 100% | OK | +| superset_tool/exceptions.py | 🟢 100% | OK | +| superset_tool/__init__.py | 🟢 100% | OK | +| superset_tool/client.py | 🟢 100% | OK | +| superset_tool/models.py | 🟢 100% | OK | +| superset_tool/utils/logger.py | 🟢 100% | OK | +| superset_tool/utils/network.py | 🟢 100% | OK | +| superset_tool/utils/whiptail_fallback.py | 🟢 100% | OK | +| superset_tool/utils/dataset_mapper.py | 🟢 100% | OK | +| superset_tool/utils/__init__.py | 🟢 100% | OK | +| superset_tool/utils/init_clients.py | 🟢 100% | OK | +| superset_tool/utils/fileio.py | 🟢 100% | OK | +| backend/src/dependencies.py | 🟢 100% | OK | +| backend/src/app.py | 🟢 100% | OK | +| backend/src/models/mapping.py | 🟢 100% | OK | +| backend/src/models/dashboard.py | 🟢 100% | OK | +| backend/src/models/task.py | 🟢 100% | OK | +| backend/src/core/config_manager.py | 🟢 100% | OK | +| backend/src/core/logger.py | 🟢 100% | OK | +| backend/src/core/config_models.py | 🟢 100% | OK | +| backend/src/core/scheduler.py | 🟢 100% | OK | +| backend/src/core/plugin_loader.py | 🟢 100% | OK | +| backend/src/core/plugin_base.py | 🟢 100% | OK | +| backend/src/core/utils/matching.py | 🟢 100% | OK | +| backend/src/core/task_manager/manager.py | 🟢 100% | OK | +| backend/src/core/task_manager/__init__.py | 🟢 100% | OK | +| backend/src/core/task_manager/cleanup.py | 🟢 100% | OK | +| backend/src/core/task_manager/models.py | 🟢 100% | OK | +| backend/src/core/task_manager/persistence.py | 🟢 100% | OK | +| backend/src/plugins/backup.py | 🟢 100% | OK | +| backend/src/plugins/migration.py | 🟢 100% | OK | +| backend/src/api/auth.py | 🟢 100% | OK | +| backend/src/api/routes/settings.py | 🟢 100% | OK | +| backend/src/api/routes/tasks.py | 🟢 100% | OK | +| backend/src/api/routes/environments.py | 🟢 100% | OK | +| backend/src/api/routes/plugins.py | 🟢 100% | OK | +| backend/src/api/routes/migration.py | 🟢 100% | OK | +| backend/src/api/routes/mappings.py | 🟢 100% | OK | diff --git a/semantics/reports/semantic_report_20260101_164454.md b/semantics/reports/semantic_report_20260101_164454.md new file mode 100644 index 0000000..bc498be --- /dev/null +++ b/semantics/reports/semantic_report_20260101_164454.md @@ -0,0 +1,77 @@ +# Semantic Compliance Report + +**Generated At:** 2026-01-01T16:44:54.688193 +**Global Compliance Score:** 66.2% +**Scanned Files:** 68 + +## File Compliance Status +| File | Score | Issues | +|------|-------|--------| +| frontend/src/App.svelte | 🔴 0% | [App] Unclosed Anchor at end of file (started line 1)
[App] Unclosed Anchor: [DEF:App:Component] started at line 1
[handleFormSubmit] Unclosed Anchor at end of file (started line 24)
[handleFormSubmit] Unclosed Anchor: [DEF:handleFormSubmit:Function] started at line 24
[handleFormSubmit] Unclosed Anchor: [DEF:handleFormSubmit:Function] started at line 24
[navigate] Unclosed Anchor at end of file (started line 44)
[navigate] Unclosed Anchor: [DEF:navigate:Function] started at line 44
[navigate] Unclosed Anchor: [DEF:navigate:Function] started at line 44
[navigate] Unclosed Anchor: [DEF:navigate:Function] started at line 44 | +| frontend/src/main.js | 🔴 0% | [main] Unclosed Anchor at end of file (started line 1)
[main] Unclosed Anchor: [DEF:main:Module] started at line 1
[app_instance] Unclosed Anchor at end of file (started line 9)
[app_instance] Unclosed Anchor: [DEF:app_instance:Data] started at line 9
[app_instance] Unclosed Anchor: [DEF:app_instance:Data] started at line 9 | +| frontend/src/components/DashboardGrid.svelte | 🔴 0% | [DashboardGrid] Unclosed Anchor at end of file (started line 1)
[DashboardGrid] Unclosed Anchor: [DEF:DashboardGrid:Component] started at line 1
[handleSort] Unclosed Anchor at end of file (started line 62)
[handleSort] Unclosed Anchor: [DEF:handleSort:Function] started at line 62
[handleSort] Unclosed Anchor: [DEF:handleSort:Function] started at line 62
[handleSelectionChange] Unclosed Anchor at end of file (started line 74)
[handleSelectionChange] Unclosed Anchor: [DEF:handleSelectionChange:Function] started at line 74
[handleSelectionChange] Unclosed Anchor: [DEF:handleSelectionChange:Function] started at line 74
[handleSelectionChange] Unclosed Anchor: [DEF:handleSelectionChange:Function] started at line 74
[handleSelectAll] Unclosed Anchor at end of file (started line 88)
[handleSelectAll] Unclosed Anchor: [DEF:handleSelectAll:Function] started at line 88
[handleSelectAll] Unclosed Anchor: [DEF:handleSelectAll:Function] started at line 88
[handleSelectAll] Unclosed Anchor: [DEF:handleSelectAll:Function] started at line 88
[handleSelectAll] Unclosed Anchor: [DEF:handleSelectAll:Function] started at line 88
[goToPage] Unclosed Anchor at end of file (started line 106)
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106 | +| frontend/src/components/TaskHistory.svelte | 🔴 0% | [TaskHistory] Unclosed Anchor at end of file (started line 1)
[TaskHistory] Unclosed Anchor: [DEF:TaskHistory:Component] started at line 1 | +| frontend/src/components/MappingTable.svelte | 🔴 0% | [MappingTable] Unclosed Anchor at end of file (started line 1)
[MappingTable] Unclosed Anchor: [DEF:MappingTable:Component] started at line 1
[updateMapping] Unclosed Anchor at end of file (started line 25)
[updateMapping] Unclosed Anchor: [DEF:updateMapping:Function] started at line 25
[updateMapping] Unclosed Anchor: [DEF:updateMapping:Function] started at line 25
[getSuggestion] Unclosed Anchor at end of file (started line 34)
[getSuggestion] Unclosed Anchor: [DEF:getSuggestion:Function] started at line 34
[getSuggestion] Unclosed Anchor: [DEF:getSuggestion:Function] started at line 34
[getSuggestion] Unclosed Anchor: [DEF:getSuggestion:Function] started at line 34 | +| frontend/src/components/EnvSelector.svelte | 🔴 0% | [EnvSelector] Unclosed Anchor at end of file (started line 1)
[EnvSelector] Unclosed Anchor: [DEF:EnvSelector:Component] started at line 1
[handleSelect] Unclosed Anchor at end of file (started line 24)
[handleSelect] Unclosed Anchor: [DEF:handleSelect:Function] started at line 24
[handleSelect] Unclosed Anchor: [DEF:handleSelect:Function] started at line 24 | +| frontend/src/components/TaskList.svelte | 🔴 0% | [TaskList] Unclosed Anchor at end of file (started line 1)
[TaskList] Unclosed Anchor: [DEF:TaskList:Component] started at line 1 | +| frontend/src/components/DynamicForm.svelte | 🔴 0% | [DynamicForm] Unclosed Anchor at end of file (started line 1)
[DynamicForm] Unclosed Anchor: [DEF:DynamicForm:Component] started at line 1
[handleSubmit] Unclosed Anchor at end of file (started line 23)
[handleSubmit] Unclosed Anchor: [DEF:handleSubmit:Function] started at line 23
[handleSubmit] Unclosed Anchor: [DEF:handleSubmit:Function] started at line 23
[initializeForm] Unclosed Anchor at end of file (started line 33)
[initializeForm] Unclosed Anchor: [DEF:initializeForm:Function] started at line 33
[initializeForm] Unclosed Anchor: [DEF:initializeForm:Function] started at line 33
[initializeForm] Unclosed Anchor: [DEF:initializeForm:Function] started at line 33 | +| frontend/src/components/TaskRunner.svelte | 🔴 0% | [TaskRunner] Unclosed Anchor at end of file (started line 1)
[TaskRunner] Unclosed Anchor: [DEF:TaskRunner:Component] started at line 1
[connect] Unclosed Anchor at end of file (started line 38)
[connect] Unclosed Anchor: [DEF:connect:Function] started at line 38
[connect] Unclosed Anchor: [DEF:connect:Function] started at line 38
[onMount] Unclosed Anchor at end of file (started line 225)
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 225
[onMount] Missing Mandatory Tag: @PURPOSE
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 225
[onMount] Missing Mandatory Tag: @PURPOSE
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 225
[onMount] Missing Mandatory Tag: @PURPOSE
[onDestroy] Unclosed Anchor at end of file (started line 251)
[onDestroy] Unclosed Anchor: [DEF:onDestroy:Function] started at line 251
[onDestroy] Unclosed Anchor: [DEF:onDestroy:Function] started at line 251
[onDestroy] Unclosed Anchor: [DEF:onDestroy:Function] started at line 251
[onDestroy] Unclosed Anchor: [DEF:onDestroy:Function] started at line 251 | +| frontend/src/components/TaskLogViewer.svelte | 🔴 0% | [TaskLogViewer] Unclosed Anchor at end of file (started line 1)
[TaskLogViewer] Unclosed Anchor: [DEF:TaskLogViewer:Component] started at line 1 | +| frontend/src/components/PasswordPrompt.svelte | 🔴 0% | [PasswordPrompt] Unclosed Anchor at end of file (started line 1)
[PasswordPrompt] Unclosed Anchor: [DEF:PasswordPrompt:Component] started at line 1 | +| frontend/src/components/MissingMappingModal.svelte | 🔴 0% | [MissingMappingModal] Unclosed Anchor at end of file (started line 1)
[MissingMappingModal] Unclosed Anchor: [DEF:MissingMappingModal:Component] started at line 1
[resolve] Unclosed Anchor at end of file (started line 26)
[resolve] Unclosed Anchor: [DEF:resolve:Function] started at line 26
[resolve] Missing Mandatory Tag: @PURPOSE
[resolve] Unclosed Anchor: [DEF:resolve:Function] started at line 26
[resolve] Missing Mandatory Tag: @PURPOSE
[cancel] Unclosed Anchor at end of file (started line 38)
[cancel] Unclosed Anchor: [DEF:cancel:Function] started at line 38
[cancel] Missing Mandatory Tag: @PURPOSE
[cancel] Unclosed Anchor: [DEF:cancel:Function] started at line 38
[cancel] Missing Mandatory Tag: @PURPOSE
[cancel] Unclosed Anchor: [DEF:cancel:Function] started at line 38
[cancel] Missing Mandatory Tag: @PURPOSE | +| frontend/src/components/Toast.svelte | 🔴 0% | [Toast] Unclosed Anchor at end of file (started line 1)
[Toast] Unclosed Anchor: [DEF:Toast:Component] started at line 1 | +| frontend/src/pages/Settings.svelte | 🔴 0% | [Settings] Unclosed Anchor at end of file (started line 1)
[Settings] Unclosed Anchor: [DEF:Settings:Component] started at line 1
[loadSettings] Unclosed Anchor at end of file (started line 50)
[loadSettings] Unclosed Anchor: [DEF:loadSettings:Function] started at line 50
[loadSettings] Unclosed Anchor: [DEF:loadSettings:Function] started at line 50
[handleSaveGlobal] Unclosed Anchor at end of file (started line 67)
[handleSaveGlobal] Unclosed Anchor: [DEF:handleSaveGlobal:Function] started at line 67
[handleSaveGlobal] Unclosed Anchor: [DEF:handleSaveGlobal:Function] started at line 67
[handleSaveGlobal] Unclosed Anchor: [DEF:handleSaveGlobal:Function] started at line 67
[handleAddOrUpdateEnv] Unclosed Anchor at end of file (started line 84)
[handleAddOrUpdateEnv] Unclosed Anchor: [DEF:handleAddOrUpdateEnv:Function] started at line 84
[handleAddOrUpdateEnv] Unclosed Anchor: [DEF:handleAddOrUpdateEnv:Function] started at line 84
[handleAddOrUpdateEnv] Unclosed Anchor: [DEF:handleAddOrUpdateEnv:Function] started at line 84
[handleAddOrUpdateEnv] Unclosed Anchor: [DEF:handleAddOrUpdateEnv:Function] started at line 84
[handleDeleteEnv] Unclosed Anchor at end of file (started line 108)
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleTestEnv] Unclosed Anchor at end of file (started line 129)
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[editEnv] Unclosed Anchor at end of file (started line 152)
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[resetEnvForm] Unclosed Anchor at end of file (started line 163)
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163 | +| frontend/src/pages/Dashboard.svelte | 🔴 0% | [Dashboard] Unclosed Anchor at end of file (started line 1)
[Dashboard] Unclosed Anchor: [DEF:Dashboard:Component] started at line 1
[onMount] Unclosed Anchor at end of file (started line 17)
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 17
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 17
[selectPlugin] Unclosed Anchor at end of file (started line 27)
[selectPlugin] Unclosed Anchor: [DEF:selectPlugin:Function] started at line 27
[selectPlugin] Unclosed Anchor: [DEF:selectPlugin:Function] started at line 27
[selectPlugin] Unclosed Anchor: [DEF:selectPlugin:Function] started at line 27 | +| frontend/src/lib/stores.js | 🔴 0% | [stores_module] Unclosed Anchor at end of file (started line 1)
[stores_module] Unclosed Anchor: [DEF:stores_module:Module] started at line 1
[plugins] Unclosed Anchor at end of file (started line 9)
[plugins] Unclosed Anchor: [DEF:plugins:Data] started at line 9
[plugins] Unclosed Anchor: [DEF:plugins:Data] started at line 9
[tasks] Unclosed Anchor at end of file (started line 13)
[tasks] Unclosed Anchor: [DEF:tasks:Data] started at line 13
[tasks] Unclosed Anchor: [DEF:tasks:Data] started at line 13
[tasks] Unclosed Anchor: [DEF:tasks:Data] started at line 13
[selectedPlugin] Unclosed Anchor at end of file (started line 17)
[selectedPlugin] Unclosed Anchor: [DEF:selectedPlugin:Data] started at line 17
[selectedPlugin] Unclosed Anchor: [DEF:selectedPlugin:Data] started at line 17
[selectedPlugin] Unclosed Anchor: [DEF:selectedPlugin:Data] started at line 17
[selectedPlugin] Unclosed Anchor: [DEF:selectedPlugin:Data] started at line 17
[selectedTask] Unclosed Anchor at end of file (started line 21)
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[currentPage] Unclosed Anchor at end of file (started line 25)
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[taskLogs] Unclosed Anchor at end of file (started line 29)
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[fetchPlugins] Unclosed Anchor at end of file (started line 33)
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchTasks] Unclosed Anchor at end of file (started line 47)
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47 | +| frontend/src/lib/toasts.js | 🔴 0% | [toasts_module] Unclosed Anchor at end of file (started line 1)
[toasts_module] Unclosed Anchor: [DEF:toasts_module:Module] started at line 1
[toasts] Unclosed Anchor at end of file (started line 8)
[toasts] Unclosed Anchor: [DEF:toasts:Data] started at line 8
[toasts] Unclosed Anchor: [DEF:toasts:Data] started at line 8
[addToast] Unclosed Anchor at end of file (started line 12)
[addToast] Unclosed Anchor: [DEF:addToast:Function] started at line 12
[addToast] Unclosed Anchor: [DEF:addToast:Function] started at line 12
[addToast] Unclosed Anchor: [DEF:addToast:Function] started at line 12
[removeToast] Unclosed Anchor at end of file (started line 25)
[removeToast] Unclosed Anchor: [DEF:removeToast:Function] started at line 25
[removeToast] Unclosed Anchor: [DEF:removeToast:Function] started at line 25
[removeToast] Unclosed Anchor: [DEF:removeToast:Function] started at line 25
[removeToast] Unclosed Anchor: [DEF:removeToast:Function] started at line 25 | +| frontend/src/lib/api.js | 🔴 0% | [api_module] Unclosed Anchor at end of file (started line 1)
[api_module] Unclosed Anchor: [DEF:api_module:Module] started at line 1
[fetchApi] Unclosed Anchor at end of file (started line 26)
[fetchApi] Unclosed Anchor: [DEF:fetchApi:Function] started at line 26
[fetchApi] Unclosed Anchor: [DEF:fetchApi:Function] started at line 26
[postApi] Unclosed Anchor at end of file (started line 46)
[postApi] Unclosed Anchor: [DEF:postApi:Function] started at line 46
[postApi] Unclosed Anchor: [DEF:postApi:Function] started at line 46
[postApi] Unclosed Anchor: [DEF:postApi:Function] started at line 46
[requestApi] Unclosed Anchor at end of file (started line 73)
[requestApi] Unclosed Anchor: [DEF:requestApi:Function] started at line 73
[requestApi] Unclosed Anchor: [DEF:requestApi:Function] started at line 73
[requestApi] Unclosed Anchor: [DEF:requestApi:Function] started at line 73
[requestApi] Unclosed Anchor: [DEF:requestApi:Function] started at line 73
[api] Unclosed Anchor at end of file (started line 100)
[api] Unclosed Anchor: [DEF:api:Data] started at line 100
[api] Unclosed Anchor: [DEF:api:Data] started at line 100
[api] Unclosed Anchor: [DEF:api:Data] started at line 100
[api] Unclosed Anchor: [DEF:api:Data] started at line 100
[api] Unclosed Anchor: [DEF:api:Data] started at line 100 | +| frontend/src/routes/migration/+page.svelte | 🔴 0% | [MigrationDashboard] Unclosed Anchor at end of file (started line 1)
[MigrationDashboard] Unclosed Anchor: [DEF:MigrationDashboard:Component] started at line 1
[fetchEnvironments] Unclosed Anchor at end of file (started line 51)
[fetchEnvironments] Unclosed Anchor: [DEF:fetchEnvironments:Function] started at line 51
[fetchEnvironments] Unclosed Anchor: [DEF:fetchEnvironments:Function] started at line 51
[fetchDashboards] Unclosed Anchor at end of file (started line 69)
[fetchDashboards] Unclosed Anchor: [DEF:fetchDashboards:Function] started at line 69
[fetchDashboards] Unclosed Anchor: [DEF:fetchDashboards:Function] started at line 69
[fetchDashboards] Unclosed Anchor: [DEF:fetchDashboards:Function] started at line 69
[fetchDatabases] Unclosed Anchor at end of file (started line 93)
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 93
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 93
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 93
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 93
[handleMappingUpdate] Unclosed Anchor at end of file (started line 128)
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleViewLogs] Unclosed Anchor at end of file (started line 163)
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor at end of file (started line 172)
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[startMigration] Unclosed Anchor at end of file (started line 207)
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207 | +| frontend/src/routes/migration/mappings/+page.svelte | 🔴 0% | [MappingManagement] Unclosed Anchor at end of file (started line 1)
[MappingManagement] Unclosed Anchor: [DEF:MappingManagement:Component] started at line 1
[fetchDatabases] Unclosed Anchor at end of file (started line 47)
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 47
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 47
[handleUpdate] Unclosed Anchor at end of file (started line 83)
[handleUpdate] Unclosed Anchor: [DEF:handleUpdate:Function] started at line 83
[handleUpdate] Unclosed Anchor: [DEF:handleUpdate:Function] started at line 83
[handleUpdate] Unclosed Anchor: [DEF:handleUpdate:Function] started at line 83 | +| backend/src/services/mapping_service.py | 🔴 0% | [backend.src.services.mapping_service] Unclosed Anchor at end of file (started line 1)
[backend.src.services.mapping_service] Unclosed Anchor: [DEF:backend.src.services.mapping_service:Module] started at line 1
[MappingService] Unclosed Anchor at end of file (started line 18)
[MappingService] Unclosed Anchor: [DEF:MappingService:Class] started at line 18
[MappingService] Unclosed Anchor: [DEF:MappingService:Class] started at line 18
[MappingService.__init__] Unclosed Anchor at end of file (started line 22)
[MappingService.__init__] Unclosed Anchor: [DEF:MappingService.__init__:Function] started at line 22
[MappingService.__init__] Missing Mandatory Tag: @PURPOSE
[MappingService.__init__] Unclosed Anchor: [DEF:MappingService.__init__:Function] started at line 22
[MappingService.__init__] Missing Mandatory Tag: @PURPOSE
[MappingService.__init__] Unclosed Anchor: [DEF:MappingService.__init__:Function] started at line 22
[MappingService.__init__] Missing Mandatory Tag: @PURPOSE
[MappingService._get_client] Unclosed Anchor at end of file (started line 26)
[MappingService._get_client] Unclosed Anchor: [DEF:MappingService._get_client:Function] started at line 26
[MappingService._get_client] Unclosed Anchor: [DEF:MappingService._get_client:Function] started at line 26
[MappingService._get_client] Unclosed Anchor: [DEF:MappingService._get_client:Function] started at line 26
[MappingService._get_client] Unclosed Anchor: [DEF:MappingService._get_client:Function] started at line 26
[MappingService.get_suggestions] Unclosed Anchor at end of file (started line 46)
[MappingService.get_suggestions] Unclosed Anchor: [DEF:MappingService.get_suggestions:Function] started at line 46
[MappingService.get_suggestions] Unclosed Anchor: [DEF:MappingService.get_suggestions:Function] started at line 46
[MappingService.get_suggestions] Unclosed Anchor: [DEF:MappingService.get_suggestions:Function] started at line 46
[MappingService.get_suggestions] Unclosed Anchor: [DEF:MappingService.get_suggestions:Function] started at line 46
[MappingService.get_suggestions] Unclosed Anchor: [DEF:MappingService.get_suggestions:Function] started at line 46 | +| backend/src/core/superset_client.py | 🔴 0% | [backend.src.core.superset_client] Unclosed Anchor at end of file (started line 1)
[backend.src.core.superset_client] Unclosed Anchor: [DEF:backend.src.core.superset_client:Module] started at line 1
[SupersetClient] Unclosed Anchor at end of file (started line 16)
[SupersetClient] Unclosed Anchor: [DEF:SupersetClient:Class] started at line 16
[SupersetClient] Unclosed Anchor: [DEF:SupersetClient:Class] started at line 16
[SupersetClient.get_databases_summary] Unclosed Anchor at end of file (started line 20)
[SupersetClient.get_databases_summary] Unclosed Anchor: [DEF:SupersetClient.get_databases_summary:Function] started at line 20
[SupersetClient.get_databases_summary] Unclosed Anchor: [DEF:SupersetClient.get_databases_summary:Function] started at line 20
[SupersetClient.get_databases_summary] Unclosed Anchor: [DEF:SupersetClient.get_databases_summary:Function] started at line 20
[SupersetClient.get_database_by_uuid] Unclosed Anchor at end of file (started line 40)
[SupersetClient.get_database_by_uuid] Unclosed Anchor: [DEF:SupersetClient.get_database_by_uuid:Function] started at line 40
[SupersetClient.get_database_by_uuid] Unclosed Anchor: [DEF:SupersetClient.get_database_by_uuid:Function] started at line 40
[SupersetClient.get_database_by_uuid] Unclosed Anchor: [DEF:SupersetClient.get_database_by_uuid:Function] started at line 40
[SupersetClient.get_database_by_uuid] Unclosed Anchor: [DEF:SupersetClient.get_database_by_uuid:Function] started at line 40
[SupersetClient.get_dashboards_summary] Unclosed Anchor at end of file (started line 55)
[SupersetClient.get_dashboards_summary] Unclosed Anchor: [DEF:SupersetClient.get_dashboards_summary:Function] started at line 55
[SupersetClient.get_dashboards_summary] Unclosed Anchor: [DEF:SupersetClient.get_dashboards_summary:Function] started at line 55
[SupersetClient.get_dashboards_summary] Unclosed Anchor: [DEF:SupersetClient.get_dashboards_summary:Function] started at line 55
[SupersetClient.get_dashboards_summary] Unclosed Anchor: [DEF:SupersetClient.get_dashboards_summary:Function] started at line 55
[SupersetClient.get_dashboards_summary] Unclosed Anchor: [DEF:SupersetClient.get_dashboards_summary:Function] started at line 55 | +| backend/src/core/migration_engine.py | 🔴 0% | [backend.src.core.migration_engine] Unclosed Anchor at end of file (started line 1)
[backend.src.core.migration_engine] Unclosed Anchor: [DEF:backend.src.core.migration_engine:Module] started at line 1
[MigrationEngine] Unclosed Anchor at end of file (started line 22)
[MigrationEngine] Unclosed Anchor: [DEF:MigrationEngine:Class] started at line 22
[MigrationEngine] Unclosed Anchor: [DEF:MigrationEngine:Class] started at line 22
[MigrationEngine.transform_zip] Unclosed Anchor at end of file (started line 26)
[MigrationEngine.transform_zip] Unclosed Anchor: [DEF:MigrationEngine.transform_zip:Function] started at line 26
[MigrationEngine.transform_zip] Unclosed Anchor: [DEF:MigrationEngine.transform_zip:Function] started at line 26
[MigrationEngine.transform_zip] Unclosed Anchor: [DEF:MigrationEngine.transform_zip:Function] started at line 26
[MigrationEngine._transform_yaml] Unclosed Anchor at end of file (started line 77)
[MigrationEngine._transform_yaml] Unclosed Anchor: [DEF:MigrationEngine._transform_yaml:Function] started at line 77
[MigrationEngine._transform_yaml] Unclosed Anchor: [DEF:MigrationEngine._transform_yaml:Function] started at line 77
[MigrationEngine._transform_yaml] Unclosed Anchor: [DEF:MigrationEngine._transform_yaml:Function] started at line 77
[MigrationEngine._transform_yaml] Unclosed Anchor: [DEF:MigrationEngine._transform_yaml:Function] started at line 77 | +| generate_semantic_map.py | 🟢 100% | OK | +| search_script.py | 🟢 100% | OK | +| get_dataset_structure.py | 🟢 100% | OK | +| debug_db_api.py | 🟢 100% | OK | +| run_mapper.py | 🟢 100% | OK | +| migration_script.py | 🟢 100% | OK | +| backup_script.py | 🟢 100% | OK | +| superset_tool/exceptions.py | 🟢 100% | OK | +| superset_tool/__init__.py | 🟢 100% | OK | +| superset_tool/client.py | 🟢 100% | OK | +| superset_tool/models.py | 🟢 100% | OK | +| superset_tool/utils/logger.py | 🟢 100% | OK | +| superset_tool/utils/network.py | 🟢 100% | OK | +| superset_tool/utils/whiptail_fallback.py | 🟢 100% | OK | +| superset_tool/utils/dataset_mapper.py | 🟢 100% | OK | +| superset_tool/utils/__init__.py | 🟢 100% | OK | +| superset_tool/utils/init_clients.py | 🟢 100% | OK | +| superset_tool/utils/fileio.py | 🟢 100% | OK | +| backend/src/dependencies.py | 🟢 100% | OK | +| backend/src/app.py | 🟢 100% | OK | +| backend/src/models/mapping.py | 🟢 100% | OK | +| backend/src/models/dashboard.py | 🟢 100% | OK | +| backend/src/models/task.py | 🟢 100% | OK | +| backend/src/core/config_manager.py | 🟢 100% | OK | +| backend/src/core/logger.py | 🟢 100% | OK | +| backend/src/core/database.py | 🟢 100% | OK | +| backend/src/core/config_models.py | 🟢 100% | OK | +| backend/src/core/scheduler.py | 🟢 100% | OK | +| backend/src/core/plugin_loader.py | 🟢 100% | OK | +| backend/src/core/plugin_base.py | 🟢 100% | OK | +| backend/src/core/utils/matching.py | 🟢 100% | OK | +| backend/src/core/task_manager/manager.py | 🟢 100% | OK | +| backend/src/core/task_manager/__init__.py | 🟢 100% | OK | +| backend/src/core/task_manager/cleanup.py | 🟢 100% | OK | +| backend/src/core/task_manager/models.py | 🟢 100% | OK | +| backend/src/core/task_manager/persistence.py | 🟢 100% | OK | +| backend/src/plugins/backup.py | 🟢 100% | OK | +| backend/src/plugins/migration.py | 🟢 100% | OK | +| backend/src/api/auth.py | 🟢 100% | OK | +| backend/src/api/routes/settings.py | 🟢 100% | OK | +| backend/src/api/routes/tasks.py | 🟢 100% | OK | +| backend/src/api/routes/environments.py | 🟢 100% | OK | +| backend/src/api/routes/plugins.py | 🟢 100% | OK | +| backend/src/api/routes/migration.py | 🟢 100% | OK | +| backend/src/api/routes/mappings.py | 🟢 100% | OK | diff --git a/semantics/reports/semantic_report_20260101_164708.md b/semantics/reports/semantic_report_20260101_164708.md new file mode 100644 index 0000000..b4d9e30 --- /dev/null +++ b/semantics/reports/semantic_report_20260101_164708.md @@ -0,0 +1,77 @@ +# Semantic Compliance Report + +**Generated At:** 2026-01-01T16:47:08.171792 +**Global Compliance Score:** 70.6% +**Scanned Files:** 68 + +## File Compliance Status +| File | Score | Issues | +|------|-------|--------| +| frontend/src/App.svelte | 🔴 0% | [App] Unclosed Anchor at end of file (started line 1)
[App] Unclosed Anchor: [DEF:App:Component] started at line 1
[handleFormSubmit] Unclosed Anchor at end of file (started line 24)
[handleFormSubmit] Unclosed Anchor: [DEF:handleFormSubmit:Function] started at line 24
[handleFormSubmit] Unclosed Anchor: [DEF:handleFormSubmit:Function] started at line 24
[navigate] Unclosed Anchor at end of file (started line 44)
[navigate] Unclosed Anchor: [DEF:navigate:Function] started at line 44
[navigate] Unclosed Anchor: [DEF:navigate:Function] started at line 44
[navigate] Unclosed Anchor: [DEF:navigate:Function] started at line 44 | +| frontend/src/main.js | 🔴 0% | [main] Unclosed Anchor at end of file (started line 1)
[main] Unclosed Anchor: [DEF:main:Module] started at line 1
[app_instance] Unclosed Anchor at end of file (started line 9)
[app_instance] Unclosed Anchor: [DEF:app_instance:Data] started at line 9
[app_instance] Unclosed Anchor: [DEF:app_instance:Data] started at line 9 | +| frontend/src/components/DashboardGrid.svelte | 🔴 0% | [DashboardGrid] Unclosed Anchor at end of file (started line 1)
[DashboardGrid] Unclosed Anchor: [DEF:DashboardGrid:Component] started at line 1
[handleSort] Unclosed Anchor at end of file (started line 62)
[handleSort] Unclosed Anchor: [DEF:handleSort:Function] started at line 62
[handleSort] Unclosed Anchor: [DEF:handleSort:Function] started at line 62
[handleSelectionChange] Unclosed Anchor at end of file (started line 74)
[handleSelectionChange] Unclosed Anchor: [DEF:handleSelectionChange:Function] started at line 74
[handleSelectionChange] Unclosed Anchor: [DEF:handleSelectionChange:Function] started at line 74
[handleSelectionChange] Unclosed Anchor: [DEF:handleSelectionChange:Function] started at line 74
[handleSelectAll] Unclosed Anchor at end of file (started line 88)
[handleSelectAll] Unclosed Anchor: [DEF:handleSelectAll:Function] started at line 88
[handleSelectAll] Unclosed Anchor: [DEF:handleSelectAll:Function] started at line 88
[handleSelectAll] Unclosed Anchor: [DEF:handleSelectAll:Function] started at line 88
[handleSelectAll] Unclosed Anchor: [DEF:handleSelectAll:Function] started at line 88
[goToPage] Unclosed Anchor at end of file (started line 106)
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106
[goToPage] Unclosed Anchor: [DEF:goToPage:Function] started at line 106 | +| frontend/src/components/TaskHistory.svelte | 🔴 0% | [TaskHistory] Unclosed Anchor at end of file (started line 1)
[TaskHistory] Unclosed Anchor: [DEF:TaskHistory:Component] started at line 1 | +| frontend/src/components/MappingTable.svelte | 🔴 0% | [MappingTable] Unclosed Anchor at end of file (started line 1)
[MappingTable] Unclosed Anchor: [DEF:MappingTable:Component] started at line 1
[updateMapping] Unclosed Anchor at end of file (started line 25)
[updateMapping] Unclosed Anchor: [DEF:updateMapping:Function] started at line 25
[updateMapping] Unclosed Anchor: [DEF:updateMapping:Function] started at line 25
[getSuggestion] Unclosed Anchor at end of file (started line 34)
[getSuggestion] Unclosed Anchor: [DEF:getSuggestion:Function] started at line 34
[getSuggestion] Unclosed Anchor: [DEF:getSuggestion:Function] started at line 34
[getSuggestion] Unclosed Anchor: [DEF:getSuggestion:Function] started at line 34 | +| frontend/src/components/EnvSelector.svelte | 🔴 0% | [EnvSelector] Unclosed Anchor at end of file (started line 1)
[EnvSelector] Unclosed Anchor: [DEF:EnvSelector:Component] started at line 1
[handleSelect] Unclosed Anchor at end of file (started line 24)
[handleSelect] Unclosed Anchor: [DEF:handleSelect:Function] started at line 24
[handleSelect] Unclosed Anchor: [DEF:handleSelect:Function] started at line 24 | +| frontend/src/components/TaskList.svelte | 🔴 0% | [TaskList] Unclosed Anchor at end of file (started line 1)
[TaskList] Unclosed Anchor: [DEF:TaskList:Component] started at line 1 | +| frontend/src/components/DynamicForm.svelte | 🔴 0% | [DynamicForm] Unclosed Anchor at end of file (started line 1)
[DynamicForm] Unclosed Anchor: [DEF:DynamicForm:Component] started at line 1
[handleSubmit] Unclosed Anchor at end of file (started line 23)
[handleSubmit] Unclosed Anchor: [DEF:handleSubmit:Function] started at line 23
[handleSubmit] Unclosed Anchor: [DEF:handleSubmit:Function] started at line 23
[initializeForm] Unclosed Anchor at end of file (started line 33)
[initializeForm] Unclosed Anchor: [DEF:initializeForm:Function] started at line 33
[initializeForm] Unclosed Anchor: [DEF:initializeForm:Function] started at line 33
[initializeForm] Unclosed Anchor: [DEF:initializeForm:Function] started at line 33 | +| frontend/src/components/TaskRunner.svelte | 🔴 0% | [TaskRunner] Unclosed Anchor at end of file (started line 1)
[TaskRunner] Unclosed Anchor: [DEF:TaskRunner:Component] started at line 1
[connect] Unclosed Anchor at end of file (started line 38)
[connect] Unclosed Anchor: [DEF:connect:Function] started at line 38
[connect] Unclosed Anchor: [DEF:connect:Function] started at line 38
[onMount] Unclosed Anchor at end of file (started line 225)
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 225
[onMount] Missing Mandatory Tag: @PURPOSE
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 225
[onMount] Missing Mandatory Tag: @PURPOSE
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 225
[onMount] Missing Mandatory Tag: @PURPOSE
[onDestroy] Unclosed Anchor at end of file (started line 251)
[onDestroy] Unclosed Anchor: [DEF:onDestroy:Function] started at line 251
[onDestroy] Unclosed Anchor: [DEF:onDestroy:Function] started at line 251
[onDestroy] Unclosed Anchor: [DEF:onDestroy:Function] started at line 251
[onDestroy] Unclosed Anchor: [DEF:onDestroy:Function] started at line 251 | +| frontend/src/components/TaskLogViewer.svelte | 🔴 0% | [TaskLogViewer] Unclosed Anchor at end of file (started line 1)
[TaskLogViewer] Unclosed Anchor: [DEF:TaskLogViewer:Component] started at line 1 | +| frontend/src/components/PasswordPrompt.svelte | 🔴 0% | [PasswordPrompt] Unclosed Anchor at end of file (started line 1)
[PasswordPrompt] Unclosed Anchor: [DEF:PasswordPrompt:Component] started at line 1 | +| frontend/src/components/MissingMappingModal.svelte | 🔴 0% | [MissingMappingModal] Unclosed Anchor at end of file (started line 1)
[MissingMappingModal] Unclosed Anchor: [DEF:MissingMappingModal:Component] started at line 1
[resolve] Unclosed Anchor at end of file (started line 26)
[resolve] Unclosed Anchor: [DEF:resolve:Function] started at line 26
[resolve] Missing Mandatory Tag: @PURPOSE
[resolve] Unclosed Anchor: [DEF:resolve:Function] started at line 26
[resolve] Missing Mandatory Tag: @PURPOSE
[cancel] Unclosed Anchor at end of file (started line 38)
[cancel] Unclosed Anchor: [DEF:cancel:Function] started at line 38
[cancel] Missing Mandatory Tag: @PURPOSE
[cancel] Unclosed Anchor: [DEF:cancel:Function] started at line 38
[cancel] Missing Mandatory Tag: @PURPOSE
[cancel] Unclosed Anchor: [DEF:cancel:Function] started at line 38
[cancel] Missing Mandatory Tag: @PURPOSE | +| frontend/src/components/Toast.svelte | 🔴 0% | [Toast] Unclosed Anchor at end of file (started line 1)
[Toast] Unclosed Anchor: [DEF:Toast:Component] started at line 1 | +| frontend/src/pages/Settings.svelte | 🔴 0% | [Settings] Unclosed Anchor at end of file (started line 1)
[Settings] Unclosed Anchor: [DEF:Settings:Component] started at line 1
[loadSettings] Unclosed Anchor at end of file (started line 50)
[loadSettings] Unclosed Anchor: [DEF:loadSettings:Function] started at line 50
[loadSettings] Unclosed Anchor: [DEF:loadSettings:Function] started at line 50
[handleSaveGlobal] Unclosed Anchor at end of file (started line 67)
[handleSaveGlobal] Unclosed Anchor: [DEF:handleSaveGlobal:Function] started at line 67
[handleSaveGlobal] Unclosed Anchor: [DEF:handleSaveGlobal:Function] started at line 67
[handleSaveGlobal] Unclosed Anchor: [DEF:handleSaveGlobal:Function] started at line 67
[handleAddOrUpdateEnv] Unclosed Anchor at end of file (started line 84)
[handleAddOrUpdateEnv] Unclosed Anchor: [DEF:handleAddOrUpdateEnv:Function] started at line 84
[handleAddOrUpdateEnv] Unclosed Anchor: [DEF:handleAddOrUpdateEnv:Function] started at line 84
[handleAddOrUpdateEnv] Unclosed Anchor: [DEF:handleAddOrUpdateEnv:Function] started at line 84
[handleAddOrUpdateEnv] Unclosed Anchor: [DEF:handleAddOrUpdateEnv:Function] started at line 84
[handleDeleteEnv] Unclosed Anchor at end of file (started line 108)
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleDeleteEnv] Unclosed Anchor: [DEF:handleDeleteEnv:Function] started at line 108
[handleTestEnv] Unclosed Anchor at end of file (started line 129)
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[handleTestEnv] Unclosed Anchor: [DEF:handleTestEnv:Function] started at line 129
[editEnv] Unclosed Anchor at end of file (started line 152)
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[editEnv] Unclosed Anchor: [DEF:editEnv:Function] started at line 152
[resetEnvForm] Unclosed Anchor at end of file (started line 163)
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163
[resetEnvForm] Unclosed Anchor: [DEF:resetEnvForm:Function] started at line 163 | +| frontend/src/pages/Dashboard.svelte | 🔴 0% | [Dashboard] Unclosed Anchor at end of file (started line 1)
[Dashboard] Unclosed Anchor: [DEF:Dashboard:Component] started at line 1
[onMount] Unclosed Anchor at end of file (started line 17)
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 17
[onMount] Unclosed Anchor: [DEF:onMount:Function] started at line 17
[selectPlugin] Unclosed Anchor at end of file (started line 27)
[selectPlugin] Unclosed Anchor: [DEF:selectPlugin:Function] started at line 27
[selectPlugin] Unclosed Anchor: [DEF:selectPlugin:Function] started at line 27
[selectPlugin] Unclosed Anchor: [DEF:selectPlugin:Function] started at line 27 | +| frontend/src/lib/stores.js | 🔴 0% | [stores_module] Unclosed Anchor at end of file (started line 1)
[stores_module] Unclosed Anchor: [DEF:stores_module:Module] started at line 1
[plugins] Unclosed Anchor at end of file (started line 9)
[plugins] Unclosed Anchor: [DEF:plugins:Data] started at line 9
[plugins] Unclosed Anchor: [DEF:plugins:Data] started at line 9
[tasks] Unclosed Anchor at end of file (started line 13)
[tasks] Unclosed Anchor: [DEF:tasks:Data] started at line 13
[tasks] Unclosed Anchor: [DEF:tasks:Data] started at line 13
[tasks] Unclosed Anchor: [DEF:tasks:Data] started at line 13
[selectedPlugin] Unclosed Anchor at end of file (started line 17)
[selectedPlugin] Unclosed Anchor: [DEF:selectedPlugin:Data] started at line 17
[selectedPlugin] Unclosed Anchor: [DEF:selectedPlugin:Data] started at line 17
[selectedPlugin] Unclosed Anchor: [DEF:selectedPlugin:Data] started at line 17
[selectedPlugin] Unclosed Anchor: [DEF:selectedPlugin:Data] started at line 17
[selectedTask] Unclosed Anchor at end of file (started line 21)
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[selectedTask] Unclosed Anchor: [DEF:selectedTask:Data] started at line 21
[currentPage] Unclosed Anchor at end of file (started line 25)
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[currentPage] Unclosed Anchor: [DEF:currentPage:Data] started at line 25
[taskLogs] Unclosed Anchor at end of file (started line 29)
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[taskLogs] Unclosed Anchor: [DEF:taskLogs:Data] started at line 29
[fetchPlugins] Unclosed Anchor at end of file (started line 33)
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchPlugins] Unclosed Anchor: [DEF:fetchPlugins:Function] started at line 33
[fetchTasks] Unclosed Anchor at end of file (started line 47)
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47
[fetchTasks] Unclosed Anchor: [DEF:fetchTasks:Function] started at line 47 | +| frontend/src/lib/toasts.js | 🔴 0% | [toasts_module] Unclosed Anchor at end of file (started line 1)
[toasts_module] Unclosed Anchor: [DEF:toasts_module:Module] started at line 1
[toasts] Unclosed Anchor at end of file (started line 8)
[toasts] Unclosed Anchor: [DEF:toasts:Data] started at line 8
[toasts] Unclosed Anchor: [DEF:toasts:Data] started at line 8
[addToast] Unclosed Anchor at end of file (started line 12)
[addToast] Unclosed Anchor: [DEF:addToast:Function] started at line 12
[addToast] Unclosed Anchor: [DEF:addToast:Function] started at line 12
[addToast] Unclosed Anchor: [DEF:addToast:Function] started at line 12
[removeToast] Unclosed Anchor at end of file (started line 25)
[removeToast] Unclosed Anchor: [DEF:removeToast:Function] started at line 25
[removeToast] Unclosed Anchor: [DEF:removeToast:Function] started at line 25
[removeToast] Unclosed Anchor: [DEF:removeToast:Function] started at line 25
[removeToast] Unclosed Anchor: [DEF:removeToast:Function] started at line 25 | +| frontend/src/lib/api.js | 🔴 0% | [api_module] Unclosed Anchor at end of file (started line 1)
[api_module] Unclosed Anchor: [DEF:api_module:Module] started at line 1
[fetchApi] Unclosed Anchor at end of file (started line 26)
[fetchApi] Unclosed Anchor: [DEF:fetchApi:Function] started at line 26
[fetchApi] Unclosed Anchor: [DEF:fetchApi:Function] started at line 26
[postApi] Unclosed Anchor at end of file (started line 46)
[postApi] Unclosed Anchor: [DEF:postApi:Function] started at line 46
[postApi] Unclosed Anchor: [DEF:postApi:Function] started at line 46
[postApi] Unclosed Anchor: [DEF:postApi:Function] started at line 46
[requestApi] Unclosed Anchor at end of file (started line 73)
[requestApi] Unclosed Anchor: [DEF:requestApi:Function] started at line 73
[requestApi] Unclosed Anchor: [DEF:requestApi:Function] started at line 73
[requestApi] Unclosed Anchor: [DEF:requestApi:Function] started at line 73
[requestApi] Unclosed Anchor: [DEF:requestApi:Function] started at line 73
[api] Unclosed Anchor at end of file (started line 100)
[api] Unclosed Anchor: [DEF:api:Data] started at line 100
[api] Unclosed Anchor: [DEF:api:Data] started at line 100
[api] Unclosed Anchor: [DEF:api:Data] started at line 100
[api] Unclosed Anchor: [DEF:api:Data] started at line 100
[api] Unclosed Anchor: [DEF:api:Data] started at line 100 | +| frontend/src/routes/migration/+page.svelte | 🔴 0% | [MigrationDashboard] Unclosed Anchor at end of file (started line 1)
[MigrationDashboard] Unclosed Anchor: [DEF:MigrationDashboard:Component] started at line 1
[fetchEnvironments] Unclosed Anchor at end of file (started line 51)
[fetchEnvironments] Unclosed Anchor: [DEF:fetchEnvironments:Function] started at line 51
[fetchEnvironments] Unclosed Anchor: [DEF:fetchEnvironments:Function] started at line 51
[fetchDashboards] Unclosed Anchor at end of file (started line 69)
[fetchDashboards] Unclosed Anchor: [DEF:fetchDashboards:Function] started at line 69
[fetchDashboards] Unclosed Anchor: [DEF:fetchDashboards:Function] started at line 69
[fetchDashboards] Unclosed Anchor: [DEF:fetchDashboards:Function] started at line 69
[fetchDatabases] Unclosed Anchor at end of file (started line 93)
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 93
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 93
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 93
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 93
[handleMappingUpdate] Unclosed Anchor at end of file (started line 128)
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleMappingUpdate] Unclosed Anchor: [DEF:handleMappingUpdate:Function] started at line 128
[handleViewLogs] Unclosed Anchor at end of file (started line 163)
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handleViewLogs] Unclosed Anchor: [DEF:handleViewLogs:Function] started at line 163
[handleViewLogs] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor at end of file (started line 172)
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[handlePasswordPrompt] Unclosed Anchor: [DEF:handlePasswordPrompt:Function] started at line 172
[handlePasswordPrompt] Missing Mandatory Tag: @PURPOSE
[startMigration] Unclosed Anchor at end of file (started line 207)
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207
[startMigration] Unclosed Anchor: [DEF:startMigration:Function] started at line 207 | +| frontend/src/routes/migration/mappings/+page.svelte | 🔴 0% | [MappingManagement] Unclosed Anchor at end of file (started line 1)
[MappingManagement] Unclosed Anchor: [DEF:MappingManagement:Component] started at line 1
[fetchDatabases] Unclosed Anchor at end of file (started line 47)
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 47
[fetchDatabases] Unclosed Anchor: [DEF:fetchDatabases:Function] started at line 47
[handleUpdate] Unclosed Anchor at end of file (started line 83)
[handleUpdate] Unclosed Anchor: [DEF:handleUpdate:Function] started at line 83
[handleUpdate] Unclosed Anchor: [DEF:handleUpdate:Function] started at line 83
[handleUpdate] Unclosed Anchor: [DEF:handleUpdate:Function] started at line 83 | +| generate_semantic_map.py | 🟢 100% | OK | +| search_script.py | 🟢 100% | OK | +| get_dataset_structure.py | 🟢 100% | OK | +| debug_db_api.py | 🟢 100% | OK | +| run_mapper.py | 🟢 100% | OK | +| migration_script.py | 🟢 100% | OK | +| backup_script.py | 🟢 100% | OK | +| superset_tool/exceptions.py | 🟢 100% | OK | +| superset_tool/__init__.py | 🟢 100% | OK | +| superset_tool/client.py | 🟢 100% | OK | +| superset_tool/models.py | 🟢 100% | OK | +| superset_tool/utils/logger.py | 🟢 100% | OK | +| superset_tool/utils/network.py | 🟢 100% | OK | +| superset_tool/utils/whiptail_fallback.py | 🟢 100% | OK | +| superset_tool/utils/dataset_mapper.py | 🟢 100% | OK | +| superset_tool/utils/__init__.py | 🟢 100% | OK | +| superset_tool/utils/init_clients.py | 🟢 100% | OK | +| superset_tool/utils/fileio.py | 🟢 100% | OK | +| backend/src/dependencies.py | 🟢 100% | OK | +| backend/src/app.py | 🟢 100% | OK | +| backend/src/models/mapping.py | 🟢 100% | OK | +| backend/src/models/dashboard.py | 🟢 100% | OK | +| backend/src/models/task.py | 🟢 100% | OK | +| backend/src/services/mapping_service.py | 🟢 100% | OK | +| backend/src/core/config_manager.py | 🟢 100% | OK | +| backend/src/core/superset_client.py | 🟢 100% | OK | +| backend/src/core/migration_engine.py | 🟢 100% | OK | +| backend/src/core/logger.py | 🟢 100% | OK | +| backend/src/core/database.py | 🟢 100% | OK | +| backend/src/core/config_models.py | 🟢 100% | OK | +| backend/src/core/scheduler.py | 🟢 100% | OK | +| backend/src/core/plugin_loader.py | 🟢 100% | OK | +| backend/src/core/plugin_base.py | 🟢 100% | OK | +| backend/src/core/utils/matching.py | 🟢 100% | OK | +| backend/src/core/task_manager/manager.py | 🟢 100% | OK | +| backend/src/core/task_manager/__init__.py | 🟢 100% | OK | +| backend/src/core/task_manager/cleanup.py | 🟢 100% | OK | +| backend/src/core/task_manager/models.py | 🟢 100% | OK | +| backend/src/core/task_manager/persistence.py | 🟢 100% | OK | +| backend/src/plugins/backup.py | 🟢 100% | OK | +| backend/src/plugins/migration.py | 🟢 100% | OK | +| backend/src/api/auth.py | 🟢 100% | OK | +| backend/src/api/routes/settings.py | 🟢 100% | OK | +| backend/src/api/routes/tasks.py | 🟢 100% | OK | +| backend/src/api/routes/environments.py | 🟢 100% | OK | +| backend/src/api/routes/plugins.py | 🟢 100% | OK | +| backend/src/api/routes/migration.py | 🟢 100% | OK | +| backend/src/api/routes/mappings.py | 🟢 100% | OK | diff --git a/semantics/reports/semantic_report_20260101_165607.md b/semantics/reports/semantic_report_20260101_165607.md new file mode 100644 index 0000000..7a8fd01 --- /dev/null +++ b/semantics/reports/semantic_report_20260101_165607.md @@ -0,0 +1,79 @@ +# Semantic Compliance Report + +**Generated At:** 2026-01-01T16:56:07.582450 +**Global Compliance Score:** 99.5% +**Scanned Files:** 70 + +## File Compliance Status +| File | Score | Issues | +|------|-------|--------| +| frontend/src/lib/toasts.js | 🟡 75% | [toasts_module] Unclosed Anchor at end of file (started line 1)
[toasts_module] Unclosed Anchor: [DEF:toasts_module:Module] started at line 1 | +| frontend/src/lib/stores.js | 🟡 89% | [stores_module] Unclosed Anchor at end of file (started line 1)
[stores_module] Unclosed Anchor: [DEF:stores_module:Module] started at line 1 | +| generate_semantic_map.py | 🟢 100% | OK | +| search_script.py | 🟢 100% | OK | +| get_dataset_structure.py | 🟢 100% | OK | +| debug_db_api.py | 🟢 100% | OK | +| run_mapper.py | 🟢 100% | OK | +| migration_script.py | 🟢 100% | OK | +| backup_script.py | 🟢 100% | OK | +| superset_tool/exceptions.py | 🟢 100% | OK | +| superset_tool/__init__.py | 🟢 100% | OK | +| superset_tool/client.py | 🟢 100% | OK | +| superset_tool/models.py | 🟢 100% | OK | +| superset_tool/utils/logger.py | 🟢 100% | OK | +| superset_tool/utils/network.py | 🟢 100% | OK | +| superset_tool/utils/whiptail_fallback.py | 🟢 100% | OK | +| superset_tool/utils/dataset_mapper.py | 🟢 100% | OK | +| superset_tool/utils/__init__.py | 🟢 100% | OK | +| superset_tool/utils/init_clients.py | 🟢 100% | OK | +| superset_tool/utils/fileio.py | 🟢 100% | OK | +| frontend/src/App.svelte | 🟢 100% | OK | +| frontend/src/main.js | 🟢 100% | OK | +| frontend/src/components/DashboardGrid.svelte | 🟢 100% | OK | +| frontend/src/components/TaskHistory.svelte | 🟢 100% | OK | +| frontend/src/components/MappingTable.svelte | 🟢 100% | OK | +| frontend/src/components/EnvSelector.svelte | 🟢 100% | OK | +| frontend/src/components/TaskList.svelte | 🟢 100% | OK | +| frontend/src/components/DynamicForm.svelte | 🟢 100% | OK | +| frontend/src/components/Footer.svelte | 🟢 100% | OK | +| frontend/src/components/Navbar.svelte | 🟢 100% | OK | +| frontend/src/components/TaskRunner.svelte | 🟢 100% | OK | +| frontend/src/components/TaskLogViewer.svelte | 🟢 100% | OK | +| frontend/src/components/PasswordPrompt.svelte | 🟢 100% | OK | +| frontend/src/components/MissingMappingModal.svelte | 🟢 100% | OK | +| frontend/src/components/Toast.svelte | 🟢 100% | OK | +| frontend/src/pages/Settings.svelte | 🟢 100% | OK | +| frontend/src/pages/Dashboard.svelte | 🟢 100% | OK | +| frontend/src/lib/api.js | 🟢 100% | OK | +| frontend/src/routes/migration/+page.svelte | 🟢 100% | OK | +| frontend/src/routes/migration/mappings/+page.svelte | 🟢 100% | OK | +| backend/src/dependencies.py | 🟢 100% | OK | +| backend/src/app.py | 🟢 100% | OK | +| backend/src/models/mapping.py | 🟢 100% | OK | +| backend/src/models/dashboard.py | 🟢 100% | OK | +| backend/src/models/task.py | 🟢 100% | OK | +| backend/src/services/mapping_service.py | 🟢 100% | OK | +| backend/src/core/config_manager.py | 🟢 100% | OK | +| backend/src/core/superset_client.py | 🟢 100% | OK | +| backend/src/core/migration_engine.py | 🟢 100% | OK | +| backend/src/core/logger.py | 🟢 100% | OK | +| backend/src/core/database.py | 🟢 100% | OK | +| backend/src/core/config_models.py | 🟢 100% | OK | +| backend/src/core/scheduler.py | 🟢 100% | OK | +| backend/src/core/plugin_loader.py | 🟢 100% | OK | +| backend/src/core/plugin_base.py | 🟢 100% | OK | +| backend/src/core/utils/matching.py | 🟢 100% | OK | +| backend/src/core/task_manager/manager.py | 🟢 100% | OK | +| backend/src/core/task_manager/__init__.py | 🟢 100% | OK | +| backend/src/core/task_manager/cleanup.py | 🟢 100% | OK | +| backend/src/core/task_manager/models.py | 🟢 100% | OK | +| backend/src/core/task_manager/persistence.py | 🟢 100% | OK | +| backend/src/plugins/backup.py | 🟢 100% | OK | +| backend/src/plugins/migration.py | 🟢 100% | OK | +| backend/src/api/auth.py | 🟢 100% | OK | +| backend/src/api/routes/settings.py | 🟢 100% | OK | +| backend/src/api/routes/tasks.py | 🟢 100% | OK | +| backend/src/api/routes/environments.py | 🟢 100% | OK | +| backend/src/api/routes/plugins.py | 🟢 100% | OK | +| backend/src/api/routes/migration.py | 🟢 100% | OK | +| backend/src/api/routes/mappings.py | 🟢 100% | OK | diff --git a/semantics/reports/semantic_report_20260101_165712.md b/semantics/reports/semantic_report_20260101_165712.md new file mode 100644 index 0000000..c9a1c74 --- /dev/null +++ b/semantics/reports/semantic_report_20260101_165712.md @@ -0,0 +1,79 @@ +# Semantic Compliance Report + +**Generated At:** 2026-01-01T16:57:12.650889 +**Global Compliance Score:** 100.0% +**Scanned Files:** 70 + +## File Compliance Status +| File | Score | Issues | +|------|-------|--------| +| generate_semantic_map.py | 🟢 100% | OK | +| search_script.py | 🟢 100% | OK | +| get_dataset_structure.py | 🟢 100% | OK | +| debug_db_api.py | 🟢 100% | OK | +| run_mapper.py | 🟢 100% | OK | +| migration_script.py | 🟢 100% | OK | +| backup_script.py | 🟢 100% | OK | +| superset_tool/exceptions.py | 🟢 100% | OK | +| superset_tool/__init__.py | 🟢 100% | OK | +| superset_tool/client.py | 🟢 100% | OK | +| superset_tool/models.py | 🟢 100% | OK | +| superset_tool/utils/logger.py | 🟢 100% | OK | +| superset_tool/utils/network.py | 🟢 100% | OK | +| superset_tool/utils/whiptail_fallback.py | 🟢 100% | OK | +| superset_tool/utils/dataset_mapper.py | 🟢 100% | OK | +| superset_tool/utils/__init__.py | 🟢 100% | OK | +| superset_tool/utils/init_clients.py | 🟢 100% | OK | +| superset_tool/utils/fileio.py | 🟢 100% | OK | +| frontend/src/App.svelte | 🟢 100% | OK | +| frontend/src/main.js | 🟢 100% | OK | +| frontend/src/components/DashboardGrid.svelte | 🟢 100% | OK | +| frontend/src/components/TaskHistory.svelte | 🟢 100% | OK | +| frontend/src/components/MappingTable.svelte | 🟢 100% | OK | +| frontend/src/components/EnvSelector.svelte | 🟢 100% | OK | +| frontend/src/components/TaskList.svelte | 🟢 100% | OK | +| frontend/src/components/DynamicForm.svelte | 🟢 100% | OK | +| frontend/src/components/Footer.svelte | 🟢 100% | OK | +| frontend/src/components/Navbar.svelte | 🟢 100% | OK | +| frontend/src/components/TaskRunner.svelte | 🟢 100% | OK | +| frontend/src/components/TaskLogViewer.svelte | 🟢 100% | OK | +| frontend/src/components/PasswordPrompt.svelte | 🟢 100% | OK | +| frontend/src/components/MissingMappingModal.svelte | 🟢 100% | OK | +| frontend/src/components/Toast.svelte | 🟢 100% | OK | +| frontend/src/pages/Settings.svelte | 🟢 100% | OK | +| frontend/src/pages/Dashboard.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/migration/+page.svelte | 🟢 100% | OK | +| frontend/src/routes/migration/mappings/+page.svelte | 🟢 100% | OK | +| backend/src/dependencies.py | 🟢 100% | OK | +| backend/src/app.py | 🟢 100% | OK | +| backend/src/models/mapping.py | 🟢 100% | OK | +| backend/src/models/dashboard.py | 🟢 100% | OK | +| backend/src/models/task.py | 🟢 100% | OK | +| backend/src/services/mapping_service.py | 🟢 100% | OK | +| backend/src/core/config_manager.py | 🟢 100% | OK | +| backend/src/core/superset_client.py | 🟢 100% | OK | +| backend/src/core/migration_engine.py | 🟢 100% | OK | +| backend/src/core/logger.py | 🟢 100% | OK | +| backend/src/core/database.py | 🟢 100% | OK | +| backend/src/core/config_models.py | 🟢 100% | OK | +| backend/src/core/scheduler.py | 🟢 100% | OK | +| backend/src/core/plugin_loader.py | 🟢 100% | OK | +| backend/src/core/plugin_base.py | 🟢 100% | OK | +| backend/src/core/utils/matching.py | 🟢 100% | OK | +| backend/src/core/task_manager/manager.py | 🟢 100% | OK | +| backend/src/core/task_manager/__init__.py | 🟢 100% | OK | +| backend/src/core/task_manager/cleanup.py | 🟢 100% | OK | +| backend/src/core/task_manager/models.py | 🟢 100% | OK | +| backend/src/core/task_manager/persistence.py | 🟢 100% | OK | +| backend/src/plugins/backup.py | 🟢 100% | OK | +| backend/src/plugins/migration.py | 🟢 100% | OK | +| backend/src/api/auth.py | 🟢 100% | OK | +| backend/src/api/routes/settings.py | 🟢 100% | OK | +| backend/src/api/routes/tasks.py | 🟢 100% | OK | +| backend/src/api/routes/environments.py | 🟢 100% | OK | +| backend/src/api/routes/plugins.py | 🟢 100% | OK | +| backend/src/api/routes/migration.py | 🟢 100% | OK | +| backend/src/api/routes/mappings.py | 🟢 100% | OK | diff --git a/semantics/semantic_map.json b/semantics/semantic_map.json new file mode 100644 index 0000000..5f8a2c3 --- /dev/null +++ b/semantics/semantic_map.json @@ -0,0 +1,7256 @@ +{ + "project_root": ".", + "generated_at": "2026-01-01T16:57:12.629465", + "modules": [ + { + "name": "generate_semantic_map", + "type": "Module", + "start_line": 1, + "end_line": 439, + "tags": { + "SEMANTICS": "semantic_analysis, parser, map_generator, compliance_checker", + "PURPOSE": "Scans the codebase to generate a Semantic Map and Compliance Report based on the System Standard.", + "LAYER": "DevOps/Tooling" + }, + "relations": [ + { + "type": "READS", + "target": "FileSystem" + }, + { + "type": "PRODUCES", + "target": "semantics/semantic_map.json" + }, + { + "type": "PRODUCES", + "target": "specs/project_map.md" + }, + { + "type": "PRODUCES", + "target": "semantics/reports/semantic_report_*.md" + } + ], + "children": [ + { + "name": "SemanticEntity", + "type": "Class", + "start_line": 40, + "end_line": 121, + "tags": { + "PURPOSE": "Represents a code entity (Module, Function, Component) found during parsing.", + "INVARIANT": "start_line is always set; end_line is set upon closure." + }, + "relations": [], + "children": [ + { + "name": "to_dict", + "type": "Function", + "start_line": 56, + "end_line": 73, + "tags": { + "PURPOSE": "Serializes the entity to a dictionary for JSON output.", + "RETURN": "Dict representation of the entity." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "validate", + "type": "Function", + "start_line": 75, + "end_line": 97, + "tags": { + "PURPOSE": "Checks for semantic compliance (closure, mandatory tags).", + "POST": "Populates self.compliance_issues." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "get_score", + "type": "Function", + "start_line": 99, + "end_line": 120, + "tags": { + "PURPOSE": "Calculates a compliance score (0.0 to 1.0).", + "RETURN": "Float score." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "get_patterns", + "type": "Function", + "start_line": 124, + "end_line": 146, + "tags": { + "PURPOSE": "Returns regex patterns for a specific language.", + "PARAM": "lang (str) - 'python' or 'svelte_js'", + "RETURN": "Dict containing compiled regex patterns." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "parse_file", + "type": "Function", + "start_line": 149, + "end_line": 249, + "tags": { + "PURPOSE": "Parses a single file to extract semantic entities.", + "PARAM": "lang - Language identifier.", + "RETURN": "Tuple[List[SemanticEntity], List[str]] - Entities found and global issues." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "SemanticMapGenerator", + "type": "Class", + "start_line": 252, + "end_line": 433, + "tags": { + "PURPOSE": "Orchestrates the mapping process." + }, + "relations": [], + "children": [ + { + "name": "run", + "type": "Function", + "start_line": 261, + "end_line": 270, + "tags": { + "PURPOSE": "Main execution flow." + }, + "relations": [ + { + "type": "CALLS", + "target": "_walk_and_parse" + }, + { + "type": "CALLS", + "target": "_generate_artifacts" + } + ], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "_walk_and_parse", + "type": "Function", + "start_line": 272, + "end_line": 297, + "tags": { + "PURPOSE": "Recursively walks directories and triggers parsing." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "_process_file_results", + "type": "Function", + "start_line": 299, + "end_line": 317, + "tags": { + "PURPOSE": "Validates entities and calculates file scores." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "_generate_artifacts", + "type": "Function", + "start_line": 319, + "end_line": 339, + "tags": { + "PURPOSE": "Writes output files." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "_generate_report", + "type": "Function", + "start_line": 341, + "end_line": 378, + "tags": { + "PURPOSE": "Generates the Markdown compliance report." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "_collect_issues", + "type": "Function", + "start_line": 380, + "end_line": 387, + "tags": { + "PURPOSE": "Helper to collect issues for a specific file from the entity tree." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "_generate_compressed_map", + "type": "Function", + "start_line": 389, + "end_line": 402, + "tags": { + "PURPOSE": "Generates the token-optimized project map." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "_write_entity_md", + "type": "Function", + "start_line": 404, + "end_line": 431, + "tags": { + "PURPOSE": "Recursive helper to write entity tree to Markdown." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "search_script", + "type": "Module", + "start_line": 1, + "end_line": 204, + "tags": { + "SEMANTICS": "search, superset, dataset, regex, file_output", + "PURPOSE": "\u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u043c \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430\u043c \u0432 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u043e\u0432 Superset.", + "LAYER": "App", + "PUBLIC_API": "search_datasets, save_results_to_file, print_search_results, main" + }, + "relations": [ + { + "type": "DEPENDS_ON", + "target": "superset_tool.client" + }, + { + "type": "DEPENDS_ON", + "target": "superset_tool.utils" + } + ], + "children": [ + { + "name": "search_datasets", + "type": "Function", + "start_line": 22, + "end_line": 79, + "tags": { + "PURPOSE": "\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u043c\u0443 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0443 \u0432 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u0441\u0435\u0445 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u043e\u0432.", + "PRE": "`search_pattern` \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432\u0430\u043b\u0438\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \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\u043b\u043e\u0432\u0430\u0440\u044c \u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c\u0438 \u043f\u043e\u0438\u0441\u043a\u0430, \u0433\u0434\u0435 \u043a\u043b\u044e\u0447 - ID \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 - \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0439.", + "THROW": "SupersetAPIError, RequestException - \u041f\u0440\u0438 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 API.", + "PARAM": "logger (Optional[SupersetLogger]) - \u0418\u043d\u0441\u0442\u0430\u043d\u0441 \u043b\u043e\u0433\u0433\u0435\u0440\u0430.", + "RETURN": "Optional[Dict] - \u0421\u043b\u043e\u0432\u0430\u0440\u044c \u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c\u0438 \u0438\u043b\u0438 None, \u0435\u0441\u043b\u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + }, + "relations": [ + { + "type": "CALLS", + "target": "client.get_datasets" + } + ], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "save_results_to_file", + "type": "Function", + "start_line": 81, + "end_line": 102, + "tags": { + "PURPOSE": "\u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b.", + "PRE": "`filename` \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u043c \u043f\u0443\u0442\u0435\u043c \u043a \u0444\u0430\u0439\u043b\u0443.", + "POST": "\u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043e\u0442\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b.", + "PARAM": "logger (Optional[SupersetLogger]) - \u0418\u043d\u0441\u0442\u0430\u043d\u0441 \u043b\u043e\u0433\u0433\u0435\u0440\u0430.", + "RETURN": "bool - \u0423\u0441\u043f\u0435\u0448\u043d\u043e \u043b\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "print_search_results", + "type": "Function", + "start_line": 104, + "end_line": 163, + "tags": { + "PURPOSE": "\u0424\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u0443\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u0438\u0441\u043a\u0430 \u0434\u043b\u044f \u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0433\u043e \u0432\u044b\u0432\u043e\u0434\u0430 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c.", + "PRE": "`results` \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043b\u043e\u0432\u0430\u0440\u0435\u043c, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u043d\u044b\u043c `search_datasets`, \u0438\u043b\u0438 `None`.", + "POST": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0442\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c\u0438.", + "PARAM": "context_lines (int) - \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0434\u043e \u0438 \u043f\u043e\u0441\u043b\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f.", + "RETURN": "str - \u041e\u0442\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043e\u0442\u0447\u0435\u0442." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "main", + "type": "Function", + "start_line": 165, + "end_line": 199, + "tags": { + "PURPOSE": "\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u0432\u0445\u043e\u0434\u0430 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043f\u043e\u0438\u0441\u043a\u0430." + }, + "relations": [ + { + "type": "CALLS", + "target": "setup_clients" + }, + { + "type": "CALLS", + "target": "search_datasets" + }, + { + "type": "CALLS", + "target": "print_search_results" + }, + { + "type": "CALLS", + "target": "save_results_to_file" + } + ], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "get_dataset_structure", + "type": "Module", + "start_line": 1, + "end_line": 64, + "tags": { + "SEMANTICS": "superset, dataset, structure, debug, json", + "PURPOSE": "\u042d\u0442\u043e\u0442 \u043c\u043e\u0434\u0443\u043b\u044c \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430 \u0438\u0437 Superset. \u041e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0445 API.", + "LAYER": "App", + "PUBLIC_API": "get_and_save_dataset" + }, + "relations": [ + { + "type": "DEPENDS_ON", + "target": "superset_tool.client" + }, + { + "type": "DEPENDS_ON", + "target": "superset_tool.utils.init_clients" + }, + { + "type": "DEPENDS_ON", + "target": "superset_tool.utils.logger" + } + ], + "children": [ + { + "name": "get_and_save_dataset", + "type": "Function", + "start_line": 18, + "end_line": 53, + "tags": { + "PURPOSE": "\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430 \u0438\u0437 Superset \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0435\u0435 \u0432 JSON-\u0444\u0430\u0439\u043b.", + "PARAM": "output_path (str) - \u041f\u0443\u0442\u044c \u0434\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f JSON-\u0444\u0430\u0439\u043b\u0430." + }, + "relations": [ + { + "type": "CALLS", + "target": "setup_clients" + }, + { + "type": "CALLS", + "target": "superset_client.get_dataset" + } + ], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "debug_db_api", + "type": "Module", + "start_line": 1, + "end_line": 79, + "tags": { + "SEMANTICS": "debug, api, database, script", + "PURPOSE": "\u0421\u043a\u0440\u0438\u043f\u0442 \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043e\u0442\u0432\u0435\u0442\u0430 API \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445.", + "LAYER": "App", + "PUBLIC_API": "debug_database_api" + }, + "relations": [ + { + "type": "DEPENDS_ON", + "target": "superset_tool.client" + }, + { + "type": "DEPENDS_ON", + "target": "superset_tool.utils" + } + ], + "children": [ + { + "name": "debug_database_api", + "type": "Function", + "start_line": 18, + "end_line": 74, + "tags": { + "PURPOSE": "\u041e\u0442\u043b\u0430\u0434\u043a\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043e\u0442\u0432\u0435\u0442\u0430 API \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445." + }, + "relations": [ + { + "type": "CALLS", + "target": "setup_clients" + }, + { + "type": "CALLS", + "target": "client.get_databases" + } + ], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "run_mapper", + "type": "Module", + "start_line": 1, + "end_line": 72, + "tags": { + "SEMANTICS": "runner, configuration, cli, main", + "PURPOSE": "\u042d\u0442\u043e\u0442 \u043c\u043e\u0434\u0443\u043b\u044c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f CLI-\u0442\u043e\u0447\u043a\u043e\u0439 \u0432\u0445\u043e\u0434\u0430 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043c\u0435\u043f\u043f\u0438\u043d\u0433\u0430 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u043e\u0432.", + "LAYER": "App", + "PUBLIC_API": "main" + }, + "relations": [ + { + "type": "DEPENDS_ON", + "target": "superset_tool.utils.dataset_mapper" + }, + { + "type": "DEPENDS_ON", + "target": "superset_tool.utils" + } + ], + "children": [ + { + "name": "main", + "type": "Function", + "start_line": 18, + "end_line": 67, + "tags": { + "PURPOSE": "\u041f\u0430\u0440\u0441\u0438\u0442 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043c\u0435\u043f\u043f\u0438\u043d\u0433\u0430." + }, + "relations": [ + { + "type": "CREATES_INSTANCE_OF", + "target": "DatasetMapper" + }, + { + "type": "CALLS", + "target": "setup_clients" + }, + { + "type": "CALLS", + "target": "DatasetMapper.run_mapping" + } + ], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "migration_script", + "type": "Module", + "start_line": 1, + "end_line": 401, + "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": 396, + "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": "Migration.__init__", + "type": "Function", + "start_line": 33, + "end_line": 50, + "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.", + "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": true, + "issues": [] + } + }, + { + "name": "Migration.run", + "type": "Function", + "start_line": 52, + "end_line": 69, + "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": true, + "issues": [] + } + }, + { + "name": "Migration.ask_delete_on_failure", + "type": "Function", + "start_line": 71, + "end_line": 84, + "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.", + "POST": "`self.enable_delete_on_failure` \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d." + }, + "relations": [ + { + "type": "CALLS", + "target": "yesno" + } + ], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "Migration.select_environments", + "type": "Function", + "start_line": 86, + "end_line": 125, + "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": true, + "issues": [] + } + }, + { + "name": "Migration.select_dashboards", + "type": "Function", + "start_line": 127, + "end_line": 182, + "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": true, + "issues": [] + } + }, + { + "name": "Migration.confirm_db_config_replacement", + "type": "Function", + "start_line": 184, + "end_line": 217, + "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.", + "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": true, + "issues": [] + } + }, + { + "name": "Migration._select_databases", + "type": "Function", + "start_line": 219, + "end_line": 296, + "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.", + "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": true, + "issues": [] + } + }, + { + "name": "Migration._batch_delete_by_ids", + "type": "Function", + "start_line": 298, + "end_line": 322, + "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": true, + "issues": [] + } + }, + { + "name": "Migration.execute_migration", + "type": "Function", + "start_line": 324, + "end_line": 394, + "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": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "backup_script", + "type": "Module", + "start_line": 1, + "end_line": 163, + "tags": { + "SEMANTICS": "backup, superset, automation, dashboard", + "PURPOSE": "\u042d\u0442\u043e\u0442 \u043c\u043e\u0434\u0443\u043b\u044c \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u043e\u0432 Superset.", + "LAYER": "App", + "PUBLIC_API": "BackupConfig, backup_dashboards, main" + }, + "relations": [ + { + "type": "DEPENDS_ON", + "target": "superset_tool.client" + }, + { + "type": "DEPENDS_ON", + "target": "superset_tool.utils" + } + ], + "children": [ + { + "name": "BackupConfig", + "type": "DataClass", + "start_line": 30, + "end_line": 39, + "tags": { + "PURPOSE": "\u0425\u0440\u0430\u043d\u0438\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0431\u044d\u043a\u0430\u043f\u0430." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "backup_dashboards", + "type": "Function", + "start_line": 41, + "end_line": 114, + "tags": { + "PURPOSE": "\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0431\u044d\u043a\u0430\u043f \u0432\u0441\u0435\u0445 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u043e\u0432 \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0438 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f, \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430.", + "PRE": "`backup_root` \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c \u043f\u0443\u0442\u0435\u043c \u043a \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0431\u044d\u043a\u0430\u043f\u0430.", + "POST": "\u0414\u0430\u0448\u0431\u043e\u0440\u0434\u044b \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f. \u041e\u0448\u0438\u0431\u043a\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u043b\u043e\u0433\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0438 \u043d\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442 \u043a \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u0430.", + "PARAM": "config (BackupConfig) - \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0431\u044d\u043a\u0430\u043f\u0430.", + "RETURN": "bool - `True` \u0435\u0441\u043b\u0438 \u0432\u0441\u0435 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u044b \u0431\u044b\u043b\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0431\u0435\u0437 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u0448\u0438\u0431\u043e\u043a, `False` \u0438\u043d\u0430\u0447\u0435." + }, + "relations": [ + { + "type": "CALLS", + "target": "client.get_dashboards" + }, + { + "type": "CALLS", + "target": "client.export_dashboard" + }, + { + "type": "CALLS", + "target": "save_and_unpack_dashboard" + }, + { + "type": "CALLS", + "target": "archive_exports" + }, + { + "type": "CALLS", + "target": "consolidate_archive_folders" + }, + { + "type": "CALLS", + "target": "remove_empty_directories" + } + ], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "main", + "type": "Function", + "start_line": 116, + "end_line": 158, + "tags": { + "PURPOSE": "\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u0432\u0445\u043e\u0434\u0430 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.", + "RETURN": "int - \u041a\u043e\u0434 \u0432\u044b\u0445\u043e\u0434\u0430 (0 - \u0443\u0441\u043f\u0435\u0445, 1 - \u043e\u0448\u0438\u0431\u043a\u0430)." + }, + "relations": [ + { + "type": "CALLS", + "target": "setup_clients" + }, + { + "type": "CALLS", + "target": "backup_dashboards" + } + ], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "superset_tool.exceptions", + "type": "Module", + "start_line": 1, + "end_line": 128, + "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": 20, + "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": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "AuthenticationError", + "type": "Class", + "start_line": 22, + "end_line": 30, + "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": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "PermissionDeniedError", + "type": "Class", + "start_line": 32, + "end_line": 42, + "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": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "SupersetAPIError", + "type": "Class", + "start_line": 44, + "end_line": 52, + "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": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "ExportError", + "type": "Class", + "start_line": 54, + "end_line": 62, + "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": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "DashboardNotFoundError", + "type": "Class", + "start_line": 64, + "end_line": 73, + "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": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "DatasetNotFoundError", + "type": "Class", + "start_line": 75, + "end_line": 84, + "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": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "InvalidZipFormatError", + "type": "Class", + "start_line": 86, + "end_line": 95, + "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": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "NetworkError", + "type": "Class", + "start_line": 97, + "end_line": 105, + "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": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "FileOperationError", + "type": "Class", + "start_line": 107, + "end_line": 112, + "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": 114, + "end_line": 119, + "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": 121, + "end_line": 126, + "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", + "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.client", + "type": "Module", + "start_line": 1, + "end_line": 468, + "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": 466, + "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": "SupersetClient.__init__", + "type": "Function", + "start_line": 32, + "end_line": 51, + "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": "SupersetClient._validate_config", + "type": "Function", + "start_line": 53, + "end_line": 63, + "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": "SupersetClient.headers", + "type": "Function", + "start_line": 67, + "end_line": 72, + "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": "SupersetClient.get_dashboards", + "type": "Function", + "start_line": 74, + "end_line": 96, + "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": "SupersetClient.export_dashboard", + "type": "Function", + "start_line": 98, + "end_line": 121, + "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": "SupersetClient.import_dashboard", + "type": "Function", + "start_line": 123, + "end_line": 155, + "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": "SupersetClient._resolve_target_id_for_delete", + "type": "Function", + "start_line": 157, + "end_line": 180, + "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": "SupersetClient._do_import", + "type": "Function", + "start_line": 182, + "end_line": 203, + "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": "SupersetClient.delete_dashboard", + "type": "Function", + "start_line": 205, + "end_line": 221, + "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": "SupersetClient._extract_dashboard_id_from_zip", + "type": "Function", + "start_line": 223, + "end_line": 244, + "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": "SupersetClient._extract_dashboard_slug_from_zip", + "type": "Function", + "start_line": 246, + "end_line": 267, + "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": "SupersetClient._validate_export_response", + "type": "Function", + "start_line": 269, + "end_line": 283, + "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": "SupersetClient._resolve_export_filename", + "type": "Function", + "start_line": 285, + "end_line": 301, + "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": "SupersetClient._validate_query_params", + "type": "Function", + "start_line": 303, + "end_line": 313, + "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": "SupersetClient._fetch_total_object_count", + "type": "Function", + "start_line": 315, + "end_line": 329, + "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": "SupersetClient._fetch_all_pages", + "type": "Function", + "start_line": 331, + "end_line": 343, + "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": "SupersetClient._validate_import_file", + "type": "Function", + "start_line": 345, + "end_line": 359, + "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": "SupersetClient.get_datasets", + "type": "Function", + "start_line": 361, + "end_line": 382, + "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": "SupersetClient.get_databases", + "type": "Function", + "start_line": 384, + "end_line": 406, + "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": "SupersetClient.get_dataset", + "type": "Function", + "start_line": 408, + "end_line": 423, + "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": "SupersetClient.get_database", + "type": "Function", + "start_line": 425, + "end_line": 440, + "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": "SupersetClient.update_dataset", + "type": "Function", + "start_line": 442, + "end_line": 464, + "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.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": "SupersetConfig.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": true, + "issues": [] + } + }, + { + "name": "SupersetConfig.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": true, + "issues": [] + } + } + ], + "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": "DatabaseConfig.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": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "superset_tool.utils.logger", + "type": "Module", + "start_line": 1, + "end_line": 107, + "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": "SupersetLogger", + "type": "Class", + "start_line": 19, + "end_line": 105, + "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": "SupersetLogger.__init__", + "type": "Function", + "start_line": 23, + "end_line": 56, + "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": "SupersetLogger._log", + "type": "Function", + "start_line": 58, + "end_line": 67, + "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.", + "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": "SupersetLogger.info", + "type": "Function", + "start_line": 69, + "end_line": 73, + "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." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "SupersetLogger.debug", + "type": "Function", + "start_line": 75, + "end_line": 79, + "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." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "SupersetLogger.warning", + "type": "Function", + "start_line": 81, + "end_line": 85, + "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." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "SupersetLogger.error", + "type": "Function", + "start_line": 87, + "end_line": 91, + "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." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "SupersetLogger.critical", + "type": "Function", + "start_line": 93, + "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 CRITICAL." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "SupersetLogger.exception", + "type": "Function", + "start_line": 99, + "end_line": 103, + "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." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "superset_tool.utils.network", + "type": "Module", + "start_line": 1, + "end_line": 232, + "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": 24, + "end_line": 230, + "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": "APIClient.__init__", + "type": "Function", + "start_line": 29, + "end_line": 45, + "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." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "APIClient._init_session", + "type": "Function", + "start_line": 47, + "end_line": 61, + "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.", + "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": "APIClient.authenticate", + "type": "Function", + "start_line": 63, + "end_line": 88, + "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.", + "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": "APIClient.headers", + "type": "Function", + "start_line": 92, + "end_line": 101, + "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." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "APIClient.request", + "type": "Function", + "start_line": 103, + "end_line": 124, + "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.", + "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.", + "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." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "APIClient._handle_http_error", + "type": "Function", + "start_line": 126, + "end_line": 136, + "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." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "APIClient._handle_network_error", + "type": "Function", + "start_line": 138, + "end_line": 147, + "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." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "APIClient.upload_file", + "type": "Function", + "start_line": 149, + "end_line": 173, + "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.", + "RETURN": "\u041e\u0442\u0432\u0435\u0442 API \u0432 \u0432\u0438\u0434\u0435 \u0441\u043b\u043e\u0432\u0430\u0440\u044f.", + "THROW": "SupersetAPIError, NetworkError, TypeError.", + "PARAM": "timeout (Optional[int]) - \u0422\u0430\u0439\u043c\u0430\u0443\u0442." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "APIClient._perform_upload", + "type": "Function", + "start_line": 175, + "end_line": 199, + "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.", + "RETURN": "Dict - \u041e\u0442\u0432\u0435\u0442." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "APIClient.fetch_paginated_count", + "type": "Function", + "start_line": 201, + "end_line": 210, + "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.", + "RETURN": "int - \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "APIClient.fetch_paginated_data", + "type": "Function", + "start_line": 212, + "end_line": 228, + "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.", + "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": 104, + "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": 13, + "end_line": 29, + "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.", + "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": 31, + "end_line": 49, + "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).", + "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": 51, + "end_line": 59, + "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.", + "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": 61, + "end_line": 67, + "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." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "inputbox", + "type": "Function", + "start_line": 69, + "end_line": 78, + "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.", + "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": 80, + "end_line": 94, + "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": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "gauge", + "type": "Function", + "start_line": 96, + "end_line": 102, + "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`.", + "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": 229, + "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": 227, + "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": "DatasetMapper.get_postgres_comments", + "type": "Function", + "start_line": 26, + "end_line": 88, + "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 \u0441 \u043c\u0435\u043f\u043f\u0438\u043d\u0433\u043e\u043c `column_name` -> `column_comment`.", + "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": "DatasetMapper.load_excel_mappings", + "type": "Function", + "start_line": 90, + "end_line": 107, + "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 \u0431\u044b\u0442\u044c \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c \u043f\u0443\u0442\u0435\u043c \u043a XLSX \u0444\u0430\u0439\u043b\u0443 \u0441 \u043a\u043e\u043b\u043e\u043d\u043a\u0430\u043c\u0438 'column_name' \u0438 'column_comment'.", + "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.", + "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": "DatasetMapper.run_mapping", + "type": "Function", + "start_line": 109, + "end_line": 226, + "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.", + "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": "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": "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": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "superset_tool.utils.fileio", + "type": "Module", + "start_line": 1, + "end_line": 458, + "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": 67, + "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.", + "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": 69, + "end_line": 91, + "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.", + "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": 93, + "end_line": 108, + "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.", + "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": 110, + "end_line": 119, + "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.", + "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": 121, + "end_line": 128, + "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": 130, + "end_line": 210, + "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.", + "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": 212, + "end_line": 243, + "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.", + "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": 245, + "end_line": 273, + "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.", + "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": 275, + "end_line": 294, + "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.", + "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": 296, + "end_line": 355, + "tags": { + "PURPOSE": "(Helper) \u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u043e\u0434\u0438\u043d YAML \u0444\u0430\u0439\u043b.", + "PARAM": "logger (SupersetLogger) - \u041b\u043e\u0433\u0433\u0435\u0440." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "create_dashboard_export", + "type": "Function", + "start_line": 357, + "end_line": 382, + "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.", + "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": 384, + "end_line": 390, + "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.", + "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": 392, + "end_line": 401, + "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'.", + "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 \u0438\u043b\u0438 `None`." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "consolidate_archive_folders", + "type": "Function", + "start_line": 403, + "end_line": 456, + "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.", + "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": "App", + "type": "Component", + "start_line": 1, + "end_line": 113, + "tags": { + "SEMANTICS": "main, entrypoint, layout, navigation", + "PURPOSE": "The root component of the frontend application. Manages navigation and layout.", + "LAYER": "UI", + "RELATION": "DEPENDS_ON -> frontend/src/lib/stores.js", + "INVARIANT": "Navigation state must be persisted in the currentPage store." + }, + "relations": [], + "children": [ + { + "name": "handleFormSubmit", + "type": "Function", + "start_line": 24, + "end_line": 42, + "tags": { + "PURPOSE": "Handles form submission for task creation.", + "PARAM": "{CustomEvent} event - The submit event from DynamicForm." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "navigate", + "type": "Function", + "start_line": 44, + "end_line": 59, + "tags": { + "PURPOSE": "Changes the current page and resets state.", + "PARAM": "{string} page - Target page name." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "main", + "type": "Module", + "start_line": 1, + "end_line": 18, + "tags": { + "SEMANTICS": "entrypoint, svelte, init", + "PURPOSE": "Entry point for the Svelte application.", + "LAYER": "UI-Entry" + }, + "relations": [], + "children": [ + { + "name": "app_instance", + "type": "Data", + "start_line": 9, + "end_line": 15, + "tags": { + "PURPOSE": "Initialized Svelte app instance." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "DashboardGrid", + "type": "Component", + "start_line": 1, + "end_line": 205, + "tags": { + "SEMANTICS": "dashboard, grid, selection, pagination", + "PURPOSE": "Displays a grid of dashboards with selection and pagination.", + "LAYER": "Component", + "RELATION": "USED_BY -> frontend/src/routes/migration/+page.svelte", + "INVARIANT": "Selected IDs must be a subset of available dashboards." + }, + "relations": [], + "children": [ + { + "name": "handleSort", + "type": "Function", + "start_line": 62, + "end_line": 72, + "tags": { + "PURPOSE": "Toggles sort direction or changes sort column." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "handleSelectionChange", + "type": "Function", + "start_line": 74, + "end_line": 86, + "tags": { + "PURPOSE": "Handles individual checkbox changes." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "handleSelectAll", + "type": "Function", + "start_line": 88, + "end_line": 104, + "tags": { + "PURPOSE": "Handles select all checkbox." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "goToPage", + "type": "Function", + "start_line": 106, + "end_line": 113, + "tags": { + "PURPOSE": "Changes current page." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "TaskHistory", + "type": "Component", + "start_line": 1, + "end_line": 197, + "tags": { + "SEMANTICS": "task, history, list, status, monitoring", + "PURPOSE": "Displays a list of recent tasks with their status and allows selecting them for viewing logs.", + "LAYER": "UI", + "RELATION": "USES -> frontend/src/lib/api.js (inferred)" + }, + "relations": [], + "children": [ + { + "name": "fetchTasks", + "type": "Function", + "start_line": 18, + "end_line": 46, + "tags": { + "PURPOSE": "Fetches the list of recent tasks from the API." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "clearTasks", + "type": "Function", + "start_line": 48, + "end_line": 65, + "tags": { + "PURPOSE": "Clears tasks from the history, optionally filtered by status." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "selectTask", + "type": "Function", + "start_line": 67, + "end_line": 85, + "tags": { + "PURPOSE": "Selects a task and fetches its full details." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "getStatusColor", + "type": "Function", + "start_line": 87, + "end_line": 99, + "tags": { + "PURPOSE": "Returns the CSS color class for a given task status." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "onMount", + "type": "Function", + "start_line": 101, + "end_line": 107, + "tags": { + "PURPOSE": "Initializes the component by fetching tasks and starting polling." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "onDestroy", + "type": "Function", + "start_line": 109, + "end_line": 114, + "tags": { + "PURPOSE": "Cleans up the polling interval when the component is destroyed." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "MappingTable", + "type": "Component", + "start_line": 1, + "end_line": 94, + "tags": { + "SEMANTICS": "mapping, table, database, editor", + "PURPOSE": "Displays and allows editing of database mappings.", + "LAYER": "Feature", + "RELATION": "BINDS_TO -> mappings state", + "INVARIANT": "Each source database can be mapped to one target database." + }, + "relations": [], + "children": [ + { + "name": "updateMapping", + "type": "Function", + "start_line": 25, + "end_line": 32, + "tags": { + "PURPOSE": "Updates a mapping for a specific source database." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "getSuggestion", + "type": "Function", + "start_line": 34, + "end_line": 41, + "tags": { + "PURPOSE": "Finds a suggestion for a source database." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "EnvSelector", + "type": "Component", + "start_line": 1, + "end_line": 58, + "tags": { + "SEMANTICS": "environment, selector, dropdown, migration", + "PURPOSE": "Provides a UI component for selecting source and target environments.", + "LAYER": "Feature", + "RELATION": "BINDS_TO -> environments store", + "INVARIANT": "Source and target environments must be selectable from the list of configured environments." + }, + "relations": [], + "children": [ + { + "name": "handleSelect", + "type": "Function", + "start_line": 24, + "end_line": 34, + "tags": { + "PURPOSE": "Dispatches the selection change event.", + "PARAM": "{Event} event - The change event from the select element." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "TaskList", + "type": "Component", + "start_line": 1, + "end_line": 103, + "tags": { + "SEMANTICS": "tasks, list, status, history", + "PURPOSE": "Displays a list of tasks with their status and execution details.", + "LAYER": "Component", + "RELATION": "USES -> api.js" + }, + "relations": [], + "children": [ + { + "name": "getStatusColor", + "type": "Function", + "start_line": 18, + "end_line": 31, + "tags": { + "PURPOSE": "Returns the CSS color class for a given task status." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "formatTime", + "type": "Function", + "start_line": 33, + "end_line": 43, + "tags": { + "PURPOSE": "Formats a date string using date-fns." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "handleTaskClick", + "type": "Function", + "start_line": 45, + "end_line": 50, + "tags": { + "PURPOSE": "Dispatches a select event when a task is clicked." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "DynamicForm", + "type": "Component", + "start_line": 1, + "end_line": 88, + "tags": { + "SEMANTICS": "form, schema, dynamic, json-schema", + "PURPOSE": "Generates a form dynamically based on a JSON schema.", + "LAYER": "UI", + "RELATION": "DEPENDS_ON -> svelte:createEventDispatcher", + "PROPS": "", + "EVENTS": "" + }, + "relations": [], + "children": [ + { + "name": "handleSubmit", + "type": "Function", + "start_line": 23, + "end_line": 31, + "tags": { + "PURPOSE": "Dispatches the submit event with the form data." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "initializeForm", + "type": "Function", + "start_line": 33, + "end_line": 44, + "tags": { + "PURPOSE": "Initialize form data with default values from the schema." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "Footer", + "type": "Component", + "start_line": 1, + "end_line": 10, + "tags": { + "SEMANTICS": "footer, layout, copyright", + "PURPOSE": "Displays the application footer with copyright information.", + "LAYER": "UI" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "Navbar", + "type": "Component", + "start_line": 1, + "end_line": 46, + "tags": { + "SEMANTICS": "navbar, navigation, header, layout", + "PURPOSE": "Main navigation bar for the application.", + "LAYER": "UI", + "RELATION": "USES -> $app/stores" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "TaskRunner", + "type": "Component", + "start_line": 1, + "end_line": 379, + "tags": { + "SEMANTICS": "task, runner, logs, websocket", + "PURPOSE": "Connects to a WebSocket to display real-time logs for a running task.", + "LAYER": "UI", + "RELATION": "DEPENDS_ON -> frontend/src/lib/stores.js", + "PROPS": "None", + "EVENTS": "None" + }, + "relations": [], + "children": [ + { + "name": "connect", + "type": "Function", + "start_line": 38, + "end_line": 130, + "tags": { + "PURPOSE": "Establishes WebSocket connection with exponential backoff." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "fetchTargetDatabases", + "type": "Function", + "start_line": 132, + "end_line": 152, + "tags": { + "PURPOSE": "Fetches the list of databases in the target environment." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "handleMappingResolve", + "type": "Function", + "start_line": 154, + "end_line": 195, + "tags": { + "PURPOSE": "Handles the resolution of a missing database mapping." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "handlePasswordResume", + "type": "Function", + "start_line": 197, + "end_line": 217, + "tags": { + "PURPOSE": "Handles the submission of database passwords to resume a task." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "startDataTimeout", + "type": "Function", + "start_line": 219, + "end_line": 229, + "tags": { + "PURPOSE": "Starts a timeout to detect when the log stream has stalled." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "resetDataTimeout", + "type": "Function", + "start_line": 231, + "end_line": 238, + "tags": { + "PURPOSE": "Resets the data stall timeout." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "onMount", + "type": "Function", + "start_line": 240, + "end_line": 265, + "tags": { + "PURPOSE": "Initializes the component and subscribes to task selection changes." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "onDestroy", + "type": "Function", + "start_line": 267, + "end_line": 279, + "tags": { + "PURPOSE": "Close WebSocket connection when the component is destroyed." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "TaskLogViewer", + "type": "Component", + "start_line": 1, + "end_line": 171, + "tags": { + "SEMANTICS": "task, log, viewer, modal", + "PURPOSE": "Displays detailed logs for a specific task in a modal.", + "LAYER": "UI", + "RELATION": "USES -> frontend/src/lib/api.js (inferred)" + }, + "relations": [], + "children": [ + { + "name": "fetchLogs", + "type": "Function", + "start_line": 25, + "end_line": 40, + "tags": { + "PURPOSE": "Fetches logs for the current task." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "scrollToBottom", + "type": "Function", + "start_line": 42, + "end_line": 51, + "tags": { + "PURPOSE": "Scrolls the log container to the bottom." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "handleScroll", + "type": "Function", + "start_line": 53, + "end_line": 62, + "tags": { + "PURPOSE": "Updates auto-scroll preference based on scroll position." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "close", + "type": "Function", + "start_line": 64, + "end_line": 70, + "tags": { + "PURPOSE": "Closes the log viewer modal." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "getLogLevelColor", + "type": "Function", + "start_line": 72, + "end_line": 83, + "tags": { + "PURPOSE": "Returns the CSS color class for a given log level." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "onDestroy", + "type": "Function", + "start_line": 100, + "end_line": 105, + "tags": { + "PURPOSE": "Cleans up the polling interval." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "PasswordPrompt", + "type": "Component", + "start_line": 1, + "end_line": 129, + "tags": { + "SEMANTICS": "password, prompt, modal, input, security", + "PURPOSE": "A modal component to prompt the user for database passwords when a migration task is paused.", + "LAYER": "UI", + "RELATION": "EMITS -> resume, cancel" + }, + "relations": [], + "children": [ + { + "name": "handleSubmit", + "type": "Function", + "start_line": 21, + "end_line": 37, + "tags": { + "PURPOSE": "Validates and dispatches the passwords to resume the task." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "handleCancel", + "type": "Function", + "start_line": 39, + "end_line": 45, + "tags": { + "PURPOSE": "Cancels the password prompt." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "MissingMappingModal", + "type": "Component", + "start_line": 1, + "end_line": 114, + "tags": { + "SEMANTICS": "modal, mapping, prompt, migration", + "PURPOSE": "Prompts the user to provide a database mapping when one is missing during migration.", + "LAYER": "Feature", + "RELATION": "DISPATCHES -> resolve", + "INVARIANT": "Modal blocks migration progress until resolved or cancelled." + }, + "relations": [], + "children": [ + { + "name": "resolve", + "type": "Function", + "start_line": 26, + "end_line": 37, + "tags": { + "PURPOSE": "Dispatches the resolution event with the selected mapping." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "cancel", + "type": "Function", + "start_line": 39, + "end_line": 45, + "tags": { + "PURPOSE": "Cancels the mapping resolution modal." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "Toast", + "type": "Component", + "start_line": 1, + "end_line": 31, + "tags": { + "SEMANTICS": "toast, notification, feedback, ui", + "PURPOSE": "Displays transient notifications (toasts) in the bottom-right corner.", + "LAYER": "UI", + "RELATION": "DEPENDS_ON -> frontend/src/lib/toasts.js", + "PROPS": "None", + "EVENTS": "None" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "Settings", + "type": "Component", + "start_line": 1, + "end_line": 333, + "tags": { + "SEMANTICS": "settings, ui, configuration", + "PURPOSE": "The main settings page for the application, allowing management of environments and global settings.", + "LAYER": "UI", + "RELATION": "USES -> stores.js", + "PROPS": "None", + "EVENTS": "None", + "INVARIANT": "Settings changes must be saved to the backend." + }, + "relations": [], + "children": [ + { + "name": "loadSettings", + "type": "Function", + "start_line": 50, + "end_line": 65, + "tags": { + "PURPOSE": "Loads settings from the backend." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "handleSaveGlobal", + "type": "Function", + "start_line": 67, + "end_line": 82, + "tags": { + "PURPOSE": "Saves global settings to the backend." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "handleAddOrUpdateEnv", + "type": "Function", + "start_line": 84, + "end_line": 106, + "tags": { + "PURPOSE": "Adds or updates an environment." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "handleDeleteEnv", + "type": "Function", + "start_line": 108, + "end_line": 127, + "tags": { + "PURPOSE": "Deletes an environment.", + "PARAM": "{string} id - The ID of the environment to delete." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "handleTestEnv", + "type": "Function", + "start_line": 129, + "end_line": 150, + "tags": { + "PURPOSE": "Tests the connection to an environment.", + "PARAM": "{string} id - The ID of the environment to test." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "editEnv", + "type": "Function", + "start_line": 152, + "end_line": 161, + "tags": { + "PURPOSE": "Sets the form to edit an existing environment.", + "PARAM": "{Object} env - The environment object to edit." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "resetEnvForm", + "type": "Function", + "start_line": 163, + "end_line": 182, + "tags": { + "PURPOSE": "Resets the environment form." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "Dashboard", + "type": "Component", + "start_line": 1, + "end_line": 60, + "tags": { + "SEMANTICS": "dashboard, plugins, tools, list", + "PURPOSE": "Displays the list of available plugins and allows selecting one.", + "LAYER": "UI", + "RELATION": "DEPENDS_ON -> frontend/src/lib/stores.js", + "PROPS": "None", + "EVENTS": "None" + }, + "relations": [], + "children": [ + { + "name": "onMount", + "type": "Function", + "start_line": 17, + "end_line": 25, + "tags": { + "PURPOSE": "Fetch plugins when the component mounts." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "selectPlugin", + "type": "Function", + "start_line": 27, + "end_line": 36, + "tags": { + "PURPOSE": "Selects a plugin to display its form.", + "PARAM": "{Object} plugin - The plugin object to select." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "stores_module", + "type": "Module", + "start_line": 1, + "end_line": 66, + "tags": { + "SEMANTICS": "state, stores, svelte, plugins, tasks", + "PURPOSE": "Global state management using Svelte stores.", + "LAYER": "UI-State" + }, + "relations": [], + "children": [ + { + "name": "plugins", + "type": "Data", + "start_line": 9, + "end_line": 12, + "tags": { + "PURPOSE": "Store for the list of available plugins." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "tasks", + "type": "Data", + "start_line": 14, + "end_line": 17, + "tags": { + "PURPOSE": "Store for the list of tasks." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "selectedPlugin", + "type": "Data", + "start_line": 19, + "end_line": 22, + "tags": { + "PURPOSE": "Store for the currently selected plugin." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "selectedTask", + "type": "Data", + "start_line": 24, + "end_line": 27, + "tags": { + "PURPOSE": "Store for the currently selected task." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "currentPage", + "type": "Data", + "start_line": 29, + "end_line": 32, + "tags": { + "PURPOSE": "Store for the current page." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "taskLogs", + "type": "Data", + "start_line": 34, + "end_line": 37, + "tags": { + "PURPOSE": "Store for the logs of the currently selected task." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "fetchPlugins", + "type": "Function", + "start_line": 39, + "end_line": 51, + "tags": { + "PURPOSE": "Fetches plugins from the API and updates the plugins store." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "fetchTasks", + "type": "Function", + "start_line": 53, + "end_line": 65, + "tags": { + "PURPOSE": "Fetches tasks from the API and updates the tasks store." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "toasts_module", + "type": "Module", + "start_line": 1, + "end_line": 34, + "tags": { + "SEMANTICS": "notification, toast, feedback, state", + "PURPOSE": "Manages toast notifications using a Svelte writable store.", + "LAYER": "UI-State" + }, + "relations": [], + "children": [ + { + "name": "toasts", + "type": "Data", + "start_line": 8, + "end_line": 11, + "tags": { + "PURPOSE": "Writable store containing the list of active toasts." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "addToast", + "type": "Function", + "start_line": 13, + "end_line": 24, + "tags": { + "PURPOSE": "Adds a new toast message.", + "PARAM": "duration (number) - Duration in ms before the toast is removed." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "removeToast", + "type": "Function", + "start_line": 26, + "end_line": 33, + "tags": { + "PURPOSE": "Removes a toast message by ID.", + "PARAM": "id (string) - The ID of the toast to remove." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "api_module", + "type": "Module", + "start_line": 1, + "end_line": 122, + "tags": { + "SEMANTICS": "api, client, fetch, rest", + "PURPOSE": "Handles all communication with the backend API.", + "LAYER": "Infra-API" + }, + "relations": [], + "children": [ + { + "name": "getWsUrl", + "type": "Function", + "start_line": 11, + "end_line": 24, + "tags": { + "PURPOSE": "Returns the WebSocket URL for a specific task, with fallback logic.", + "PARAM": "taskId (string) - The ID of the task.", + "RETURN": "string - The WebSocket URL." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "fetchApi", + "type": "Function", + "start_line": 26, + "end_line": 44, + "tags": { + "PURPOSE": "Generic GET request wrapper.", + "PARAM": "endpoint (string) - API endpoint.", + "RETURN": "Promise - JSON response." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "postApi", + "type": "Function", + "start_line": 46, + "end_line": 71, + "tags": { + "PURPOSE": "Generic POST request wrapper.", + "PARAM": "body (object) - Request payload.", + "RETURN": "Promise - JSON response." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "requestApi", + "type": "Function", + "start_line": 73, + "end_line": 99, + "tags": { + "PURPOSE": "Generic request wrapper." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "api", + "type": "Data", + "start_line": 101, + "end_line": 120, + "tags": { + "PURPOSE": "API client object with specific methods." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "MigrationDashboard", + "type": "Component", + "start_line": 1, + "end_line": 405, + "tags": { + "SEMANTICS": "migration, dashboard, environment, selection, database-replacement", + "PURPOSE": "Main dashboard for configuring and starting migrations.", + "LAYER": "Page", + "RELATION": "USES -> EnvSelector", + "INVARIANT": "Migration cannot start without source and target environments." + }, + "relations": [], + "children": [ + { + "name": "fetchEnvironments", + "type": "Function", + "start_line": 51, + "end_line": 67, + "tags": { + "PURPOSE": "Fetches the list of environments from the API.", + "POST": "environments state is updated." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "fetchDashboards", + "type": "Function", + "start_line": 69, + "end_line": 86, + "tags": { + "PURPOSE": "Fetches dashboards for the selected source environment.", + "PARAM": "envId The environment ID.", + "POST": "dashboards state is updated." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "fetchDatabases", + "type": "Function", + "start_line": 93, + "end_line": 126, + "tags": { + "PURPOSE": "Fetches databases from both environments and gets suggestions." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "handleMappingUpdate", + "type": "Function", + "start_line": 128, + "end_line": 161, + "tags": { + "PURPOSE": "Saves a mapping to the backend." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "handleViewLogs", + "type": "Function", + "start_line": 163, + "end_line": 171, + "tags": { + "PURPOSE": "Opens the log viewer for a specific task." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "handlePasswordPrompt", + "type": "Function", + "start_line": 173, + "end_line": 193, + "tags": { + "PURPOSE": "Reactive logic to show password prompt when a task is awaiting input." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "handleResumeMigration", + "type": "Function", + "start_line": 195, + "end_line": 211, + "tags": { + "PURPOSE": "Resumes a migration task with provided passwords." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "startMigration", + "type": "Function", + "start_line": 213, + "end_line": 279, + "tags": { + "PURPOSE": "Starts the migration process.", + "PRE": "sourceEnvId and targetEnvId must be set and different." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "MappingManagement", + "type": "Component", + "start_line": 1, + "end_line": 186, + "tags": { + "SEMANTICS": "mapping, management, database, fuzzy-matching", + "PURPOSE": "Page for managing database mappings between environments.", + "LAYER": "Page", + "RELATION": "USES -> MappingTable", + "INVARIANT": "Mappings are saved to the backend for persistence." + }, + "relations": [], + "children": [ + { + "name": "fetchEnvironments", + "type": "Function", + "start_line": 33, + "end_line": 46, + "tags": { + "PURPOSE": "Fetches the list of environments." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "fetchDatabases", + "type": "Function", + "start_line": 50, + "end_line": 84, + "tags": { + "PURPOSE": "Fetches databases from both environments and gets suggestions." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "handleUpdate", + "type": "Function", + "start_line": 86, + "end_line": 120, + "tags": { + "PURPOSE": "Saves a mapping to the backend." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "Dependencies", + "type": "Module", + "start_line": 1, + "end_line": 50, + "tags": { + "SEMANTICS": "dependency, injection, singleton, factory", + "PURPOSE": "Manages the creation and provision of shared application dependencies, such as the PluginLoader and TaskManager, to avoid circular imports.", + "LAYER": "Core", + "RELATION": "Used by the main app and API routers to get access to shared instances." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "AppModule", + "type": "Module", + "start_line": 1, + "end_line": 154, + "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.", + "LAYER": "UI (API)", + "RELATION": "Depends on the dependency module and API route modules." + }, + "relations": [], + "children": [ + { + "name": "App", + "type": "Global", + "start_line": 26, + "end_line": 34, + "tags": { + "SEMANTICS": "app, fastapi, instance", + "PURPOSE": "The global FastAPI application instance." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "WebSocketEndpoint", + "type": "Endpoint", + "start_line": 73, + "end_line": 128, + "tags": { + "SEMANTICS": "websocket, logs, streaming, real-time", + "PURPOSE": "Provides a WebSocket endpoint for clients to connect to and receive real-time log entries for a specific task." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "StaticFiles", + "type": "Mount", + "start_line": 130, + "end_line": 153, + "tags": { + "SEMANTICS": "static, frontend, spa", + "PURPOSE": "Mounts the frontend build directory to serve static assets." + }, + "relations": [], + "children": [ + { + "name": "RootEndpoint", + "type": "Endpoint", + "start_line": 146, + "end_line": 152, + "tags": { + "SEMANTICS": "root, healthcheck", + "PURPOSE": "A simple root endpoint to confirm that the API is running." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "backend.src.models.mapping", + "type": "Module", + "start_line": 1, + "end_line": 70, + "tags": { + "SEMANTICS": "database, mapping, environment, migration, sqlalchemy, sqlite", + "PURPOSE": "Defines the database schema for environment metadata and database mappings using SQLAlchemy.", + "LAYER": "Domain", + "INVARIANT": "All primary keys are UUID strings.", + "CONSTRAINT": "source_env_id and target_env_id must be valid environment IDs." + }, + "relations": [ + { + "type": "DEPENDS_ON", + "target": "sqlalchemy" + } + ], + "children": [ + { + "name": "MigrationStatus", + "type": "Class", + "start_line": 21, + "end_line": 29, + "tags": { + "PURPOSE": "Enumeration of possible migration job statuses." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "Environment", + "type": "Class", + "start_line": 31, + "end_line": 40, + "tags": { + "PURPOSE": "Represents a Superset instance environment." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "DatabaseMapping", + "type": "Class", + "start_line": 42, + "end_line": 55, + "tags": { + "PURPOSE": "Represents a mapping between source and target databases." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "MigrationJob", + "type": "Class", + "start_line": 57, + "end_line": 68, + "tags": { + "PURPOSE": "Represents a single migration execution job." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "backend.src.models.dashboard", + "type": "Module", + "start_line": 1, + "end_line": 28, + "tags": { + "SEMANTICS": "dashboard, model, metadata, migration", + "PURPOSE": "Defines data models for dashboard metadata and selection.", + "LAYER": "Model" + }, + "relations": [ + { + "type": "USED_BY", + "target": "backend.src.api.routes.migration" + } + ], + "children": [ + { + "name": "DashboardMetadata", + "type": "Class", + "start_line": 10, + "end_line": 17, + "tags": { + "PURPOSE": "Represents a dashboard available for migration." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "DashboardSelection", + "type": "Class", + "start_line": 19, + "end_line": 26, + "tags": { + "PURPOSE": "Represents the user's selection of dashboards to migrate." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "backend.src.models.task", + "type": "Module", + "start_line": 1, + "end_line": 34, + "tags": { + "SEMANTICS": "database, task, record, sqlalchemy, sqlite", + "PURPOSE": "Defines the database schema for task execution records.", + "LAYER": "Domain", + "INVARIANT": "All primary keys are UUID strings." + }, + "relations": [ + { + "type": "DEPENDS_ON", + "target": "sqlalchemy" + } + ], + "children": [ + { + "name": "TaskRecord", + "type": "Class", + "start_line": 17, + "end_line": 32, + "tags": { + "PURPOSE": "Represents a persistent record of a task execution." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "backend.src.services.mapping_service", + "type": "Module", + "start_line": 1, + "end_line": 69, + "tags": { + "SEMANTICS": "service, mapping, fuzzy-matching, superset", + "PURPOSE": "Orchestrates database fetching and fuzzy matching suggestions.", + "LAYER": "Service", + "INVARIANT": "Suggestions are based on database names." + }, + "relations": [ + { + "type": "DEPENDS_ON", + "target": "backend.src.core.superset_client" + }, + { + "type": "DEPENDS_ON", + "target": "backend.src.core.utils.matching" + } + ], + "children": [ + { + "name": "MappingService", + "type": "Class", + "start_line": 18, + "end_line": 67, + "tags": { + "PURPOSE": "Service for handling database mapping logic." + }, + "relations": [], + "children": [ + { + "name": "MappingService.__init__", + "type": "Function", + "start_line": 22, + "end_line": 26, + "tags": { + "PURPOSE": "Initializes the mapping service with a config manager." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "MappingService._get_client", + "type": "Function", + "start_line": 28, + "end_line": 47, + "tags": { + "PURPOSE": "Helper to get an initialized SupersetClient for an environment." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "MappingService.get_suggestions", + "type": "Function", + "start_line": 49, + "end_line": 65, + "tags": { + "PURPOSE": "Fetches databases from both environments and returns fuzzy matching suggestions.", + "PARAM": "target_env_id (str) - Target environment ID.", + "RETURN": "List[Dict] - Suggested mappings." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "ConfigManagerModule", + "type": "Module", + "start_line": 1, + "end_line": 238, + "tags": { + "SEMANTICS": "config, manager, persistence, json", + "PURPOSE": "Manages application configuration, including loading/saving to JSON and CRUD for environments.", + "LAYER": "Core", + "INVARIANT": "Configuration must always be valid according to AppConfig model.", + "PUBLIC_API": "ConfigManager" + }, + "relations": [ + { + "type": "DEPENDS_ON", + "target": "ConfigModels" + }, + { + "type": "CALLS", + "target": "logger" + }, + { + "type": "WRITES_TO", + "target": "config.json" + } + ], + "children": [ + { + "name": "ConfigManager", + "type": "Class", + "start_line": 22, + "end_line": 236, + "tags": { + "PURPOSE": "A class to handle application configuration persistence and management." + }, + "relations": [ + { + "type": "WRITES_TO", + "target": "config.json" + } + ], + "children": [ + { + "name": "__init__", + "type": "Function", + "start_line": 27, + "end_line": 49, + "tags": { + "PURPOSE": "Initializes the ConfigManager.", + "PRE": "isinstance(config_path, str) and len(config_path) > 0", + "POST": "self.config is an instance of AppConfig", + "PARAM": "config_path (str) - Path to the configuration file." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "_load_config", + "type": "Function", + "start_line": 51, + "end_line": 81, + "tags": { + "PURPOSE": "Loads the configuration from disk or creates a default one.", + "POST": "isinstance(return, AppConfig)", + "RETURN": "AppConfig - The loaded or default configuration." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "_save_config_to_disk", + "type": "Function", + "start_line": 83, + "end_line": 100, + "tags": { + "PURPOSE": "Saves the provided configuration object to disk.", + "PRE": "isinstance(config, AppConfig)", + "PARAM": "config (AppConfig) - The configuration to save." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "save", + "type": "Function", + "start_line": 102, + "end_line": 106, + "tags": { + "PURPOSE": "Saves the current configuration state to disk." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "get_config", + "type": "Function", + "start_line": 108, + "end_line": 113, + "tags": { + "PURPOSE": "Returns the current configuration.", + "RETURN": "AppConfig - The current configuration." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "update_global_settings", + "type": "Function", + "start_line": 115, + "end_line": 133, + "tags": { + "PURPOSE": "Updates the global settings and persists the change.", + "PRE": "isinstance(settings, GlobalSettings)", + "PARAM": "settings (GlobalSettings) - The new global settings." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "validate_path", + "type": "Function", + "start_line": 135, + "end_line": 151, + "tags": { + "PURPOSE": "Validates if a path exists and is writable.", + "PARAM": "path (str) - The path to validate.", + "RETURN": "tuple (bool, str) - (is_valid, message)" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "get_environments", + "type": "Function", + "start_line": 153, + "end_line": 158, + "tags": { + "PURPOSE": "Returns the list of configured environments.", + "RETURN": "List[Environment] - List of environments." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "has_environments", + "type": "Function", + "start_line": 160, + "end_line": 165, + "tags": { + "PURPOSE": "Checks if at least one environment is configured.", + "RETURN": "bool - True if at least one environment exists." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "add_environment", + "type": "Function", + "start_line": 167, + "end_line": 184, + "tags": { + "PURPOSE": "Adds a new environment to the configuration.", + "PRE": "isinstance(env, Environment)", + "PARAM": "env (Environment) - The environment to add." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "update_environment", + "type": "Function", + "start_line": 186, + "end_line": 213, + "tags": { + "PURPOSE": "Updates an existing environment.", + "PRE": "isinstance(env_id, str) and len(env_id) > 0 and isinstance(updated_env, Environment)", + "PARAM": "updated_env (Environment) - The updated environment data.", + "RETURN": "bool - True if updated, False otherwise." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "delete_environment", + "type": "Function", + "start_line": 215, + "end_line": 234, + "tags": { + "PURPOSE": "Deletes an environment by ID.", + "PRE": "isinstance(env_id, str) and len(env_id) > 0", + "PARAM": "env_id (str) - The ID of the environment to delete." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "backend.src.core.superset_client", + "type": "Module", + "start_line": 1, + "end_line": 83, + "tags": { + "SEMANTICS": "superset, api, client, database, metadata", + "PURPOSE": "Extends the base SupersetClient with database-specific metadata fetching.", + "LAYER": "Core", + "INVARIANT": "All database metadata requests must include UUID and name." + }, + "relations": [ + { + "type": "INHERITS_FROM", + "target": "superset_tool.client.SupersetClient" + } + ], + "children": [ + { + "name": "SupersetClient", + "type": "Class", + "start_line": 16, + "end_line": 81, + "tags": { + "PURPOSE": "Extended SupersetClient for migration-specific operations." + }, + "relations": [], + "children": [ + { + "name": "SupersetClient.get_databases_summary", + "type": "Function", + "start_line": 20, + "end_line": 38, + "tags": { + "PURPOSE": "Fetch a summary of databases including uuid, name, and engine.", + "POST": "Returns a list of database dictionaries with 'engine' field.", + "RETURN": "List[Dict] - Summary of databases." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "SupersetClient.get_database_by_uuid", + "type": "Function", + "start_line": 40, + "end_line": 53, + "tags": { + "PURPOSE": "Find a database by its UUID.", + "PARAM": "db_uuid (str) - The UUID of the database.", + "RETURN": "Optional[Dict] - Database info if found, else None." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "SupersetClient.get_dashboards_summary", + "type": "Function", + "start_line": 55, + "end_line": 79, + "tags": { + "PURPOSE": "Fetches dashboard metadata optimized for the grid.", + "POST": "Returns a list of dashboard dictionaries.", + "RETURN": "List[Dict]" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "backend.src.core.migration_engine", + "type": "Module", + "start_line": 1, + "end_line": 98, + "tags": { + "SEMANTICS": "migration, engine, zip, yaml, transformation", + "PURPOSE": "Handles the interception and transformation of Superset asset ZIP archives.", + "LAYER": "Core", + "INVARIANT": "ZIP structure must be preserved after transformation." + }, + "relations": [ + { + "type": "DEPENDS_ON", + "target": "PyYAML" + } + ], + "children": [ + { + "name": "MigrationEngine", + "type": "Class", + "start_line": 22, + "end_line": 96, + "tags": { + "PURPOSE": "Engine for transforming Superset export ZIPs." + }, + "relations": [], + "children": [ + { + "name": "MigrationEngine.transform_zip", + "type": "Function", + "start_line": 26, + "end_line": 76, + "tags": { + "PURPOSE": "Extracts ZIP, replaces database UUIDs in YAMLs, and re-packages.", + "PARAM": "strip_databases (bool) - Whether to remove the databases directory from the archive.", + "RETURN": "bool - True if successful." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "MigrationEngine._transform_yaml", + "type": "Function", + "start_line": 78, + "end_line": 94, + "tags": { + "PURPOSE": "Replaces database_uuid in a single YAML file." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "LoggerModule", + "type": "Module", + "start_line": 1, + "end_line": 188, + "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.", + "LAYER": "Core", + "RELATION": "Used by the main application and other modules to log events. The WebSocketLogHandler is used by the WebSocket endpoint in app.py." + }, + "relations": [], + "children": [ + { + "name": "BeliefFormatter", + "type": "Class", + "start_line": 22, + "end_line": 31, + "tags": { + "PURPOSE": "Custom logging formatter that adds belief state prefixes to log messages." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "LogEntry", + "type": "Class", + "start_line": 34, + "end_line": 43, + "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." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "BeliefScope", + "type": "Function", + "start_line": 45, + "end_line": 74, + "tags": { + "PURPOSE": "Context manager for structured Belief State logging." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "ConfigureLogger", + "type": "Function", + "start_line": 76, + "end_line": 118, + "tags": { + "PURPOSE": "Configures the logger with the provided logging settings.", + "PRE": "config is a valid LoggingConfig instance.", + "POST": "Logger level, handlers, and belief state flag are updated.", + "PARAM": "config (LoggingConfig) - The logging configuration." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "WebSocketLogHandler", + "type": "Class", + "start_line": 120, + "end_line": 161, + "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." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "Logger", + "type": "Global", + "start_line": 163, + "end_line": 187, + "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": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "backend.src.core.database", + "type": "Module", + "start_line": 1, + "end_line": 77, + "tags": { + "SEMANTICS": "database, sqlite, sqlalchemy, session, persistence", + "PURPOSE": "Configures the SQLite database connection and session management.", + "LAYER": "Core", + "INVARIANT": "A single engine instance is used for the entire application." + }, + "relations": [ + { + "type": "DEPENDS_ON", + "target": "sqlalchemy" + }, + { + "type": "USES", + "target": "backend.src.models.mapping" + } + ], + "children": [ + { + "name": "DATABASE_URL", + "type": "Constant", + "start_line": 20, + "end_line": 22, + "tags": {}, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "TASKS_DATABASE_URL", + "type": "Constant", + "start_line": 24, + "end_line": 26, + "tags": {}, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "engine", + "type": "Variable", + "start_line": 28, + "end_line": 30, + "tags": {}, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "tasks_engine", + "type": "Variable", + "start_line": 32, + "end_line": 34, + "tags": {}, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "SessionLocal", + "type": "Class", + "start_line": 36, + "end_line": 39, + "tags": { + "PURPOSE": "A session factory for the main mappings database." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "TasksSessionLocal", + "type": "Class", + "start_line": 41, + "end_line": 44, + "tags": { + "PURPOSE": "A session factory for the tasks execution database." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "init_db", + "type": "Function", + "start_line": 46, + "end_line": 51, + "tags": { + "PURPOSE": "Initializes the database by creating all tables." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "get_db", + "type": "Function", + "start_line": 53, + "end_line": 63, + "tags": { + "PURPOSE": "Dependency for getting a database session.", + "POST": "Session is closed after use.", + "RETURN": "Generator[Session, None, None]" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "get_tasks_db", + "type": "Function", + "start_line": 65, + "end_line": 75, + "tags": { + "PURPOSE": "Dependency for getting a tasks database session.", + "POST": "Session is closed after use.", + "RETURN": "Generator[Session, None, None]" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "ConfigModels", + "type": "Module", + "start_line": 1, + "end_line": 60, + "tags": { + "SEMANTICS": "config, models, pydantic", + "PURPOSE": "Defines the data models for application configuration using Pydantic.", + "LAYER": "Core" + }, + "relations": [ + { + "type": "READS_FROM", + "target": "config.json" + }, + { + "type": "USED_BY", + "target": "ConfigManager" + } + ], + "children": [ + { + "name": "Schedule", + "type": "DataClass", + "start_line": 11, + "end_line": 16, + "tags": { + "PURPOSE": "Represents a backup schedule configuration." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "Environment", + "type": "DataClass", + "start_line": 18, + "end_line": 28, + "tags": { + "PURPOSE": "Represents a Superset environment configuration." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "LoggingConfig", + "type": "DataClass", + "start_line": 30, + "end_line": 38, + "tags": { + "PURPOSE": "Defines the configuration for the application's logging system." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "GlobalSettings", + "type": "DataClass", + "start_line": 40, + "end_line": 51, + "tags": { + "PURPOSE": "Represents global application settings." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "AppConfig", + "type": "DataClass", + "start_line": 53, + "end_line": 58, + "tags": { + "PURPOSE": "The root configuration model containing all application settings." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "SchedulerModule", + "type": "Module", + "start_line": 1, + "end_line": 104, + "tags": { + "SEMANTICS": "scheduler, apscheduler, cron, backup", + "PURPOSE": "Manages scheduled tasks using APScheduler.", + "LAYER": "Core", + "RELATION": "Uses TaskManager to run scheduled backups." + }, + "relations": [], + "children": [ + { + "name": "SchedulerService", + "type": "Class", + "start_line": 16, + "end_line": 103, + "tags": { + "SEMANTICS": "scheduler, service, apscheduler", + "PURPOSE": "Provides a service to manage scheduled backup tasks." + }, + "relations": [], + "children": [ + { + "name": "SchedulerService.start", + "type": "Function", + "start_line": 27, + "end_line": 35, + "tags": { + "PURPOSE": "Starts the background scheduler and loads initial schedules." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "SchedulerService.stop", + "type": "Function", + "start_line": 37, + "end_line": 44, + "tags": { + "PURPOSE": "Stops the background scheduler." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "SchedulerService.load_schedules", + "type": "Function", + "start_line": 46, + "end_line": 57, + "tags": { + "PURPOSE": "Loads backup schedules from configuration and registers them." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "SchedulerService.add_backup_job", + "type": "Function", + "start_line": 59, + "end_line": 77, + "tags": { + "PURPOSE": "Adds a scheduled backup job for an environment.", + "PARAM": "cron_expression (str) - The cron expression for the schedule." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "SchedulerService._trigger_backup", + "type": "Function", + "start_line": 79, + "end_line": 101, + "tags": { + "PURPOSE": "Triggered by the scheduler to start a backup task.", + "PARAM": "env_id (str) - The ID of the environment." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "PluginLoader", + "type": "Class", + "start_line": 8, + "end_line": 169, + "tags": { + "SEMANTICS": "plugin, loader, dynamic, import", + "PURPOSE": "Scans a specified directory for Python modules, dynamically loads them, and registers any classes that are valid implementations of the PluginBase interface.", + "LAYER": "Core", + "RELATION": "Depends on PluginBase. It is used by the main application to discover and manage available plugins." + }, + "relations": [], + "children": [ + { + "name": "PluginLoader.__init__", + "type": "Function", + "start_line": 19, + "end_line": 27, + "tags": { + "PURPOSE": "Initializes the PluginLoader with a directory to scan.", + "PARAM": "plugin_dir (str) - The directory containing plugin modules." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "PluginLoader._load_plugins", + "type": "Function", + "start_line": 29, + "end_line": 50, + "tags": { + "PURPOSE": "Scans the plugin directory and loads all valid plugins." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "PluginLoader._load_module", + "type": "Function", + "start_line": 52, + "end_line": 97, + "tags": { + "PURPOSE": "Loads a single Python module and discovers PluginBase implementations.", + "PARAM": "file_path (str) - The path to the module file." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "PluginLoader._register_plugin", + "type": "Function", + "start_line": 99, + "end_line": 134, + "tags": { + "PURPOSE": "Registers a PluginBase instance and its configuration.", + "PARAM": "plugin_instance (PluginBase) - The plugin instance to register." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "PluginLoader.get_plugin", + "type": "Function", + "start_line": 137, + "end_line": 146, + "tags": { + "PURPOSE": "Retrieves a loaded plugin instance by its ID.", + "PARAM": "plugin_id (str) - The unique identifier of the plugin.", + "RETURN": "Optional[PluginBase] - The plugin instance if found, otherwise None." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "PluginLoader.get_all_plugin_configs", + "type": "Function", + "start_line": 148, + "end_line": 156, + "tags": { + "PURPOSE": "Returns a list of all registered plugin configurations.", + "RETURN": "List[PluginConfig] - A list of plugin configurations." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "PluginLoader.has_plugin", + "type": "Function", + "start_line": 158, + "end_line": 167, + "tags": { + "PURPOSE": "Checks if a plugin with the given ID is registered.", + "PARAM": "plugin_id (str) - The unique identifier of the plugin.", + "RETURN": "bool - True if the plugin is registered, False otherwise." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "PluginBase", + "type": "Class", + "start_line": 6, + "end_line": 57, + "tags": { + "SEMANTICS": "plugin, interface, base, abstract", + "PURPOSE": "Defines the abstract base class that all plugins must implement to be recognized by the system. It enforces a common structure for plugin metadata and execution.", + "LAYER": "Core", + "RELATION": "Used by PluginLoader to identify valid plugins.", + "INVARIANT": "All plugins MUST inherit from this class." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "PluginConfig", + "type": "Class", + "start_line": 59, + "end_line": 71, + "tags": { + "SEMANTICS": "plugin, config, schema, pydantic", + "PURPOSE": "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", + "RELATION": "Instantiated by PluginLoader after validating a PluginBase instance." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "backend.src.core.utils.matching", + "type": "Module", + "start_line": 1, + "end_line": 53, + "tags": { + "SEMANTICS": "fuzzy, matching, rapidfuzz, database, mapping", + "PURPOSE": "Provides utility functions for fuzzy matching database names.", + "LAYER": "Core", + "INVARIANT": "Confidence scores are returned as floats between 0.0 and 1.0." + }, + "relations": [ + { + "type": "DEPENDS_ON", + "target": "rapidfuzz" + } + ], + "children": [ + { + "name": "suggest_mappings", + "type": "Function", + "start_line": 15, + "end_line": 51, + "tags": { + "PURPOSE": "Suggests mappings between source and target databases using fuzzy matching.", + "PRE": "source_databases and target_databases are lists of dictionaries with 'uuid' and 'database_name'.", + "POST": "Returns a list of suggested mappings with confidence scores.", + "PARAM": "threshold (int) - Minimum confidence score (0-100).", + "RETURN": "List[Dict] - Suggested mappings." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "TaskManagerModule", + "type": "Module", + "start_line": 1, + "end_line": 376, + "tags": { + "SEMANTICS": "task, manager, lifecycle, execution, state", + "PURPOSE": "Manages the lifecycle of tasks, including their creation, execution, and state tracking. It uses a thread pool to run plugins asynchronously.", + "LAYER": "Core", + "RELATION": "Depends on PluginLoader to get plugin instances. It is used by the API layer to create and query tasks.", + "INVARIANT": "Task IDs are unique.", + "CONSTRAINT": "Must use belief_scope for logging." + }, + "relations": [], + "children": [ + { + "name": "TaskManager", + "type": "Class", + "start_line": 20, + "end_line": 375, + "tags": { + "SEMANTICS": "task, manager, lifecycle, execution, state", + "PURPOSE": "Manages the lifecycle of tasks, including their creation, execution, and state tracking." + }, + "relations": [], + "children": [ + { + "name": "TaskManager.__init__", + "type": "Function", + "start_line": 28, + "end_line": 49, + "tags": { + "PURPOSE": "Initialize the TaskManager with dependencies.", + "PRE": "plugin_loader is initialized.", + "POST": "TaskManager is ready to accept tasks.", + "PARAM": "plugin_loader - The plugin loader instance." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "TaskManager.create_task", + "type": "Function", + "start_line": 51, + "end_line": 78, + "tags": { + "PURPOSE": "Creates and queues a new task for execution.", + "PRE": "Plugin with plugin_id exists. Params are valid.", + "POST": "Task is created, added to registry, and scheduled for execution.", + "PARAM": "user_id (Optional[str]) - ID of the user requesting the task.", + "RETURN": "Task - The created task instance.", + "THROWS": "ValueError if plugin not found or params invalid." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "TaskManager._run_task", + "type": "Function", + "start_line": 80, + "end_line": 120, + "tags": { + "PURPOSE": "Internal method to execute a task.", + "PRE": "Task exists in registry.", + "POST": "Task is executed, status updated to SUCCESS or FAILED.", + "PARAM": "task_id (str) - The ID of the task to run." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "TaskManager.resolve_task", + "type": "Function", + "start_line": 122, + "end_line": 144, + "tags": { + "PURPOSE": "Resumes a task that is awaiting mapping.", + "PRE": "Task exists and is in AWAITING_MAPPING state.", + "POST": "Task status updated to RUNNING, params updated, execution resumed.", + "PARAM": "resolution_params (Dict[str, Any]) - Params to resolve the wait.", + "THROWS": "ValueError if task not found or not awaiting mapping." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "TaskManager.wait_for_resolution", + "type": "Function", + "start_line": 146, + "end_line": 165, + "tags": { + "PURPOSE": "Pauses execution and waits for a resolution signal.", + "PRE": "Task exists.", + "POST": "Execution pauses until future is set.", + "PARAM": "task_id (str) - The ID of the task." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "TaskManager.wait_for_input", + "type": "Function", + "start_line": 167, + "end_line": 185, + "tags": { + "PURPOSE": "Pauses execution and waits for user input.", + "PRE": "Task exists.", + "POST": "Execution pauses until future is set via resume_task_with_password.", + "PARAM": "task_id (str) - The ID of the task." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "TaskManager.get_task", + "type": "Function", + "start_line": 187, + "end_line": 193, + "tags": { + "PURPOSE": "Retrieves a task by its ID.", + "PARAM": "task_id (str) - ID of the task.", + "RETURN": "Optional[Task] - The task or None." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "TaskManager.get_all_tasks", + "type": "Function", + "start_line": 195, + "end_line": 200, + "tags": { + "PURPOSE": "Retrieves all registered tasks.", + "RETURN": "List[Task] - All tasks." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "TaskManager.get_tasks", + "type": "Function", + "start_line": 202, + "end_line": 217, + "tags": { + "PURPOSE": "Retrieves tasks with pagination and optional status filter.", + "PRE": "limit and offset are non-negative integers.", + "POST": "Returns a list of tasks sorted by start_time descending.", + "PARAM": "status (Optional[TaskStatus]) - Filter by task status.", + "RETURN": "List[Task] - List of tasks matching criteria." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "TaskManager.get_task_logs", + "type": "Function", + "start_line": 219, + "end_line": 226, + "tags": { + "PURPOSE": "Retrieves logs for a specific task.", + "PARAM": "task_id (str) - ID of the task.", + "RETURN": "List[LogEntry] - List of log entries." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "TaskManager._add_log", + "type": "Function", + "start_line": 228, + "end_line": 249, + "tags": { + "PURPOSE": "Adds a log entry to a task and notifies subscribers.", + "PRE": "Task exists.", + "POST": "Log added to task and pushed to queues.", + "PARAM": "context (Optional[Dict]) - Log context." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "TaskManager.subscribe_logs", + "type": "Function", + "start_line": 251, + "end_line": 261, + "tags": { + "PURPOSE": "Subscribes to real-time logs for a task.", + "PARAM": "task_id (str) - ID of the task.", + "RETURN": "asyncio.Queue - Queue for log entries." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "TaskManager.unsubscribe_logs", + "type": "Function", + "start_line": 263, + "end_line": 273, + "tags": { + "PURPOSE": "Unsubscribes from real-time logs for a task.", + "PARAM": "queue (asyncio.Queue) - Queue to remove." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "TaskManager.load_persisted_tasks", + "type": "Function", + "start_line": 275, + "end_line": 282, + "tags": { + "PURPOSE": "Load persisted tasks using persistence service." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "TaskManager.await_input", + "type": "Function", + "start_line": 284, + "end_line": 304, + "tags": { + "PURPOSE": "Transition a task to AWAITING_INPUT state with input request.", + "PRE": "Task exists and is in RUNNING state.", + "POST": "Task status changed to AWAITING_INPUT, input_request set, persisted.", + "PARAM": "input_request (Dict) - Details about required input.", + "THROWS": "ValueError if task not found or not RUNNING." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "TaskManager.resume_task_with_password", + "type": "Function", + "start_line": 306, + "end_line": 333, + "tags": { + "PURPOSE": "Resume a task that is awaiting input with provided passwords.", + "PRE": "Task exists and is in AWAITING_INPUT state.", + "POST": "Task status changed to RUNNING, passwords injected, task resumed.", + "PARAM": "passwords (Dict[str, str]) - Mapping of database name to password.", + "THROWS": "ValueError if task not found, not awaiting input, or passwords invalid." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "TaskManager.clear_tasks", + "type": "Function", + "start_line": 335, + "end_line": 373, + "tags": { + "PURPOSE": "Clears tasks based on status filter.", + "PARAM": "status (Optional[TaskStatus]) - Filter by task status.", + "RETURN": "int - Number of tasks cleared." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "TaskManagerPackage", + "type": "Module", + "start_line": 1, + "end_line": 12, + "tags": { + "SEMANTICS": "task, manager, package, exports", + "PURPOSE": "Exports the public API of the task manager package.", + "LAYER": "Core", + "RELATION": "Aggregates models and manager." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "TaskCleanupModule", + "type": "Module", + "start_line": 1, + "end_line": 40, + "tags": { + "SEMANTICS": "task, cleanup, retention", + "PURPOSE": "Implements task cleanup and retention policies.", + "LAYER": "Core", + "RELATION": "Uses TaskPersistenceService to delete old tasks." + }, + "relations": [], + "children": [ + { + "name": "TaskCleanupService", + "type": "Class", + "start_line": 12, + "end_line": 39, + "tags": { + "PURPOSE": "Provides methods to clean up old task records." + }, + "relations": [], + "children": [ + { + "name": "TaskCleanupService.run_cleanup", + "type": "Function", + "start_line": 19, + "end_line": 37, + "tags": { + "PURPOSE": "Deletes tasks older than the configured retention period." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "TaskManagerModels", + "type": "Module", + "start_line": 1, + "end_line": 67, + "tags": { + "SEMANTICS": "task, models, pydantic, enum, state", + "PURPOSE": "Defines the data models and enumerations used by the Task Manager.", + "LAYER": "Core", + "RELATION": "Used by TaskManager and API routes.", + "INVARIANT": "Task IDs are immutable once created.", + "CONSTRAINT": "Must use Pydantic for data validation." + }, + "relations": [], + "children": [ + { + "name": "TaskStatus", + "type": "Enum", + "start_line": 18, + "end_line": 28, + "tags": { + "SEMANTICS": "task, status, state, enum", + "PURPOSE": "Defines the possible states a task can be in during its lifecycle." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "LogEntry", + "type": "Class", + "start_line": 30, + "end_line": 38, + "tags": { + "SEMANTICS": "log, entry, record, pydantic", + "PURPOSE": "A Pydantic model representing a single, structured log entry associated with a task." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "Task", + "type": "Class", + "start_line": 40, + "end_line": 65, + "tags": { + "SEMANTICS": "task, job, execution, state, pydantic", + "PURPOSE": "A Pydantic model representing a single execution instance of a plugin, including its status, parameters, and logs." + }, + "relations": [], + "children": [ + { + "name": "Task.__init__", + "type": "Function", + "start_line": 55, + "end_line": 64, + "tags": { + "PURPOSE": "Initializes the Task model and validates input_request for AWAITING_INPUT status.", + "PRE": "If status is AWAITING_INPUT, input_request must be provided.", + "POST": "Task instance is created or ValueError is raised.", + "PARAM": "**data - Keyword arguments for model initialization." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "TaskPersistenceModule", + "type": "Module", + "start_line": 1, + "end_line": 141, + "tags": { + "SEMANTICS": "persistence, sqlite, sqlalchemy, task, storage", + "PURPOSE": "Handles the persistence of tasks using SQLAlchemy and the tasks.db database.", + "LAYER": "Core", + "RELATION": "Used by TaskManager to save and load tasks.", + "INVARIANT": "Database schema must match the TaskRecord model structure." + }, + "relations": [], + "children": [ + { + "name": "TaskPersistenceService", + "type": "Class", + "start_line": 20, + "end_line": 140, + "tags": { + "SEMANTICS": "persistence, service, database, sqlalchemy", + "PURPOSE": "Provides methods to save and load tasks from the tasks.db database using SQLAlchemy." + }, + "relations": [], + "children": [ + { + "name": "TaskPersistenceService.persist_task", + "type": "Function", + "start_line": 28, + "end_line": 68, + "tags": { + "PURPOSE": "Persists or updates a single task in the database.", + "PARAM": "task (Task) - The task object to persist." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "TaskPersistenceService.persist_tasks", + "type": "Function", + "start_line": 70, + "end_line": 76, + "tags": { + "PURPOSE": "Persists multiple tasks.", + "PARAM": "tasks (List[Task]) - The list of tasks to persist." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "TaskPersistenceService.load_tasks", + "type": "Function", + "start_line": 78, + "end_line": 120, + "tags": { + "PURPOSE": "Loads tasks from the database.", + "PARAM": "status (Optional[TaskStatus]) - Filter by status.", + "RETURN": "List[Task] - The loaded tasks." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "TaskPersistenceService.delete_tasks", + "type": "Function", + "start_line": 122, + "end_line": 138, + "tags": { + "PURPOSE": "Deletes specific tasks from the database.", + "PARAM": "task_ids (List[str]) - List of task IDs to delete." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "BackupPlugin", + "type": "Module", + "start_line": 1, + "end_line": 149, + "tags": { + "SEMANTICS": "backup, superset, automation, dashboard, plugin", + "PURPOSE": "A plugin that provides functionality to back up Superset dashboards.", + "LAYER": "App" + }, + "relations": [ + { + "type": "IMPLEMENTS", + "target": "PluginBase" + }, + { + "type": "DEPENDS_ON", + "target": "superset_tool.client" + }, + { + "type": "DEPENDS_ON", + "target": "superset_tool.utils" + } + ], + "children": [ + { + "name": "BackupPlugin", + "type": "Class", + "start_line": 28, + "end_line": 148, + "tags": { + "PURPOSE": "Implementation of the backup plugin logic." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "MigrationPlugin", + "type": "Module", + "start_line": 1, + "end_line": 300, + "tags": { + "SEMANTICS": "migration, superset, automation, dashboard, plugin", + "PURPOSE": "A plugin that provides functionality to migrate Superset dashboards between environments.", + "LAYER": "App" + }, + "relations": [ + { + "type": "IMPLEMENTS", + "target": "PluginBase" + }, + { + "type": "DEPENDS_ON", + "target": "superset_tool.client" + }, + { + "type": "DEPENDS_ON", + "target": "superset_tool.utils" + } + ], + "children": [ + { + "name": "MigrationPlugin", + "type": "Class", + "start_line": 24, + "end_line": 299, + "tags": { + "PURPOSE": "Implementation of the migration plugin logic." + }, + "relations": [], + "children": [ + { + "name": "MigrationPlugin.execute", + "type": "Action", + "start_line": 105, + "end_line": 292, + "tags": { + "PURPOSE": "Execute the migration logic with proper task logging." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "AuthModule", + "type": "Module", + "start_line": 1, + "end_line": 52, + "tags": { + "SEMANTICS": "auth, authentication, adfs, oauth, middleware", + "PURPOSE": "Implements ADFS authentication using Authlib for FastAPI. It provides a dependency to protect endpoints.", + "LAYER": "UI (API)", + "RELATION": "Used by API routers to protect endpoints that require authentication." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "SettingsRouter", + "type": "Module", + "start_line": 1, + "end_line": 218, + "tags": { + "SEMANTICS": "settings, api, router, fastapi", + "PURPOSE": "Provides API endpoints for managing application settings and Superset environments.", + "LAYER": "UI (API)", + "INVARIANT": "All settings changes must be persisted via ConfigManager.", + "PUBLIC_API": "router" + }, + "relations": [ + { + "type": "DEPENDS_ON", + "target": "ConfigManager" + }, + { + "type": "DEPENDS_ON", + "target": "ConfigModels" + } + ], + "children": [ + { + "name": "get_settings", + "type": "Function", + "start_line": 26, + "end_line": 38, + "tags": { + "PURPOSE": "Retrieves all application settings.", + "RETURN": "AppConfig - The current configuration." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "update_global_settings", + "type": "Function", + "start_line": 40, + "end_line": 52, + "tags": { + "PURPOSE": "Updates global application settings.", + "PARAM": "settings (GlobalSettings) - The new global settings.", + "RETURN": "GlobalSettings - The updated settings." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "get_environments", + "type": "Function", + "start_line": 54, + "end_line": 61, + "tags": { + "PURPOSE": "Lists all configured Superset environments.", + "RETURN": "List[Environment] - List of environments." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "add_environment", + "type": "Function", + "start_line": 63, + "end_line": 94, + "tags": { + "PURPOSE": "Adds a new Superset environment.", + "PARAM": "env (Environment) - The environment to add.", + "RETURN": "Environment - The added environment." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "update_environment", + "type": "Function", + "start_line": 96, + "end_line": 137, + "tags": { + "PURPOSE": "Updates an existing Superset environment.", + "PARAM": "env (Environment) - The updated environment data.", + "RETURN": "Environment - The updated environment." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "delete_environment", + "type": "Function", + "start_line": 139, + "end_line": 150, + "tags": { + "PURPOSE": "Deletes a Superset environment.", + "PARAM": "id (str) - The ID of the environment to delete." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "test_environment_connection", + "type": "Function", + "start_line": 152, + "end_line": 193, + "tags": { + "PURPOSE": "Tests the connection to a Superset environment.", + "PARAM": "id (str) - The ID of the environment to test.", + "RETURN": "dict - Success message or error." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "validate_backup_path", + "type": "Function", + "start_line": 195, + "end_line": 216, + "tags": { + "PURPOSE": "Validates if a backup path exists and is writable.", + "PARAM": "path (str) - The path to validate.", + "RETURN": "dict - Validation result." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "TasksRouter", + "type": "Module", + "start_line": 1, + "end_line": 120, + "tags": { + "SEMANTICS": "api, router, tasks, create, list, get", + "PURPOSE": "Defines the FastAPI router for task-related endpoints, allowing clients to create, list, and get the status of tasks.", + "LAYER": "UI (API)", + "RELATION": "Depends on the TaskManager. It is included by the main app." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "backend.src.api.routes.environments", + "type": "Module", + "start_line": 1, + "end_line": 124, + "tags": { + "SEMANTICS": "api, environments, superset, databases", + "PURPOSE": "API endpoints for listing environments and their databases.", + "LAYER": "API", + "INVARIANT": "Environment IDs must exist in the configuration." + }, + "relations": [ + { + "type": "DEPENDS_ON", + "target": "backend.src.dependencies" + }, + { + "type": "DEPENDS_ON", + "target": "backend.src.core.superset_client" + } + ], + "children": [ + { + "name": "ScheduleSchema", + "type": "DataClass", + "start_line": 23, + "end_line": 27, + "tags": {}, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "EnvironmentResponse", + "type": "DataClass", + "start_line": 29, + "end_line": 35, + "tags": {}, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "DatabaseResponse", + "type": "DataClass", + "start_line": 37, + "end_line": 42, + "tags": {}, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "get_environments", + "type": "Function", + "start_line": 44, + "end_line": 64, + "tags": { + "PURPOSE": "List all configured environments.", + "RETURN": "List[EnvironmentResponse]" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "update_environment_schedule", + "type": "Function", + "start_line": 66, + "end_line": 92, + "tags": { + "PURPOSE": "Update backup schedule for an environment.", + "PARAM": "schedule (ScheduleSchema) - The new schedule." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "get_environment_databases", + "type": "Function", + "start_line": 94, + "end_line": 122, + "tags": { + "PURPOSE": "Fetch the list of databases from a specific environment.", + "PARAM": "id (str) - The environment ID.", + "RETURN": "List[Dict] - List of databases." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "PluginsRouter", + "type": "Module", + "start_line": 1, + "end_line": 22, + "tags": { + "SEMANTICS": "api, router, plugins, list", + "PURPOSE": "Defines the FastAPI router for plugin-related endpoints, allowing clients to list available plugins.", + "LAYER": "UI (API)", + "RELATION": "Depends on the PluginLoader and PluginConfig. It is included by the main app." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "backend.src.api.routes.migration", + "type": "Module", + "start_line": 1, + "end_line": 76, + "tags": { + "SEMANTICS": "api, migration, dashboards", + "PURPOSE": "API endpoints for migration operations.", + "LAYER": "API" + }, + "relations": [ + { + "type": "DEPENDS_ON", + "target": "backend.src.dependencies" + }, + { + "type": "DEPENDS_ON", + "target": "backend.src.models.dashboard" + } + ], + "children": [ + { + "name": "get_dashboards", + "type": "Function", + "start_line": 17, + "end_line": 40, + "tags": { + "PURPOSE": "Fetch all dashboards from the specified environment for the grid.", + "PRE": "Environment ID must be valid.", + "POST": "Returns a list of dashboard metadata.", + "PARAM": "env_id (str) - The ID of the environment to fetch from.", + "RETURN": "List[DashboardMetadata]" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "execute_migration", + "type": "Function", + "start_line": 42, + "end_line": 74, + "tags": { + "PURPOSE": "Execute the migration of selected dashboards.", + "PRE": "Selection must be valid and environments must exist.", + "POST": "Starts the migration task and returns the task ID.", + "PARAM": "selection (DashboardSelection) - The dashboards to migrate.", + "RETURN": "Dict - {\"task_id\": str, \"message\": str}" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "backend.src.api.routes.mappings", + "type": "Module", + "start_line": 1, + "end_line": 110, + "tags": { + "SEMANTICS": "api, mappings, database, fuzzy-matching", + "PURPOSE": "API endpoints for managing database mappings and getting suggestions.", + "LAYER": "API", + "INVARIANT": "Mappings are persisted in the SQLite database." + }, + "relations": [ + { + "type": "DEPENDS_ON", + "target": "backend.src.dependencies" + }, + { + "type": "DEPENDS_ON", + "target": "backend.src.core.database" + }, + { + "type": "DEPENDS_ON", + "target": "backend.src.services.mapping_service" + } + ], + "children": [ + { + "name": "MappingCreate", + "type": "DataClass", + "start_line": 24, + "end_line": 32, + "tags": {}, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "MappingResponse", + "type": "DataClass", + "start_line": 34, + "end_line": 46, + "tags": {}, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "SuggestRequest", + "type": "DataClass", + "start_line": 48, + "end_line": 52, + "tags": {}, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "get_mappings", + "type": "Function", + "start_line": 54, + "end_line": 68, + "tags": { + "PURPOSE": "List all saved database mappings." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "create_mapping", + "type": "Function", + "start_line": 70, + "end_line": 93, + "tags": { + "PURPOSE": "Create or update a database mapping." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + }, + { + "name": "suggest_mappings_api", + "type": "Function", + "start_line": 95, + "end_line": 108, + "tags": { + "PURPOSE": "Get suggested mappings based on fuzzy matching." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [] + } + } + ], + "compliance": { + "valid": true, + "issues": [] + } + } + ] +} \ No newline at end of file diff --git a/specs/project_map.md b/specs/project_map.md new file mode 100644 index 0000000..b1ad279 --- /dev/null +++ b/specs/project_map.md @@ -0,0 +1,980 @@ +# Project Semantic Map + +> Compressed view for AI Context. Generated automatically. + +- 📦 **generate_semantic_map** (`Module`) + - 📝 Scans the codebase to generate a Semantic Map and Compliance Report based on the System Standard. + - 🏗️ Layer: DevOps/Tooling + - ℂ **SemanticEntity** (`Class`) + - 📝 Represents a code entity (Module, Function, Component) found during parsing. + - ƒ **to_dict** (`Function`) + - 📝 Serializes the entity to a dictionary for JSON output. + - ƒ **validate** (`Function`) + - 📝 Checks for semantic compliance (closure, mandatory tags). + - ƒ **get_score** (`Function`) + - 📝 Calculates a compliance score (0.0 to 1.0). + - ƒ **get_patterns** (`Function`) + - 📝 Returns regex patterns for a specific language. + - ƒ **parse_file** (`Function`) + - 📝 Parses a single file to extract semantic entities. + - ℂ **SemanticMapGenerator** (`Class`) + - 📝 Orchestrates the mapping process. + - ƒ **run** (`Function`) + - 📝 Main execution flow. + - 🔗 CALLS -> `_walk_and_parse` + - 🔗 CALLS -> `_generate_artifacts` + - ƒ **_walk_and_parse** (`Function`) + - 📝 Recursively walks directories and triggers parsing. + - ƒ **_process_file_results** (`Function`) + - 📝 Validates entities and calculates file scores. + - ƒ **_generate_artifacts** (`Function`) + - 📝 Writes output files. + - ƒ **_generate_report** (`Function`) + - 📝 Generates the Markdown compliance report. + - ƒ **_collect_issues** (`Function`) + - 📝 Helper to collect issues for a specific file from the entity tree. + - ƒ **_generate_compressed_map** (`Function`) + - 📝 Generates the token-optimized project map. + - ƒ **_write_entity_md** (`Function`) + - 📝 Recursive helper to write entity tree to Markdown. +- 📦 **search_script** (`Module`) + - 📝 Предоставляет утилиты для поиска по текстовым паттернам в метаданных датасетов Superset. + - 🏗️ Layer: App + - 🔗 DEPENDS_ON -> `superset_tool.client` + - 🔗 DEPENDS_ON -> `superset_tool.utils` + - ƒ **search_datasets** (`Function`) + - 📝 Выполняет поиск по строковому паттерну в метаданных всех датасетов. + - 🔗 CALLS -> `client.get_datasets` + - ƒ **save_results_to_file** (`Function`) + - 📝 Сохраняет результаты поиска в текстовый файл. + - ƒ **print_search_results** (`Function`) + - 📝 Форматирует результаты поиска для читаемого вывода в консоль. + - ƒ **main** (`Function`) + - 📝 Основная точка входа для запуска скрипта поиска. + - 🔗 CALLS -> `setup_clients` + - 🔗 CALLS -> `search_datasets` + - 🔗 CALLS -> `print_search_results` + - 🔗 CALLS -> `save_results_to_file` +- 📦 **get_dataset_structure** (`Module`) + - 📝 Этот модуль предназначен для получения и сохранения структуры данных датасета из Superset. Он используется для отладки и анализа данных, возвращаемых API. + - 🏗️ Layer: App + - 🔗 DEPENDS_ON -> `superset_tool.client` + - 🔗 DEPENDS_ON -> `superset_tool.utils.init_clients` + - 🔗 DEPENDS_ON -> `superset_tool.utils.logger` + - ƒ **get_and_save_dataset** (`Function`) + - 📝 Получает структуру датасета из Superset и сохраняет ее в JSON-файл. + - 🔗 CALLS -> `setup_clients` + - 🔗 CALLS -> `superset_client.get_dataset` +- 📦 **debug_db_api** (`Module`) + - 📝 Скрипт для отладки структуры ответа API баз данных. + - 🏗️ Layer: App + - 🔗 DEPENDS_ON -> `superset_tool.client` + - 🔗 DEPENDS_ON -> `superset_tool.utils` + - ƒ **debug_database_api** (`Function`) + - 📝 Отладка структуры ответа API баз данных. + - 🔗 CALLS -> `setup_clients` + - 🔗 CALLS -> `client.get_databases` +- 📦 **run_mapper** (`Module`) + - 📝 Этот модуль является CLI-точкой входа для запуска процесса меппинга метаданных датасетов. + - 🏗️ Layer: App + - 🔗 DEPENDS_ON -> `superset_tool.utils.dataset_mapper` + - 🔗 DEPENDS_ON -> `superset_tool.utils` + - ƒ **main** (`Function`) + - 📝 Парсит аргументы командной строки и запускает процесс меппинга. + - 🔗 CALLS -> `setup_clients` + - 🔗 CALLS -> `DatasetMapper.run_mapping` +- 📦 **migration_script** (`Module`) + - 📝 Предоставляет интерактивный CLI для миграции дашбордов Superset между окружениями с возможностью восстановления после ошибок. + - 🏗️ Layer: App + - 🔗 DEPENDS_ON -> `superset_tool.client` + - 🔗 DEPENDS_ON -> `superset_tool.utils` + - ℂ **Migration** (`Class`) + - 📝 Инкапсулирует логику интерактивной миграции дашбордов с возможностью «удалить‑и‑перезаписать» при ошибке импорта. + - ƒ **Migration.__init__** (`Function`) + - 📝 Инициализирует сервис миграции, настраивает логгер и начальные состояния. + - ƒ **Migration.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` + - ƒ **Migration.ask_delete_on_failure** (`Function`) + - 📝 Запрашивает у пользователя, следует ли удалять дашборд при ошибке импорта. + - 🔗 CALLS -> `yesno` + - ƒ **Migration.select_environments** (`Function`) + - 📝 Позволяет пользователю выбрать исходное и целевое окружения Superset. + - 🔗 CALLS -> `setup_clients` + - 🔗 CALLS -> `menu` + - ƒ **Migration.select_dashboards** (`Function`) + - 📝 Позволяет пользователю выбрать набор дашбордов для миграции. + - 🔗 CALLS -> `self.from_c.get_dashboards` + - 🔗 CALLS -> `checklist` + - ƒ **Migration.confirm_db_config_replacement** (`Function`) + - 📝 Запрашивает у пользователя, требуется ли заменить имена БД в YAML-файлах. + - 🔗 CALLS -> `yesno` + - 🔗 CALLS -> `self._select_databases` + - ƒ **Migration._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` + - ƒ **Migration._batch_delete_by_ids** (`Function`) + - 📝 Удаляет набор дашбордов по их ID единым запросом. + - 🔗 CALLS -> `self.to_c.network.request` + - ƒ **Migration.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` +- 📦 **backup_script** (`Module`) + - 📝 Этот модуль отвечает за автоматизированное резервное копирование дашбордов Superset. + - 🏗️ Layer: App + - 🔗 DEPENDS_ON -> `superset_tool.client` + - 🔗 DEPENDS_ON -> `superset_tool.utils` + - 📦 **BackupConfig** (`DataClass`) + - 📝 Хранит конфигурацию для процесса бэкапа. + - ƒ **backup_dashboards** (`Function`) + - 📝 Выполняет бэкап всех доступных дашбордов для заданного клиента и окружения, пропуская ошибки экспорта. + - 🔗 CALLS -> `client.get_dashboards` + - 🔗 CALLS -> `client.export_dashboard` + - 🔗 CALLS -> `save_and_unpack_dashboard` + - 🔗 CALLS -> `archive_exports` + - 🔗 CALLS -> `consolidate_archive_folders` + - 🔗 CALLS -> `remove_empty_directories` + - ƒ **main** (`Function`) + - 📝 Основная точка входа для запуска процесса резервного копирования. + - 🔗 CALLS -> `setup_clients` + - 🔗 CALLS -> `backup_dashboards` +- 📦 **superset_tool.exceptions** (`Module`) + - 📝 Определяет иерархию пользовательских исключений для всего инструмента, обеспечивая единую точку обработки ошибок. + - 🏗️ Layer: Infra + - ℂ **SupersetToolError** (`Class`) + - 📝 Базовый класс для всех ошибок, генерируемых инструментом. + - 🔗 INHERITS_FROM -> `Exception` + - ℂ **AuthenticationError** (`Class`) + - 📝 Ошибки, связанные с аутентификацией или авторизацией. + - 🔗 INHERITS_FROM -> `SupersetToolError` + - ℂ **PermissionDeniedError** (`Class`) + - 📝 Ошибка, возникающая при отказе в доступе к ресурсу. + - 🔗 INHERITS_FROM -> `AuthenticationError` + - ℂ **SupersetAPIError** (`Class`) + - 📝 Общие ошибки при взаимодействии с Superset API. + - 🔗 INHERITS_FROM -> `SupersetToolError` + - ℂ **ExportError** (`Class`) + - 📝 Ошибки, специфичные для операций экспорта. + - 🔗 INHERITS_FROM -> `SupersetAPIError` + - ℂ **DashboardNotFoundError** (`Class`) + - 📝 Ошибка, когда запрошенный дашборд или ресурс не найден (404). + - 🔗 INHERITS_FROM -> `SupersetAPIError` + - ℂ **DatasetNotFoundError** (`Class`) + - 📝 Ошибка, когда запрашиваемый набор данных не существует (404). + - 🔗 INHERITS_FROM -> `SupersetAPIError` + - ℂ **InvalidZipFormatError** (`Class`) + - 📝 Ошибка, указывающая на некорректный формат или содержимое ZIP-архива. + - 🔗 INHERITS_FROM -> `SupersetToolError` + - ℂ **NetworkError** (`Class`) + - 📝 Ошибки, связанные с сетевым соединением. + - 🔗 INHERITS_FROM -> `SupersetToolError` + - ℂ **FileOperationError** (`Class`) + - 📝 Общие ошибки файловых операций (I/O). + - 🔗 INHERITS_FROM -> `SupersetToolError` + - ℂ **InvalidFileStructureError** (`Class`) + - 📝 Ошибка, указывающая на некорректную структуру файлов или директорий. + - 🔗 INHERITS_FROM -> `FileOperationError` + - ℂ **ConfigurationError** (`Class`) + - 📝 Ошибки, связанные с неверной конфигурацией инструмента. + - 🔗 INHERITS_FROM -> `SupersetToolError` +- 📦 **superset_tool** (`Module`) + - 📝 Root package for superset_tool. + - 🏗️ Layer: Domain +- 📦 **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, предоставляющий методы для работы с дашбордами и датасетами. + - ƒ **SupersetClient.__init__** (`Function`) + - 📝 Инициализирует клиент, проверяет конфигурацию и создает сетевой клиент. + - ƒ **SupersetClient._validate_config** (`Function`) + - 📝 Проверяет, что переданный объект конфигурации имеет корректный тип. + - ƒ **SupersetClient.headers** (`Function`) + - 📝 Возвращает базовые HTTP-заголовки, используемые сетевым клиентом. + - ƒ **SupersetClient.get_dashboards** (`Function`) + - 📝 Получает полный список дашбордов, автоматически обрабатывая пагинацию. + - 🔗 CALLS -> `self._fetch_total_object_count` + - 🔗 CALLS -> `self._fetch_all_pages` + - ƒ **SupersetClient.export_dashboard** (`Function`) + - 📝 Экспортирует дашборд в виде ZIP-архива. + - 🔗 CALLS -> `self.network.request` + - ƒ **SupersetClient.import_dashboard** (`Function`) + - 📝 Импортирует дашборд из ZIP-файла с возможностью автоматического удаления и повторной попытки при ошибке. + - 🔗 CALLS -> `self._do_import` + - 🔗 CALLS -> `self.delete_dashboard` + - 🔗 CALLS -> `self.get_dashboards` + - ƒ **SupersetClient._resolve_target_id_for_delete** (`Function`) + - 📝 Определяет ID дашборда для удаления, используя ID или slug. + - ƒ **SupersetClient._do_import** (`Function`) + - 📝 Выполняет один запрос на импорт без обработки исключений. + - ƒ **SupersetClient.delete_dashboard** (`Function`) + - 📝 Удаляет дашборд по его ID или slug. + - 🔗 CALLS -> `self.network.request` + - ƒ **SupersetClient._extract_dashboard_id_from_zip** (`Function`) + - 📝 Извлекает ID дашборда из `metadata.yaml` внутри ZIP-архива. + - ƒ **SupersetClient._extract_dashboard_slug_from_zip** (`Function`) + - 📝 Извлекает slug дашборда из `metadata.yaml` внутри ZIP-архива. + - ƒ **SupersetClient._validate_export_response** (`Function`) + - 📝 Проверяет, что HTTP-ответ на экспорт является валидным ZIP-архивом. + - ƒ **SupersetClient._resolve_export_filename** (`Function`) + - 📝 Определяет имя файла для экспорта из заголовков или генерирует его. + - ƒ **SupersetClient._validate_query_params** (`Function`) + - 📝 Формирует корректный набор параметров запроса с пагинацией. + - ƒ **SupersetClient._fetch_total_object_count** (`Function`) + - 📝 Получает общее количество объектов по указанному эндпоинту для пагинации. + - ƒ **SupersetClient._fetch_all_pages** (`Function`) + - 📝 Итерируется по всем страницам пагинированного API и собирает все данные. + - ƒ **SupersetClient._validate_import_file** (`Function`) + - 📝 Проверяет, что файл существует, является ZIP-архивом и содержит `metadata.yaml`. + - ƒ **SupersetClient.get_datasets** (`Function`) + - 📝 Получает полный список датасетов, автоматически обрабатывая пагинацию. + - 🔗 CALLS -> `self._fetch_total_object_count` + - 🔗 CALLS -> `self._fetch_all_pages` + - ƒ **SupersetClient.get_databases** (`Function`) + - 📝 Получает полный список баз данных, автоматически обрабатывая пагинацию. + - 🔗 CALLS -> `self._fetch_total_object_count` + - 🔗 CALLS -> `self._fetch_all_pages` + - ƒ **SupersetClient.get_dataset** (`Function`) + - 📝 Получает информацию о конкретном датасете по его ID. + - 🔗 CALLS -> `self.network.request` + - ƒ **SupersetClient.get_database** (`Function`) + - 📝 Получает информацию о конкретной базе данных по её ID. + - 🔗 CALLS -> `self.network.request` + - ƒ **SupersetClient.update_dataset** (`Function`) + - 📝 Обновляет данные датасета по его ID. + - 🔗 CALLS -> `self.network.request` +- 📦 **superset_tool.models** (`Module`) + - 📝 Определяет Pydantic-модели для конфигурации инструмента, обеспечивая валидацию данных. + - 🏗️ Layer: Infra + - 🔗 DEPENDS_ON -> `pydantic` + - 🔗 DEPENDS_ON -> `superset_tool.utils.logger` + - ℂ **SupersetConfig** (`Class`) + - 📝 Модель конфигурации для подключения к одному экземпляру Superset API. + - 🔗 INHERITS_FROM -> `pydantic.BaseModel` + - ƒ **SupersetConfig.validate_auth** (`Function`) + - 📝 Проверяет, что словарь `auth` содержит все необходимые для аутентификации поля. + - ƒ **SupersetConfig.normalize_base_url** (`Function`) + - 📝 Нормализует `base_url`, добавляя `/api/v1`, если он отсутствует. + - ℂ **DatabaseConfig** (`Class`) + - 📝 Модель для параметров трансформации баз данных при миграции дашбордов. + - 🔗 INHERITS_FROM -> `pydantic.BaseModel` + - ƒ **DatabaseConfig.validate_config** (`Function`) + - 📝 Проверяет, что словарь `database_config` содержит ключи 'old' и 'new'. +- 📦 **superset_tool.utils.logger** (`Module`) + - 📝 Предоставляет универсальную обёртку над стандартным `logging.Logger` для унифицированного создания и управления логгерами с выводом в консоль и/или файл. + - 🏗️ Layer: Infra + - ℂ **SupersetLogger** (`Class`) + - 📝 Обёртка над `logging.Logger`, которая упрощает конфигурацию и использование логгеров. + - ƒ **SupersetLogger.__init__** (`Function`) + - 📝 Конфигурирует и инициализирует логгер, добавляя обработчики для файла и/или консоли. + - ƒ **SupersetLogger._log** (`Function`) + - 📝 (Helper) Универсальный метод для вызова соответствующего уровня логирования. + - ƒ **SupersetLogger.info** (`Function`) + - 📝 Записывает сообщение уровня INFO. + - ƒ **SupersetLogger.debug** (`Function`) + - 📝 Записывает сообщение уровня DEBUG. + - ƒ **SupersetLogger.warning** (`Function`) + - 📝 Записывает сообщение уровня WARNING. + - ƒ **SupersetLogger.error** (`Function`) + - 📝 Записывает сообщение уровня ERROR. + - ƒ **SupersetLogger.critical** (`Function`) + - 📝 Записывает сообщение уровня CRITICAL. + - ƒ **SupersetLogger.exception** (`Function`) + - 📝 Записывает сообщение уровня ERROR вместе с трассировкой стека текущего исключения. +- 📦 **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, включая сессии, аутентификацию, и обработку запросов. + - ƒ **APIClient.__init__** (`Function`) + - 📝 Инициализирует API клиент с конфигурацией, сессией и логгером. + - ƒ **APIClient._init_session** (`Function`) + - 📝 Создает и настраивает `requests.Session` с retry-логикой. + - ƒ **APIClient.authenticate** (`Function`) + - 📝 Выполняет аутентификацию в Superset API и получает access и CSRF токены. + - ƒ **APIClient.headers** (`Function`) + - 📝 Возвращает HTTP-заголовки для аутентифицированных запросов. + - ƒ **APIClient.request** (`Function`) + - 📝 Выполняет универсальный HTTP-запрос к API. + - ƒ **APIClient._handle_http_error** (`Function`) + - 📝 (Helper) Преобразует HTTP ошибки в кастомные исключения. + - ƒ **APIClient._handle_network_error** (`Function`) + - 📝 (Helper) Преобразует сетевые ошибки в `NetworkError`. + - ƒ **APIClient.upload_file** (`Function`) + - 📝 Загружает файл на сервер через multipart/form-data. + - ƒ **APIClient._perform_upload** (`Function`) + - 📝 (Helper) Выполняет POST запрос с файлом. + - ƒ **APIClient.fetch_paginated_count** (`Function`) + - 📝 Получает общее количество элементов для пагинации. + - ƒ **APIClient.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` в консоли. + - ƒ **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. + - ƒ **DatasetMapper.get_postgres_comments** (`Function`) + - 📝 Извлекает комментарии к колонкам из системного каталога PostgreSQL. + - ƒ **DatasetMapper.load_excel_mappings** (`Function`) + - 📝 Загружает меппинги 'column_name' -> 'column_comment' из XLSX файла. + - ƒ **DatasetMapper.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 +- 📦 **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.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 файл. + - ƒ **create_dashboard_export** (`Function`) + - 📝 Создает ZIP-архив из указанных исходных путей. + - ƒ **sanitize_filename** (`Function`) + - 📝 Очищает строку от символов, недопустимых в именах файлов. + - ƒ **get_filename_from_headers** (`Function`) + - 📝 Извлекает имя файла из HTTP заголовка 'Content-Disposition'. + - ƒ **consolidate_archive_folders** (`Function`) + - 📝 Консолидирует директории архивов на основе общего слага в имени. +- 🧩 **App** (`Component`) + - 📝 The root component of the frontend application. Manages navigation and layout. + - 🏗️ Layer: UI + - ƒ **handleFormSubmit** (`Function`) + - 📝 Handles form submission for task creation. + - ƒ **navigate** (`Function`) + - 📝 Changes the current page and resets state. +- 📦 **main** (`Module`) + - 📝 Entry point for the Svelte application. + - 🏗️ Layer: UI-Entry + - 📦 **app_instance** (`Data`) + - 📝 Initialized Svelte app instance. +- 🧩 **DashboardGrid** (`Component`) + - 📝 Displays a grid of dashboards with selection and pagination. + - 🏗️ Layer: Component + - ƒ **handleSort** (`Function`) + - 📝 Toggles sort direction or changes sort column. + - ƒ **handleSelectionChange** (`Function`) + - 📝 Handles individual checkbox changes. + - ƒ **handleSelectAll** (`Function`) + - 📝 Handles select all checkbox. + - ƒ **goToPage** (`Function`) + - 📝 Changes current page. +- 🧩 **TaskHistory** (`Component`) + - 📝 Displays a list of recent tasks with their status and allows selecting them for viewing logs. + - 🏗️ Layer: UI + - ƒ **fetchTasks** (`Function`) + - 📝 Fetches the list of recent tasks from the API. + - ƒ **clearTasks** (`Function`) + - 📝 Clears tasks from the history, optionally filtered by status. + - ƒ **selectTask** (`Function`) + - 📝 Selects a task and fetches its full details. + - ƒ **getStatusColor** (`Function`) + - 📝 Returns the CSS color class for a given task status. + - ƒ **onMount** (`Function`) + - 📝 Initializes the component by fetching tasks and starting polling. + - ƒ **onDestroy** (`Function`) + - 📝 Cleans up the polling interval when the component is destroyed. +- 🧩 **MappingTable** (`Component`) + - 📝 Displays and allows editing of database mappings. + - 🏗️ Layer: Feature + - ƒ **updateMapping** (`Function`) + - 📝 Updates a mapping for a specific source database. + - ƒ **getSuggestion** (`Function`) + - 📝 Finds a suggestion for a source database. +- 🧩 **EnvSelector** (`Component`) + - 📝 Provides a UI component for selecting source and target environments. + - 🏗️ Layer: Feature + - ƒ **handleSelect** (`Function`) + - 📝 Dispatches the selection change event. +- 🧩 **TaskList** (`Component`) + - 📝 Displays a list of tasks with their status and execution details. + - 🏗️ Layer: Component + - ƒ **getStatusColor** (`Function`) + - 📝 Returns the CSS color class for a given task status. + - ƒ **formatTime** (`Function`) + - 📝 Formats a date string using date-fns. + - ƒ **handleTaskClick** (`Function`) + - 📝 Dispatches a select event when a task is clicked. +- 🧩 **DynamicForm** (`Component`) + - 📝 Generates a form dynamically based on a JSON schema. + - 🏗️ Layer: UI + - ƒ **handleSubmit** (`Function`) + - 📝 Dispatches the submit event with the form data. + - ƒ **initializeForm** (`Function`) + - 📝 Initialize form data with default values from the schema. +- 🧩 **Footer** (`Component`) + - 📝 Displays the application footer with copyright information. + - 🏗️ Layer: UI +- 🧩 **Navbar** (`Component`) + - 📝 Main navigation bar for the application. + - 🏗️ Layer: UI +- 🧩 **TaskRunner** (`Component`) + - 📝 Connects to a WebSocket to display real-time logs for a running task. + - 🏗️ Layer: UI + - ƒ **connect** (`Function`) + - 📝 Establishes WebSocket connection with exponential backoff. + - ƒ **fetchTargetDatabases** (`Function`) + - 📝 Fetches the list of databases in the target environment. + - ƒ **handleMappingResolve** (`Function`) + - 📝 Handles the resolution of a missing database mapping. + - ƒ **handlePasswordResume** (`Function`) + - 📝 Handles the submission of database passwords to resume a task. + - ƒ **startDataTimeout** (`Function`) + - 📝 Starts a timeout to detect when the log stream has stalled. + - ƒ **resetDataTimeout** (`Function`) + - 📝 Resets the data stall timeout. + - ƒ **onMount** (`Function`) + - 📝 Initializes the component and subscribes to task selection changes. + - ƒ **onDestroy** (`Function`) + - 📝 Close WebSocket connection when the component is destroyed. +- 🧩 **TaskLogViewer** (`Component`) + - 📝 Displays detailed logs for a specific task in a modal. + - 🏗️ Layer: UI + - ƒ **fetchLogs** (`Function`) + - 📝 Fetches logs for the current task. + - ƒ **scrollToBottom** (`Function`) + - 📝 Scrolls the log container to the bottom. + - ƒ **handleScroll** (`Function`) + - 📝 Updates auto-scroll preference based on scroll position. + - ƒ **close** (`Function`) + - 📝 Closes the log viewer modal. + - ƒ **getLogLevelColor** (`Function`) + - 📝 Returns the CSS color class for a given log level. + - ƒ **onDestroy** (`Function`) + - 📝 Cleans up the polling interval. +- 🧩 **PasswordPrompt** (`Component`) + - 📝 A modal component to prompt the user for database passwords when a migration task is paused. + - 🏗️ Layer: UI + - ƒ **handleSubmit** (`Function`) + - 📝 Validates and dispatches the passwords to resume the task. + - ƒ **handleCancel** (`Function`) + - 📝 Cancels the password prompt. +- 🧩 **MissingMappingModal** (`Component`) + - 📝 Prompts the user to provide a database mapping when one is missing during migration. + - 🏗️ Layer: Feature + - ƒ **resolve** (`Function`) + - 📝 Dispatches the resolution event with the selected mapping. + - ƒ **cancel** (`Function`) + - 📝 Cancels the mapping resolution modal. +- 🧩 **Toast** (`Component`) + - 📝 Displays transient notifications (toasts) in the bottom-right corner. + - 🏗️ Layer: UI +- 🧩 **Settings** (`Component`) + - 📝 The main settings page for the application, allowing management of environments and global settings. + - 🏗️ Layer: UI + - ƒ **loadSettings** (`Function`) + - 📝 Loads settings from the backend. + - ƒ **handleSaveGlobal** (`Function`) + - 📝 Saves global settings to the backend. + - ƒ **handleAddOrUpdateEnv** (`Function`) + - 📝 Adds or updates an environment. + - ƒ **handleDeleteEnv** (`Function`) + - 📝 Deletes an environment. + - ƒ **handleTestEnv** (`Function`) + - 📝 Tests the connection to an environment. + - ƒ **editEnv** (`Function`) + - 📝 Sets the form to edit an existing environment. + - ƒ **resetEnvForm** (`Function`) + - 📝 Resets the environment form. +- 🧩 **Dashboard** (`Component`) + - 📝 Displays the list of available plugins and allows selecting one. + - 🏗️ Layer: UI + - ƒ **onMount** (`Function`) + - 📝 Fetch plugins when the component mounts. + - ƒ **selectPlugin** (`Function`) + - 📝 Selects a plugin to display its form. +- 📦 **stores_module** (`Module`) + - 📝 Global state management using Svelte stores. + - 🏗️ Layer: UI-State + - 📦 **plugins** (`Data`) + - 📝 Store for the list of available plugins. + - 📦 **tasks** (`Data`) + - 📝 Store for the list of tasks. + - 📦 **selectedPlugin** (`Data`) + - 📝 Store for the currently selected plugin. + - 📦 **selectedTask** (`Data`) + - 📝 Store for the currently selected task. + - 📦 **currentPage** (`Data`) + - 📝 Store for the current page. + - 📦 **taskLogs** (`Data`) + - 📝 Store for the logs of the currently selected task. + - ƒ **fetchPlugins** (`Function`) + - 📝 Fetches plugins from the API and updates the plugins store. + - ƒ **fetchTasks** (`Function`) + - 📝 Fetches tasks from the API and updates the tasks store. +- 📦 **toasts_module** (`Module`) + - 📝 Manages toast notifications using a Svelte writable store. + - 🏗️ Layer: UI-State + - 📦 **toasts** (`Data`) + - 📝 Writable store containing the list of active toasts. + - ƒ **addToast** (`Function`) + - 📝 Adds a new toast message. + - ƒ **removeToast** (`Function`) + - 📝 Removes a toast message by ID. +- 📦 **api_module** (`Module`) + - 📝 Handles all communication with the backend API. + - 🏗️ Layer: Infra-API + - ƒ **getWsUrl** (`Function`) + - 📝 Returns the WebSocket URL for a specific task, with fallback logic. + - ƒ **fetchApi** (`Function`) + - 📝 Generic GET request wrapper. + - ƒ **postApi** (`Function`) + - 📝 Generic POST request wrapper. + - ƒ **requestApi** (`Function`) + - 📝 Generic request wrapper. + - 📦 **api** (`Data`) + - 📝 API client object with specific methods. +- 🧩 **MigrationDashboard** (`Component`) + - 📝 Main dashboard for configuring and starting migrations. + - 🏗️ Layer: Page + - ƒ **fetchEnvironments** (`Function`) + - 📝 Fetches the list of environments from the API. + - ƒ **fetchDashboards** (`Function`) + - 📝 Fetches dashboards for the selected source environment. + - ƒ **fetchDatabases** (`Function`) + - 📝 Fetches databases from both environments and gets suggestions. + - ƒ **handleMappingUpdate** (`Function`) + - 📝 Saves a mapping to the backend. + - ƒ **handleViewLogs** (`Function`) + - 📝 Opens the log viewer for a specific task. + - ƒ **handlePasswordPrompt** (`Function`) + - 📝 Reactive logic to show password prompt when a task is awaiting input. + - ƒ **handleResumeMigration** (`Function`) + - 📝 Resumes a migration task with provided passwords. + - ƒ **startMigration** (`Function`) + - 📝 Starts the migration process. +- 🧩 **MappingManagement** (`Component`) + - 📝 Page for managing database mappings between environments. + - 🏗️ Layer: Page + - ƒ **fetchEnvironments** (`Function`) + - 📝 Fetches the list of environments. + - ƒ **fetchDatabases** (`Function`) + - 📝 Fetches databases from both environments and gets suggestions. + - ƒ **handleUpdate** (`Function`) + - 📝 Saves a mapping to the backend. +- 📦 **Dependencies** (`Module`) + - 📝 Manages the creation and provision of shared application dependencies, such as the PluginLoader and TaskManager, to avoid circular imports. + - 🏗️ Layer: Core +- 📦 **AppModule** (`Module`) + - 📝 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. + - 🏗️ Layer: UI (API) + - 📦 **App** (`Global`) + - 📝 The global FastAPI application instance. + - 📦 **WebSocketEndpoint** (`Endpoint`) + - 📝 Provides a WebSocket endpoint for clients to connect to and receive real-time log entries for a specific task. + - 📦 **StaticFiles** (`Mount`) + - 📝 Mounts the frontend build directory to serve static assets. + - 📦 **RootEndpoint** (`Endpoint`) + - 📝 A simple root endpoint to confirm that the API is running. +- 📦 **backend.src.models.mapping** (`Module`) + - 📝 Defines the database schema for environment metadata and database mappings using SQLAlchemy. + - 🏗️ Layer: Domain + - 🔗 DEPENDS_ON -> `sqlalchemy` + - ℂ **MigrationStatus** (`Class`) + - 📝 Enumeration of possible migration job statuses. + - ℂ **Environment** (`Class`) + - 📝 Represents a Superset instance environment. + - ℂ **DatabaseMapping** (`Class`) + - 📝 Represents a mapping between source and target databases. + - ℂ **MigrationJob** (`Class`) + - 📝 Represents a single migration execution job. +- 📦 **backend.src.models.dashboard** (`Module`) + - 📝 Defines data models for dashboard metadata and selection. + - 🏗️ Layer: Model + - ℂ **DashboardMetadata** (`Class`) + - 📝 Represents a dashboard available for migration. + - ℂ **DashboardSelection** (`Class`) + - 📝 Represents the user's selection of dashboards to migrate. +- 📦 **backend.src.models.task** (`Module`) + - 📝 Defines the database schema for task execution records. + - 🏗️ Layer: Domain + - 🔗 DEPENDS_ON -> `sqlalchemy` + - ℂ **TaskRecord** (`Class`) + - 📝 Represents a persistent record of a task execution. +- 📦 **backend.src.services.mapping_service** (`Module`) + - 📝 Orchestrates database fetching and fuzzy matching suggestions. + - 🏗️ Layer: Service + - 🔗 DEPENDS_ON -> `backend.src.core.superset_client` + - 🔗 DEPENDS_ON -> `backend.src.core.utils.matching` + - ℂ **MappingService** (`Class`) + - 📝 Service for handling database mapping logic. + - ƒ **MappingService.__init__** (`Function`) + - 📝 Initializes the mapping service with a config manager. + - ƒ **MappingService._get_client** (`Function`) + - 📝 Helper to get an initialized SupersetClient for an environment. + - ƒ **MappingService.get_suggestions** (`Function`) + - 📝 Fetches databases from both environments and returns fuzzy matching suggestions. +- 📦 **ConfigManagerModule** (`Module`) + - 📝 Manages application configuration, including loading/saving to JSON and CRUD for environments. + - 🏗️ Layer: Core + - 🔗 DEPENDS_ON -> `ConfigModels` + - 🔗 CALLS -> `logger` + - ℂ **ConfigManager** (`Class`) + - 📝 A class to handle application configuration persistence and management. + - ƒ **__init__** (`Function`) + - 📝 Initializes the ConfigManager. + - ƒ **_load_config** (`Function`) + - 📝 Loads the configuration from disk or creates a default one. + - ƒ **_save_config_to_disk** (`Function`) + - 📝 Saves the provided configuration object to disk. + - ƒ **save** (`Function`) + - 📝 Saves the current configuration state to disk. + - ƒ **get_config** (`Function`) + - 📝 Returns the current configuration. + - ƒ **update_global_settings** (`Function`) + - 📝 Updates the global settings and persists the change. + - ƒ **validate_path** (`Function`) + - 📝 Validates if a path exists and is writable. + - ƒ **get_environments** (`Function`) + - 📝 Returns the list of configured environments. + - ƒ **has_environments** (`Function`) + - 📝 Checks if at least one environment is configured. + - ƒ **add_environment** (`Function`) + - 📝 Adds a new environment to the configuration. + - ƒ **update_environment** (`Function`) + - 📝 Updates an existing environment. + - ƒ **delete_environment** (`Function`) + - 📝 Deletes an environment by ID. +- 📦 **backend.src.core.superset_client** (`Module`) + - 📝 Extends the base SupersetClient with database-specific metadata fetching. + - 🏗️ Layer: Core + - 🔗 INHERITS_FROM -> `superset_tool.client.SupersetClient` + - ℂ **SupersetClient** (`Class`) + - 📝 Extended SupersetClient for migration-specific operations. + - ƒ **SupersetClient.get_databases_summary** (`Function`) + - 📝 Fetch a summary of databases including uuid, name, and engine. + - ƒ **SupersetClient.get_database_by_uuid** (`Function`) + - 📝 Find a database by its UUID. + - ƒ **SupersetClient.get_dashboards_summary** (`Function`) + - 📝 Fetches dashboard metadata optimized for the grid. +- 📦 **backend.src.core.migration_engine** (`Module`) + - 📝 Handles the interception and transformation of Superset asset ZIP archives. + - 🏗️ Layer: Core + - 🔗 DEPENDS_ON -> `PyYAML` + - ℂ **MigrationEngine** (`Class`) + - 📝 Engine for transforming Superset export ZIPs. + - ƒ **MigrationEngine.transform_zip** (`Function`) + - 📝 Extracts ZIP, replaces database UUIDs in YAMLs, and re-packages. + - ƒ **MigrationEngine._transform_yaml** (`Function`) + - 📝 Replaces database_uuid in a single YAML file. +- 📦 **LoggerModule** (`Module`) + - 📝 Configures the application's logging system, including a custom handler for buffering logs and streaming them over WebSockets. + - 🏗️ Layer: Core + - ℂ **BeliefFormatter** (`Class`) + - 📝 Custom logging formatter that adds belief state prefixes to log messages. + - ℂ **LogEntry** (`Class`) + - 📝 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. + - ƒ **BeliefScope** (`Function`) + - 📝 Context manager for structured Belief State logging. + - ƒ **ConfigureLogger** (`Function`) + - 📝 Configures the logger with the provided logging settings. + - ℂ **WebSocketLogHandler** (`Class`) + - 📝 A custom logging handler that captures log records into a buffer. It is designed to be extended for real-time log streaming over WebSockets. + - 📦 **Logger** (`Global`) + - 📝 The global logger instance for the application, configured with both a console handler and the custom WebSocket handler. +- 📦 **backend.src.core.database** (`Module`) + - 📝 Configures the SQLite database connection and session management. + - 🏗️ Layer: Core + - 🔗 DEPENDS_ON -> `sqlalchemy` + - 📦 **DATABASE_URL** (`Constant`) + - 📦 **TASKS_DATABASE_URL** (`Constant`) + - 📦 **engine** (`Variable`) + - 📦 **tasks_engine** (`Variable`) + - ℂ **SessionLocal** (`Class`) + - 📝 A session factory for the main mappings database. + - ℂ **TasksSessionLocal** (`Class`) + - 📝 A session factory for the tasks execution database. + - ƒ **init_db** (`Function`) + - 📝 Initializes the database by creating all tables. + - ƒ **get_db** (`Function`) + - 📝 Dependency for getting a database session. + - ƒ **get_tasks_db** (`Function`) + - 📝 Dependency for getting a tasks database session. +- 📦 **ConfigModels** (`Module`) + - 📝 Defines the data models for application configuration using Pydantic. + - 🏗️ Layer: Core + - 📦 **Schedule** (`DataClass`) + - 📝 Represents a backup schedule configuration. + - 📦 **Environment** (`DataClass`) + - 📝 Represents a Superset environment configuration. + - 📦 **LoggingConfig** (`DataClass`) + - 📝 Defines the configuration for the application's logging system. + - 📦 **GlobalSettings** (`DataClass`) + - 📝 Represents global application settings. + - 📦 **AppConfig** (`DataClass`) + - 📝 The root configuration model containing all application settings. +- 📦 **SchedulerModule** (`Module`) + - 📝 Manages scheduled tasks using APScheduler. + - 🏗️ Layer: Core + - ℂ **SchedulerService** (`Class`) + - 📝 Provides a service to manage scheduled backup tasks. + - ƒ **SchedulerService.start** (`Function`) + - 📝 Starts the background scheduler and loads initial schedules. + - ƒ **SchedulerService.stop** (`Function`) + - 📝 Stops the background scheduler. + - ƒ **SchedulerService.load_schedules** (`Function`) + - 📝 Loads backup schedules from configuration and registers them. + - ƒ **SchedulerService.add_backup_job** (`Function`) + - 📝 Adds a scheduled backup job for an environment. + - ƒ **SchedulerService._trigger_backup** (`Function`) + - 📝 Triggered by the scheduler to start a backup task. +- ℂ **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 + - ƒ **PluginLoader.__init__** (`Function`) + - 📝 Initializes the PluginLoader with a directory to scan. + - ƒ **PluginLoader._load_plugins** (`Function`) + - 📝 Scans the plugin directory and loads all valid plugins. + - ƒ **PluginLoader._load_module** (`Function`) + - 📝 Loads a single Python module and discovers PluginBase implementations. + - ƒ **PluginLoader._register_plugin** (`Function`) + - 📝 Registers a PluginBase instance and its configuration. + - ƒ **PluginLoader.get_plugin** (`Function`) + - 📝 Retrieves a loaded plugin instance by its ID. + - ƒ **PluginLoader.get_all_plugin_configs** (`Function`) + - 📝 Returns a list of all registered plugin configurations. + - ƒ **PluginLoader.has_plugin** (`Function`) + - 📝 Checks if a plugin with the given ID is registered. +- ℂ **PluginBase** (`Class`) + - 📝 Defines the abstract base class that all plugins must implement to be recognized by the system. It enforces a common structure for plugin metadata and execution. + - 🏗️ Layer: Core +- ℂ **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.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. +- 📦 **TaskManagerModule** (`Module`) + - 📝 Manages the lifecycle of tasks, including their creation, execution, and state tracking. It uses a thread pool to run plugins asynchronously. + - 🏗️ Layer: Core + - ℂ **TaskManager** (`Class`) + - 📝 Manages the lifecycle of tasks, including their creation, execution, and state tracking. + - ƒ **TaskManager.__init__** (`Function`) + - 📝 Initialize the TaskManager with dependencies. + - ƒ **TaskManager.create_task** (`Function`) + - 📝 Creates and queues a new task for execution. + - ƒ **TaskManager._run_task** (`Function`) + - 📝 Internal method to execute a task. + - ƒ **TaskManager.resolve_task** (`Function`) + - 📝 Resumes a task that is awaiting mapping. + - ƒ **TaskManager.wait_for_resolution** (`Function`) + - 📝 Pauses execution and waits for a resolution signal. + - ƒ **TaskManager.wait_for_input** (`Function`) + - 📝 Pauses execution and waits for user input. + - ƒ **TaskManager.get_task** (`Function`) + - 📝 Retrieves a task by its ID. + - ƒ **TaskManager.get_all_tasks** (`Function`) + - 📝 Retrieves all registered tasks. + - ƒ **TaskManager.get_tasks** (`Function`) + - 📝 Retrieves tasks with pagination and optional status filter. + - ƒ **TaskManager.get_task_logs** (`Function`) + - 📝 Retrieves logs for a specific task. + - ƒ **TaskManager._add_log** (`Function`) + - 📝 Adds a log entry to a task and notifies subscribers. + - ƒ **TaskManager.subscribe_logs** (`Function`) + - 📝 Subscribes to real-time logs for a task. + - ƒ **TaskManager.unsubscribe_logs** (`Function`) + - 📝 Unsubscribes from real-time logs for a task. + - ƒ **TaskManager.load_persisted_tasks** (`Function`) + - 📝 Load persisted tasks using persistence service. + - ƒ **TaskManager.await_input** (`Function`) + - 📝 Transition a task to AWAITING_INPUT state with input request. + - ƒ **TaskManager.resume_task_with_password** (`Function`) + - 📝 Resume a task that is awaiting input with provided passwords. + - ƒ **TaskManager.clear_tasks** (`Function`) + - 📝 Clears tasks based on status filter. +- 📦 **TaskManagerPackage** (`Module`) + - 📝 Exports the public API of the task manager package. + - 🏗️ Layer: Core +- 📦 **TaskCleanupModule** (`Module`) + - 📝 Implements task cleanup and retention policies. + - 🏗️ Layer: Core + - ℂ **TaskCleanupService** (`Class`) + - 📝 Provides methods to clean up old task records. + - ƒ **TaskCleanupService.run_cleanup** (`Function`) + - 📝 Deletes tasks older than the configured retention period. +- 📦 **TaskManagerModels** (`Module`) + - 📝 Defines the data models and enumerations used by the Task Manager. + - 🏗️ Layer: Core + - 📦 **TaskStatus** (`Enum`) + - 📝 Defines the possible states a task can be in during its lifecycle. + - ℂ **LogEntry** (`Class`) + - 📝 A Pydantic model representing a single, structured log entry associated with a task. + - ℂ **Task** (`Class`) + - 📝 A Pydantic model representing a single execution instance of a plugin, including its status, parameters, and logs. + - ƒ **Task.__init__** (`Function`) + - 📝 Initializes the Task model and validates input_request for AWAITING_INPUT status. +- 📦 **TaskPersistenceModule** (`Module`) + - 📝 Handles the persistence of tasks using SQLAlchemy and the tasks.db database. + - 🏗️ Layer: Core + - ℂ **TaskPersistenceService** (`Class`) + - 📝 Provides methods to save and load tasks from the tasks.db database using SQLAlchemy. + - ƒ **TaskPersistenceService.persist_task** (`Function`) + - 📝 Persists or updates a single task in the database. + - ƒ **TaskPersistenceService.persist_tasks** (`Function`) + - 📝 Persists multiple tasks. + - ƒ **TaskPersistenceService.load_tasks** (`Function`) + - 📝 Loads tasks from the database. + - ƒ **TaskPersistenceService.delete_tasks** (`Function`) + - 📝 Deletes specific tasks from the database. +- 📦 **BackupPlugin** (`Module`) + - 📝 A plugin that provides functionality to back up Superset dashboards. + - 🏗️ Layer: App + - 🔗 DEPENDS_ON -> `superset_tool.client` + - 🔗 DEPENDS_ON -> `superset_tool.utils` + - ℂ **BackupPlugin** (`Class`) + - 📝 Implementation of the backup plugin logic. +- 📦 **MigrationPlugin** (`Module`) + - 📝 A plugin that provides functionality to migrate Superset dashboards between environments. + - 🏗️ Layer: App + - 🔗 DEPENDS_ON -> `superset_tool.client` + - 🔗 DEPENDS_ON -> `superset_tool.utils` + - ℂ **MigrationPlugin** (`Class`) + - 📝 Implementation of the migration plugin logic. + - 📦 **MigrationPlugin.execute** (`Action`) + - 📝 Execute the migration logic with proper task logging. +- 📦 **AuthModule** (`Module`) + - 📝 Implements ADFS authentication using Authlib for FastAPI. It provides a dependency to protect endpoints. + - 🏗️ Layer: UI (API) +- 📦 **SettingsRouter** (`Module`) + - 📝 Provides API endpoints for managing application settings and Superset environments. + - 🏗️ Layer: UI (API) + - 🔗 DEPENDS_ON -> `ConfigManager` + - 🔗 DEPENDS_ON -> `ConfigModels` + - ƒ **get_settings** (`Function`) + - 📝 Retrieves all application settings. + - ƒ **update_global_settings** (`Function`) + - 📝 Updates global application settings. + - ƒ **get_environments** (`Function`) + - 📝 Lists all configured Superset environments. + - ƒ **add_environment** (`Function`) + - 📝 Adds a new Superset environment. + - ƒ **update_environment** (`Function`) + - 📝 Updates an existing Superset environment. + - ƒ **delete_environment** (`Function`) + - 📝 Deletes a Superset environment. + - ƒ **test_environment_connection** (`Function`) + - 📝 Tests the connection to a Superset environment. + - ƒ **validate_backup_path** (`Function`) + - 📝 Validates if a backup path exists and is writable. +- 📦 **TasksRouter** (`Module`) + - 📝 Defines the FastAPI router for task-related endpoints, allowing clients to create, list, and get the status of tasks. + - 🏗️ Layer: UI (API) +- 📦 **backend.src.api.routes.environments** (`Module`) + - 📝 API endpoints for listing environments and their databases. + - 🏗️ Layer: API + - 🔗 DEPENDS_ON -> `backend.src.dependencies` + - 🔗 DEPENDS_ON -> `backend.src.core.superset_client` + - 📦 **ScheduleSchema** (`DataClass`) + - 📦 **EnvironmentResponse** (`DataClass`) + - 📦 **DatabaseResponse** (`DataClass`) + - ƒ **get_environments** (`Function`) + - 📝 List all configured environments. + - ƒ **update_environment_schedule** (`Function`) + - 📝 Update backup schedule for an environment. + - ƒ **get_environment_databases** (`Function`) + - 📝 Fetch the list of databases from a specific environment. +- 📦 **PluginsRouter** (`Module`) + - 📝 Defines the FastAPI router for plugin-related endpoints, allowing clients to list available plugins. + - 🏗️ Layer: UI (API) +- 📦 **backend.src.api.routes.migration** (`Module`) + - 📝 API endpoints for migration operations. + - 🏗️ Layer: API + - 🔗 DEPENDS_ON -> `backend.src.dependencies` + - 🔗 DEPENDS_ON -> `backend.src.models.dashboard` + - ƒ **get_dashboards** (`Function`) + - 📝 Fetch all dashboards from the specified environment for the grid. + - ƒ **execute_migration** (`Function`) + - 📝 Execute the migration of selected dashboards. +- 📦 **backend.src.api.routes.mappings** (`Module`) + - 📝 API endpoints for managing database mappings and getting suggestions. + - 🏗️ Layer: API + - 🔗 DEPENDS_ON -> `backend.src.dependencies` + - 🔗 DEPENDS_ON -> `backend.src.core.database` + - 🔗 DEPENDS_ON -> `backend.src.services.mapping_service` + - 📦 **MappingCreate** (`DataClass`) + - 📦 **MappingResponse** (`DataClass`) + - 📦 **SuggestRequest** (`DataClass`) + - ƒ **get_mappings** (`Function`) + - 📝 List all saved database mappings. + - ƒ **create_mapping** (`Function`) + - 📝 Create or update a database mapping. + - ƒ **suggest_mappings_api** (`Function`) + - 📝 Get suggested mappings based on fuzzy matching. diff --git a/specs/semantic_map_design.md b/specs/semantic_map_design.md new file mode 100644 index 0000000..4399eae --- /dev/null +++ b/specs/semantic_map_design.md @@ -0,0 +1,76 @@ +# Semantic Map Generator & Validator Design + +## Objective +Create a Python script (`generate_semantic_map.py`) to: +1. Scan the codebase (`backend/`, `frontend/`) for Semantic Protocol markers. +2. Generate a **Full Semantic Map** (JSON) for detailed machine processing. +3. Generate a **Compressed Project Map** (Markdown) for LLM context window (~4000 tokens). +4. Generate a **Compliance Report** (Markdown) with history tracking. + +## Scope +* **Languages**: Python (`.py`), Svelte (`.svelte`), JavaScript/TypeScript (`.js`, `.ts`). +* **Protocol**: Based on `semantic_protocol.md`. + +## 1. Parsing Logic + +The script will use Regex to parse files textually. + +### Python Patterns +* **Anchor Start**: `r"#\s*\[DEF:(?P[\w\.]+):(?P\w+)\]"` +* **Anchor End**: `r"#\s*\[/DEF:(?P[\w\.]+):(?P\w+)\]"` +* **Tags**: `r"#\s*@(?P[A-Z_]+):\s*(?P.*)"` + +### Svelte/JS Patterns +* **HTML Anchor Start**: `r""` +* **HTML Anchor End**: `r""` +* **JS Anchor Start**: `r"//\s*\[DEF:(?P[\w\.]+):(?P\w+)\]"` +* **JS Anchor End**: `r"//\s*\[/DEF:(?P[\w\.]+):(?P\w+)\]"` +* **HTML Tags**: `r"@(?P[A-Z_]+):\s*(?P.*)"` (inside comments) +* **JSDoc Tags**: `r"\*\s*@(?P[a-z]+)\s+(?P.*)"` +* **Relation Tag**: `r"//\s*@RELATION:\s*(?P\w+)\s*->\s*(?P.*)"` + +## 2. Output Files & Structure + +### A. Full Map (`semantics/semantic_map.json`) +Detailed hierarchical JSON containing all metadata, line numbers, and relations. +```json +{ + "project_root": "/home/user/ss-tools", + "generated_at": "ISO-DATE", + "modules": [ ... ] +} +``` + +### B. Compressed Map (`specs/project_map.md`) +Optimized for "Full Attention" (max ~4000 tokens). +* **Format**: Markdown Tree. +* **Content**: + * List of high-level Modules/Components. + * Only critical tags: `@PURPOSE`, `@LAYER`. + * List of public Functions/Actions (names only, or brief summary). + * Key Relations (`DEPENDS_ON`). + * *Omit*: Internal implementation details, line numbers, minor tags. + +### C. Compliance Report (`semantics/reports/semantic_report_YYYYMMDD_HHMMSS.md`) +* **Metrics**: Global Coverage %, Module-level scores. +* **Errors**: List of broken anchors or missing mandatory tags. +* **History**: Timestamped filename ensures history tracking. + +## 3. Validation Rules (Scoring) + +### Critical Errors (0% score for entity) +1. **Unmatched Anchors**: Start tag without End tag. + +### Metadata Warnings (Reduces score) +1. **Missing Mandatory Tags**: `Module`/`Component` needs `@PURPOSE`, `@LAYER`. + +## 4. Implementation Plan + +1. **Setup**: Create `generate_semantic_map.py` and directories (`semantics/`, `semantics/reports/`). +2. **Parser**: Implement Regex patterns. +3. **Walker**: Recursive file walk ignoring standard ignore patterns. +4. **Generators**: + * `MapGenerator`: JSON dump. + * `ContextGenerator`: Markdown tree builder with token awareness (heuristic). + * `ReportGenerator`: Scoring and markdown formatting. +5. **Execution**: Run script. diff --git a/superset_tool/__init__.py b/superset_tool/__init__.py index 7bb8e1d..f8db7f2 100755 --- a/superset_tool/__init__.py +++ b/superset_tool/__init__.py @@ -11,4 +11,4 @@ from .models import SupersetConfig __all__ = ["SupersetClient", "SupersetConfig"] -# [/DEF:superset_tool] +# [/DEF:superset_tool:Module] diff --git a/superset_tool/client.py b/superset_tool/client.py index f0e5d80..3ca95ba 100755 --- a/superset_tool/client.py +++ b/superset_tool/client.py @@ -48,7 +48,7 @@ class SupersetClient: ) self.delete_before_reimport: bool = False self.logger.info("[SupersetClient.__init__][Exit] SupersetClient initialized.") - # [/DEF:SupersetClient.__init__] + # [/DEF:SupersetClient.__init__:Function] # [DEF:SupersetClient._validate_config:Function] # @PURPOSE: Проверяет, что переданный объект конфигурации имеет корректный тип. @@ -60,7 +60,7 @@ class SupersetClient: self.logger.debug("[_validate_config][Enter] Validating SupersetConfig.") assert isinstance(config, SupersetConfig), "Конфигурация должна быть экземпляром SupersetConfig" self.logger.debug("[_validate_config][Exit] Config is valid.") - # [/DEF:SupersetClient._validate_config] + # [/DEF:SupersetClient._validate_config:Function] @property def headers(self) -> dict: @@ -69,7 +69,7 @@ class SupersetClient: # @PRE: self.network должен быть инициализирован. # @POST: Возвращаемый словарь содержит актуальные заголовки, включая токен авторизации. return self.network.headers - # [/DEF:SupersetClient.headers] + # [/DEF:SupersetClient.headers:Function] # [DEF:SupersetClient.get_dashboards:Function] # @PURPOSE: Получает полный список дашбордов, автоматически обрабатывая пагинацию. @@ -93,7 +93,7 @@ class SupersetClient: ) self.logger.info("[get_dashboards][Exit] Found %d dashboards.", total_count) return total_count, paginated_data - # [/DEF:SupersetClient.get_dashboards] + # [/DEF:SupersetClient.get_dashboards:Function] # [DEF:SupersetClient.export_dashboard:Function] # @PURPOSE: Экспортирует дашборд в виде ZIP-архива. @@ -118,7 +118,7 @@ class SupersetClient: filename = self._resolve_export_filename(response, dashboard_id) self.logger.info("[export_dashboard][Exit] Exported dashboard %s to %s.", dashboard_id, filename) return response.content, filename - # [/DEF:SupersetClient.export_dashboard] + # [/DEF:SupersetClient.export_dashboard:Function] # [DEF:SupersetClient.import_dashboard:Function] # @PURPOSE: Импортирует дашборд из ZIP-файла с возможностью автоматического удаления и повторной попытки при ошибке. @@ -152,7 +152,7 @@ class SupersetClient: self.delete_dashboard(target_id) self.logger.info("[import_dashboard][State] Deleted dashboard ID %s, retrying import.", target_id) return self._do_import(file_path) - # [/DEF:SupersetClient.import_dashboard] + # [/DEF:SupersetClient.import_dashboard:Function] # [DEF:SupersetClient._resolve_target_id_for_delete:Function] # @PURPOSE: Определяет ID дашборда для удаления, используя ID или slug. @@ -177,7 +177,7 @@ class SupersetClient: except Exception as e: self.logger.warning("[_resolve_target_id_for_delete][Warning] Could not resolve slug '%s' to ID: %s", dash_slug, e) return None - # [/DEF:SupersetClient._resolve_target_id_for_delete] + # [/DEF:SupersetClient._resolve_target_id_for_delete:Function] # [DEF:SupersetClient._do_import:Function] # @PURPOSE: Выполняет один запрос на импорт без обработки исключений. @@ -200,7 +200,7 @@ class SupersetClient: extra_data={"overwrite": "true"}, timeout=self.config.timeout * 2, ) - # [/DEF:SupersetClient._do_import] + # [/DEF:SupersetClient._do_import:Function] # [DEF:SupersetClient.delete_dashboard:Function] # @PURPOSE: Удаляет дашборд по его ID или slug. @@ -218,7 +218,7 @@ class SupersetClient: self.logger.info("[delete_dashboard][Success] Dashboard %s deleted.", dashboard_id) else: self.logger.warning("[delete_dashboard][Warning] Unexpected response while deleting %s: %s", dashboard_id, response) - # [/DEF:SupersetClient.delete_dashboard] + # [/DEF:SupersetClient.delete_dashboard:Function] # [DEF:SupersetClient._extract_dashboard_id_from_zip:Function] # @PURPOSE: Извлекает ID дашборда из `metadata.yaml` внутри ZIP-архива. @@ -241,7 +241,7 @@ class SupersetClient: except Exception as exc: self.logger.error("[_extract_dashboard_id_from_zip][Failure] %s", exc, exc_info=True) return None - # [/DEF:SupersetClient._extract_dashboard_id_from_zip] + # [/DEF:SupersetClient._extract_dashboard_id_from_zip:Function] # [DEF:SupersetClient._extract_dashboard_slug_from_zip:Function] # @PURPOSE: Извлекает slug дашборда из `metadata.yaml` внутри ZIP-архива. @@ -264,7 +264,7 @@ class SupersetClient: except Exception as exc: self.logger.error("[_extract_dashboard_slug_from_zip][Failure] %s", exc, exc_info=True) return None - # [/DEF:SupersetClient._extract_dashboard_slug_from_zip] + # [/DEF:SupersetClient._extract_dashboard_slug_from_zip:Function] # [DEF:SupersetClient._validate_export_response:Function] # @PURPOSE: Проверяет, что HTTP-ответ на экспорт является валидным ZIP-архивом. @@ -280,7 +280,7 @@ class SupersetClient: raise ExportError(f"Получен не ZIP-архив (Content-Type: {content_type})") if not response.content: raise ExportError("Получены пустые данные при экспорте") - # [/DEF:SupersetClient._validate_export_response] + # [/DEF:SupersetClient._validate_export_response:Function] # [DEF:SupersetClient._resolve_export_filename:Function] # @PURPOSE: Определяет имя файла для экспорта из заголовков или генерирует его. @@ -298,7 +298,7 @@ class SupersetClient: filename = f"dashboard_export_{dashboard_id}_{timestamp}.zip" self.logger.warning("[_resolve_export_filename][Warning] Generated filename: %s", filename) return filename - # [/DEF:SupersetClient._resolve_export_filename] + # [/DEF:SupersetClient._resolve_export_filename:Function] # [DEF:SupersetClient._validate_query_params:Function] # @PURPOSE: Формирует корректный набор параметров запроса с пагинацией. @@ -310,7 +310,7 @@ class SupersetClient: assert query is None or isinstance(query, dict), "[_validate_query_params][PRE] query must be a dictionary or None." base_query = {"page": 0, "page_size": 1000} return {**base_query, **(query or {})} - # [/DEF:SupersetClient._validate_query_params] + # [/DEF:SupersetClient._validate_query_params:Function] # [DEF:SupersetClient._fetch_total_object_count:Function] # @PURPOSE: Получает общее количество объектов по указанному эндпоинту для пагинации. @@ -326,7 +326,7 @@ class SupersetClient: query_params={"page": 0, "page_size": 1}, count_field="count", ) - # [/DEF:SupersetClient._fetch_total_object_count] + # [/DEF:SupersetClient._fetch_total_object_count:Function] # [DEF:SupersetClient._fetch_all_pages:Function] # @PURPOSE: Итерируется по всем страницам пагинированного API и собирает все данные. @@ -340,7 +340,7 @@ class SupersetClient: assert endpoint and isinstance(endpoint, str), "[_fetch_all_pages][PRE] endpoint must be a non-empty string." assert isinstance(pagination_options, dict), "[_fetch_all_pages][PRE] pagination_options must be a dictionary." return self.network.fetch_paginated_data(endpoint=endpoint, pagination_options=pagination_options) - # [/DEF:SupersetClient._fetch_all_pages] + # [/DEF:SupersetClient._fetch_all_pages:Function] # [DEF:SupersetClient._validate_import_file:Function] # @PURPOSE: Проверяет, что файл существует, является ZIP-архивом и содержит `metadata.yaml`. @@ -356,7 +356,7 @@ class SupersetClient: assert zipfile.is_zipfile(path), f"Файл {zip_path} не является ZIP-архивом" with zipfile.ZipFile(path, "r") as zf: assert any(n.endswith("metadata.yaml") for n in zf.namelist()), f"Архив {zip_path} не содержит 'metadata.yaml'" - # [/DEF:SupersetClient._validate_import_file] + # [/DEF:SupersetClient._validate_import_file:Function] # [DEF:SupersetClient.get_datasets:Function] # @PURPOSE: Получает полный список датасетов, автоматически обрабатывая пагинацию. @@ -379,7 +379,7 @@ class SupersetClient: ) self.logger.info("[get_datasets][Exit] Found %d datasets.", total_count) return total_count, paginated_data - # [/DEF:SupersetClient.get_datasets] + # [/DEF:SupersetClient.get_datasets:Function] # [DEF:SupersetClient.get_databases:Function] # @PURPOSE: Получает полный список баз данных, автоматически обрабатывая пагинацию. @@ -403,7 +403,7 @@ class SupersetClient: ) self.logger.info("[get_databases][Exit] Found %d databases.", total_count) return total_count, paginated_data - # [/DEF:SupersetClient.get_databases] + # [/DEF:SupersetClient.get_databases:Function] # [DEF:SupersetClient.get_dataset:Function] # @PURPOSE: Получает информацию о конкретном датасете по его ID. @@ -420,7 +420,7 @@ class SupersetClient: response = cast(Dict, response) self.logger.info("[get_dataset][Exit] Got dataset %s.", dataset_id) return response - # [/DEF:SupersetClient.get_dataset] + # [/DEF:SupersetClient.get_dataset:Function] # [DEF:SupersetClient.get_database:Function] # @PURPOSE: Получает информацию о конкретной базе данных по её ID. @@ -437,7 +437,7 @@ class SupersetClient: response = cast(Dict, response) self.logger.info("[get_database][Exit] Got database %s.", database_id) return response - # [/DEF:SupersetClient.get_database] + # [/DEF:SupersetClient.get_database:Function] # [DEF:SupersetClient.update_dataset:Function] # @PURPOSE: Обновляет данные датасета по его ID. @@ -461,8 +461,8 @@ class SupersetClient: response = cast(Dict, response) self.logger.info("[update_dataset][Exit] Updated dataset %s.", dataset_id) return response - # [/DEF:SupersetClient.update_dataset] + # [/DEF:SupersetClient.update_dataset:Function] -# [/DEF:SupersetClient] +# [/DEF:SupersetClient:Class] -# [/DEF:superset_tool.client] +# [/DEF:superset_tool.client:Module] diff --git a/superset_tool/exceptions.py b/superset_tool/exceptions.py index febd8f5..b28208d 100755 --- a/superset_tool/exceptions.py +++ b/superset_tool/exceptions.py @@ -17,7 +17,7 @@ class SupersetToolError(Exception): def __init__(self, message: str, context: Optional[Dict[str, Any]] = None): self.context = context or {} super().__init__(f"{message} | Context: {self.context}") -# [/DEF:SupersetToolError] +# [/DEF:SupersetToolError:Class] # [DEF:AuthenticationError:Class] # @PURPOSE: Ошибки, связанные с аутентификацией или авторизацией. @@ -27,7 +27,7 @@ class SupersetToolError(Exception): class AuthenticationError(SupersetToolError): def __init__(self, message: str = "Authentication failed", **context: Any): super().__init__(f"[AUTH_FAILURE] {message}", context={"type": "authentication", **context}) -# [/DEF:AuthenticationError] +# [/DEF:AuthenticationError:Class] # [DEF:PermissionDeniedError:Class] # @PURPOSE: Ошибка, возникающая при отказе в доступе к ресурсу. @@ -39,7 +39,7 @@ class PermissionDeniedError(AuthenticationError): def __init__(self, message: str = "Permission denied", required_permission: Optional[str] = None, **context: Any): full_message = f"Permission denied: {required_permission}" if required_permission else message super().__init__(full_message, context={"required_permission": required_permission, **context}) -# [/DEF:PermissionDeniedError] +# [/DEF:PermissionDeniedError:Class] # [DEF:SupersetAPIError:Class] # @PURPOSE: Общие ошибки при взаимодействии с Superset API. @@ -49,7 +49,7 @@ class PermissionDeniedError(AuthenticationError): class SupersetAPIError(SupersetToolError): def __init__(self, message: str = "Superset API error", **context: Any): super().__init__(f"[API_FAILURE] {message}", context={"type": "api_call", **context}) -# [/DEF:SupersetAPIError] +# [/DEF:SupersetAPIError:Class] # [DEF:ExportError:Class] # @PURPOSE: Ошибки, специфичные для операций экспорта. @@ -59,7 +59,7 @@ class SupersetAPIError(SupersetToolError): class ExportError(SupersetAPIError): def __init__(self, message: str = "Dashboard export failed", **context: Any): super().__init__(f"[EXPORT_FAILURE] {message}", context={"subtype": "export", **context}) -# [/DEF:ExportError] +# [/DEF:ExportError:Class] # [DEF:DashboardNotFoundError:Class] # @PURPOSE: Ошибка, когда запрошенный дашборд или ресурс не найден (404). @@ -70,7 +70,7 @@ class ExportError(SupersetAPIError): class DashboardNotFoundError(SupersetAPIError): def __init__(self, dashboard_id_or_slug: Union[int, str], message: str = "Dashboard not found", **context: Any): super().__init__(f"[NOT_FOUND] Dashboard '{dashboard_id_or_slug}' {message}", context={"subtype": "not_found", "resource_id": dashboard_id_or_slug, **context}) -# [/DEF:DashboardNotFoundError] +# [/DEF:DashboardNotFoundError:Class] # [DEF:DatasetNotFoundError:Class] # @PURPOSE: Ошибка, когда запрашиваемый набор данных не существует (404). @@ -81,7 +81,7 @@ class DashboardNotFoundError(SupersetAPIError): class DatasetNotFoundError(SupersetAPIError): def __init__(self, dataset_id_or_slug: Union[int, str], message: str = "Dataset not found", **context: Any): super().__init__(f"[NOT_FOUND] Dataset '{dataset_id_or_slug}' {message}", context={"subtype": "not_found", "resource_id": dataset_id_or_slug, **context}) -# [/DEF:DatasetNotFoundError] +# [/DEF:DatasetNotFoundError:Class] # [DEF:InvalidZipFormatError:Class] # @PURPOSE: Ошибка, указывающая на некорректный формат или содержимое ZIP-архива. @@ -92,7 +92,7 @@ class DatasetNotFoundError(SupersetAPIError): class InvalidZipFormatError(SupersetToolError): def __init__(self, message: str = "Invalid ZIP format or content", file_path: Optional[Union[str, Path]] = None, **context: Any): super().__init__(f"[FILE_ERROR] {message}", context={"type": "file_validation", "file_path": str(file_path) if file_path else "N/A", **context}) -# [/DEF:InvalidZipFormatError] +# [/DEF:InvalidZipFormatError:Class] # [DEF:NetworkError:Class] # @PURPOSE: Ошибки, связанные с сетевым соединением. @@ -102,27 +102,27 @@ class InvalidZipFormatError(SupersetToolError): class NetworkError(SupersetToolError): def __init__(self, message: str = "Network connection failed", **context: Any): super().__init__(f"[NETWORK_FAILURE] {message}", context={"type": "network", **context}) -# [/DEF:NetworkError] +# [/DEF:NetworkError:Class] # [DEF:FileOperationError:Class] # @PURPOSE: Общие ошибки файловых операций (I/O). # @RELATION: INHERITS_FROM -> SupersetToolError class FileOperationError(SupersetToolError): pass -# [/DEF:FileOperationError] +# [/DEF:FileOperationError:Class] # [DEF:InvalidFileStructureError:Class] # @PURPOSE: Ошибка, указывающая на некорректную структуру файлов или директорий. # @RELATION: INHERITS_FROM -> FileOperationError class InvalidFileStructureError(FileOperationError): pass -# [/DEF:InvalidFileStructureError] +# [/DEF:InvalidFileStructureError:Class] # [DEF:ConfigurationError:Class] # @PURPOSE: Ошибки, связанные с неверной конфигурацией инструмента. # @RELATION: INHERITS_FROM -> SupersetToolError class ConfigurationError(SupersetToolError): pass -# [/DEF:ConfigurationError] +# [/DEF:ConfigurationError:Class] -# [/DEF:superset_tool.exceptions] \ No newline at end of file +# [/DEF:superset_tool.exceptions:Module] \ No newline at end of file diff --git a/superset_tool/models.py b/superset_tool/models.py index 0a072b3..59ec4e2 100755 --- a/superset_tool/models.py +++ b/superset_tool/models.py @@ -37,7 +37,7 @@ class SupersetConfig(BaseModel): if not required.issubset(v.keys()): raise ValueError(f"Словарь 'auth' должен содержать поля: {required}. Отсутствующие: {required - v.keys()}") return v - # [/DEF:SupersetConfig.validate_auth] + # [/DEF:SupersetConfig.validate_auth:Function] # [DEF:SupersetConfig.normalize_base_url:Function] # @PURPOSE: Нормализует `base_url`, добавляя `/api/v1`, если он отсутствует. @@ -54,11 +54,11 @@ class SupersetConfig(BaseModel): if '/api/v1' not in v: v = f"{v.rstrip('/')}/api/v1" return v - # [/DEF:SupersetConfig.normalize_base_url] + # [/DEF:SupersetConfig.normalize_base_url:Function] class Config: arbitrary_types_allowed = True -# [/DEF:SupersetConfig] +# [/DEF:SupersetConfig:Class] # [DEF:DatabaseConfig:Class] # @PURPOSE: Модель для параметров трансформации баз данных при миграции дашбордов. @@ -78,10 +78,10 @@ class DatabaseConfig(BaseModel): if not {'old', 'new'}.issubset(v.keys()): raise ValueError("'database_config' должен содержать ключи 'old' и 'new'.") return v - # [/DEF:DatabaseConfig.validate_config] + # [/DEF:DatabaseConfig.validate_config:Function] class Config: arbitrary_types_allowed = True -# [/DEF:DatabaseConfig] +# [/DEF:DatabaseConfig:Class] -# [/DEF:superset_tool.models] +# [/DEF:superset_tool.models:Module] diff --git a/superset_tool/utils/__init__.py b/superset_tool/utils/__init__.py index 793209e..3d7765e 100755 --- a/superset_tool/utils/__init__.py +++ b/superset_tool/utils/__init__.py @@ -2,4 +2,4 @@ # @SEMANTICS: package, utils # @PURPOSE: Utility package for superset_tool. # @LAYER: Infra -# [/DEF:superset_tool.utils] +# [/DEF:superset_tool.utils:Module] diff --git a/superset_tool/utils/dataset_mapper.py b/superset_tool/utils/dataset_mapper.py index 7ac0ba9..40a9b69 100755 --- a/superset_tool/utils/dataset_mapper.py +++ b/superset_tool/utils/dataset_mapper.py @@ -85,7 +85,7 @@ class DatasetMapper: self.logger.error("[get_postgres_comments][Failure] %s", e, exc_info=True) raise return comments - # [/DEF:DatasetMapper.get_postgres_comments] + # [/DEF:DatasetMapper.get_postgres_comments:Function] # [DEF:DatasetMapper.load_excel_mappings:Function] # @PURPOSE: Загружает меппинги 'column_name' -> 'column_comment' из XLSX файла. @@ -104,7 +104,7 @@ class DatasetMapper: except Exception as e: self.logger.error("[load_excel_mappings][Failure] %s", e, exc_info=True) raise - # [/DEF:DatasetMapper.load_excel_mappings] + # [/DEF:DatasetMapper.load_excel_mappings:Function] # [DEF:DatasetMapper.run_mapping:Function] # @PURPOSE: Основная функция для выполнения меппинга и обновления verbose_map датасета в Superset. @@ -223,7 +223,7 @@ class DatasetMapper: except (AssertionError, FileNotFoundError, Exception) as e: self.logger.error("[run_mapping][Failure] %s", e, exc_info=True) return - # [/DEF:DatasetMapper.run_mapping] -# [/DEF:DatasetMapper] + # [/DEF:DatasetMapper.run_mapping:Function] +# [/DEF:DatasetMapper:Class] -# [/DEF:superset_tool.utils.dataset_mapper] +# [/DEF:superset_tool.utils.dataset_mapper:Module] diff --git a/superset_tool/utils/fileio.py b/superset_tool/utils/fileio.py index 9c75b09..1b41e09 100755 --- a/superset_tool/utils/fileio.py +++ b/superset_tool/utils/fileio.py @@ -64,7 +64,7 @@ def create_temp_file(content: Optional[bytes] = None, suffix: str = ".zip", mode logger.debug("[create_temp_file][Cleanup] Removed temporary file: %s", resource_path) except OSError as e: logger.error("[create_temp_file][Failure] Error during cleanup of %s: %s", resource_path, e) -# [/DEF:create_temp_file] +# [/DEF:create_temp_file:Function] # [DEF:remove_empty_directories:Function] # @PURPOSE: Рекурсивно удаляет все пустые поддиректории, начиная с указанного пути. @@ -88,7 +88,7 @@ def remove_empty_directories(root_dir: str, logger: Optional[SupersetLogger] = N logger.error("[remove_empty_directories][Failure] Failed to remove %s: %s", current_dir, e) logger.info("[remove_empty_directories][Exit] Removed %d empty directories.", removed_count) return removed_count -# [/DEF:remove_empty_directories] +# [/DEF:remove_empty_directories:Function] # [DEF:read_dashboard_from_disk:Function] # @PURPOSE: Читает бинарное содержимое файла с диска. @@ -105,7 +105,7 @@ def read_dashboard_from_disk(file_path: str, logger: Optional[SupersetLogger] = if not content: logger.warning("[read_dashboard_from_disk][Warning] File is empty: %s", file_path) return content, path.name -# [/DEF:read_dashboard_from_disk] +# [/DEF:read_dashboard_from_disk:Function] # [DEF:calculate_crc32:Function] # @PURPOSE: Вычисляет контрольную сумму CRC32 для файла. @@ -116,7 +116,7 @@ def calculate_crc32(file_path: Path) -> str: with open(file_path, 'rb') as f: crc32_value = zlib.crc32(f.read()) return f"{crc32_value:08x}" -# [/DEF:calculate_crc32] +# [/DEF:calculate_crc32:Function] # [DEF:RetentionPolicy:DataClass] # @PURPOSE: Определяет политику хранения для архивов (ежедневные, еженедельные, ежемесячные). @@ -125,7 +125,7 @@ class RetentionPolicy: daily: int = 7 weekly: int = 4 monthly: int = 12 -# [/DEF:RetentionPolicy] +# [/DEF:RetentionPolicy:DataClass] # [DEF:archive_exports:Function] # @PURPOSE: Управляет архивом экспортированных файлов, применяя политику хранения и дедупликацию. @@ -207,7 +207,7 @@ def archive_exports(output_dir: str, policy: RetentionPolicy, deduplicate: bool logger.info("[archive_exports][State] Removed by retention policy: %s", file_path.name) except OSError as e: logger.error("[archive_exports][Failure] Failed to remove %s: %s", file_path, e) -# [/DEF:archive_exports] +# [/DEF:archive_exports:Function] # [DEF:apply_retention_policy:Function] # @PURPOSE: (Helper) Применяет политику хранения к списку файлов, возвращая те, что нужно сохранить. @@ -240,7 +240,7 @@ def apply_retention_policy(files_with_dates: List[Tuple[Path, date]], policy: Re files_to_keep.update(monthly_files[:policy.monthly]) logger.debug("[apply_retention_policy][State] Keeping %d files according to retention policy", len(files_to_keep)) return files_to_keep -# [/DEF:apply_retention_policy] +# [/DEF:apply_retention_policy:Function] # [DEF:save_and_unpack_dashboard:Function] # @PURPOSE: Сохраняет бинарное содержимое ZIP-архива на диск и опционально распаковывает его. @@ -270,7 +270,7 @@ def save_and_unpack_dashboard(zip_content: bytes, output_dir: Union[str, Path], except zipfile.BadZipFile as e: logger.error("[save_and_unpack_dashboard][Failure] Invalid ZIP archive: %s", e) raise InvalidZipFormatError(f"Invalid ZIP file: {e}") from e -# [/DEF:save_and_unpack_dashboard] +# [/DEF:save_and_unpack_dashboard:Function] # [DEF:update_yamls:Function] # @PURPOSE: Обновляет конфигурации в YAML-файлах, заменяя значения или применяя regex. @@ -291,7 +291,7 @@ def update_yamls(db_configs: Optional[List[Dict[str, Any]]] = None, path: str = for file_path in dir_path.rglob("*.yaml"): _update_yaml_file(file_path, configs, regexp_pattern, replace_string, logger) -# [/DEF:update_yamls] +# [/DEF:update_yamls:Function] # [DEF:_update_yaml_file:Function] # @PURPOSE: (Helper) Обновляет один YAML файл. @@ -352,7 +352,7 @@ def _update_yaml_file(file_path: Path, db_configs: List[Dict[str, Any]], regexp_ f.write(modified_content) except Exception as e: logger.error("[_update_yaml_file][Failure] Error performing raw replacement in %s: %s", file_path, e) -# [/DEF:_update_yaml_file] +# [/DEF:_update_yaml_file:Function] # [DEF:create_dashboard_export:Function] # @PURPOSE: Создает ZIP-архив из указанных исходных путей. @@ -379,7 +379,7 @@ def create_dashboard_export(zip_path: Union[str, Path], source_paths: List[Union except (IOError, zipfile.BadZipFile, AssertionError) as e: logger.error("[create_dashboard_export][Failure] Error: %s", e, exc_info=True) return False -# [/DEF:create_dashboard_export] +# [/DEF:create_dashboard_export:Function] # [DEF:sanitize_filename:Function] # @PURPOSE: Очищает строку от символов, недопустимых в именах файлов. @@ -387,7 +387,7 @@ def create_dashboard_export(zip_path: Union[str, Path], source_paths: List[Union # @RETURN: str - Очищенная строка. def sanitize_filename(filename: str) -> str: return re.sub(r'[\\/*?:"<>|]', "_", filename).strip() -# [/DEF:sanitize_filename] +# [/DEF:sanitize_filename:Function] # [DEF:get_filename_from_headers:Function] # @PURPOSE: Извлекает имя файла из HTTP заголовка 'Content-Disposition'. @@ -398,7 +398,7 @@ def get_filename_from_headers(headers: dict) -> Optional[str]: if match := re.search(r'filename="?([^"]+)"?', content_disposition): return match.group(1).strip() return None -# [/DEF:get_filename_from_headers] +# [/DEF:get_filename_from_headers:Function] # [DEF:consolidate_archive_folders:Function] # @PURPOSE: Консолидирует директории архивов на основе общего слага в имени. @@ -453,6 +453,6 @@ def consolidate_archive_folders(root_directory: Path, logger: Optional[SupersetL logger.info("[consolidate_archive_folders][State] Removed source directory: %s", source_dir) except Exception as e: logger.error("[consolidate_archive_folders][Failure] Failed to remove source directory %s: %s", source_dir, e) -# [/DEF:consolidate_archive_folders] +# [/DEF:consolidate_archive_folders:Function] -# [/DEF:superset_tool.utils.fileio] +# [/DEF:superset_tool.utils.fileio:Module] diff --git a/superset_tool/utils/init_clients.py b/superset_tool/utils/init_clients.py index bec155a..6de3744 100755 --- a/superset_tool/utils/init_clients.py +++ b/superset_tool/utils/init_clients.py @@ -105,6 +105,6 @@ def setup_clients(logger: SupersetLogger, custom_envs: Optional[List[Any]] = Non except Exception as e: logger.critical("[setup_clients][Failure] Critical error during client initialization: %s", e, exc_info=True) raise -# [/DEF:setup_clients] +# [/DEF:setup_clients:Function] -# [/DEF:superset_tool.utils.init_clients] +# [/DEF:superset_tool.utils.init_clients:Module] diff --git a/superset_tool/utils/logger.py b/superset_tool/utils/logger.py index 862e478..8313550 100755 --- a/superset_tool/utils/logger.py +++ b/superset_tool/utils/logger.py @@ -53,7 +53,7 @@ class SupersetLogger: console_handler = logging.StreamHandler(sys.stdout) console_handler.setFormatter(formatter) self.logger.addHandler(console_handler) - # [/DEF:SupersetLogger.__init__] + # [/DEF:SupersetLogger.__init__:Function] # [DEF:SupersetLogger._log:Function] # @PURPOSE: (Helper) Универсальный метод для вызова соответствующего уровня логирования. @@ -64,44 +64,44 @@ class SupersetLogger: # @PARAM: exc_info (bool) - Добавлять ли информацию об исключении. def _log(self, level_method: Any, msg: str, *args: Any, extra: Optional[Mapping[str, Any]] = None, exc_info: bool = False) -> None: level_method(msg, *args, extra=extra, exc_info=exc_info) - # [/DEF:SupersetLogger._log] + # [/DEF:SupersetLogger._log:Function] # [DEF:SupersetLogger.info:Function] # @PURPOSE: Записывает сообщение уровня INFO. def info(self, msg: str, *args: Any, extra: Optional[Mapping[str, Any]] = None, exc_info: bool = False) -> None: self._log(self.logger.info, msg, *args, extra=extra, exc_info=exc_info) - # [/DEF:SupersetLogger.info] + # [/DEF:SupersetLogger.info:Function] # [DEF:SupersetLogger.debug:Function] # @PURPOSE: Записывает сообщение уровня DEBUG. def debug(self, msg: str, *args: Any, extra: Optional[Mapping[str, Any]] = None, exc_info: bool = False) -> None: self._log(self.logger.debug, msg, *args, extra=extra, exc_info=exc_info) - # [/DEF:SupersetLogger.debug] + # [/DEF:SupersetLogger.debug:Function] # [DEF:SupersetLogger.warning:Function] # @PURPOSE: Записывает сообщение уровня WARNING. def warning(self, msg: str, *args: Any, extra: Optional[Mapping[str, Any]] = None, exc_info: bool = False) -> None: self._log(self.logger.warning, msg, *args, extra=extra, exc_info=exc_info) - # [/DEF:SupersetLogger.warning] + # [/DEF:SupersetLogger.warning:Function] # [DEF:SupersetLogger.error:Function] # @PURPOSE: Записывает сообщение уровня ERROR. def error(self, msg: str, *args: Any, extra: Optional[Mapping[str, Any]] = None, exc_info: bool = False) -> None: self._log(self.logger.error, msg, *args, extra=extra, exc_info=exc_info) - # [/DEF:SupersetLogger.error] + # [/DEF:SupersetLogger.error:Function] # [DEF:SupersetLogger.critical:Function] # @PURPOSE: Записывает сообщение уровня CRITICAL. def critical(self, msg: str, *args: Any, extra: Optional[Mapping[str, Any]] = None, exc_info: bool = False) -> None: self._log(self.logger.critical, msg, *args, extra=extra, exc_info=exc_info) - # [/DEF:SupersetLogger.critical] + # [/DEF:SupersetLogger.critical:Function] # [DEF:SupersetLogger.exception:Function] # @PURPOSE: Записывает сообщение уровня ERROR вместе с трассировкой стека текущего исключения. def exception(self, msg: str, *args: Any, **kwargs: Any) -> None: self.logger.exception(msg, *args, **kwargs) - # [/DEF:SupersetLogger.exception] + # [/DEF:SupersetLogger.exception:Function] -# [/DEF:SupersetLogger] +# [/DEF:SupersetLogger:Class] -# [/DEF:superset_tool.utils.logger] +# [/DEF:superset_tool.utils.logger:Module] diff --git a/superset_tool/utils/network.py b/superset_tool/utils/network.py index d6ab0e9..7988e49 100755 --- a/superset_tool/utils/network.py +++ b/superset_tool/utils/network.py @@ -42,7 +42,7 @@ class APIClient: self._tokens: Dict[str, str] = {} self._authenticated = False self.logger.info("[APIClient.__init__][Exit] APIClient initialized.") - # [/DEF:APIClient.__init__] + # [/DEF:APIClient.__init__:Function] # [DEF:APIClient._init_session:Function] # @PURPOSE: Создает и настраивает `requests.Session` с retry-логикой. @@ -58,7 +58,7 @@ class APIClient: self.logger.warning("[_init_session][State] SSL verification disabled.") session.verify = self.request_settings["verify_ssl"] return session - # [/DEF:APIClient._init_session] + # [/DEF:APIClient._init_session:Function] # [DEF:APIClient.authenticate:Function] # @PURPOSE: Выполняет аутентификацию в Superset API и получает access и CSRF токены. @@ -85,7 +85,7 @@ class APIClient: raise AuthenticationError(f"Authentication failed: {e}") from e except (requests.exceptions.RequestException, KeyError) as e: raise NetworkError(f"Network or parsing error during authentication: {e}") from e - # [/DEF:APIClient.authenticate] + # [/DEF:APIClient.authenticate:Function] @property def headers(self) -> Dict[str, str]: @@ -98,7 +98,7 @@ class APIClient: "Referer": self.base_url, "Content-Type": "application/json" } - # [/DEF:APIClient.headers] + # [/DEF:APIClient.headers:Function] # [DEF:APIClient.request:Function] # @PURPOSE: Выполняет универсальный HTTP-запрос к API. @@ -121,7 +121,7 @@ class APIClient: self._handle_http_error(e, endpoint) except requests.exceptions.RequestException as e: self._handle_network_error(e, full_url) - # [/DEF:APIClient.request] + # [/DEF:APIClient.request:Function] # [DEF:APIClient._handle_http_error:Function] # @PURPOSE: (Helper) Преобразует HTTP ошибки в кастомные исключения. @@ -133,7 +133,7 @@ class APIClient: if status_code == 403: raise PermissionDeniedError() from e if status_code == 401: raise AuthenticationError() from e raise SupersetAPIError(f"API Error {status_code}: {e.response.text}") from e - # [/DEF:APIClient._handle_http_error] + # [/DEF:APIClient._handle_http_error:Function] # [DEF:APIClient._handle_network_error:Function] # @PURPOSE: (Helper) Преобразует сетевые ошибки в `NetworkError`. @@ -144,7 +144,7 @@ class APIClient: elif isinstance(e, requests.exceptions.ConnectionError): msg = "Connection error" else: msg = f"Unknown network error: {e}" raise NetworkError(msg, url=url) from e - # [/DEF:APIClient._handle_network_error] + # [/DEF:APIClient._handle_network_error:Function] # [DEF:APIClient.upload_file:Function] # @PURPOSE: Загружает файл на сервер через multipart/form-data. @@ -170,7 +170,7 @@ class APIClient: raise TypeError(f"Unsupported file_obj type: {type(file_obj)}") return self._perform_upload(full_url, files_payload, extra_data, _headers, timeout) - # [/DEF:APIClient.upload_file] + # [/DEF:APIClient.upload_file:Function] # [DEF:APIClient._perform_upload:Function] # @PURPOSE: (Helper) Выполняет POST запрос с файлом. @@ -196,7 +196,7 @@ class APIClient: raise SupersetAPIError(f"API error during upload: {e.response.text}") from e except requests.exceptions.RequestException as e: raise NetworkError(f"Network error during upload: {e}", url=url) from e - # [/DEF:APIClient._perform_upload] + # [/DEF:APIClient._perform_upload:Function] # [DEF:APIClient.fetch_paginated_count:Function] # @PURPOSE: Получает общее количество элементов для пагинации. @@ -207,7 +207,7 @@ class APIClient: def fetch_paginated_count(self, endpoint: str, query_params: Dict, count_field: str = "count") -> int: response_json = cast(Dict[str, Any], self.request("GET", endpoint, params={"q": json.dumps(query_params)})) return response_json.get(count_field, 0) - # [/DEF:APIClient.fetch_paginated_count] + # [/DEF:APIClient.fetch_paginated_count:Function] # [DEF:APIClient.fetch_paginated_data:Function] # @PURPOSE: Автоматически собирает данные со всех страниц пагинированного эндпоинта. @@ -225,8 +225,8 @@ class APIClient: response_json = cast(Dict[str, Any], self.request("GET", endpoint, params={"q": json.dumps(query)})) results.extend(response_json.get(results_field, [])) return results - # [/DEF:APIClient.fetch_paginated_data] + # [/DEF:APIClient.fetch_paginated_data:Function] -# [/DEF:APIClient] +# [/DEF:APIClient:Class] -# [/DEF:superset_tool.utils.network] +# [/DEF:superset_tool.utils.network:Module] diff --git a/superset_tool/utils/whiptail_fallback.py b/superset_tool/utils/whiptail_fallback.py index 4dcb931..2e7a33e 100755 --- a/superset_tool/utils/whiptail_fallback.py +++ b/superset_tool/utils/whiptail_fallback.py @@ -26,7 +26,7 @@ def menu(title: str, prompt: str, choices: List[str], **kwargs) -> Tuple[int, Op return (0, choices[sel - 1]) if 0 < sel <= len(choices) else (1, None) except (ValueError, IndexError): return 1, None -# [/DEF:menu] +# [/DEF:menu:Function] # [DEF:checklist:Function] # @PURPOSE: Отображает список с возможностью множественного выбора. @@ -46,7 +46,7 @@ def checklist(title: str, prompt: str, options: List[Tuple[str, str]], **kwargs) return 0, selected_values except (ValueError, IndexError): return 1, [] -# [/DEF:checklist] +# [/DEF:checklist:Function] # [DEF:yesno:Function] # @PURPOSE: Задает вопрос с ответом да/нет. @@ -56,7 +56,7 @@ def checklist(title: str, prompt: str, options: List[Tuple[str, str]], **kwargs) def yesno(title: str, question: str, **kwargs) -> bool: ans = input(f"\n=== {title} ===\n{question} (y/n): ").strip().lower() return ans in ("y", "yes", "да", "д") -# [/DEF:yesno] +# [/DEF:yesno:Function] # [DEF:msgbox:Function] # @PURPOSE: Отображает информационное сообщение. @@ -64,7 +64,7 @@ def yesno(title: str, question: str, **kwargs) -> bool: # @PARAM: msg (str) - Текст сообщения. def msgbox(title: str, msg: str, **kwargs) -> None: print(f"\n=== {title} ===\n{msg}\n") -# [/DEF:msgbox] +# [/DEF:msgbox:Function] # [DEF:inputbox:Function] # @PURPOSE: Запрашивает у пользователя текстовый ввод. @@ -75,7 +75,7 @@ def inputbox(title: str, prompt: str, **kwargs) -> Tuple[int, Optional[str]]: print(f"\n=== {title} ===") val = input(f"{prompt}\n") return (0, val) if val else (1, None) -# [/DEF:inputbox] +# [/DEF:inputbox:Function] # [DEF:_ConsoleGauge:Class] # @PURPOSE: Контекстный менеджер для имитации `whiptail gauge` в консоли. @@ -91,7 +91,7 @@ class _ConsoleGauge: sys.stdout.write(f"\r{txt} "); sys.stdout.flush() def set_percent(self, percent: int) -> None: sys.stdout.write(f"{percent}%"); sys.stdout.flush() -# [/DEF:_ConsoleGauge] +# [/DEF:_ConsoleGauge:Class] # [DEF:gauge:Function] # @PURPOSE: Создает и возвращает экземпляр `_ConsoleGauge`. @@ -99,6 +99,6 @@ class _ConsoleGauge: # @RETURN: _ConsoleGauge - Экземпляр контекстного менеджера. def gauge(title: str, **kwargs) -> _ConsoleGauge: return _ConsoleGauge(title, **kwargs) -# [/DEF:gauge] +# [/DEF:gauge:Function] -# [/DEF:superset_tool.utils.whiptail_fallback] +# [/DEF:superset_tool.utils.whiptail_fallback:Module] diff --git a/test_migration_debug.py b/test_migration_debug.py deleted file mode 100644 index 77bf0ae..0000000 --- a/test_migration_debug.py +++ /dev/null @@ -1,188 +0,0 @@ -#!/usr/bin/env python3 -""" -Debug script to test the migration flow and identify where the issue occurs. -""" - -import sys -import os -from pathlib import Path - -# Add project root to sys.path -project_root = Path(__file__).parent -sys.path.insert(0, str(project_root)) - -def test_plugin_loader(): - """Test if the plugin loader can find the migration plugin.""" - print("=== Testing Plugin Loader ===") - try: - from backend.src.core.plugin_loader import PluginLoader - from pathlib import Path - - plugin_dir = Path(__file__).parent / "backend" / "src" / "plugins" - print(f"Plugin directory: {plugin_dir}") - print(f"Directory exists: {plugin_dir.exists()}") - - if plugin_dir.exists(): - print(f"Files in plugin directory: {list(plugin_dir.iterdir())}") - - plugin_loader = PluginLoader(plugin_dir=str(plugin_dir)) - configs = plugin_loader.get_all_plugin_configs() - - print(f"Found {len(configs)} plugins:") - for config in configs: - print(f" - {config.name} (ID: {config.id})") - - migration_plugin = plugin_loader.get_plugin("superset-migration") - if migration_plugin: - print("✓ Migration plugin found") - print(f" Name: {migration_plugin.name}") - print(f" Description: {migration_plugin.description}") - print(f" Schema: {migration_plugin.get_schema()}") - else: - print("✗ Migration plugin NOT found") - - return migration_plugin is not None - - except Exception as e: - print(f"✗ Plugin loader test failed: {e}") - import traceback - traceback.print_exc() - return False - -def test_task_manager(): - """Test if the task manager can create tasks.""" - print("\n=== Testing Task Manager ===") - try: - from backend.src.core.plugin_loader import PluginLoader - from backend.src.core.task_manager import TaskManager - from pathlib import Path - - plugin_dir = Path(__file__).parent / "backend" / "src" / "plugins" - plugin_loader = PluginLoader(plugin_dir=str(plugin_dir)) - task_manager = TaskManager(plugin_loader) - - # Test task creation - test_params = { - "from_env": "dev", - "to_env": "prod", - "dashboard_regex": ".*", - "replace_db_config": False - } - - print(f"Creating test task with params: {test_params}") - import asyncio - task = asyncio.run(task_manager.create_task("superset-migration", test_params)) - print(f"✓ Task created successfully: {task.id}") - print(f" Status: {task.status}") - print(f" Plugin ID: {task.plugin_id}") - - return True - - except Exception as e: - print(f"✗ Task manager test failed: {e}") - import traceback - traceback.print_exc() - return False - -def test_migration_endpoint(): - """Test the migration endpoint directly.""" - print("\n=== Testing Migration Endpoint ===") - try: - from backend.src.api.routes.migration import execute_migration - from backend.src.models.dashboard import DashboardSelection - from backend.src.dependencies import get_config_manager, get_task_manager - - # Create a test selection - selection = DashboardSelection( - selected_ids=[1, 2, 3], - source_env_id="ss2", - target_env_id="ss1" - ) - - print(f"Testing migration with selection: {selection.dict()}") - - # This would normally be called by FastAPI with dependencies - # For testing, we'll call it directly - config_manager = get_config_manager() - task_manager = get_task_manager() - - import asyncio - - # We need to ensure TaskManager uses the SAME loop as run_and_wait - loop = asyncio.new_event_loop() - asyncio.set_event_loop(loop) - - # Re-initialize TaskManager with the new loop - task_manager.loop = loop - - async def run_and_wait(): - result = await execute_migration(selection, config_manager, task_manager) - print(f"✓ Migration endpoint test successful: {result}") - - task_id = result["task_id"] - print(f"Waiting for task {task_id} to complete...") - - for i in range(20): - await asyncio.sleep(1) - task = task_manager.get_task(task_id) - print(f" [{i}] Task status: {task.status}") - if task.status in ["SUCCESS", "FAILED"]: - print(f"Task finished with status: {task.status}") - for log in task.logs: - print(f" [{log.level}] {log.message}") - return task.status == "SUCCESS" - - print("Task timed out. Current status: " + task_manager.get_task(task_id).status) - return False - - try: - return loop.run_until_complete(run_and_wait()) - finally: - loop.close() - - except Exception as e: - print(f"✗ Migration endpoint test failed: {e}") - import traceback - traceback.print_exc() - return False - -def main(): - """Run all tests.""" - print("Migration Debug Test Script") - print("=" * 50) - - results = [] - - # Test 1: Plugin Loader - results.append(("Plugin Loader", test_plugin_loader())) - - # Test 2: Task Manager - results.append(("Task Manager", test_task_manager())) - - # Test 3: Migration Endpoint - results.append(("Migration Endpoint", test_migration_endpoint())) - - # Summary - print("\n" + "=" * 50) - print("TEST RESULTS SUMMARY:") - print("=" * 50) - - passed = 0 - for test_name, result in results: - status = "PASS" if result else "FAIL" - print(f"{test_name}: {status}") - if result: - passed += 1 - - print(f"\nTotal: {passed}/{len(results)} tests passed") - - if passed == len(results): - print("✓ All tests passed! The migration system appears to be working correctly.") - else: - print("✗ Some tests failed. Check the logs above for details.") - - return passed == len(results) - -if __name__ == "__main__": - success = main() - sys.exit(0 if success else 1) \ No newline at end of file diff --git a/test_update_yamls.py b/test_update_yamls.py deleted file mode 100755 index eb1b7c3..0000000 --- a/test_update_yamls.py +++ /dev/null @@ -1,63 +0,0 @@ -# [DEF:test_update_yamls:Module] -# -# @SEMANTICS: test, yaml, update, script -# @PURPOSE: Test script to verify update_yamls behavior. -# @LAYER: Test -# @RELATION: DEPENDS_ON -> superset_tool.utils.fileio -# @PUBLIC_API: main - -# [SECTION: IMPORTS] -import tempfile -import os -from pathlib import Path -import yaml -from superset_tool.utils.fileio import update_yamls -# [/SECTION] - -# [DEF:main:Function] -# @PURPOSE: Main test function. -# @RELATION: CALLS -> update_yamls -def main(): - # Create a temporary directory structure - with tempfile.TemporaryDirectory() as tmpdir: - tmp_path = Path(tmpdir) - - # Create a mock dashboard directory structure - dash_dir = tmp_path / "dashboard" - dash_dir.mkdir() - - # Create a mock metadata.yaml file - metadata_file = dash_dir / "metadata.yaml" - metadata_content = { - "dashboard_uuid": "12345", - "database_name": "Prod Clickhouse", - "slug": "test-dashboard" - } - with open(metadata_file, 'w') as f: - yaml.dump(metadata_content, f) - - print("Original metadata.yaml:") - with open(metadata_file, 'r') as f: - print(f.read()) - - # Test update_yamls - db_configs = [ - { - "old": {"database_name": "Prod Clickhouse"}, - "new": {"database_name": "DEV Clickhouse"} - } - ] - - update_yamls(db_configs=db_configs, path=str(dash_dir)) - - print("\nAfter update_yamls:") - with open(metadata_file, 'r') as f: - print(f.read()) - - print("Test completed.") -# [/DEF:main] - -if __name__ == "__main__": - main() - -# [/DEF:test_update_yamls]