diff --git a/backend/src/api/routes/translate/_job_routes.py b/backend/src/api/routes/translate/_job_routes.py index 98cdf9fb..ea418c3a 100644 --- a/backend/src/api/routes/translate/_job_routes.py +++ b/backend/src/api/routes/translate/_job_routes.py @@ -269,7 +269,7 @@ async def check_target_schema( extra={"src": "translate_routes"}, ) try: - result = validate_target_table_schema(payload, config_manager) + result = await validate_target_table_schema(payload, config_manager) return result except Exception as e: logger.explore("check_target_schema failed", diff --git a/backend/src/plugins/mapper.py b/backend/src/plugins/mapper.py index 4c30d497..c9a39954 100644 --- a/backend/src/plugins/mapper.py +++ b/backend/src/plugins/mapper.py @@ -167,7 +167,7 @@ class MapperPlugin(PluginBase): if not database_id: log.error("database_id is required for sqllab source.") raise ValueError("database_id is required for sqllab source.") - executor.resolve_database_id(target_database_id=str(database_id)) + await executor.resolve_database_id(target_database_id=str(database_id)) mapper.run_mapping( superset_client=client, diff --git a/backend/src/plugins/translate/service_target_schema.py b/backend/src/plugins/translate/service_target_schema.py index 5d87db2f..d1b57868 100644 --- a/backend/src/plugins/translate/service_target_schema.py +++ b/backend/src/plugins/translate/service_target_schema.py @@ -189,7 +189,7 @@ def _parse_sqllab_result(result: dict[str, Any]) -> tuple[list[dict[str, Any]], # @RELATION DEPENDS_ON -> [_extract_columns_from_rows] # @RELATION DEPENDS_ON -> [_parse_sqllab_result] # @RELATION DEPENDS_ON -> [SupersetSqlLabExecutor] -def validate_target_table_schema( +async def validate_target_table_schema( req: TargetSchemaValidationRequest, config_manager: ConfigManager, ) -> TargetSchemaValidationResponse: @@ -238,7 +238,7 @@ def validate_target_table_schema( try: executor = SupersetSqlLabExecutor(config_manager, req.environment_id) - executor.resolve_database_id(target_database_id=req.target_database_id) + await executor.resolve_database_id(target_database_id=req.target_database_id) backend = executor.get_database_backend() or "" db_name = executor.get_database_name() or "unknown" @@ -290,7 +290,7 @@ def validate_target_table_schema( logger.reason("Executing SQL Lab query", extra={"payload": {"sql": sql[:200], "backend": backend, "database_name": db_name}}) - result = executor.execute_and_poll(sql=sql, max_polls=15, poll_interval_seconds=1.0) + result = await executor.execute_and_poll(sql=sql, max_polls=15, poll_interval_seconds=1.0) status = result.get("status", "") if status == "failed": diff --git a/backend/src/plugins/translate/superset_executor.py b/backend/src/plugins/translate/superset_executor.py index a5f16575..27b0cb6f 100644 --- a/backend/src/plugins/translate/superset_executor.py +++ b/backend/src/plugins/translate/superset_executor.py @@ -58,7 +58,7 @@ class SupersetSqlLabExecutor: # @PRE database_name or database_id should be known. # @POST Returns database_id integer or raises ValueError. Also sets self._database_backend. # @SIDE_EFFECT Fetches databases list from Superset; optionally fetches single DB for backend. - def resolve_database_id( + async def resolve_database_id( self, database_name: str | None = None, target_database_id: str | None = None, @@ -71,7 +71,7 @@ class SupersetSqlLabExecutor: try: db_id = int(target_database_id) # Fetch full DB info to get backend - db_info = client.get_database(db_id) + db_info = await client.get_database(db_id) result = db_info.get("result", db_info) self._database_id = result.get("id", db_id) self._database_backend = result.get("backend") or result.get("engine") @@ -92,7 +92,7 @@ class SupersetSqlLabExecutor: # Fall through to default resolution # Fetch full database list with backend info - _, databases = client.get_databases( + _, databases = await client.get_databases( query={"columns": ["id", "database_name", "backend"]} ) if not databases: @@ -156,7 +156,7 @@ class SupersetSqlLabExecutor: client = self._get_client() db_id = database_id or self._database_id if not db_id: - db_id = self.resolve_database_id() + db_id = await self.resolve_database_id() logger.reason("Submitting SQL to Superset SQL Lab", { "database_id": db_id,