032: fix remaining sync→async propagation (17 call sites)

Core fixes:
  - service_datasource.py: fetch_datasource_metadata() → async
  - service.py: create_job(), update_job() → async (callers await)
  - _job_routes.py: await create_job/update_job

Maintenance scanners:
  - _dashboard_scanner.py: 4 functions → async (find_affected, _get_linked,
    _apply_filters, _resolve_title)
  - _chart_manager.py: 3 functions → async
  - _banner_renderer.py: rebuild_banner → async
  - _orchestrators.py: 3 orchestrators → async
  - maintenance_banner.py: await async calls

Migration:
  - dry_run_orchestrator.py: run(), _build_target_signatures() → async
  - risk_assessor.py: build_risks() → async
  - migration.py: await service.run()
  - mapping_service.py: sync_environment() → async

Dead code:
  - _helpers.py: _find_dashboard_id_by_slug marked DEPRECATED
This commit is contained in:
2026-06-05 08:56:37 +03:00
parent a5cd06546f
commit c7d8f4431e
13 changed files with 67 additions and 66 deletions

View File

@@ -143,13 +143,13 @@ class MaintenanceBannerPlugin(PluginBase):
if operation == "start":
if not event_id:
return {"status": "failed", "error": "event_id required for start"}
result = start_maintenance(event_id, db, superset_client)
result = await start_maintenance(event_id, db, superset_client)
elif operation == "end":
if not event_id:
return {"status": "failed", "error": "event_id required for end"}
result = end_maintenance(event_id, db, superset_client)
result = await end_maintenance(event_id, db, superset_client)
elif operation == "end_all":
result = end_all_maintenance(db, superset_client)
result = await end_all_maintenance(db, superset_client)
else:
result = {"status": "failed", "error": f"Unknown operation: {operation}"}

View File

@@ -64,7 +64,7 @@ class TranslateJobService:
# region create_job [TYPE Function]
# @PURPOSE: Create a new translation job with column validation.
# @SIDE_EFFECT Validates columns via SupersetClient; caches database_dialect.
def create_job(self, payload: TranslateJobCreate) -> TranslationJob:
async def create_job(self, payload: TranslateJobCreate) -> TranslationJob:
logger.info(f"[TranslateJobService] Creating job '{payload.name}'")
if payload.source_datasource_id and not payload.translation_column:
raise ValueError("A translation column is required when a datasource is selected")
@@ -80,7 +80,7 @@ class TranslateJobService:
if not dialect:
try:
env_id = payload.environment_id or payload.source_dialect
_, detected_dialect = fetch_datasource_metadata(
_, detected_dialect = await fetch_datasource_metadata(
int(payload.source_datasource_id), env_id, self.config_manager,
)
dialect = detected_dialect
@@ -132,7 +132,7 @@ class TranslateJobService:
# region update_job [TYPE Function]
# @PURPOSE: Update an existing translation job.
# @SIDE_EFFECT Re-detects database_dialect if source_datasource_id changed.
def update_job(self, job_id: str, payload: TranslateJobUpdate) -> TranslationJob:
async def update_job(self, job_id: str, payload: TranslateJobUpdate) -> TranslationJob:
logger.info(f"[TranslateJobService] Updating job '{job_id}'")
job = self.get_job(job_id)
update_data = payload.model_dump(exclude_unset=True)
@@ -156,7 +156,7 @@ class TranslateJobService:
if payload.source_datasource_id and not payload.database_dialect:
try:
env_id = (payload.environment_id or payload.source_dialect or job.environment_id or job.source_dialect)
_, detected_dialect = fetch_datasource_metadata(
_, detected_dialect = await fetch_datasource_metadata(
int(payload.source_datasource_id), env_id, self.config_manager,
)
job.database_dialect = detected_dialect

View File

@@ -57,7 +57,7 @@ def get_dialect_from_database(database_record: dict[str, Any]) -> str:
# #region fetch_datasource_metadata [C:3] [TYPE Function]
# @BRIEF Fetch datasource columns and database dialect from Superset.
def fetch_datasource_metadata(
async def fetch_datasource_metadata(
dataset_id: int,
env_id: str,
config_manager: ConfigManager,
@@ -69,7 +69,7 @@ def fetch_datasource_metadata(
raise ValueError(f"Superset environment '{env_id}' not found in configuration")
client = SupersetClient(env_config)
dataset_detail = client.get_dataset_detail(dataset_id)
dataset_detail = await client.get_dataset_detail(dataset_id)
raw_columns = dataset_detail.get("columns", [])
columns = []
@@ -92,7 +92,7 @@ def fetch_datasource_metadata(
try:
db_id = dataset_detail.get("database_id")
if db_id:
db_record = client.get_database(int(db_id))
db_record = await client.get_database(int(db_id))
db_result = db_record.get("result", db_record) if isinstance(db_record, dict) else db_record
dialect = get_dialect_from_database(db_result)
else: