From 1c4c2879a68bbe6df5a078f2374ae314ab0dbeb4 Mon Sep 17 00:00:00 2001 From: Guangyang Li Date: Fri, 15 Aug 2025 17:49:43 -0400 Subject: [PATCH 1/8] add has_import_errors filter --- .../src/airflow/api_fastapi/common/parameters.py | 10 ++++++++++ .../core_api/openapi/v2-rest-api-generated.yaml | 8 ++++++++ .../airflow/api_fastapi/core_api/routes/public/dags.py | 3 +++ .../src/airflow/ui/openapi-gen/queries/common.ts | 5 +++-- .../airflow/ui/openapi-gen/queries/ensureQueryData.ts | 6 ++++-- .../src/airflow/ui/openapi-gen/queries/prefetch.ts | 6 ++++-- .../src/airflow/ui/openapi-gen/queries/queries.ts | 6 ++++-- .../src/airflow/ui/openapi-gen/queries/suspense.ts | 6 ++++-- .../airflow/ui/openapi-gen/requests/services.gen.ts | 2 ++ .../src/airflow/ui/openapi-gen/requests/types.gen.ts | 1 + 10 files changed, 43 insertions(+), 10 deletions(-) diff --git a/airflow-core/src/airflow/api_fastapi/common/parameters.py b/airflow-core/src/airflow/api_fastapi/common/parameters.py index 4e98d028aa815..454e93d8be1cc 100644 --- a/airflow-core/src/airflow/api_fastapi/common/parameters.py +++ b/airflow-core/src/airflow/api_fastapi/common/parameters.py @@ -586,6 +586,16 @@ def depends_float( FilterParam[bool | None], Depends(filter_param_factory(DagModel.is_paused, bool | None, filter_name="paused")), ] +QueryHasImportErrorsFilter = Annotated[ + FilterParam[bool | None], + Depends( + filter_param_factory( + DagModel.has_import_errors, + bool | None, + filter_name="has_import_errors", + ) + ), +] QueryFavoriteFilter = Annotated[_FavoriteFilter, Depends(_FavoriteFilter.depends)] QueryExcludeStaleFilter = Annotated[_ExcludeStaleFilter, Depends(_ExcludeStaleFilter.depends)] QueryDagIdPatternSearch = Annotated[ diff --git a/airflow-core/src/airflow/api_fastapi/core_api/openapi/v2-rest-api-generated.yaml b/airflow-core/src/airflow/api_fastapi/core_api/openapi/v2-rest-api-generated.yaml index f65f9f1d70929..f276cf5636733 100644 --- a/airflow-core/src/airflow/api_fastapi/core_api/openapi/v2-rest-api-generated.yaml +++ b/airflow-core/src/airflow/api_fastapi/core_api/openapi/v2-rest-api-generated.yaml @@ -2872,6 +2872,14 @@ paths: - type: boolean - type: 'null' title: Paused + - name: has_import_errors + in: query + required: false + schema: + anyOf: + - type: boolean + - type: 'null' + title: Has Import Errors - name: last_dag_run_state in: query required: false diff --git a/airflow-core/src/airflow/api_fastapi/core_api/routes/public/dags.py b/airflow-core/src/airflow/api_fastapi/core_api/routes/public/dags.py index 2af6073d60586..856723f6f15cb 100644 --- a/airflow-core/src/airflow/api_fastapi/core_api/routes/public/dags.py +++ b/airflow-core/src/airflow/api_fastapi/core_api/routes/public/dags.py @@ -41,6 +41,7 @@ QueryDagIdPatternSearchWithNone, QueryExcludeStaleFilter, QueryFavoriteFilter, + QueryHasImportErrorsFilter, QueryLastDagRunStateFilter, QueryLimit, QueryOffset, @@ -86,6 +87,7 @@ def get_dags( dag_display_name_pattern: QueryDagDisplayNamePatternSearch, exclude_stale: QueryExcludeStaleFilter, paused: QueryPausedFilter, + has_import_errors: QueryHasImportErrorsFilter, last_dag_run_state: QueryLastDagRunStateFilter, bundle_name: QueryBundleNameFilter, bundle_version: QueryBundleVersionFilter, @@ -138,6 +140,7 @@ def get_dags( filters=[ exclude_stale, paused, + has_import_errors, dag_id_pattern, dag_display_name_pattern, tags, 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 1c7ded5f8f422..1b32cb2a4e50d 100644 --- a/airflow-core/src/airflow/ui/openapi-gen/queries/common.ts +++ b/airflow-core/src/airflow/ui/openapi-gen/queries/common.ts @@ -230,7 +230,7 @@ export const UseDagWarningServiceListDagWarningsKeyFn = ({ dagId, limit, offset, export type DagServiceGetDagsDefaultResponse = Awaited>; export type DagServiceGetDagsQueryResult = UseQueryResult; export const useDagServiceGetDagsKey = "DagServiceGetDags"; -export const UseDagServiceGetDagsKeyFn = ({ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagRunEndDateGte, dagRunEndDateLte, dagRunStartDateGte, dagRunStartDateLte, dagRunState, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }: { +export const UseDagServiceGetDagsKeyFn = ({ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagRunEndDateGte, dagRunEndDateLte, dagRunStartDateGte, dagRunStartDateLte, dagRunState, excludeStale, hasImportErrors, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }: { bundleName?: string; bundleVersion?: string; dagDisplayNamePattern?: string; @@ -241,6 +241,7 @@ export const UseDagServiceGetDagsKeyFn = ({ bundleName, bundleVersion, dagDispla dagRunStartDateLte?: string; dagRunState?: string[]; excludeStale?: boolean; + hasImportErrors?: boolean; isFavorite?: boolean; lastDagRunState?: DagRunState; limit?: number; @@ -250,7 +251,7 @@ export const UseDagServiceGetDagsKeyFn = ({ bundleName, bundleVersion, dagDispla paused?: boolean; tags?: string[]; tagsMatchMode?: "any" | "all"; -} = {}, queryKey?: Array) => [useDagServiceGetDagsKey, ...(queryKey ?? [{ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagRunEndDateGte, dagRunEndDateLte, dagRunStartDateGte, dagRunStartDateLte, dagRunState, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }])]; +} = {}, queryKey?: Array) => [useDagServiceGetDagsKey, ...(queryKey ?? [{ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagRunEndDateGte, dagRunEndDateLte, dagRunStartDateGte, dagRunStartDateLte, dagRunState, excludeStale, hasImportErrors, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }])]; export type DagServiceGetDagDefaultResponse = Awaited>; export type DagServiceGetDagQueryResult = UseQueryResult; export const useDagServiceGetDagKey = "DagServiceGetDag"; 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 7586b0167bed6..27de742196ab2 100644 --- a/airflow-core/src/airflow/ui/openapi-gen/queries/ensureQueryData.ts +++ b/airflow-core/src/airflow/ui/openapi-gen/queries/ensureQueryData.ts @@ -433,6 +433,7 @@ export const ensureUseDagWarningServiceListDagWarningsData = (queryClient: Query * @param data.dagDisplayNamePattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. * @param data.excludeStale * @param data.paused +* @param data.hasImportErrors * @param data.lastDagRunState * @param data.bundleName * @param data.bundleVersion @@ -446,7 +447,7 @@ export const ensureUseDagWarningServiceListDagWarningsData = (queryClient: Query * @returns DAGCollectionResponse Successful Response * @throws ApiError */ -export const ensureUseDagServiceGetDagsData = (queryClient: QueryClient, { bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagRunEndDateGte, dagRunEndDateLte, dagRunStartDateGte, dagRunStartDateLte, dagRunState, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }: { +export const ensureUseDagServiceGetDagsData = (queryClient: QueryClient, { bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagRunEndDateGte, dagRunEndDateLte, dagRunStartDateGte, dagRunStartDateLte, dagRunState, excludeStale, hasImportErrors, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }: { bundleName?: string; bundleVersion?: string; dagDisplayNamePattern?: string; @@ -457,6 +458,7 @@ export const ensureUseDagServiceGetDagsData = (queryClient: QueryClient, { bundl dagRunStartDateLte?: string; dagRunState?: string[]; excludeStale?: boolean; + hasImportErrors?: boolean; isFavorite?: boolean; lastDagRunState?: DagRunState; limit?: number; @@ -466,7 +468,7 @@ export const ensureUseDagServiceGetDagsData = (queryClient: QueryClient, { bundl paused?: boolean; tags?: string[]; tagsMatchMode?: "any" | "all"; -} = {}) => queryClient.ensureQueryData({ queryKey: Common.UseDagServiceGetDagsKeyFn({ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagRunEndDateGte, dagRunEndDateLte, dagRunStartDateGte, dagRunStartDateLte, dagRunState, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }), queryFn: () => DagService.getDags({ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagRunEndDateGte, dagRunEndDateLte, dagRunStartDateGte, dagRunStartDateLte, dagRunState, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }) }); +} = {}) => queryClient.ensureQueryData({ queryKey: Common.UseDagServiceGetDagsKeyFn({ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagRunEndDateGte, dagRunEndDateLte, dagRunStartDateGte, dagRunStartDateLte, dagRunState, excludeStale, hasImportErrors, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }), queryFn: () => DagService.getDags({ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagRunEndDateGte, dagRunEndDateLte, dagRunStartDateGte, dagRunStartDateLte, dagRunState, excludeStale, hasImportErrors, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }) }); /** * Get Dag * Get basic information about a DAG. 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 68efa90db53f9..e3e1e54957153 100644 --- a/airflow-core/src/airflow/ui/openapi-gen/queries/prefetch.ts +++ b/airflow-core/src/airflow/ui/openapi-gen/queries/prefetch.ts @@ -433,6 +433,7 @@ export const prefetchUseDagWarningServiceListDagWarnings = (queryClient: QueryCl * @param data.dagDisplayNamePattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. * @param data.excludeStale * @param data.paused +* @param data.hasImportErrors * @param data.lastDagRunState * @param data.bundleName * @param data.bundleVersion @@ -446,7 +447,7 @@ export const prefetchUseDagWarningServiceListDagWarnings = (queryClient: QueryCl * @returns DAGCollectionResponse Successful Response * @throws ApiError */ -export const prefetchUseDagServiceGetDags = (queryClient: QueryClient, { bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagRunEndDateGte, dagRunEndDateLte, dagRunStartDateGte, dagRunStartDateLte, dagRunState, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }: { +export const prefetchUseDagServiceGetDags = (queryClient: QueryClient, { bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagRunEndDateGte, dagRunEndDateLte, dagRunStartDateGte, dagRunStartDateLte, dagRunState, excludeStale, hasImportErrors, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }: { bundleName?: string; bundleVersion?: string; dagDisplayNamePattern?: string; @@ -457,6 +458,7 @@ export const prefetchUseDagServiceGetDags = (queryClient: QueryClient, { bundleN dagRunStartDateLte?: string; dagRunState?: string[]; excludeStale?: boolean; + hasImportErrors?: boolean; isFavorite?: boolean; lastDagRunState?: DagRunState; limit?: number; @@ -466,7 +468,7 @@ export const prefetchUseDagServiceGetDags = (queryClient: QueryClient, { bundleN paused?: boolean; tags?: string[]; tagsMatchMode?: "any" | "all"; -} = {}) => queryClient.prefetchQuery({ queryKey: Common.UseDagServiceGetDagsKeyFn({ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagRunEndDateGte, dagRunEndDateLte, dagRunStartDateGte, dagRunStartDateLte, dagRunState, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }), queryFn: () => DagService.getDags({ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagRunEndDateGte, dagRunEndDateLte, dagRunStartDateGte, dagRunStartDateLte, dagRunState, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }) }); +} = {}) => queryClient.prefetchQuery({ queryKey: Common.UseDagServiceGetDagsKeyFn({ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagRunEndDateGte, dagRunEndDateLte, dagRunStartDateGte, dagRunStartDateLte, dagRunState, excludeStale, hasImportErrors, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }), queryFn: () => DagService.getDags({ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagRunEndDateGte, dagRunEndDateLte, dagRunStartDateGte, dagRunStartDateLte, dagRunState, excludeStale, hasImportErrors, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }) }); /** * Get Dag * Get basic information about a DAG. 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 3557a30f759c4..d83e98faf6004 100644 --- a/airflow-core/src/airflow/ui/openapi-gen/queries/queries.ts +++ b/airflow-core/src/airflow/ui/openapi-gen/queries/queries.ts @@ -433,6 +433,7 @@ export const useDagWarningServiceListDagWarnings = = unknown[]>({ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagRunEndDateGte, dagRunEndDateLte, dagRunStartDateGte, dagRunStartDateLte, dagRunState, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }: { +export const useDagServiceGetDags = = unknown[]>({ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagRunEndDateGte, dagRunEndDateLte, dagRunStartDateGte, dagRunStartDateLte, dagRunState, excludeStale, hasImportErrors, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }: { bundleName?: string; bundleVersion?: string; dagDisplayNamePattern?: string; @@ -457,6 +458,7 @@ export const useDagServiceGetDags = , "queryKey" | "queryFn">) => useQuery({ queryKey: Common.UseDagServiceGetDagsKeyFn({ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagRunEndDateGte, dagRunEndDateLte, dagRunStartDateGte, dagRunStartDateLte, dagRunState, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }, queryKey), queryFn: () => DagService.getDags({ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagRunEndDateGte, dagRunEndDateLte, dagRunStartDateGte, dagRunStartDateLte, dagRunState, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }) as TData, ...options }); +} = {}, queryKey?: TQueryKey, options?: Omit, "queryKey" | "queryFn">) => useQuery({ queryKey: Common.UseDagServiceGetDagsKeyFn({ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagRunEndDateGte, dagRunEndDateLte, dagRunStartDateGte, dagRunStartDateLte, dagRunState, excludeStale, hasImportErrors, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }, queryKey), queryFn: () => DagService.getDags({ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagRunEndDateGte, dagRunEndDateLte, dagRunStartDateGte, dagRunStartDateLte, dagRunState, excludeStale, hasImportErrors, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }) as TData, ...options }); /** * Get Dag * Get basic information about a DAG. 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 f3e532afa4c14..a18014c4ac51c 100644 --- a/airflow-core/src/airflow/ui/openapi-gen/queries/suspense.ts +++ b/airflow-core/src/airflow/ui/openapi-gen/queries/suspense.ts @@ -433,6 +433,7 @@ export const useDagWarningServiceListDagWarningsSuspense = = unknown[]>({ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagRunEndDateGte, dagRunEndDateLte, dagRunStartDateGte, dagRunStartDateLte, dagRunState, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }: { +export const useDagServiceGetDagsSuspense = = unknown[]>({ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagRunEndDateGte, dagRunEndDateLte, dagRunStartDateGte, dagRunStartDateLte, dagRunState, excludeStale, hasImportErrors, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }: { bundleName?: string; bundleVersion?: string; dagDisplayNamePattern?: string; @@ -457,6 +458,7 @@ export const useDagServiceGetDagsSuspense = , "queryKey" | "queryFn">) => useSuspenseQuery({ queryKey: Common.UseDagServiceGetDagsKeyFn({ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagRunEndDateGte, dagRunEndDateLte, dagRunStartDateGte, dagRunStartDateLte, dagRunState, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }, queryKey), queryFn: () => DagService.getDags({ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagRunEndDateGte, dagRunEndDateLte, dagRunStartDateGte, dagRunStartDateLte, dagRunState, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }) as TData, ...options }); +} = {}, queryKey?: TQueryKey, options?: Omit, "queryKey" | "queryFn">) => useSuspenseQuery({ queryKey: Common.UseDagServiceGetDagsKeyFn({ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagRunEndDateGte, dagRunEndDateLte, dagRunStartDateGte, dagRunStartDateLte, dagRunState, excludeStale, hasImportErrors, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }, queryKey), queryFn: () => DagService.getDags({ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagRunEndDateGte, dagRunEndDateLte, dagRunStartDateGte, dagRunStartDateLte, dagRunState, excludeStale, hasImportErrors, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }) as TData, ...options }); /** * Get Dag * Get basic information about a DAG. 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 d23551154d52c..c7cd0e905dd9d 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 @@ -1365,6 +1365,7 @@ export class DagService { * @param data.dagDisplayNamePattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. * @param data.excludeStale * @param data.paused + * @param data.hasImportErrors * @param data.lastDagRunState * @param data.bundleName * @param data.bundleVersion @@ -1392,6 +1393,7 @@ export class DagService { dag_display_name_pattern: data.dagDisplayNamePattern, exclude_stale: data.excludeStale, paused: data.paused, + has_import_errors: data.hasImportErrors, last_dag_run_state: data.lastDagRunState, bundle_name: data.bundleName, bundle_version: data.bundleVersion, 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 f54df77336d7b..6895c7d276642 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 @@ -2317,6 +2317,7 @@ export type GetDagsData = { dagRunStartDateLte?: string | null; dagRunState?: Array<(string)>; excludeStale?: boolean; + hasImportErrors?: boolean | null; isFavorite?: boolean | null; lastDagRunState?: DagRunState | null; limit?: number; From 9eea22128ed1418f99738d3ebc404b7c841aeb5f Mon Sep 17 00:00:00 2001 From: Guangyang Li Date: Sun, 24 Aug 2025 23:55:44 -0400 Subject: [PATCH 2/8] add unit tests --- .../core_api/openapi/_private_ui.yaml | 8 +++++++ .../api_fastapi/core_api/routes/ui/dags.py | 3 +++ .../airflow/ui/openapi-gen/queries/common.ts | 5 +++-- .../ui/openapi-gen/queries/ensureQueryData.ts | 6 +++-- .../ui/openapi-gen/queries/prefetch.ts | 6 +++-- .../airflow/ui/openapi-gen/queries/queries.ts | 6 +++-- .../ui/openapi-gen/queries/suspense.ts | 6 +++-- .../ui/openapi-gen/requests/services.gen.ts | 2 ++ .../ui/openapi-gen/requests/types.gen.ts | 1 + .../core_api/routes/public/test_dags.py | 22 +++++++++++++++++++ 10 files changed, 55 insertions(+), 10 deletions(-) diff --git a/airflow-core/src/airflow/api_fastapi/core_api/openapi/_private_ui.yaml b/airflow-core/src/airflow/api_fastapi/core_api/openapi/_private_ui.yaml index b93c687165963..707d6b3720093 100644 --- a/airflow-core/src/airflow/api_fastapi/core_api/openapi/_private_ui.yaml +++ b/airflow-core/src/airflow/api_fastapi/core_api/openapi/_private_ui.yaml @@ -208,6 +208,14 @@ paths: - type: boolean - type: 'null' title: Paused + - name: has_import_errors + in: query + required: false + schema: + anyOf: + - type: boolean + - type: 'null' + title: Has Import Errors - name: last_dag_run_state in: query required: false diff --git a/airflow-core/src/airflow/api_fastapi/core_api/routes/ui/dags.py b/airflow-core/src/airflow/api_fastapi/core_api/routes/ui/dags.py index 5b5305dc6d6a7..4c7a45e7584e8 100644 --- a/airflow-core/src/airflow/api_fastapi/core_api/routes/ui/dags.py +++ b/airflow-core/src/airflow/api_fastapi/core_api/routes/ui/dags.py @@ -38,6 +38,7 @@ QueryDagIdPatternSearch, QueryExcludeStaleFilter, QueryFavoriteFilter, + QueryHasImportErrorsFilter, QueryLastDagRunStateFilter, QueryLimit, QueryOffset, @@ -87,6 +88,7 @@ def get_dags( dag_display_name_pattern: QueryDagDisplayNamePatternSearch, exclude_stale: QueryExcludeStaleFilter, paused: QueryPausedFilter, + has_import_errors: QueryHasImportErrorsFilter, last_dag_run_state: QueryLastDagRunStateFilter, bundle_name: QueryBundleNameFilter, bundle_version: QueryBundleVersionFilter, @@ -119,6 +121,7 @@ def get_dags( filters=[ exclude_stale, paused, + has_import_errors, dag_id_pattern, dag_ids, dag_display_name_pattern, 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 10604d70625b3..bb8ab4b104876 100644 --- a/airflow-core/src/airflow/ui/openapi-gen/queries/common.ts +++ b/airflow-core/src/airflow/ui/openapi-gen/queries/common.ts @@ -292,7 +292,7 @@ export const UseDagServiceGetDagTagsKeyFn = ({ limit, offset, orderBy, tagNamePa export type DagServiceGetDagsUiDefaultResponse = Awaited>; export type DagServiceGetDagsUiQueryResult = UseQueryResult; export const useDagServiceGetDagsUiKey = "DagServiceGetDagsUi"; -export const UseDagServiceGetDagsUiKeyFn = ({ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagIds, dagRunsLimit, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }: { +export const UseDagServiceGetDagsUiKeyFn = ({ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagIds, dagRunsLimit, excludeStale, hasImportErrors, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }: { bundleName?: string; bundleVersion?: string; dagDisplayNamePattern?: string; @@ -300,6 +300,7 @@ export const UseDagServiceGetDagsUiKeyFn = ({ bundleName, bundleVersion, dagDisp dagIds?: string[]; dagRunsLimit?: number; excludeStale?: boolean; + hasImportErrors?: boolean; isFavorite?: boolean; lastDagRunState?: DagRunState; limit?: number; @@ -309,7 +310,7 @@ export const UseDagServiceGetDagsUiKeyFn = ({ bundleName, bundleVersion, dagDisp paused?: boolean; tags?: string[]; tagsMatchMode?: "any" | "all"; -} = {}, queryKey?: Array) => [useDagServiceGetDagsUiKey, ...(queryKey ?? [{ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagIds, dagRunsLimit, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }])]; +} = {}, queryKey?: Array) => [useDagServiceGetDagsUiKey, ...(queryKey ?? [{ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagIds, dagRunsLimit, excludeStale, hasImportErrors, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }])]; export type DagServiceGetLatestRunInfoDefaultResponse = Awaited>; export type DagServiceGetLatestRunInfoQueryResult = UseQueryResult; export const useDagServiceGetLatestRunInfoKey = "DagServiceGetLatestRunInfo"; 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 26e30242ca2de..14b31fe7179b3 100644 --- a/airflow-core/src/airflow/ui/openapi-gen/queries/ensureQueryData.ts +++ b/airflow-core/src/airflow/ui/openapi-gen/queries/ensureQueryData.ts @@ -555,6 +555,7 @@ export const ensureUseDagServiceGetDagTagsData = (queryClient: QueryClient, { li * @param data.dagDisplayNamePattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. * @param data.excludeStale * @param data.paused +* @param data.hasImportErrors * @param data.lastDagRunState * @param data.bundleName * @param data.bundleVersion @@ -563,7 +564,7 @@ export const ensureUseDagServiceGetDagTagsData = (queryClient: QueryClient, { li * @returns DAGWithLatestDagRunsCollectionResponse Successful Response * @throws ApiError */ -export const ensureUseDagServiceGetDagsUiData = (queryClient: QueryClient, { bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagIds, dagRunsLimit, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }: { +export const ensureUseDagServiceGetDagsUiData = (queryClient: QueryClient, { bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagIds, dagRunsLimit, excludeStale, hasImportErrors, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }: { bundleName?: string; bundleVersion?: string; dagDisplayNamePattern?: string; @@ -571,6 +572,7 @@ export const ensureUseDagServiceGetDagsUiData = (queryClient: QueryClient, { bun dagIds?: string[]; dagRunsLimit?: number; excludeStale?: boolean; + hasImportErrors?: boolean; isFavorite?: boolean; lastDagRunState?: DagRunState; limit?: number; @@ -580,7 +582,7 @@ export const ensureUseDagServiceGetDagsUiData = (queryClient: QueryClient, { bun paused?: boolean; tags?: string[]; tagsMatchMode?: "any" | "all"; -} = {}) => queryClient.ensureQueryData({ queryKey: Common.UseDagServiceGetDagsUiKeyFn({ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagIds, dagRunsLimit, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }), queryFn: () => DagService.getDagsUi({ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagIds, dagRunsLimit, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }) }); +} = {}) => queryClient.ensureQueryData({ queryKey: Common.UseDagServiceGetDagsUiKeyFn({ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagIds, dagRunsLimit, excludeStale, hasImportErrors, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }), queryFn: () => DagService.getDagsUi({ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagIds, dagRunsLimit, excludeStale, hasImportErrors, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }) }); /** * Get Latest Run Info * Get latest run. 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 948b5875bf9fe..29acb859917d9 100644 --- a/airflow-core/src/airflow/ui/openapi-gen/queries/prefetch.ts +++ b/airflow-core/src/airflow/ui/openapi-gen/queries/prefetch.ts @@ -555,6 +555,7 @@ export const prefetchUseDagServiceGetDagTags = (queryClient: QueryClient, { limi * @param data.dagDisplayNamePattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. * @param data.excludeStale * @param data.paused +* @param data.hasImportErrors * @param data.lastDagRunState * @param data.bundleName * @param data.bundleVersion @@ -563,7 +564,7 @@ export const prefetchUseDagServiceGetDagTags = (queryClient: QueryClient, { limi * @returns DAGWithLatestDagRunsCollectionResponse Successful Response * @throws ApiError */ -export const prefetchUseDagServiceGetDagsUi = (queryClient: QueryClient, { bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagIds, dagRunsLimit, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }: { +export const prefetchUseDagServiceGetDagsUi = (queryClient: QueryClient, { bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagIds, dagRunsLimit, excludeStale, hasImportErrors, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }: { bundleName?: string; bundleVersion?: string; dagDisplayNamePattern?: string; @@ -571,6 +572,7 @@ export const prefetchUseDagServiceGetDagsUi = (queryClient: QueryClient, { bundl dagIds?: string[]; dagRunsLimit?: number; excludeStale?: boolean; + hasImportErrors?: boolean; isFavorite?: boolean; lastDagRunState?: DagRunState; limit?: number; @@ -580,7 +582,7 @@ export const prefetchUseDagServiceGetDagsUi = (queryClient: QueryClient, { bundl paused?: boolean; tags?: string[]; tagsMatchMode?: "any" | "all"; -} = {}) => queryClient.prefetchQuery({ queryKey: Common.UseDagServiceGetDagsUiKeyFn({ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagIds, dagRunsLimit, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }), queryFn: () => DagService.getDagsUi({ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagIds, dagRunsLimit, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }) }); +} = {}) => queryClient.prefetchQuery({ queryKey: Common.UseDagServiceGetDagsUiKeyFn({ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagIds, dagRunsLimit, excludeStale, hasImportErrors, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }), queryFn: () => DagService.getDagsUi({ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagIds, dagRunsLimit, excludeStale, hasImportErrors, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }) }); /** * Get Latest Run Info * Get latest run. 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 dae64a0e96aab..35d824bc621a9 100644 --- a/airflow-core/src/airflow/ui/openapi-gen/queries/queries.ts +++ b/airflow-core/src/airflow/ui/openapi-gen/queries/queries.ts @@ -555,6 +555,7 @@ export const useDagServiceGetDagTags = = unknown[]>({ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagIds, dagRunsLimit, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }: { +export const useDagServiceGetDagsUi = = unknown[]>({ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagIds, dagRunsLimit, excludeStale, hasImportErrors, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }: { bundleName?: string; bundleVersion?: string; dagDisplayNamePattern?: string; @@ -571,6 +572,7 @@ export const useDagServiceGetDagsUi = , "queryKey" | "queryFn">) => useQuery({ queryKey: Common.UseDagServiceGetDagsUiKeyFn({ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagIds, dagRunsLimit, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }, queryKey), queryFn: () => DagService.getDagsUi({ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagIds, dagRunsLimit, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }) as TData, ...options }); +} = {}, queryKey?: TQueryKey, options?: Omit, "queryKey" | "queryFn">) => useQuery({ queryKey: Common.UseDagServiceGetDagsUiKeyFn({ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagIds, dagRunsLimit, excludeStale, hasImportErrors, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }, queryKey), queryFn: () => DagService.getDagsUi({ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagIds, dagRunsLimit, excludeStale, hasImportErrors, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }) as TData, ...options }); /** * Get Latest Run Info * Get latest run. 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 a67b6b8cbf22d..be199b61983fa 100644 --- a/airflow-core/src/airflow/ui/openapi-gen/queries/suspense.ts +++ b/airflow-core/src/airflow/ui/openapi-gen/queries/suspense.ts @@ -555,6 +555,7 @@ export const useDagServiceGetDagTagsSuspense = = unknown[]>({ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagIds, dagRunsLimit, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }: { +export const useDagServiceGetDagsUiSuspense = = unknown[]>({ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagIds, dagRunsLimit, excludeStale, hasImportErrors, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }: { bundleName?: string; bundleVersion?: string; dagDisplayNamePattern?: string; @@ -571,6 +572,7 @@ export const useDagServiceGetDagsUiSuspense = , "queryKey" | "queryFn">) => useSuspenseQuery({ queryKey: Common.UseDagServiceGetDagsUiKeyFn({ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagIds, dagRunsLimit, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }, queryKey), queryFn: () => DagService.getDagsUi({ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagIds, dagRunsLimit, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }) as TData, ...options }); +} = {}, queryKey?: TQueryKey, options?: Omit, "queryKey" | "queryFn">) => useSuspenseQuery({ queryKey: Common.UseDagServiceGetDagsUiKeyFn({ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagIds, dagRunsLimit, excludeStale, hasImportErrors, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }, queryKey), queryFn: () => DagService.getDagsUi({ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagIds, dagRunsLimit, excludeStale, hasImportErrors, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }) as TData, ...options }); /** * Get Latest Run Info * Get latest run. 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 c128c906b2a72..1bc50158a755d 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 @@ -1689,6 +1689,7 @@ export class DagService { * @param data.dagDisplayNamePattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. * @param data.excludeStale * @param data.paused + * @param data.hasImportErrors * @param data.lastDagRunState * @param data.bundleName * @param data.bundleVersion @@ -1713,6 +1714,7 @@ export class DagService { dag_display_name_pattern: data.dagDisplayNamePattern, exclude_stale: data.excludeStale, paused: data.paused, + has_import_errors: data.hasImportErrors, last_dag_run_state: data.lastDagRunState, bundle_name: data.bundleName, bundle_version: data.bundleVersion, 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 492dc55b15c3d..cf3809768a444 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 @@ -2451,6 +2451,7 @@ export type GetDagsUiData = { dagIds?: Array<(string)> | null; dagRunsLimit?: number; excludeStale?: boolean; + hasImportErrors?: boolean | null; isFavorite?: boolean | null; lastDagRunState?: DagRunState | null; limit?: number; diff --git a/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_dags.py b/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_dags.py index de792c615492a..d1143a14a311a 100644 --- a/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_dags.py +++ b/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_dags.py @@ -356,6 +356,28 @@ def test_get_dags_should_response_403(self, unauthorized_test_client): response = unauthorized_test_client.get("/dags") assert response.status_code == 403 + def test_get_dags_filter_has_import_errors_true(self, session, test_client): + dag = session.get(DagModel, DAG1_ID) + dag.has_import_errors = True + session.commit() + + response = test_client.get("/dags", params={"has_import_errors": True}) + assert response.status_code == 200 + body = response.json() + assert body["total_entries"] == 1 + assert [dag["dag_id"] for dag in body["dags"]] == [DAG1_ID] + + def test_get_dags_filter_has_import_errors_false(self, session, test_client): + dag = session.get(DagModel, DAG1_ID) + dag.has_import_errors = True + session.commit() + + response = test_client.get("/dags", params={"has_import_errors": False}) + assert response.status_code == 200 + body = response.json() + assert body["total_entries"] == 1 + assert [dag["dag_id"] for dag in body["dags"]] == [DAG2_ID] + class TestPatchDag(TestDagEndpoint): """Unit tests for Patch DAG.""" From dc2a2e8af7674effc590de775b7031029a0777a6 Mon Sep 17 00:00:00 2001 From: Guangyang Li Date: Wed, 3 Sep 2025 23:15:32 -0400 Subject: [PATCH 3/8] update test --- .../core_api/routes/public/test_dags.py | 24 ++++++++----------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_dags.py b/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_dags.py index 3df1e9279bd9d..7612edebadc5e 100644 --- a/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_dags.py +++ b/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_dags.py @@ -490,27 +490,23 @@ def test_get_dags_should_response_403(self, unauthorized_test_client): response = unauthorized_test_client.get("/dags") assert response.status_code == 403 - def test_get_dags_filter_has_import_errors_true(self, session, test_client): - dag = session.get(DagModel, DAG1_ID) - dag.has_import_errors = True - session.commit() - - response = test_client.get("/dags", params={"has_import_errors": True}) - assert response.status_code == 200 - body = response.json() - assert body["total_entries"] == 1 - assert [dag["dag_id"] for dag in body["dags"]] == [DAG1_ID] - - def test_get_dags_filter_has_import_errors_false(self, session, test_client): + @pytest.mark.parametrize( + "filter_value, expected_ids", + [ + (True, [DAG1_ID]), + (False, [DAG2_ID]), + ], + ) + def test_get_dags_filter_has_import_errors(self, session, test_client, filter_value, expected_ids): dag = session.get(DagModel, DAG1_ID) dag.has_import_errors = True session.commit() - response = test_client.get("/dags", params={"has_import_errors": False}) + response = test_client.get("/dags", params={"has_import_errors": filter_value}) assert response.status_code == 200 body = response.json() assert body["total_entries"] == 1 - assert [dag["dag_id"] for dag in body["dags"]] == [DAG2_ID] + assert [dag["dag_id"] for dag in body["dags"]] == expected_ids class TestPatchDag(TestDagEndpoint): From 4b8bdb5421127f28dee2b576511dd11d26ff1bc8 Mon Sep 17 00:00:00 2001 From: Guangyang Li Date: Wed, 3 Sep 2025 23:21:51 -0400 Subject: [PATCH 4/8] add description --- airflow-core/src/airflow/api_fastapi/common/parameters.py | 1 + .../airflow/api_fastapi/core_api/openapi/_private_ui.yaml | 4 ++++ .../api_fastapi/core_api/openapi/v2-rest-api-generated.yaml | 4 ++++ .../src/airflow/ui/openapi-gen/queries/ensureQueryData.ts | 4 ++-- airflow-core/src/airflow/ui/openapi-gen/queries/prefetch.ts | 4 ++-- airflow-core/src/airflow/ui/openapi-gen/queries/queries.ts | 4 ++-- airflow-core/src/airflow/ui/openapi-gen/queries/suspense.ts | 4 ++-- .../src/airflow/ui/openapi-gen/requests/services.gen.ts | 4 ++-- .../src/airflow/ui/openapi-gen/requests/types.gen.ts | 6 ++++++ 9 files changed, 25 insertions(+), 10 deletions(-) diff --git a/airflow-core/src/airflow/api_fastapi/common/parameters.py b/airflow-core/src/airflow/api_fastapi/common/parameters.py index 24bb9ecb3e234..1bcff631446a3 100644 --- a/airflow-core/src/airflow/api_fastapi/common/parameters.py +++ b/airflow-core/src/airflow/api_fastapi/common/parameters.py @@ -623,6 +623,7 @@ def depends_float( DagModel.has_import_errors, bool | None, filter_name="has_import_errors", + description="Filter DAGs by having import errors. Only DAGs that have been successfully loaded before will be returned.", ) ), ] diff --git a/airflow-core/src/airflow/api_fastapi/core_api/openapi/_private_ui.yaml b/airflow-core/src/airflow/api_fastapi/core_api/openapi/_private_ui.yaml index d0b9c52e6a230..336691b6921e6 100644 --- a/airflow-core/src/airflow/api_fastapi/core_api/openapi/_private_ui.yaml +++ b/airflow-core/src/airflow/api_fastapi/core_api/openapi/_private_ui.yaml @@ -215,7 +215,11 @@ paths: anyOf: - type: boolean - type: 'null' + description: Filter DAGs by having import errors. Only DAGs that have been + successfully loaded before will be returned. title: Has Import Errors + description: Filter DAGs by having import errors. Only DAGs that have been + successfully loaded before will be returned. - name: last_dag_run_state in: query required: false diff --git a/airflow-core/src/airflow/api_fastapi/core_api/openapi/v2-rest-api-generated.yaml b/airflow-core/src/airflow/api_fastapi/core_api/openapi/v2-rest-api-generated.yaml index 845fbea641320..c3002bfab1775 100644 --- a/airflow-core/src/airflow/api_fastapi/core_api/openapi/v2-rest-api-generated.yaml +++ b/airflow-core/src/airflow/api_fastapi/core_api/openapi/v2-rest-api-generated.yaml @@ -2995,7 +2995,11 @@ paths: anyOf: - type: boolean - type: 'null' + description: Filter DAGs by having import errors. Only DAGs that have been + successfully loaded before will be returned. title: Has Import Errors + description: Filter DAGs by having import errors. Only DAGs that have been + successfully loaded before will be returned. - name: last_dag_run_state in: query required: false 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 7092ff9bae3b4..8ad3d9e7f2c59 100644 --- a/airflow-core/src/airflow/ui/openapi-gen/queries/ensureQueryData.ts +++ b/airflow-core/src/airflow/ui/openapi-gen/queries/ensureQueryData.ts @@ -459,7 +459,7 @@ export const ensureUseDagWarningServiceListDagWarningsData = (queryClient: Query * @param data.dagDisplayNamePattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. * @param data.excludeStale * @param data.paused -* @param data.hasImportErrors +* @param data.hasImportErrors Filter DAGs by having import errors. Only DAGs that have been successfully loaded before will be returned. * @param data.lastDagRunState * @param data.bundleName * @param data.bundleVersion @@ -561,7 +561,7 @@ export const ensureUseDagServiceGetDagTagsData = (queryClient: QueryClient, { li * @param data.dagDisplayNamePattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. * @param data.excludeStale * @param data.paused -* @param data.hasImportErrors +* @param data.hasImportErrors Filter DAGs by having import errors. Only DAGs that have been successfully loaded before will be returned. * @param data.lastDagRunState * @param data.bundleName * @param data.bundleVersion 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 bc5cf361e2f00..61cec486800e8 100644 --- a/airflow-core/src/airflow/ui/openapi-gen/queries/prefetch.ts +++ b/airflow-core/src/airflow/ui/openapi-gen/queries/prefetch.ts @@ -459,7 +459,7 @@ export const prefetchUseDagWarningServiceListDagWarnings = (queryClient: QueryCl * @param data.dagDisplayNamePattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. * @param data.excludeStale * @param data.paused -* @param data.hasImportErrors +* @param data.hasImportErrors Filter DAGs by having import errors. Only DAGs that have been successfully loaded before will be returned. * @param data.lastDagRunState * @param data.bundleName * @param data.bundleVersion @@ -561,7 +561,7 @@ export const prefetchUseDagServiceGetDagTags = (queryClient: QueryClient, { limi * @param data.dagDisplayNamePattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. * @param data.excludeStale * @param data.paused -* @param data.hasImportErrors +* @param data.hasImportErrors Filter DAGs by having import errors. Only DAGs that have been successfully loaded before will be returned. * @param data.lastDagRunState * @param data.bundleName * @param data.bundleVersion 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 90d66cdf3aaf5..7dbb4addb4715 100644 --- a/airflow-core/src/airflow/ui/openapi-gen/queries/queries.ts +++ b/airflow-core/src/airflow/ui/openapi-gen/queries/queries.ts @@ -459,7 +459,7 @@ export const useDagWarningServiceListDagWarnings = Date: Thu, 4 Sep 2025 14:46:48 -0400 Subject: [PATCH 5/8] Update airflow-core/src/airflow/api_fastapi/common/parameters.py Change DAGs to Dags Co-authored-by: LIU ZHE YOU <68415893+jason810496@users.noreply.github.com> --- airflow-core/src/airflow/api_fastapi/common/parameters.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airflow-core/src/airflow/api_fastapi/common/parameters.py b/airflow-core/src/airflow/api_fastapi/common/parameters.py index 1bcff631446a3..cae6bdac0f0e3 100644 --- a/airflow-core/src/airflow/api_fastapi/common/parameters.py +++ b/airflow-core/src/airflow/api_fastapi/common/parameters.py @@ -623,7 +623,7 @@ def depends_float( DagModel.has_import_errors, bool | None, filter_name="has_import_errors", - description="Filter DAGs by having import errors. Only DAGs that have been successfully loaded before will be returned.", + description="Filter Dags by having import errors. Only Dags that have been successfully loaded before will be returned.", ) ), ] From e63f20da873491ce3819034351eb4ea0c940bf1f Mon Sep 17 00:00:00 2001 From: Guangyang Li Date: Thu, 4 Sep 2025 16:11:22 -0400 Subject: [PATCH 6/8] empty commit From 4573f09fa5f525681d336d0e4bd013505db215fc Mon Sep 17 00:00:00 2001 From: Guangyang Li Date: Thu, 4 Sep 2025 17:04:23 -0400 Subject: [PATCH 7/8] Change DAGs to dags --- .../src/airflow/api_fastapi/core_api/openapi/_private_ui.yaml | 4 ++-- .../api_fastapi/core_api/openapi/v2-rest-api-generated.yaml | 4 ++-- .../src/airflow/ui/openapi-gen/queries/ensureQueryData.ts | 4 ++-- airflow-core/src/airflow/ui/openapi-gen/queries/prefetch.ts | 4 ++-- airflow-core/src/airflow/ui/openapi-gen/queries/queries.ts | 4 ++-- airflow-core/src/airflow/ui/openapi-gen/queries/suspense.ts | 4 ++-- .../src/airflow/ui/openapi-gen/requests/services.gen.ts | 4 ++-- airflow-core/src/airflow/ui/openapi-gen/requests/types.gen.ts | 4 ++-- 8 files changed, 16 insertions(+), 16 deletions(-) diff --git a/airflow-core/src/airflow/api_fastapi/core_api/openapi/_private_ui.yaml b/airflow-core/src/airflow/api_fastapi/core_api/openapi/_private_ui.yaml index 336691b6921e6..071c86d14d665 100644 --- a/airflow-core/src/airflow/api_fastapi/core_api/openapi/_private_ui.yaml +++ b/airflow-core/src/airflow/api_fastapi/core_api/openapi/_private_ui.yaml @@ -215,10 +215,10 @@ paths: anyOf: - type: boolean - type: 'null' - description: Filter DAGs by having import errors. Only DAGs that have been + description: Filter DAGs by having import errors. Only Dags that have been successfully loaded before will be returned. title: Has Import Errors - description: Filter DAGs by having import errors. Only DAGs that have been + description: Filter DAGs by having import errors. Only Dags that have been successfully loaded before will be returned. - name: last_dag_run_state in: query diff --git a/airflow-core/src/airflow/api_fastapi/core_api/openapi/v2-rest-api-generated.yaml b/airflow-core/src/airflow/api_fastapi/core_api/openapi/v2-rest-api-generated.yaml index c3002bfab1775..ca7bdbbe2d30e 100644 --- a/airflow-core/src/airflow/api_fastapi/core_api/openapi/v2-rest-api-generated.yaml +++ b/airflow-core/src/airflow/api_fastapi/core_api/openapi/v2-rest-api-generated.yaml @@ -2995,10 +2995,10 @@ paths: anyOf: - type: boolean - type: 'null' - description: Filter DAGs by having import errors. Only DAGs that have been + description: Filter DAGs by having import errors. Only Dags that have been successfully loaded before will be returned. title: Has Import Errors - description: Filter DAGs by having import errors. Only DAGs that have been + description: Filter DAGs by having import errors. Only Dags that have been successfully loaded before will be returned. - name: last_dag_run_state in: query 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 8ad3d9e7f2c59..6ea2a597da3fa 100644 --- a/airflow-core/src/airflow/ui/openapi-gen/queries/ensureQueryData.ts +++ b/airflow-core/src/airflow/ui/openapi-gen/queries/ensureQueryData.ts @@ -459,7 +459,7 @@ export const ensureUseDagWarningServiceListDagWarningsData = (queryClient: Query * @param data.dagDisplayNamePattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. * @param data.excludeStale * @param data.paused -* @param data.hasImportErrors Filter DAGs by having import errors. Only DAGs that have been successfully loaded before will be returned. +* @param data.hasImportErrors Filter DAGs by having import errors. Only Dags that have been successfully loaded before will be returned. * @param data.lastDagRunState * @param data.bundleName * @param data.bundleVersion @@ -561,7 +561,7 @@ export const ensureUseDagServiceGetDagTagsData = (queryClient: QueryClient, { li * @param data.dagDisplayNamePattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. * @param data.excludeStale * @param data.paused -* @param data.hasImportErrors Filter DAGs by having import errors. Only DAGs that have been successfully loaded before will be returned. +* @param data.hasImportErrors Filter DAGs by having import errors. Only Dags that have been successfully loaded before will be returned. * @param data.lastDagRunState * @param data.bundleName * @param data.bundleVersion 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 61cec486800e8..935c63928bd59 100644 --- a/airflow-core/src/airflow/ui/openapi-gen/queries/prefetch.ts +++ b/airflow-core/src/airflow/ui/openapi-gen/queries/prefetch.ts @@ -459,7 +459,7 @@ export const prefetchUseDagWarningServiceListDagWarnings = (queryClient: QueryCl * @param data.dagDisplayNamePattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. * @param data.excludeStale * @param data.paused -* @param data.hasImportErrors Filter DAGs by having import errors. Only DAGs that have been successfully loaded before will be returned. +* @param data.hasImportErrors Filter DAGs by having import errors. Only Dags that have been successfully loaded before will be returned. * @param data.lastDagRunState * @param data.bundleName * @param data.bundleVersion @@ -561,7 +561,7 @@ export const prefetchUseDagServiceGetDagTags = (queryClient: QueryClient, { limi * @param data.dagDisplayNamePattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. * @param data.excludeStale * @param data.paused -* @param data.hasImportErrors Filter DAGs by having import errors. Only DAGs that have been successfully loaded before will be returned. +* @param data.hasImportErrors Filter DAGs by having import errors. Only Dags that have been successfully loaded before will be returned. * @param data.lastDagRunState * @param data.bundleName * @param data.bundleVersion 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 7dbb4addb4715..08b1d7fef524c 100644 --- a/airflow-core/src/airflow/ui/openapi-gen/queries/queries.ts +++ b/airflow-core/src/airflow/ui/openapi-gen/queries/queries.ts @@ -459,7 +459,7 @@ export const useDagWarningServiceListDagWarnings = Date: Thu, 4 Sep 2025 18:00:29 -0400 Subject: [PATCH 8/8] Change DAGs to dags --- .../src/airflow/api_fastapi/core_api/openapi/_private_ui.yaml | 4 ++-- .../api_fastapi/core_api/openapi/v2-rest-api-generated.yaml | 4 ++-- .../src/airflow/ui/openapi-gen/queries/ensureQueryData.ts | 4 ++-- airflow-core/src/airflow/ui/openapi-gen/queries/prefetch.ts | 4 ++-- airflow-core/src/airflow/ui/openapi-gen/queries/queries.ts | 4 ++-- airflow-core/src/airflow/ui/openapi-gen/queries/suspense.ts | 4 ++-- .../src/airflow/ui/openapi-gen/requests/services.gen.ts | 4 ++-- airflow-core/src/airflow/ui/openapi-gen/requests/types.gen.ts | 4 ++-- 8 files changed, 16 insertions(+), 16 deletions(-) diff --git a/airflow-core/src/airflow/api_fastapi/core_api/openapi/_private_ui.yaml b/airflow-core/src/airflow/api_fastapi/core_api/openapi/_private_ui.yaml index 071c86d14d665..03c056d1da076 100644 --- a/airflow-core/src/airflow/api_fastapi/core_api/openapi/_private_ui.yaml +++ b/airflow-core/src/airflow/api_fastapi/core_api/openapi/_private_ui.yaml @@ -215,10 +215,10 @@ paths: anyOf: - type: boolean - type: 'null' - description: Filter DAGs by having import errors. Only Dags that have been + description: Filter Dags by having import errors. Only Dags that have been successfully loaded before will be returned. title: Has Import Errors - description: Filter DAGs by having import errors. Only Dags that have been + description: Filter Dags by having import errors. Only Dags that have been successfully loaded before will be returned. - name: last_dag_run_state in: query diff --git a/airflow-core/src/airflow/api_fastapi/core_api/openapi/v2-rest-api-generated.yaml b/airflow-core/src/airflow/api_fastapi/core_api/openapi/v2-rest-api-generated.yaml index ca7bdbbe2d30e..a3f1de4e73e41 100644 --- a/airflow-core/src/airflow/api_fastapi/core_api/openapi/v2-rest-api-generated.yaml +++ b/airflow-core/src/airflow/api_fastapi/core_api/openapi/v2-rest-api-generated.yaml @@ -2995,10 +2995,10 @@ paths: anyOf: - type: boolean - type: 'null' - description: Filter DAGs by having import errors. Only Dags that have been + description: Filter Dags by having import errors. Only Dags that have been successfully loaded before will be returned. title: Has Import Errors - description: Filter DAGs by having import errors. Only Dags that have been + description: Filter Dags by having import errors. Only Dags that have been successfully loaded before will be returned. - name: last_dag_run_state in: query 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 6ea2a597da3fa..1f3e5dc4e3ec1 100644 --- a/airflow-core/src/airflow/ui/openapi-gen/queries/ensureQueryData.ts +++ b/airflow-core/src/airflow/ui/openapi-gen/queries/ensureQueryData.ts @@ -459,7 +459,7 @@ export const ensureUseDagWarningServiceListDagWarningsData = (queryClient: Query * @param data.dagDisplayNamePattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. * @param data.excludeStale * @param data.paused -* @param data.hasImportErrors Filter DAGs by having import errors. Only Dags that have been successfully loaded before will be returned. +* @param data.hasImportErrors Filter Dags by having import errors. Only Dags that have been successfully loaded before will be returned. * @param data.lastDagRunState * @param data.bundleName * @param data.bundleVersion @@ -561,7 +561,7 @@ export const ensureUseDagServiceGetDagTagsData = (queryClient: QueryClient, { li * @param data.dagDisplayNamePattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. * @param data.excludeStale * @param data.paused -* @param data.hasImportErrors Filter DAGs by having import errors. Only Dags that have been successfully loaded before will be returned. +* @param data.hasImportErrors Filter Dags by having import errors. Only Dags that have been successfully loaded before will be returned. * @param data.lastDagRunState * @param data.bundleName * @param data.bundleVersion 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 935c63928bd59..304b6e37d1764 100644 --- a/airflow-core/src/airflow/ui/openapi-gen/queries/prefetch.ts +++ b/airflow-core/src/airflow/ui/openapi-gen/queries/prefetch.ts @@ -459,7 +459,7 @@ export const prefetchUseDagWarningServiceListDagWarnings = (queryClient: QueryCl * @param data.dagDisplayNamePattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. * @param data.excludeStale * @param data.paused -* @param data.hasImportErrors Filter DAGs by having import errors. Only Dags that have been successfully loaded before will be returned. +* @param data.hasImportErrors Filter Dags by having import errors. Only Dags that have been successfully loaded before will be returned. * @param data.lastDagRunState * @param data.bundleName * @param data.bundleVersion @@ -561,7 +561,7 @@ export const prefetchUseDagServiceGetDagTags = (queryClient: QueryClient, { limi * @param data.dagDisplayNamePattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. * @param data.excludeStale * @param data.paused -* @param data.hasImportErrors Filter DAGs by having import errors. Only Dags that have been successfully loaded before will be returned. +* @param data.hasImportErrors Filter Dags by having import errors. Only Dags that have been successfully loaded before will be returned. * @param data.lastDagRunState * @param data.bundleName * @param data.bundleVersion 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 08b1d7fef524c..f727dcdbd4f55 100644 --- a/airflow-core/src/airflow/ui/openapi-gen/queries/queries.ts +++ b/airflow-core/src/airflow/ui/openapi-gen/queries/queries.ts @@ -459,7 +459,7 @@ export const useDagWarningServiceListDagWarnings =