diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 964ebe4aa099c..f7d40347eb486 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1314,7 +1314,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 79148509198a0..47bc1c57de90e 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 @@ -4800,7 +4800,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: @@ -5125,7 +5125,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: @@ -5718,7 +5718,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 540e1c49a9100..588beff1297c4 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 @@ -220,11 +220,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, @@ -840,6 +844,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}", @@ -850,6 +855,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 b67514b7de3a8..7f714e16d8912 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 +export type TaskInstanceServiceGetTaskInstanceDependenciesByMapIndexDefaultResponse = Awaited< + ReturnType >; -export type TaskInstanceServiceGetTaskInstanceDependenciesQueryResult< - TData = TaskInstanceServiceGetTaskInstanceDependenciesDefaultResponse, +export type TaskInstanceServiceGetTaskInstanceDependenciesByMapIndexQueryResult< + TData = TaskInstanceServiceGetTaskInstanceDependenciesByMapIndexDefaultResponse, TError = unknown, > = UseQueryResult; -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, ) => [ - useTaskInstanceServiceGetTaskInstanceDependenciesKey, + useTaskInstanceServiceGetTaskInstanceDependenciesByMapIndexKey, ...(queryKey ?? [{ dagId, dagRunId, mapIndex, taskId }]), ]; -export type TaskInstanceServiceGetTaskInstanceDependencies1DefaultResponse = Awaited< - ReturnType +export type TaskInstanceServiceGetTaskInstanceDependenciesDefaultResponse = Awaited< + ReturnType >; -export type TaskInstanceServiceGetTaskInstanceDependencies1QueryResult< - TData = TaskInstanceServiceGetTaskInstanceDependencies1DefaultResponse, +export type TaskInstanceServiceGetTaskInstanceDependenciesQueryResult< + TData = TaskInstanceServiceGetTaskInstanceDependenciesDefaultResponse, TError = unknown, > = UseQueryResult; -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, ) => [ - useTaskInstanceServiceGetTaskInstanceDependencies1Key, + useTaskInstanceServiceGetTaskInstanceDependenciesKey, ...(queryKey ?? [{ dagId, dagRunId, mapIndex, taskId }]), ]; export type TaskInstanceServiceGetTaskInstanceTriesDefaultResponse = Awaited< @@ -1899,15 +1899,15 @@ export type DagServicePatchDagMutationResult = Awaited >; -export type TaskInstanceServicePatchTaskInstance1MutationResult = Awaited< - ReturnType +export type TaskInstanceServicePatchTaskInstanceByMapIndexMutationResult = Awaited< + ReturnType +>; +export type TaskInstanceServicePatchTaskInstanceDryRunByMapIndexMutationResult = Awaited< + ReturnType >; export type TaskInstanceServicePatchTaskInstanceDryRunMutationResult = Awaited< ReturnType >; -export type TaskInstanceServicePatchTaskInstanceDryRun1MutationResult = Awaited< - ReturnType ->; export type PoolServicePatchPoolMutationResult = Awaited>; export type PoolServiceBulkPoolsMutationResult = Awaited>; 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 95f1377e7121a..58428ce63d098 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 4cf302b0e5e68..d354c659b3d3e 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 5b3b77bb88609..4d922edb5812d 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[], >( @@ -1550,12 +1550,17 @@ export const useTaskInstanceServiceGetTaskInstanceDependencies = < options?: Omit, "queryKey" | "queryFn">, ) => useQuery({ - 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[], >( @@ -1589,12 +1594,12 @@ export const useTaskInstanceServiceGetTaskInstanceDependencies1 = < options?: Omit, "queryKey" | "queryFn">, ) => useQuery({ - 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, }); /** @@ -4104,8 +4109,8 @@ export const useTaskInstanceServicePatchTaskInstance = < * @returns TaskInstanceResponse Successful Response * @throws ApiError */ -export const useTaskInstanceServicePatchTaskInstance1 = < - TData = Common.TaskInstanceServicePatchTaskInstance1MutationResult, +export const useTaskInstanceServicePatchTaskInstanceByMapIndex = < + TData = Common.TaskInstanceServicePatchTaskInstanceByMapIndexMutationResult, TError = unknown, TContext = unknown, >( @@ -4140,7 +4145,7 @@ export const useTaskInstanceServicePatchTaskInstance1 = < TContext >({ mutationFn: ({ dagId, dagRunId, mapIndex, requestBody, taskId, updateMask }) => - TaskInstanceService.patchTaskInstance1({ + TaskInstanceService.patchTaskInstanceByMapIndex({ dagId, dagRunId, mapIndex, @@ -4163,8 +4168,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, >( @@ -4199,7 +4204,7 @@ export const useTaskInstanceServicePatchTaskInstanceDryRun = < TContext >({ mutationFn: ({ dagId, dagRunId, mapIndex, requestBody, taskId, updateMask }) => - TaskInstanceService.patchTaskInstanceDryRun({ + TaskInstanceService.patchTaskInstanceDryRunByMapIndex({ dagId, dagRunId, mapIndex, @@ -4222,8 +4227,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, >( @@ -4258,7 +4263,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 b0033f5542130..a457fa774055f 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[], >( @@ -1527,12 +1527,17 @@ export const useTaskInstanceServiceGetTaskInstanceDependenciesSuspense = < options?: Omit, "queryKey" | "queryFn">, ) => useSuspenseQuery({ - 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[], >( @@ -1566,12 +1571,12 @@ export const useTaskInstanceServiceGetTaskInstanceDependencies1Suspense = < options?: Omit, "queryKey" | "queryFn">, ) => useSuspenseQuery({ - 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 48e8694a800c2..2c7673e295893 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, GetExternalLogUrlData, @@ -2032,9 +2032,9 @@ export class TaskInstanceService { * @returns TaskDependencyCollectionResponse Successful Response * @throws ApiError */ - public static getTaskInstanceDependencies( - data: GetTaskInstanceDependenciesData, - ): CancelablePromise { + public static getTaskInstanceDependenciesByMapIndex( + data: GetTaskInstanceDependenciesByMapIndexData, + ): CancelablePromise { return __request(OpenAPI, { method: "GET", url: "/api/v2/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/{map_index}/dependencies", @@ -2064,9 +2064,9 @@ export class TaskInstanceService { * @returns TaskDependencyCollectionResponse Successful Response * @throws ApiError */ - public static getTaskInstanceDependencies1( - data: GetTaskInstanceDependencies1Data, - ): CancelablePromise { + public static getTaskInstanceDependencies( + data: GetTaskInstanceDependenciesData, + ): CancelablePromise { return __request(OpenAPI, { method: "GET", url: "/api/v2/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/dependencies", @@ -2197,9 +2197,9 @@ export class TaskInstanceService { * @returns TaskInstanceResponse Successful Response * @throws ApiError */ - public static patchTaskInstance1( - data: PatchTaskInstance1Data, - ): CancelablePromise { + public static patchTaskInstanceByMapIndex( + data: PatchTaskInstanceByMapIndexData, + ): CancelablePromise { return __request(OpenAPI, { method: "PATCH", url: "/api/v2/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/{map_index}", @@ -2442,9 +2442,9 @@ export class TaskInstanceService { * @returns TaskInstanceCollectionResponse Successful Response * @throws ApiError */ - public static patchTaskInstanceDryRun( - data: PatchTaskInstanceDryRunData, - ): CancelablePromise { + public static patchTaskInstanceDryRunByMapIndex( + data: PatchTaskInstanceDryRunByMapIndexData, + ): CancelablePromise { return __request(OpenAPI, { method: "PATCH", url: "/api/v2/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/{map_index}/dry_run", @@ -2482,9 +2482,9 @@ export class TaskInstanceService { * @returns TaskInstanceCollectionResponse Successful Response * @throws ApiError */ - public static patchTaskInstanceDryRun1( - data: PatchTaskInstanceDryRun1Data, - ): CancelablePromise { + public static patchTaskInstanceDryRun( + data: PatchTaskInstanceDryRunData, + ): CancelablePromise { 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 39f89144f3ed1..2149a9c312b6b 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 @@ -2245,23 +2245,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; @@ -2290,7 +2290,7 @@ export type GetMappedTaskInstanceData = { export type GetMappedTaskInstanceResponse = TaskInstanceResponse; -export type PatchTaskInstance1Data = { +export type PatchTaskInstanceByMapIndexData = { dagId: string; dagRunId: string; mapIndex: number; @@ -2299,7 +2299,7 @@ export type PatchTaskInstance1Data = { updateMask?: Array | null; }; -export type PatchTaskInstance1Response = TaskInstanceResponse; +export type PatchTaskInstanceByMapIndexResponse = TaskInstanceResponse; export type GetTaskInstancesData = { dagId: string; @@ -2365,7 +2365,7 @@ export type PostClearTaskInstancesData = { export type PostClearTaskInstancesResponse = TaskInstanceCollectionResponse; -export type PatchTaskInstanceDryRunData = { +export type PatchTaskInstanceDryRunByMapIndexData = { dagId: string; dagRunId: string; mapIndex: number; @@ -2374,9 +2374,9 @@ export type PatchTaskInstanceDryRunData = { updateMask?: Array | null; }; -export type PatchTaskInstanceDryRunResponse = TaskInstanceCollectionResponse; +export type PatchTaskInstanceDryRunByMapIndexResponse = TaskInstanceCollectionResponse; -export type PatchTaskInstanceDryRun1Data = { +export type PatchTaskInstanceDryRunData = { dagId: string; dagRunId: string; mapIndex?: number; @@ -2385,7 +2385,7 @@ export type PatchTaskInstanceDryRun1Data = { updateMask?: Array | null; }; -export type PatchTaskInstanceDryRun1Response = TaskInstanceCollectionResponse; +export type PatchTaskInstanceDryRunResponse = TaskInstanceCollectionResponse; export type GetLogData = { accept?: "application/json" | "text/plain" | "*/*"; @@ -4277,7 +4277,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 @@ -4304,7 +4304,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 @@ -4410,7 +4410,7 @@ export type $OpenApiTs = { }; }; patch: { - req: PatchTaskInstance1Data; + req: PatchTaskInstanceByMapIndexData; res: { /** * Successful Response @@ -4580,7 +4580,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 @@ -4611,7 +4611,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 235298b48fe7b..8ef90a46e95bf 100755 --- a/scripts/in_container/run_update_fastapi_api_spec.py +++ b/scripts/in_container/run_update_fastapi_api_spec.py @@ -18,12 +18,14 @@ from __future__ import annotations import os +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 @@ -74,13 +76,27 @@ 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 # Set the auth manager as SAM. No need to use another one to generate fastapi spec os.environ["AIRFLOW__CORE__AUTH_MANAGER"] = ( "airflow.api_fastapi.auth.managers.simple.simple_auth_manager.SimpleAuthManager" ) 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() @@ -90,8 +106,10 @@ def generate_file(app: FastAPI, file_path: Path, prefix: str = "", only_ui: bool 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)