Skip to content

Commit e2144ce

Browse files
AryanK1511ferruzzi
authored andcommitted
Add Filtering by DAG Bundle Name and Version to Public and UI API Routes (apache#54004)
* feat: add bundle name and version filters in public and UI API routes * add tests for DAG bundle version filter * fix: DAG bundle version API tests
1 parent aa95965 commit e2144ce

14 files changed

Lines changed: 132 additions & 20 deletions

File tree

airflow-core/src/airflow/api_fastapi/common/parameters.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -592,6 +592,14 @@ def depends_float(
592592
QueryDagDisplayNamePatternSearch = Annotated[
593593
_SearchParam, Depends(search_param_factory(DagModel.dag_display_name, "dag_display_name_pattern"))
594594
]
595+
QueryBundleNameFilter = Annotated[
596+
FilterParam[str | None],
597+
Depends(filter_param_factory(DagModel.bundle_name, str | None, filter_name="bundle_name")),
598+
]
599+
QueryBundleVersionFilter = Annotated[
600+
FilterParam[str | None],
601+
Depends(filter_param_factory(DagModel.bundle_version, str | None, filter_name="bundle_version")),
602+
]
595603
QueryDagIdPatternSearchWithNone = Annotated[
596604
_SearchParam, Depends(search_param_factory(DagModel.dag_id, "dag_id_pattern", False))
597605
]

airflow-core/src/airflow/api_fastapi/core_api/openapi/_private_ui.yaml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,22 @@ paths:
216216
- $ref: '#/components/schemas/DagRunState'
217217
- type: 'null'
218218
title: Last Dag Run State
219+
- name: bundle_name
220+
in: query
221+
required: false
222+
schema:
223+
anyOf:
224+
- type: string
225+
- type: 'null'
226+
title: Bundle Name
227+
- name: bundle_version
228+
in: query
229+
required: false
230+
schema:
231+
anyOf:
232+
- type: string
233+
- type: 'null'
234+
title: Bundle Version
219235
- name: order_by
220236
in: query
221237
required: false

airflow-core/src/airflow/api_fastapi/core_api/openapi/v2-rest-api-generated.yaml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2880,6 +2880,22 @@ paths:
28802880
- $ref: '#/components/schemas/DagRunState'
28812881
- type: 'null'
28822882
title: Last Dag Run State
2883+
- name: bundle_name
2884+
in: query
2885+
required: false
2886+
schema:
2887+
anyOf:
2888+
- type: string
2889+
- type: 'null'
2890+
title: Bundle Name
2891+
- name: bundle_version
2892+
in: query
2893+
required: false
2894+
schema:
2895+
anyOf:
2896+
- type: string
2897+
- type: 'null'
2898+
title: Bundle Version
28832899
- name: dag_run_start_date_gte
28842900
in: query
28852901
required: false

airflow-core/src/airflow/api_fastapi/core_api/routes/public/dags.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@
3434
from airflow.api_fastapi.common.parameters import (
3535
FilterOptionEnum,
3636
FilterParam,
37+
QueryBundleNameFilter,
38+
QueryBundleVersionFilter,
3739
QueryDagDisplayNamePatternSearch,
3840
QueryDagIdPatternSearch,
3941
QueryDagIdPatternSearchWithNone,
@@ -85,6 +87,8 @@ def get_dags(
8587
exclude_stale: QueryExcludeStaleFilter,
8688
paused: QueryPausedFilter,
8789
last_dag_run_state: QueryLastDagRunStateFilter,
90+
bundle_name: QueryBundleNameFilter,
91+
bundle_version: QueryBundleVersionFilter,
8892
dag_run_start_date_range: Annotated[
8993
RangeFilter, Depends(datetime_range_filter_factory("dag_run_start_date", DagRun, "start_date"))
9094
],
@@ -140,6 +144,8 @@ def get_dags(
140144
is_favorite,
141145
owners,
142146
readable_dags_filter,
147+
bundle_name,
148+
bundle_version,
143149
],
144150
order_by=order_by,
145151
offset=offset,

airflow-core/src/airflow/api_fastapi/core_api/routes/ui/dags.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@
3232
from airflow.api_fastapi.common.parameters import (
3333
FilterOptionEnum,
3434
FilterParam,
35+
QueryBundleNameFilter,
36+
QueryBundleVersionFilter,
3537
QueryDagDisplayNamePatternSearch,
3638
QueryDagIdPatternSearch,
3739
QueryExcludeStaleFilter,
@@ -86,6 +88,8 @@ def get_dags(
8688
exclude_stale: QueryExcludeStaleFilter,
8789
paused: QueryPausedFilter,
8890
last_dag_run_state: QueryLastDagRunStateFilter,
91+
bundle_name: QueryBundleNameFilter,
92+
bundle_version: QueryBundleVersionFilter,
8993
order_by: Annotated[
9094
SortParam,
9195
Depends(
@@ -123,6 +127,8 @@ def get_dags(
123127
last_dag_run_state,
124128
is_favorite,
125129
readable_dags_filter,
130+
bundle_name,
131+
bundle_version,
126132
],
127133
order_by=order_by,
128134
offset=offset,

airflow-core/src/airflow/ui/openapi-gen/queries/common.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,9 @@ export const UseDagWarningServiceListDagWarningsKeyFn = ({ dagId, limit, offset,
230230
export type DagServiceGetDagsDefaultResponse = Awaited<ReturnType<typeof DagService.getDags>>;
231231
export type DagServiceGetDagsQueryResult<TData = DagServiceGetDagsDefaultResponse, TError = unknown> = UseQueryResult<TData, TError>;
232232
export const useDagServiceGetDagsKey = "DagServiceGetDags";
233-
export const UseDagServiceGetDagsKeyFn = ({ dagDisplayNamePattern, dagIdPattern, dagRunEndDateGte, dagRunEndDateLte, dagRunStartDateGte, dagRunStartDateLte, dagRunState, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }: {
233+
export const UseDagServiceGetDagsKeyFn = ({ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagRunEndDateGte, dagRunEndDateLte, dagRunStartDateGte, dagRunStartDateLte, dagRunState, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }: {
234+
bundleName?: string;
235+
bundleVersion?: string;
234236
dagDisplayNamePattern?: string;
235237
dagIdPattern?: string;
236238
dagRunEndDateGte?: string;
@@ -248,7 +250,7 @@ export const UseDagServiceGetDagsKeyFn = ({ dagDisplayNamePattern, dagIdPattern,
248250
paused?: boolean;
249251
tags?: string[];
250252
tagsMatchMode?: "any" | "all";
251-
} = {}, queryKey?: Array<unknown>) => [useDagServiceGetDagsKey, ...(queryKey ?? [{ dagDisplayNamePattern, dagIdPattern, dagRunEndDateGte, dagRunEndDateLte, dagRunStartDateGte, dagRunStartDateLte, dagRunState, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }])];
253+
} = {}, queryKey?: Array<unknown>) => [useDagServiceGetDagsKey, ...(queryKey ?? [{ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagRunEndDateGte, dagRunEndDateLte, dagRunStartDateGte, dagRunStartDateLte, dagRunState, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }])];
252254
export type DagServiceGetDagDefaultResponse = Awaited<ReturnType<typeof DagService.getDag>>;
253255
export type DagServiceGetDagQueryResult<TData = DagServiceGetDagDefaultResponse, TError = unknown> = UseQueryResult<TData, TError>;
254256
export const useDagServiceGetDagKey = "DagServiceGetDag";
@@ -273,7 +275,9 @@ export const UseDagServiceGetDagTagsKeyFn = ({ limit, offset, orderBy, tagNamePa
273275
export type DagServiceGetDagsUiDefaultResponse = Awaited<ReturnType<typeof DagService.getDagsUi>>;
274276
export type DagServiceGetDagsUiQueryResult<TData = DagServiceGetDagsUiDefaultResponse, TError = unknown> = UseQueryResult<TData, TError>;
275277
export const useDagServiceGetDagsUiKey = "DagServiceGetDagsUi";
276-
export const UseDagServiceGetDagsUiKeyFn = ({ dagDisplayNamePattern, dagIdPattern, dagIds, dagRunsLimit, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }: {
278+
export const UseDagServiceGetDagsUiKeyFn = ({ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagIds, dagRunsLimit, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }: {
279+
bundleName?: string;
280+
bundleVersion?: string;
277281
dagDisplayNamePattern?: string;
278282
dagIdPattern?: string;
279283
dagIds?: string[];
@@ -288,7 +292,7 @@ export const UseDagServiceGetDagsUiKeyFn = ({ dagDisplayNamePattern, dagIdPatter
288292
paused?: boolean;
289293
tags?: string[];
290294
tagsMatchMode?: "any" | "all";
291-
} = {}, queryKey?: Array<unknown>) => [useDagServiceGetDagsUiKey, ...(queryKey ?? [{ dagDisplayNamePattern, dagIdPattern, dagIds, dagRunsLimit, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }])];
295+
} = {}, queryKey?: Array<unknown>) => [useDagServiceGetDagsUiKey, ...(queryKey ?? [{ bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagIds, dagRunsLimit, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }])];
292296
export type DagServiceGetLatestRunInfoDefaultResponse = Awaited<ReturnType<typeof DagService.getLatestRunInfo>>;
293297
export type DagServiceGetLatestRunInfoQueryResult<TData = DagServiceGetLatestRunInfoDefaultResponse, TError = unknown> = UseQueryResult<TData, TError>;
294298
export const useDagServiceGetLatestRunInfoKey = "DagServiceGetLatestRunInfo";

airflow-core/src/airflow/ui/openapi-gen/queries/ensureQueryData.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -434,6 +434,8 @@ export const ensureUseDagWarningServiceListDagWarningsData = (queryClient: Query
434434
* @param data.excludeStale
435435
* @param data.paused
436436
* @param data.lastDagRunState
437+
* @param data.bundleName
438+
* @param data.bundleVersion
437439
* @param data.dagRunStartDateGte
438440
* @param data.dagRunStartDateLte
439441
* @param data.dagRunEndDateGte
@@ -444,7 +446,9 @@ export const ensureUseDagWarningServiceListDagWarningsData = (queryClient: Query
444446
* @returns DAGCollectionResponse Successful Response
445447
* @throws ApiError
446448
*/
447-
export const ensureUseDagServiceGetDagsData = (queryClient: QueryClient, { dagDisplayNamePattern, dagIdPattern, dagRunEndDateGte, dagRunEndDateLte, dagRunStartDateGte, dagRunStartDateLte, dagRunState, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }: {
449+
export const ensureUseDagServiceGetDagsData = (queryClient: QueryClient, { bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagRunEndDateGte, dagRunEndDateLte, dagRunStartDateGte, dagRunStartDateLte, dagRunState, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }: {
450+
bundleName?: string;
451+
bundleVersion?: string;
448452
dagDisplayNamePattern?: string;
449453
dagIdPattern?: string;
450454
dagRunEndDateGte?: string;
@@ -462,7 +466,7 @@ export const ensureUseDagServiceGetDagsData = (queryClient: QueryClient, { dagDi
462466
paused?: boolean;
463467
tags?: string[];
464468
tagsMatchMode?: "any" | "all";
465-
} = {}) => queryClient.ensureQueryData({ queryKey: Common.UseDagServiceGetDagsKeyFn({ dagDisplayNamePattern, dagIdPattern, dagRunEndDateGte, dagRunEndDateLte, dagRunStartDateGte, dagRunStartDateLte, dagRunState, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }), queryFn: () => DagService.getDags({ dagDisplayNamePattern, dagIdPattern, dagRunEndDateGte, dagRunEndDateLte, dagRunStartDateGte, dagRunStartDateLte, dagRunState, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }) });
469+
} = {}) => 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 }) });
466470
/**
467471
* Get Dag
468472
* Get basic information about a DAG.
@@ -518,12 +522,16 @@ export const ensureUseDagServiceGetDagTagsData = (queryClient: QueryClient, { li
518522
* @param data.excludeStale
519523
* @param data.paused
520524
* @param data.lastDagRunState
525+
* @param data.bundleName
526+
* @param data.bundleVersion
521527
* @param data.orderBy
522528
* @param data.isFavorite
523529
* @returns DAGWithLatestDagRunsCollectionResponse Successful Response
524530
* @throws ApiError
525531
*/
526-
export const ensureUseDagServiceGetDagsUiData = (queryClient: QueryClient, { dagDisplayNamePattern, dagIdPattern, dagIds, dagRunsLimit, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }: {
532+
export const ensureUseDagServiceGetDagsUiData = (queryClient: QueryClient, { bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagIds, dagRunsLimit, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }: {
533+
bundleName?: string;
534+
bundleVersion?: string;
527535
dagDisplayNamePattern?: string;
528536
dagIdPattern?: string;
529537
dagIds?: string[];
@@ -538,7 +546,7 @@ export const ensureUseDagServiceGetDagsUiData = (queryClient: QueryClient, { dag
538546
paused?: boolean;
539547
tags?: string[];
540548
tagsMatchMode?: "any" | "all";
541-
} = {}) => queryClient.ensureQueryData({ queryKey: Common.UseDagServiceGetDagsUiKeyFn({ dagDisplayNamePattern, dagIdPattern, dagIds, dagRunsLimit, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }), queryFn: () => DagService.getDagsUi({ dagDisplayNamePattern, dagIdPattern, dagIds, dagRunsLimit, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }) });
549+
} = {}) => 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 }) });
542550
/**
543551
* Get Latest Run Info
544552
* Get latest run.

airflow-core/src/airflow/ui/openapi-gen/queries/prefetch.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -434,6 +434,8 @@ export const prefetchUseDagWarningServiceListDagWarnings = (queryClient: QueryCl
434434
* @param data.excludeStale
435435
* @param data.paused
436436
* @param data.lastDagRunState
437+
* @param data.bundleName
438+
* @param data.bundleVersion
437439
* @param data.dagRunStartDateGte
438440
* @param data.dagRunStartDateLte
439441
* @param data.dagRunEndDateGte
@@ -444,7 +446,9 @@ export const prefetchUseDagWarningServiceListDagWarnings = (queryClient: QueryCl
444446
* @returns DAGCollectionResponse Successful Response
445447
* @throws ApiError
446448
*/
447-
export const prefetchUseDagServiceGetDags = (queryClient: QueryClient, { dagDisplayNamePattern, dagIdPattern, dagRunEndDateGte, dagRunEndDateLte, dagRunStartDateGte, dagRunStartDateLte, dagRunState, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }: {
449+
export const prefetchUseDagServiceGetDags = (queryClient: QueryClient, { bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagRunEndDateGte, dagRunEndDateLte, dagRunStartDateGte, dagRunStartDateLte, dagRunState, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }: {
450+
bundleName?: string;
451+
bundleVersion?: string;
448452
dagDisplayNamePattern?: string;
449453
dagIdPattern?: string;
450454
dagRunEndDateGte?: string;
@@ -462,7 +466,7 @@ export const prefetchUseDagServiceGetDags = (queryClient: QueryClient, { dagDisp
462466
paused?: boolean;
463467
tags?: string[];
464468
tagsMatchMode?: "any" | "all";
465-
} = {}) => queryClient.prefetchQuery({ queryKey: Common.UseDagServiceGetDagsKeyFn({ dagDisplayNamePattern, dagIdPattern, dagRunEndDateGte, dagRunEndDateLte, dagRunStartDateGte, dagRunStartDateLte, dagRunState, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }), queryFn: () => DagService.getDags({ dagDisplayNamePattern, dagIdPattern, dagRunEndDateGte, dagRunEndDateLte, dagRunStartDateGte, dagRunStartDateLte, dagRunState, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }) });
469+
} = {}) => 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 }) });
466470
/**
467471
* Get Dag
468472
* Get basic information about a DAG.
@@ -518,12 +522,16 @@ export const prefetchUseDagServiceGetDagTags = (queryClient: QueryClient, { limi
518522
* @param data.excludeStale
519523
* @param data.paused
520524
* @param data.lastDagRunState
525+
* @param data.bundleName
526+
* @param data.bundleVersion
521527
* @param data.orderBy
522528
* @param data.isFavorite
523529
* @returns DAGWithLatestDagRunsCollectionResponse Successful Response
524530
* @throws ApiError
525531
*/
526-
export const prefetchUseDagServiceGetDagsUi = (queryClient: QueryClient, { dagDisplayNamePattern, dagIdPattern, dagIds, dagRunsLimit, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }: {
532+
export const prefetchUseDagServiceGetDagsUi = (queryClient: QueryClient, { bundleName, bundleVersion, dagDisplayNamePattern, dagIdPattern, dagIds, dagRunsLimit, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }: {
533+
bundleName?: string;
534+
bundleVersion?: string;
527535
dagDisplayNamePattern?: string;
528536
dagIdPattern?: string;
529537
dagIds?: string[];
@@ -538,7 +546,7 @@ export const prefetchUseDagServiceGetDagsUi = (queryClient: QueryClient, { dagDi
538546
paused?: boolean;
539547
tags?: string[];
540548
tagsMatchMode?: "any" | "all";
541-
} = {}) => queryClient.prefetchQuery({ queryKey: Common.UseDagServiceGetDagsUiKeyFn({ dagDisplayNamePattern, dagIdPattern, dagIds, dagRunsLimit, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }), queryFn: () => DagService.getDagsUi({ dagDisplayNamePattern, dagIdPattern, dagIds, dagRunsLimit, excludeStale, isFavorite, lastDagRunState, limit, offset, orderBy, owners, paused, tags, tagsMatchMode }) });
549+
} = {}) => 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 }) });
542550
/**
543551
* Get Latest Run Info
544552
* Get latest run.

0 commit comments

Comments
 (0)