This is an automated email from the ASF dual-hosted git repository. kaxilnaik pushed a commit to branch v3-0-test in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/v3-0-test by this push: new 377160cfb30 Rename operation IDs for task instance endpoints to include map index… (#49608) 377160cfb30 is described below commit 377160cfb30f20f2a65abfc46d55caaeee4a51c9 Author: Abhishek <abhishek.bha...@hotmail.com> AuthorDate: Thu Apr 24 17:42:59 2025 +0530 Rename operation IDs for task instance endpoints to include map index… (#49608) * Rename operation IDs for task instance endpoints to include map index for openapi spec validator * refactor: Update TaskInstanceService methods and types to use map index for dependencies * Add OpenAPI validation to FastAPI spec generation script * refactor: streamline OpenAPI validation process by removing redundant exit checks (cherry picked from commit 1cd86146eecf93128ca354d7c88f8ad2c1212a20) --- .pre-commit-config.yaml | 2 +- .../core_api/openapi/v1-rest-api-generated.yaml | 6 ++-- .../core_api/routes/public/task_instances.py | 6 ++++ .../src/airflow/ui/openapi-gen/queries/common.ts | 42 +++++++++++----------- .../ui/openapi-gen/queries/ensureQueryData.ts | 13 +++---- .../src/airflow/ui/openapi-gen/queries/prefetch.ts | 13 +++---- .../src/airflow/ui/openapi-gen/queries/queries.ts | 39 +++++++++++--------- .../src/airflow/ui/openapi-gen/queries/suspense.ts | 21 ++++++----- .../ui/openapi-gen/requests/services.gen.ts | 42 +++++++++++----------- .../airflow/ui/openapi-gen/requests/types.gen.ts | 30 ++++++++-------- .../in_container/run_update_fastapi_api_spec.py | 18 ++++++++++ 11 files changed, 134 insertions(+), 98 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 1fc3e81f2ad..42a4675dab1 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1313,7 +1313,7 @@ repos: pass_filenames: false files: ^airflow-core/src/airflow/api_fastapi/.*\.py$|^airflow-core/src/airflow/api_fastapi/auth/managers/simple/.*\.py$|^providers/fab/src/airflow/providers/fab/auth_manager/api_fastapi/.*\.py$ exclude: ^airflow-core/src/airflow/api_fastapi/execution_api/.* - additional_dependencies: ['rich>=12.4.4'] + additional_dependencies: ['rich>=12.4.4', 'openapi-spec-validator>=0.7.1'] - id: ts-compile-format-lint-ui name: Compile / format / lint UI description: TS types generation / ESLint / Prettier new UI files diff --git a/airflow-core/src/airflow/api_fastapi/core_api/openapi/v1-rest-api-generated.yaml b/airflow-core/src/airflow/api_fastapi/core_api/openapi/v1-rest-api-generated.yaml index b14b51fe415..b596b3f9fab 100644 --- a/airflow-core/src/airflow/api_fastapi/core_api/openapi/v1-rest-api-generated.yaml +++ b/airflow-core/src/airflow/api_fastapi/core_api/openapi/v1-rest-api-generated.yaml @@ -4781,7 +4781,7 @@ paths: - Task Instance summary: Get Task Instance Dependencies description: Get dependencies blocking task from getting scheduled. - operationId: get_task_instance_dependencies + operationId: get_task_instance_dependencies_by_map_index security: - OAuth2PasswordBearer: [] parameters: @@ -5106,7 +5106,7 @@ paths: - Task Instance summary: Patch Task Instance description: Update a task instance. - operationId: patch_task_instance + operationId: patch_task_instance_by_map_index security: - OAuth2PasswordBearer: [] parameters: @@ -5701,7 +5701,7 @@ paths: - Task Instance summary: Patch Task Instance Dry Run description: Update a task instance dry_run mode. - operationId: patch_task_instance_dry_run + operationId: patch_task_instance_dry_run_by_map_index security: - OAuth2PasswordBearer: [] parameters: diff --git a/airflow-core/src/airflow/api_fastapi/core_api/routes/public/task_instances.py b/airflow-core/src/airflow/api_fastapi/core_api/routes/public/task_instances.py index 4a39921eedd..715c15ed4e1 100644 --- a/airflow-core/src/airflow/api_fastapi/core_api/routes/public/task_instances.py +++ b/airflow-core/src/airflow/api_fastapi/core_api/routes/public/task_instances.py @@ -221,11 +221,13 @@ def get_mapped_task_instances( task_instances_prefix + "/{task_id}/dependencies", responses=create_openapi_http_exception_doc([status.HTTP_404_NOT_FOUND]), dependencies=[Depends(requires_access_dag(method="GET", access_entity=DagAccessEntity.TASK_INSTANCE))], + operation_id="get_task_instance_dependencies", ) @task_instances_router.get( task_instances_prefix + "/{task_id}/{map_index}/dependencies", responses=create_openapi_http_exception_doc([status.HTTP_404_NOT_FOUND]), dependencies=[Depends(requires_access_dag(method="GET", access_entity=DagAccessEntity.TASK_INSTANCE))], + operation_id="get_task_instance_dependencies_by_map_index", ) def get_task_instance_dependencies( dag_id: str, @@ -775,6 +777,7 @@ def _patch_ti_validate_request( [status.HTTP_404_NOT_FOUND, status.HTTP_400_BAD_REQUEST], ), dependencies=[Depends(requires_access_dag(method="PUT", access_entity=DagAccessEntity.TASK_INSTANCE))], + operation_id="patch_task_instance_dry_run", ) @task_instances_router.patch( task_instances_prefix + "/{task_id}/{map_index}/dry_run", @@ -782,6 +785,7 @@ def _patch_ti_validate_request( [status.HTTP_404_NOT_FOUND, status.HTTP_400_BAD_REQUEST], ), dependencies=[Depends(requires_access_dag(method="PUT", access_entity=DagAccessEntity.TASK_INSTANCE))], + operation_id="patch_task_instance_dry_run_by_map_index", ) def patch_task_instance_dry_run( dag_id: str, @@ -843,6 +847,7 @@ def patch_task_instance_dry_run( Depends(action_logging()), Depends(requires_access_dag(method="PUT", access_entity=DagAccessEntity.TASK_INSTANCE)), ], + operation_id="patch_task_instance", ) @task_instances_router.patch( task_instances_prefix + "/{task_id}/{map_index}", @@ -853,6 +858,7 @@ def patch_task_instance_dry_run( Depends(action_logging()), Depends(requires_access_dag(method="PUT", access_entity=DagAccessEntity.TASK_INSTANCE)), ], + operation_id="patch_task_instance_by_map_index", ) def patch_task_instance( dag_id: str, diff --git a/airflow-core/src/airflow/ui/openapi-gen/queries/common.ts b/airflow-core/src/airflow/ui/openapi-gen/queries/common.ts index a59e98c888b..b623f927865 100644 --- a/airflow-core/src/airflow/ui/openapi-gen/queries/common.ts +++ b/airflow-core/src/airflow/ui/openapi-gen/queries/common.ts @@ -921,16 +921,16 @@ export const UseTaskInstanceServiceGetMappedTaskInstancesKeyFn = ( }, ]), ]; -export type TaskInstanceServiceGetTaskInstanceDependenciesDefaultResponse = Awaited< - ReturnType<typeof TaskInstanceService.getTaskInstanceDependencies> +export type TaskInstanceServiceGetTaskInstanceDependenciesByMapIndexDefaultResponse = Awaited< + ReturnType<typeof TaskInstanceService.getTaskInstanceDependenciesByMapIndex> >; -export type TaskInstanceServiceGetTaskInstanceDependenciesQueryResult< - TData = TaskInstanceServiceGetTaskInstanceDependenciesDefaultResponse, +export type TaskInstanceServiceGetTaskInstanceDependenciesByMapIndexQueryResult< + TData = TaskInstanceServiceGetTaskInstanceDependenciesByMapIndexDefaultResponse, TError = unknown, > = UseQueryResult<TData, TError>; -export const useTaskInstanceServiceGetTaskInstanceDependenciesKey = - "TaskInstanceServiceGetTaskInstanceDependencies"; -export const UseTaskInstanceServiceGetTaskInstanceDependenciesKeyFn = ( +export const useTaskInstanceServiceGetTaskInstanceDependenciesByMapIndexKey = + "TaskInstanceServiceGetTaskInstanceDependenciesByMapIndex"; +export const UseTaskInstanceServiceGetTaskInstanceDependenciesByMapIndexKeyFn = ( { dagId, dagRunId, @@ -944,19 +944,19 @@ export const UseTaskInstanceServiceGetTaskInstanceDependenciesKeyFn = ( }, queryKey?: Array<unknown>, ) => [ - useTaskInstanceServiceGetTaskInstanceDependenciesKey, + useTaskInstanceServiceGetTaskInstanceDependenciesByMapIndexKey, ...(queryKey ?? [{ dagId, dagRunId, mapIndex, taskId }]), ]; -export type TaskInstanceServiceGetTaskInstanceDependencies1DefaultResponse = Awaited< - ReturnType<typeof TaskInstanceService.getTaskInstanceDependencies1> +export type TaskInstanceServiceGetTaskInstanceDependenciesDefaultResponse = Awaited< + ReturnType<typeof TaskInstanceService.getTaskInstanceDependencies> >; -export type TaskInstanceServiceGetTaskInstanceDependencies1QueryResult< - TData = TaskInstanceServiceGetTaskInstanceDependencies1DefaultResponse, +export type TaskInstanceServiceGetTaskInstanceDependenciesQueryResult< + TData = TaskInstanceServiceGetTaskInstanceDependenciesDefaultResponse, TError = unknown, > = UseQueryResult<TData, TError>; -export const useTaskInstanceServiceGetTaskInstanceDependencies1Key = - "TaskInstanceServiceGetTaskInstanceDependencies1"; -export const UseTaskInstanceServiceGetTaskInstanceDependencies1KeyFn = ( +export const useTaskInstanceServiceGetTaskInstanceDependenciesKey = + "TaskInstanceServiceGetTaskInstanceDependencies"; +export const UseTaskInstanceServiceGetTaskInstanceDependenciesKeyFn = ( { dagId, dagRunId, @@ -970,7 +970,7 @@ export const UseTaskInstanceServiceGetTaskInstanceDependencies1KeyFn = ( }, queryKey?: Array<unknown>, ) => [ - useTaskInstanceServiceGetTaskInstanceDependencies1Key, + useTaskInstanceServiceGetTaskInstanceDependenciesKey, ...(queryKey ?? [{ dagId, dagRunId, mapIndex, taskId }]), ]; export type TaskInstanceServiceGetTaskInstanceTriesDefaultResponse = Awaited< @@ -1872,15 +1872,15 @@ export type DagServicePatchDagMutationResult = Awaited<ReturnType<typeof DagServ export type TaskInstanceServicePatchTaskInstanceMutationResult = Awaited< ReturnType<typeof TaskInstanceService.patchTaskInstance> >; -export type TaskInstanceServicePatchTaskInstance1MutationResult = Awaited< - ReturnType<typeof TaskInstanceService.patchTaskInstance1> +export type TaskInstanceServicePatchTaskInstanceByMapIndexMutationResult = Awaited< + ReturnType<typeof TaskInstanceService.patchTaskInstanceByMapIndex> +>; +export type TaskInstanceServicePatchTaskInstanceDryRunByMapIndexMutationResult = Awaited< + ReturnType<typeof TaskInstanceService.patchTaskInstanceDryRunByMapIndex> >; export type TaskInstanceServicePatchTaskInstanceDryRunMutationResult = Awaited< ReturnType<typeof TaskInstanceService.patchTaskInstanceDryRun> >; -export type TaskInstanceServicePatchTaskInstanceDryRun1MutationResult = Awaited< - ReturnType<typeof TaskInstanceService.patchTaskInstanceDryRun1> ->; export type PoolServicePatchPoolMutationResult = Awaited<ReturnType<typeof PoolService.patchPool>>; export type PoolServiceBulkPoolsMutationResult = Awaited<ReturnType<typeof PoolService.bulkPools>>; export type XcomServiceUpdateXcomEntryMutationResult = Awaited< diff --git a/airflow-core/src/airflow/ui/openapi-gen/queries/ensureQueryData.ts b/airflow-core/src/airflow/ui/openapi-gen/queries/ensureQueryData.ts index c97c8ac5c66..fa4c7e0a31d 100644 --- a/airflow-core/src/airflow/ui/openapi-gen/queries/ensureQueryData.ts +++ b/airflow-core/src/airflow/ui/openapi-gen/queries/ensureQueryData.ts @@ -1263,7 +1263,7 @@ export const ensureUseTaskInstanceServiceGetMappedTaskInstancesData = ( * @returns TaskDependencyCollectionResponse Successful Response * @throws ApiError */ -export const ensureUseTaskInstanceServiceGetTaskInstanceDependenciesData = ( +export const ensureUseTaskInstanceServiceGetTaskInstanceDependenciesByMapIndexData = ( queryClient: QueryClient, { dagId, @@ -1278,13 +1278,14 @@ export const ensureUseTaskInstanceServiceGetTaskInstanceDependenciesData = ( }, ) => queryClient.ensureQueryData({ - queryKey: Common.UseTaskInstanceServiceGetTaskInstanceDependenciesKeyFn({ + queryKey: Common.UseTaskInstanceServiceGetTaskInstanceDependenciesByMapIndexKeyFn({ dagId, dagRunId, mapIndex, taskId, }), - queryFn: () => TaskInstanceService.getTaskInstanceDependencies({ dagId, dagRunId, mapIndex, taskId }), + queryFn: () => + TaskInstanceService.getTaskInstanceDependenciesByMapIndex({ dagId, dagRunId, mapIndex, taskId }), }); /** * Get Task Instance Dependencies @@ -1297,7 +1298,7 @@ export const ensureUseTaskInstanceServiceGetTaskInstanceDependenciesData = ( * @returns TaskDependencyCollectionResponse Successful Response * @throws ApiError */ -export const ensureUseTaskInstanceServiceGetTaskInstanceDependencies1Data = ( +export const ensureUseTaskInstanceServiceGetTaskInstanceDependenciesData = ( queryClient: QueryClient, { dagId, @@ -1312,13 +1313,13 @@ export const ensureUseTaskInstanceServiceGetTaskInstanceDependencies1Data = ( }, ) => queryClient.ensureQueryData({ - queryKey: Common.UseTaskInstanceServiceGetTaskInstanceDependencies1KeyFn({ + queryKey: Common.UseTaskInstanceServiceGetTaskInstanceDependenciesKeyFn({ dagId, dagRunId, mapIndex, taskId, }), - queryFn: () => TaskInstanceService.getTaskInstanceDependencies1({ dagId, dagRunId, mapIndex, taskId }), + queryFn: () => TaskInstanceService.getTaskInstanceDependencies({ dagId, dagRunId, mapIndex, taskId }), }); /** * Get Task Instance Tries diff --git a/airflow-core/src/airflow/ui/openapi-gen/queries/prefetch.ts b/airflow-core/src/airflow/ui/openapi-gen/queries/prefetch.ts index c9f715befa4..191e76bc274 100644 --- a/airflow-core/src/airflow/ui/openapi-gen/queries/prefetch.ts +++ b/airflow-core/src/airflow/ui/openapi-gen/queries/prefetch.ts @@ -1263,7 +1263,7 @@ export const prefetchUseTaskInstanceServiceGetMappedTaskInstances = ( * @returns TaskDependencyCollectionResponse Successful Response * @throws ApiError */ -export const prefetchUseTaskInstanceServiceGetTaskInstanceDependencies = ( +export const prefetchUseTaskInstanceServiceGetTaskInstanceDependenciesByMapIndex = ( queryClient: QueryClient, { dagId, @@ -1278,13 +1278,14 @@ export const prefetchUseTaskInstanceServiceGetTaskInstanceDependencies = ( }, ) => queryClient.prefetchQuery({ - queryKey: Common.UseTaskInstanceServiceGetTaskInstanceDependenciesKeyFn({ + queryKey: Common.UseTaskInstanceServiceGetTaskInstanceDependenciesByMapIndexKeyFn({ dagId, dagRunId, mapIndex, taskId, }), - queryFn: () => TaskInstanceService.getTaskInstanceDependencies({ dagId, dagRunId, mapIndex, taskId }), + queryFn: () => + TaskInstanceService.getTaskInstanceDependenciesByMapIndex({ dagId, dagRunId, mapIndex, taskId }), }); /** * Get Task Instance Dependencies @@ -1297,7 +1298,7 @@ export const prefetchUseTaskInstanceServiceGetTaskInstanceDependencies = ( * @returns TaskDependencyCollectionResponse Successful Response * @throws ApiError */ -export const prefetchUseTaskInstanceServiceGetTaskInstanceDependencies1 = ( +export const prefetchUseTaskInstanceServiceGetTaskInstanceDependencies = ( queryClient: QueryClient, { dagId, @@ -1312,13 +1313,13 @@ export const prefetchUseTaskInstanceServiceGetTaskInstanceDependencies1 = ( }, ) => queryClient.prefetchQuery({ - queryKey: Common.UseTaskInstanceServiceGetTaskInstanceDependencies1KeyFn({ + queryKey: Common.UseTaskInstanceServiceGetTaskInstanceDependenciesKeyFn({ dagId, dagRunId, mapIndex, taskId, }), - queryFn: () => TaskInstanceService.getTaskInstanceDependencies1({ dagId, dagRunId, mapIndex, taskId }), + queryFn: () => TaskInstanceService.getTaskInstanceDependencies({ dagId, dagRunId, mapIndex, taskId }), }); /** * Get Task Instance Tries diff --git a/airflow-core/src/airflow/ui/openapi-gen/queries/queries.ts b/airflow-core/src/airflow/ui/openapi-gen/queries/queries.ts index 92d6b15d7d8..e1b770b8e7d 100644 --- a/airflow-core/src/airflow/ui/openapi-gen/queries/queries.ts +++ b/airflow-core/src/airflow/ui/openapi-gen/queries/queries.ts @@ -1530,8 +1530,8 @@ export const useTaskInstanceServiceGetMappedTaskInstances = < * @returns TaskDependencyCollectionResponse Successful Response * @throws ApiError */ -export const useTaskInstanceServiceGetTaskInstanceDependencies = < - TData = Common.TaskInstanceServiceGetTaskInstanceDependenciesDefaultResponse, +export const useTaskInstanceServiceGetTaskInstanceDependenciesByMapIndex = < + TData = Common.TaskInstanceServiceGetTaskInstanceDependenciesByMapIndexDefaultResponse, TError = unknown, TQueryKey extends Array<unknown> = unknown[], >( @@ -1550,12 +1550,17 @@ export const useTaskInstanceServiceGetTaskInstanceDependencies = < options?: Omit<UseQueryOptions<TData, TError>, "queryKey" | "queryFn">, ) => useQuery<TData, TError>({ - queryKey: Common.UseTaskInstanceServiceGetTaskInstanceDependenciesKeyFn( + queryKey: Common.UseTaskInstanceServiceGetTaskInstanceDependenciesByMapIndexKeyFn( { dagId, dagRunId, mapIndex, taskId }, queryKey, ), queryFn: () => - TaskInstanceService.getTaskInstanceDependencies({ dagId, dagRunId, mapIndex, taskId }) as TData, + TaskInstanceService.getTaskInstanceDependenciesByMapIndex({ + dagId, + dagRunId, + mapIndex, + taskId, + }) as TData, ...options, }); /** @@ -1569,8 +1574,8 @@ export const useTaskInstanceServiceGetTaskInstanceDependencies = < * @returns TaskDependencyCollectionResponse Successful Response * @throws ApiError */ -export const useTaskInstanceServiceGetTaskInstanceDependencies1 = < - TData = Common.TaskInstanceServiceGetTaskInstanceDependencies1DefaultResponse, +export const useTaskInstanceServiceGetTaskInstanceDependencies = < + TData = Common.TaskInstanceServiceGetTaskInstanceDependenciesDefaultResponse, TError = unknown, TQueryKey extends Array<unknown> = unknown[], >( @@ -1589,12 +1594,12 @@ export const useTaskInstanceServiceGetTaskInstanceDependencies1 = < options?: Omit<UseQueryOptions<TData, TError>, "queryKey" | "queryFn">, ) => useQuery<TData, TError>({ - queryKey: Common.UseTaskInstanceServiceGetTaskInstanceDependencies1KeyFn( + queryKey: Common.UseTaskInstanceServiceGetTaskInstanceDependenciesKeyFn( { dagId, dagRunId, mapIndex, taskId }, queryKey, ), queryFn: () => - TaskInstanceService.getTaskInstanceDependencies1({ dagId, dagRunId, mapIndex, taskId }) as TData, + TaskInstanceService.getTaskInstanceDependencies({ dagId, dagRunId, mapIndex, taskId }) as TData, ...options, }); /** @@ -4063,8 +4068,8 @@ export const useTaskInstanceServicePatchTaskInstance = < * @returns TaskInstanceCollectionResponse Successful Response * @throws ApiError */ -export const useTaskInstanceServicePatchTaskInstance1 = < - TData = Common.TaskInstanceServicePatchTaskInstance1MutationResult, +export const useTaskInstanceServicePatchTaskInstanceByMapIndex = < + TData = Common.TaskInstanceServicePatchTaskInstanceByMapIndexMutationResult, TError = unknown, TContext = unknown, >( @@ -4099,7 +4104,7 @@ export const useTaskInstanceServicePatchTaskInstance1 = < TContext >({ mutationFn: ({ dagId, dagRunId, mapIndex, requestBody, taskId, updateMask }) => - TaskInstanceService.patchTaskInstance1({ + TaskInstanceService.patchTaskInstanceByMapIndex({ dagId, dagRunId, mapIndex, @@ -4122,8 +4127,8 @@ export const useTaskInstanceServicePatchTaskInstance1 = < * @returns TaskInstanceCollectionResponse Successful Response * @throws ApiError */ -export const useTaskInstanceServicePatchTaskInstanceDryRun = < - TData = Common.TaskInstanceServicePatchTaskInstanceDryRunMutationResult, +export const useTaskInstanceServicePatchTaskInstanceDryRunByMapIndex = < + TData = Common.TaskInstanceServicePatchTaskInstanceDryRunByMapIndexMutationResult, TError = unknown, TContext = unknown, >( @@ -4158,7 +4163,7 @@ export const useTaskInstanceServicePatchTaskInstanceDryRun = < TContext >({ mutationFn: ({ dagId, dagRunId, mapIndex, requestBody, taskId, updateMask }) => - TaskInstanceService.patchTaskInstanceDryRun({ + TaskInstanceService.patchTaskInstanceDryRunByMapIndex({ dagId, dagRunId, mapIndex, @@ -4181,8 +4186,8 @@ export const useTaskInstanceServicePatchTaskInstanceDryRun = < * @returns TaskInstanceCollectionResponse Successful Response * @throws ApiError */ -export const useTaskInstanceServicePatchTaskInstanceDryRun1 = < - TData = Common.TaskInstanceServicePatchTaskInstanceDryRun1MutationResult, +export const useTaskInstanceServicePatchTaskInstanceDryRun = < + TData = Common.TaskInstanceServicePatchTaskInstanceDryRunMutationResult, TError = unknown, TContext = unknown, >( @@ -4217,7 +4222,7 @@ export const useTaskInstanceServicePatchTaskInstanceDryRun1 = < TContext >({ mutationFn: ({ dagId, dagRunId, mapIndex, requestBody, taskId, updateMask }) => - TaskInstanceService.patchTaskInstanceDryRun1({ + TaskInstanceService.patchTaskInstanceDryRun({ dagId, dagRunId, mapIndex, diff --git a/airflow-core/src/airflow/ui/openapi-gen/queries/suspense.ts b/airflow-core/src/airflow/ui/openapi-gen/queries/suspense.ts index 00cd46c9d0e..405a2093211 100644 --- a/airflow-core/src/airflow/ui/openapi-gen/queries/suspense.ts +++ b/airflow-core/src/airflow/ui/openapi-gen/queries/suspense.ts @@ -1507,8 +1507,8 @@ export const useTaskInstanceServiceGetMappedTaskInstancesSuspense = < * @returns TaskDependencyCollectionResponse Successful Response * @throws ApiError */ -export const useTaskInstanceServiceGetTaskInstanceDependenciesSuspense = < - TData = Common.TaskInstanceServiceGetTaskInstanceDependenciesDefaultResponse, +export const useTaskInstanceServiceGetTaskInstanceDependenciesByMapIndexSuspense = < + TData = Common.TaskInstanceServiceGetTaskInstanceDependenciesByMapIndexDefaultResponse, TError = unknown, TQueryKey extends Array<unknown> = unknown[], >( @@ -1527,12 +1527,17 @@ export const useTaskInstanceServiceGetTaskInstanceDependenciesSuspense = < options?: Omit<UseQueryOptions<TData, TError>, "queryKey" | "queryFn">, ) => useSuspenseQuery<TData, TError>({ - queryKey: Common.UseTaskInstanceServiceGetTaskInstanceDependenciesKeyFn( + queryKey: Common.UseTaskInstanceServiceGetTaskInstanceDependenciesByMapIndexKeyFn( { dagId, dagRunId, mapIndex, taskId }, queryKey, ), queryFn: () => - TaskInstanceService.getTaskInstanceDependencies({ dagId, dagRunId, mapIndex, taskId }) as TData, + TaskInstanceService.getTaskInstanceDependenciesByMapIndex({ + dagId, + dagRunId, + mapIndex, + taskId, + }) as TData, ...options, }); /** @@ -1546,8 +1551,8 @@ export const useTaskInstanceServiceGetTaskInstanceDependenciesSuspense = < * @returns TaskDependencyCollectionResponse Successful Response * @throws ApiError */ -export const useTaskInstanceServiceGetTaskInstanceDependencies1Suspense = < - TData = Common.TaskInstanceServiceGetTaskInstanceDependencies1DefaultResponse, +export const useTaskInstanceServiceGetTaskInstanceDependenciesSuspense = < + TData = Common.TaskInstanceServiceGetTaskInstanceDependenciesDefaultResponse, TError = unknown, TQueryKey extends Array<unknown> = unknown[], >( @@ -1566,12 +1571,12 @@ export const useTaskInstanceServiceGetTaskInstanceDependencies1Suspense = < options?: Omit<UseQueryOptions<TData, TError>, "queryKey" | "queryFn">, ) => useSuspenseQuery<TData, TError>({ - queryKey: Common.UseTaskInstanceServiceGetTaskInstanceDependencies1KeyFn( + queryKey: Common.UseTaskInstanceServiceGetTaskInstanceDependenciesKeyFn( { dagId, dagRunId, mapIndex, taskId }, queryKey, ), queryFn: () => - TaskInstanceService.getTaskInstanceDependencies1({ dagId, dagRunId, mapIndex, taskId }) as TData, + TaskInstanceService.getTaskInstanceDependencies({ dagId, dagRunId, mapIndex, taskId }) as TData, ...options, }); /** diff --git a/airflow-core/src/airflow/ui/openapi-gen/requests/services.gen.ts b/airflow-core/src/airflow/ui/openapi-gen/requests/services.gen.ts index c4c6b7bb544..711c91093d8 100644 --- a/airflow-core/src/airflow/ui/openapi-gen/requests/services.gen.ts +++ b/airflow-core/src/airflow/ui/openapi-gen/requests/services.gen.ts @@ -118,18 +118,18 @@ import type { PatchTaskInstanceResponse, GetMappedTaskInstancesData, GetMappedTaskInstancesResponse, + GetTaskInstanceDependenciesByMapIndexData, + GetTaskInstanceDependenciesByMapIndexResponse, GetTaskInstanceDependenciesData, GetTaskInstanceDependenciesResponse, - GetTaskInstanceDependencies1Data, - GetTaskInstanceDependencies1Response, GetTaskInstanceTriesData, GetTaskInstanceTriesResponse, GetMappedTaskInstanceTriesData, GetMappedTaskInstanceTriesResponse, GetMappedTaskInstanceData, GetMappedTaskInstanceResponse, - PatchTaskInstance1Data, - PatchTaskInstance1Response, + PatchTaskInstanceByMapIndexData, + PatchTaskInstanceByMapIndexResponse, GetTaskInstancesData, GetTaskInstancesResponse, GetTaskInstancesBatchData, @@ -140,10 +140,10 @@ import type { GetMappedTaskInstanceTryDetailsResponse, PostClearTaskInstancesData, PostClearTaskInstancesResponse, + PatchTaskInstanceDryRunByMapIndexData, + PatchTaskInstanceDryRunByMapIndexResponse, PatchTaskInstanceDryRunData, PatchTaskInstanceDryRunResponse, - PatchTaskInstanceDryRun1Data, - PatchTaskInstanceDryRun1Response, GetLogData, GetLogResponse, GetImportErrorData, @@ -2030,9 +2030,9 @@ export class TaskInstanceService { * @returns TaskDependencyCollectionResponse Successful Response * @throws ApiError */ - public static getTaskInstanceDependencies( - data: GetTaskInstanceDependenciesData, - ): CancelablePromise<GetTaskInstanceDependenciesResponse> { + public static getTaskInstanceDependenciesByMapIndex( + data: GetTaskInstanceDependenciesByMapIndexData, + ): CancelablePromise<GetTaskInstanceDependenciesByMapIndexResponse> { return __request(OpenAPI, { method: "GET", url: "/api/v2/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/{map_index}/dependencies", @@ -2062,9 +2062,9 @@ export class TaskInstanceService { * @returns TaskDependencyCollectionResponse Successful Response * @throws ApiError */ - public static getTaskInstanceDependencies1( - data: GetTaskInstanceDependencies1Data, - ): CancelablePromise<GetTaskInstanceDependencies1Response> { + public static getTaskInstanceDependencies( + data: GetTaskInstanceDependenciesData, + ): CancelablePromise<GetTaskInstanceDependenciesResponse> { return __request(OpenAPI, { method: "GET", url: "/api/v2/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/dependencies", @@ -2195,9 +2195,9 @@ export class TaskInstanceService { * @returns TaskInstanceCollectionResponse Successful Response * @throws ApiError */ - public static patchTaskInstance1( - data: PatchTaskInstance1Data, - ): CancelablePromise<PatchTaskInstance1Response> { + public static patchTaskInstanceByMapIndex( + data: PatchTaskInstanceByMapIndexData, + ): CancelablePromise<PatchTaskInstanceByMapIndexResponse> { return __request(OpenAPI, { method: "PATCH", url: "/api/v2/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/{map_index}", @@ -2440,9 +2440,9 @@ export class TaskInstanceService { * @returns TaskInstanceCollectionResponse Successful Response * @throws ApiError */ - public static patchTaskInstanceDryRun( - data: PatchTaskInstanceDryRunData, - ): CancelablePromise<PatchTaskInstanceDryRunResponse> { + public static patchTaskInstanceDryRunByMapIndex( + data: PatchTaskInstanceDryRunByMapIndexData, + ): CancelablePromise<PatchTaskInstanceDryRunByMapIndexResponse> { return __request(OpenAPI, { method: "PATCH", url: "/api/v2/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/{map_index}/dry_run", @@ -2480,9 +2480,9 @@ export class TaskInstanceService { * @returns TaskInstanceCollectionResponse Successful Response * @throws ApiError */ - public static patchTaskInstanceDryRun1( - data: PatchTaskInstanceDryRun1Data, - ): CancelablePromise<PatchTaskInstanceDryRun1Response> { + public static patchTaskInstanceDryRun( + data: PatchTaskInstanceDryRunData, + ): CancelablePromise<PatchTaskInstanceDryRunResponse> { return __request(OpenAPI, { method: "PATCH", url: "/api/v2/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/dry_run", diff --git a/airflow-core/src/airflow/ui/openapi-gen/requests/types.gen.ts b/airflow-core/src/airflow/ui/openapi-gen/requests/types.gen.ts index 6348899d0f9..ba8bbb28d2d 100644 --- a/airflow-core/src/airflow/ui/openapi-gen/requests/types.gen.ts +++ b/airflow-core/src/airflow/ui/openapi-gen/requests/types.gen.ts @@ -2236,23 +2236,23 @@ export type GetMappedTaskInstancesData = { export type GetMappedTaskInstancesResponse = TaskInstanceCollectionResponse; -export type GetTaskInstanceDependenciesData = { +export type GetTaskInstanceDependenciesByMapIndexData = { dagId: string; dagRunId: string; mapIndex: number; taskId: string; }; -export type GetTaskInstanceDependenciesResponse = TaskDependencyCollectionResponse; +export type GetTaskInstanceDependenciesByMapIndexResponse = TaskDependencyCollectionResponse; -export type GetTaskInstanceDependencies1Data = { +export type GetTaskInstanceDependenciesData = { dagId: string; dagRunId: string; mapIndex?: number; taskId: string; }; -export type GetTaskInstanceDependencies1Response = TaskDependencyCollectionResponse; +export type GetTaskInstanceDependenciesResponse = TaskDependencyCollectionResponse; export type GetTaskInstanceTriesData = { dagId: string; @@ -2281,7 +2281,7 @@ export type GetMappedTaskInstanceData = { export type GetMappedTaskInstanceResponse = TaskInstanceResponse; -export type PatchTaskInstance1Data = { +export type PatchTaskInstanceByMapIndexData = { dagId: string; dagRunId: string; mapIndex: number | null; @@ -2290,7 +2290,7 @@ export type PatchTaskInstance1Data = { updateMask?: Array<string> | null; }; -export type PatchTaskInstance1Response = TaskInstanceCollectionResponse; +export type PatchTaskInstanceByMapIndexResponse = TaskInstanceCollectionResponse; export type GetTaskInstancesData = { dagId: string; @@ -2356,7 +2356,7 @@ export type PostClearTaskInstancesData = { export type PostClearTaskInstancesResponse = TaskInstanceCollectionResponse; -export type PatchTaskInstanceDryRunData = { +export type PatchTaskInstanceDryRunByMapIndexData = { dagId: string; dagRunId: string; mapIndex: number | null; @@ -2365,9 +2365,9 @@ export type PatchTaskInstanceDryRunData = { updateMask?: Array<string> | null; }; -export type PatchTaskInstanceDryRunResponse = TaskInstanceCollectionResponse; +export type PatchTaskInstanceDryRunByMapIndexResponse = TaskInstanceCollectionResponse; -export type PatchTaskInstanceDryRun1Data = { +export type PatchTaskInstanceDryRunData = { dagId: string; dagRunId: string; mapIndex?: number | null; @@ -2376,7 +2376,7 @@ export type PatchTaskInstanceDryRun1Data = { updateMask?: Array<string> | null; }; -export type PatchTaskInstanceDryRun1Response = TaskInstanceCollectionResponse; +export type PatchTaskInstanceDryRunResponse = TaskInstanceCollectionResponse; export type GetLogData = { accept?: "application/json" | "text/plain" | "*/*"; @@ -4258,7 +4258,7 @@ export type $OpenApiTs = { }; "/api/v2/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/{map_index}/dependencies": { get: { - req: GetTaskInstanceDependenciesData; + req: GetTaskInstanceDependenciesByMapIndexData; res: { /** * Successful Response @@ -4285,7 +4285,7 @@ export type $OpenApiTs = { }; "/api/v2/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/dependencies": { get: { - req: GetTaskInstanceDependencies1Data; + req: GetTaskInstanceDependenciesData; res: { /** * Successful Response @@ -4391,7 +4391,7 @@ export type $OpenApiTs = { }; }; patch: { - req: PatchTaskInstance1Data; + req: PatchTaskInstanceByMapIndexData; res: { /** * Successful Response @@ -4561,7 +4561,7 @@ export type $OpenApiTs = { }; "/api/v2/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/{map_index}/dry_run": { patch: { - req: PatchTaskInstanceDryRunData; + req: PatchTaskInstanceDryRunByMapIndexData; res: { /** * Successful Response @@ -4592,7 +4592,7 @@ export type $OpenApiTs = { }; "/api/v2/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/dry_run": { patch: { - req: PatchTaskInstanceDryRun1Data; + req: PatchTaskInstanceDryRunData; res: { /** * Successful Response diff --git a/scripts/in_container/run_update_fastapi_api_spec.py b/scripts/in_container/run_update_fastapi_api_spec.py index 8e4b18fc0ed..1dd692280c4 100755 --- a/scripts/in_container/run_update_fastapi_api_spec.py +++ b/scripts/in_container/run_update_fastapi_api_spec.py @@ -17,12 +17,14 @@ # under the License. from __future__ import annotations +import sys from pathlib import Path from typing import TYPE_CHECKING import yaml from fastapi.openapi.utils import get_openapi from fastapi.routing import APIRoute +from openapi_spec_validator import validate_spec from airflow.api_fastapi.app import AUTH_MANAGER_FASTAPI_APP_PREFIX, create_app from airflow.api_fastapi.auth.managers.simple import __file__ as SIMPLE_AUTH_MANAGER_PATH @@ -73,9 +75,23 @@ def generate_file(app: FastAPI, file_path: Path, prefix: str = "", only_ui: bool ) +def validate_openapi_file(file_path: Path) -> bool: + with file_path.open() as f: + openapi_schema = yaml.safe_load(f) + try: + validate_spec(openapi_schema) + except Exception as e: + print(f"[ERROR] OpenAPI validation failed for {file_path}: {e}", file=sys.stderr) + sys.exit(1) + return True + + # Generate main application openapi spec generate_file(app=create_app(), file_path=OPENAPI_SPEC_FILE) +validate_openapi_file(OPENAPI_SPEC_FILE) + generate_file(app=create_app(), file_path=OPENAPI_UI_SPEC_FILE, only_ui=True) +validate_openapi_file(OPENAPI_UI_SPEC_FILE) # Generate simple auth manager openapi spec simple_auth_manager_app = SimpleAuthManager().get_fastapi_app() @@ -85,8 +101,10 @@ if simple_auth_manager_app: file_path=SIMPLE_AUTH_MANAGER_OPENAPI_SPEC_FILE, prefix=AUTH_MANAGER_FASTAPI_APP_PREFIX, ) + validate_openapi_file(SIMPLE_AUTH_MANAGER_OPENAPI_SPEC_FILE) # Generate FAB auth manager openapi spec fab_auth_manager_app = FabAuthManager().get_fastapi_app() if fab_auth_manager_app: generate_file(app=fab_auth_manager_app, file_path=FAB_AUTH_MANAGER_OPENAPI_SPEC_FILE) + validate_openapi_file(FAB_AUTH_MANAGER_OPENAPI_SPEC_FILE)