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:
@@ -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}"}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user