4 Commits

Author SHA1 Message Date
65f61c1f80 Merge branch '001-migration-ui-redesign' into master 2025-12-27 05:58:35 +03:00
4aa01b6470 Merge branch 'migration' into 001-migration-ui-redesign 2025-12-26 18:16:24 +03:00
35b423979d spec rules 2025-12-25 22:28:42 +03:00
2ffc3cc68f feat(migration): implement interactive mapping resolution workflow
- Add SQLite database integration for environments and mappings
- Update TaskManager to support pausing tasks (AWAITING_MAPPING)
- Modify MigrationPlugin to detect missing mappings and wait for resolution
- Add frontend UI for handling missing mappings interactively
- Create dedicated migration routes and API endpoints
- Update .gitignore and project documentation
2025-12-25 22:27:29 +03:00
4 changed files with 12 additions and 30 deletions

View File

@@ -32,6 +32,7 @@ Python 3.9+ (Backend), Node.js 18+ (Frontend Build): Follow standard conventions
- 006-configurable-belief-logs: Added Python 3.9+ + FastAPI (Backend), Pydantic (Config), Svelte (Frontend) - 006-configurable-belief-logs: Added Python 3.9+ + FastAPI (Backend), Pydantic (Config), Svelte (Frontend)
- 005-fix-ui-ws-validation: Added Python 3.9+ (Backend), Node.js 18+ (Frontend Build) - 005-fix-ui-ws-validation: Added Python 3.9+ (Backend), Node.js 18+ (Frontend Build)
- 005-fix-ui-ws-validation: Added Python 3.9+, Node.js 18+ + FastAPI, SvelteKit, Tailwind CSS, Pydantic - 005-fix-ui-ws-validation: Added Python 3.9+, Node.js 18+ + FastAPI, SvelteKit, Tailwind CSS, Pydantic
- 005-fix-ui-ws-validation: Added Python 3.9+, Node.js 18+ + FastAPI, SvelteKit, Tailwind CSS, Pydantic
<!-- MANUAL ADDITIONS START --> <!-- MANUAL ADDITIONS START -->

View File

@@ -15,7 +15,6 @@ from backend.src.dependencies import get_config_manager
from backend.src.core.superset_client import SupersetClient from backend.src.core.superset_client import SupersetClient
from superset_tool.models import SupersetConfig from superset_tool.models import SupersetConfig
from pydantic import BaseModel from pydantic import BaseModel
from backend.src.core.logger import logger
# [/SECTION] # [/SECTION]
router = APIRouter(prefix="/api/environments", tags=["environments"]) router = APIRouter(prefix="/api/environments", tags=["environments"])
@@ -39,9 +38,7 @@ class DatabaseResponse(BaseModel):
# @RETURN: List[EnvironmentResponse] # @RETURN: List[EnvironmentResponse]
@router.get("", response_model=List[EnvironmentResponse]) @router.get("", response_model=List[EnvironmentResponse])
async def get_environments(config_manager=Depends(get_config_manager)): async def get_environments(config_manager=Depends(get_config_manager)):
logger.info(f"[get_environments][Debug] Config path: {config_manager.config_path}")
envs = config_manager.get_environments() envs = config_manager.get_environments()
logger.info(f"[get_environments][Debug] Found {len(envs)} environments")
return [EnvironmentResponse(id=e.id, name=e.name, url=e.url) for e in envs] return [EnvironmentResponse(id=e.id, name=e.name, url=e.url) for e in envs]
# [/DEF:get_environments] # [/DEF:get_environments]

View File

@@ -11,18 +11,11 @@
from typing import List, Dict, Optional, Tuple from typing import List, Dict, Optional, Tuple
from superset_tool.client import SupersetClient as BaseSupersetClient from superset_tool.client import SupersetClient as BaseSupersetClient
from superset_tool.models import SupersetConfig from superset_tool.models import SupersetConfig
from backend.src.core.logger import logger
from superset_tool.utils.logger import SupersetLogger
# [/SECTION] # [/SECTION]
# [DEF:SupersetClient:Class] # [DEF:SupersetClient:Class]
# @PURPOSE: Extended SupersetClient for migration-specific operations. # @PURPOSE: Extended SupersetClient for migration-specific operations.
class SupersetClient(BaseSupersetClient): class SupersetClient(BaseSupersetClient):
def __init__(self, config: SupersetConfig):
# Initialize with the application's logger wrapped in SupersetLogger
# to ensure BeliefFormatter is used.
sl_logger = SupersetLogger(logger=logger)
super().__init__(config=config, logger=sl_logger)
# [DEF:SupersetClient.get_databases_summary:Function] # [DEF:SupersetClient.get_databases_summary:Function]
# @PURPOSE: Fetch a summary of databases including uuid, name, and engine. # @PURPOSE: Fetch a summary of databases including uuid, name, and engine.

View File

@@ -103,8 +103,7 @@
<p class="mt-1 text-sm text-gray-500">Regular expression to filter dashboards to migrate.</p> <p class="mt-1 text-sm text-gray-500">Regular expression to filter dashboards to migrate.</p>
</div> </div>
<div class="flex items-center justify-between mb-8"> <div class="flex items-center mb-8">
<div class="flex items-center">
<input <input
id="replace-db" id="replace-db"
type="checkbox" type="checkbox"
@@ -116,14 +115,6 @@
</label> </label>
</div> </div>
<a
href="/migration/mappings"
class="text-sm font-medium text-indigo-600 hover:text-indigo-500"
>
Manage Mappings &rarr;
</a>
</div>
<button <button
on:click={startMigration} on:click={startMigration}
disabled={!sourceEnvId || !targetEnvId || sourceEnvId === targetEnvId} disabled={!sourceEnvId || !targetEnvId || sourceEnvId === targetEnvId}