Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions airflow-core/src/airflow/api_fastapi/common/parameters.py
Original file line number Diff line number Diff line change
Expand Up @@ -786,6 +786,15 @@ def _optional_boolean(value: bool | None) -> bool | None:
)
),
]
QueryHITLDetailTaskIdPatternSearch = Annotated[
_SearchParam,
Depends(
search_param_factory(
TaskInstance.task_id,
"task_id_pattern",
)
),
]
QueryHITLDetailDagRunIdFilter = Annotated[
FilterParam[str],
Depends(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7604,6 +7604,18 @@ paths:
schema:
type: string
title: Dag Run Id
- name: task_id_pattern
in: query
required: false
schema:
anyOf:
- type: string
- type: 'null'
description: "SQL LIKE expression \u2014 use `%` / `_` wildcards (e.g. `%customer_%`).\
\ Regular expressions are **not** supported."
title: Task Id Pattern
description: "SQL LIKE expression \u2014 use `%` / `_` wildcards (e.g. `%customer_%`).\
\ Regular expressions are **not** supported."
- name: state
in: query
required: false
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
QueryHITLDetailDagRunIdFilter,
QueryHITLDetailResponseReceivedFilter,
QueryHITLDetailSubjectSearch,
QueryHITLDetailTaskIdPatternSearch,
QueryHITLDetailUserIdFilter,
QueryLimit,
QueryOffset,
Expand Down Expand Up @@ -302,6 +303,7 @@ def get_hitl_details(
readable_ti_filter: ReadableTIFilterDep,
dag_id_pattern: QueryHITLDetailDagIdPatternSearch,
dag_run_id: QueryHITLDetailDagRunIdFilter,
task_id: QueryHITLDetailTaskIdPatternSearch,
ti_state: QueryTIStateFilter,
# hitl detail related filter
response_received: QueryHITLDetailResponseReceivedFilter,
Expand All @@ -322,6 +324,7 @@ def get_hitl_details(
readable_ti_filter,
dag_id_pattern,
dag_run_id,
task_id,
ti_state,
# hitl detail related filter
response_received,
Expand Down
5 changes: 3 additions & 2 deletions airflow-core/src/airflow/ui/openapi-gen/queries/common.ts
Original file line number Diff line number Diff line change
Expand Up @@ -646,7 +646,7 @@ export const UseHumanInTheLoopServiceGetMappedTiHitlDetailKeyFn = ({ dagId, dagR
export type HumanInTheLoopServiceGetHitlDetailsDefaultResponse = Awaited<ReturnType<typeof HumanInTheLoopService.getHitlDetails>>;
export type HumanInTheLoopServiceGetHitlDetailsQueryResult<TData = HumanInTheLoopServiceGetHitlDetailsDefaultResponse, TError = unknown> = UseQueryResult<TData, TError>;
export const useHumanInTheLoopServiceGetHitlDetailsKey = "HumanInTheLoopServiceGetHitlDetails";
export const UseHumanInTheLoopServiceGetHitlDetailsKeyFn = ({ bodySearch, dagIdPattern, dagRunId, limit, offset, orderBy, responseReceived, state, subjectSearch, userId }: {
export const UseHumanInTheLoopServiceGetHitlDetailsKeyFn = ({ bodySearch, dagIdPattern, dagRunId, limit, offset, orderBy, responseReceived, state, subjectSearch, taskIdPattern, userId }: {
bodySearch?: string;
dagIdPattern?: string;
dagRunId?: string;
Expand All @@ -656,8 +656,9 @@ export const UseHumanInTheLoopServiceGetHitlDetailsKeyFn = ({ bodySearch, dagIdP
responseReceived?: boolean;
state?: string[];
subjectSearch?: string;
taskIdPattern?: string;
userId?: string[];
} = {}, queryKey?: Array<unknown>) => [useHumanInTheLoopServiceGetHitlDetailsKey, ...(queryKey ?? [{ bodySearch, dagIdPattern, dagRunId, limit, offset, orderBy, responseReceived, state, subjectSearch, userId }])];
} = {}, queryKey?: Array<unknown>) => [useHumanInTheLoopServiceGetHitlDetailsKey, ...(queryKey ?? [{ bodySearch, dagIdPattern, dagRunId, limit, offset, orderBy, responseReceived, state, subjectSearch, taskIdPattern, userId }])];
export type MonitorServiceGetHealthDefaultResponse = Awaited<ReturnType<typeof MonitorService.getHealth>>;
export type MonitorServiceGetHealthQueryResult<TData = MonitorServiceGetHealthDefaultResponse, TError = unknown> = UseQueryResult<TData, TError>;
export const useMonitorServiceGetHealthKey = "MonitorServiceGetHealth";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1223,6 +1223,7 @@ export const ensureUseHumanInTheLoopServiceGetMappedTiHitlDetailData = (queryCli
* @param data.orderBy
* @param data.dagIdPattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported.
* @param data.dagRunId
* @param data.taskIdPattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported.
* @param data.state
* @param data.responseReceived
* @param data.userId
Expand All @@ -1231,7 +1232,7 @@ export const ensureUseHumanInTheLoopServiceGetMappedTiHitlDetailData = (queryCli
* @returns HITLDetailCollection Successful Response
* @throws ApiError
*/
export const ensureUseHumanInTheLoopServiceGetHitlDetailsData = (queryClient: QueryClient, { bodySearch, dagIdPattern, dagRunId, limit, offset, orderBy, responseReceived, state, subjectSearch, userId }: {
export const ensureUseHumanInTheLoopServiceGetHitlDetailsData = (queryClient: QueryClient, { bodySearch, dagIdPattern, dagRunId, limit, offset, orderBy, responseReceived, state, subjectSearch, taskIdPattern, userId }: {
bodySearch?: string;
dagIdPattern?: string;
dagRunId?: string;
Expand All @@ -1241,8 +1242,9 @@ export const ensureUseHumanInTheLoopServiceGetHitlDetailsData = (queryClient: Qu
responseReceived?: boolean;
state?: string[];
subjectSearch?: string;
taskIdPattern?: string;
userId?: string[];
} = {}) => queryClient.ensureQueryData({ queryKey: Common.UseHumanInTheLoopServiceGetHitlDetailsKeyFn({ bodySearch, dagIdPattern, dagRunId, limit, offset, orderBy, responseReceived, state, subjectSearch, userId }), queryFn: () => HumanInTheLoopService.getHitlDetails({ bodySearch, dagIdPattern, dagRunId, limit, offset, orderBy, responseReceived, state, subjectSearch, userId }) });
} = {}) => queryClient.ensureQueryData({ queryKey: Common.UseHumanInTheLoopServiceGetHitlDetailsKeyFn({ bodySearch, dagIdPattern, dagRunId, limit, offset, orderBy, responseReceived, state, subjectSearch, taskIdPattern, userId }), queryFn: () => HumanInTheLoopService.getHitlDetails({ bodySearch, dagIdPattern, dagRunId, limit, offset, orderBy, responseReceived, state, subjectSearch, taskIdPattern, userId }) });
/**
* Get Health
* @returns HealthInfoResponse Successful Response
Expand Down
6 changes: 4 additions & 2 deletions airflow-core/src/airflow/ui/openapi-gen/queries/prefetch.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1223,6 +1223,7 @@ export const prefetchUseHumanInTheLoopServiceGetMappedTiHitlDetail = (queryClien
* @param data.orderBy
* @param data.dagIdPattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported.
* @param data.dagRunId
* @param data.taskIdPattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported.
* @param data.state
* @param data.responseReceived
* @param data.userId
Expand All @@ -1231,7 +1232,7 @@ export const prefetchUseHumanInTheLoopServiceGetMappedTiHitlDetail = (queryClien
* @returns HITLDetailCollection Successful Response
* @throws ApiError
*/
export const prefetchUseHumanInTheLoopServiceGetHitlDetails = (queryClient: QueryClient, { bodySearch, dagIdPattern, dagRunId, limit, offset, orderBy, responseReceived, state, subjectSearch, userId }: {
export const prefetchUseHumanInTheLoopServiceGetHitlDetails = (queryClient: QueryClient, { bodySearch, dagIdPattern, dagRunId, limit, offset, orderBy, responseReceived, state, subjectSearch, taskIdPattern, userId }: {
bodySearch?: string;
dagIdPattern?: string;
dagRunId?: string;
Expand All @@ -1241,8 +1242,9 @@ export const prefetchUseHumanInTheLoopServiceGetHitlDetails = (queryClient: Quer
responseReceived?: boolean;
state?: string[];
subjectSearch?: string;
taskIdPattern?: string;
userId?: string[];
} = {}) => queryClient.prefetchQuery({ queryKey: Common.UseHumanInTheLoopServiceGetHitlDetailsKeyFn({ bodySearch, dagIdPattern, dagRunId, limit, offset, orderBy, responseReceived, state, subjectSearch, userId }), queryFn: () => HumanInTheLoopService.getHitlDetails({ bodySearch, dagIdPattern, dagRunId, limit, offset, orderBy, responseReceived, state, subjectSearch, userId }) });
} = {}) => queryClient.prefetchQuery({ queryKey: Common.UseHumanInTheLoopServiceGetHitlDetailsKeyFn({ bodySearch, dagIdPattern, dagRunId, limit, offset, orderBy, responseReceived, state, subjectSearch, taskIdPattern, userId }), queryFn: () => HumanInTheLoopService.getHitlDetails({ bodySearch, dagIdPattern, dagRunId, limit, offset, orderBy, responseReceived, state, subjectSearch, taskIdPattern, userId }) });
/**
* Get Health
* @returns HealthInfoResponse Successful Response
Expand Down
6 changes: 4 additions & 2 deletions airflow-core/src/airflow/ui/openapi-gen/queries/queries.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1223,6 +1223,7 @@ export const useHumanInTheLoopServiceGetMappedTiHitlDetail = <TData = Common.Hum
* @param data.orderBy
* @param data.dagIdPattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported.
* @param data.dagRunId
* @param data.taskIdPattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported.
* @param data.state
* @param data.responseReceived
* @param data.userId
Expand All @@ -1231,7 +1232,7 @@ export const useHumanInTheLoopServiceGetMappedTiHitlDetail = <TData = Common.Hum
* @returns HITLDetailCollection Successful Response
* @throws ApiError
*/
export const useHumanInTheLoopServiceGetHitlDetails = <TData = Common.HumanInTheLoopServiceGetHitlDetailsDefaultResponse, TError = unknown, TQueryKey extends Array<unknown> = unknown[]>({ bodySearch, dagIdPattern, dagRunId, limit, offset, orderBy, responseReceived, state, subjectSearch, userId }: {
export const useHumanInTheLoopServiceGetHitlDetails = <TData = Common.HumanInTheLoopServiceGetHitlDetailsDefaultResponse, TError = unknown, TQueryKey extends Array<unknown> = unknown[]>({ bodySearch, dagIdPattern, dagRunId, limit, offset, orderBy, responseReceived, state, subjectSearch, taskIdPattern, userId }: {
bodySearch?: string;
dagIdPattern?: string;
dagRunId?: string;
Expand All @@ -1241,8 +1242,9 @@ export const useHumanInTheLoopServiceGetHitlDetails = <TData = Common.HumanInThe
responseReceived?: boolean;
state?: string[];
subjectSearch?: string;
taskIdPattern?: string;
userId?: string[];
} = {}, queryKey?: TQueryKey, options?: Omit<UseQueryOptions<TData, TError>, "queryKey" | "queryFn">) => useQuery<TData, TError>({ queryKey: Common.UseHumanInTheLoopServiceGetHitlDetailsKeyFn({ bodySearch, dagIdPattern, dagRunId, limit, offset, orderBy, responseReceived, state, subjectSearch, userId }, queryKey), queryFn: () => HumanInTheLoopService.getHitlDetails({ bodySearch, dagIdPattern, dagRunId, limit, offset, orderBy, responseReceived, state, subjectSearch, userId }) as TData, ...options });
} = {}, queryKey?: TQueryKey, options?: Omit<UseQueryOptions<TData, TError>, "queryKey" | "queryFn">) => useQuery<TData, TError>({ queryKey: Common.UseHumanInTheLoopServiceGetHitlDetailsKeyFn({ bodySearch, dagIdPattern, dagRunId, limit, offset, orderBy, responseReceived, state, subjectSearch, taskIdPattern, userId }, queryKey), queryFn: () => HumanInTheLoopService.getHitlDetails({ bodySearch, dagIdPattern, dagRunId, limit, offset, orderBy, responseReceived, state, subjectSearch, taskIdPattern, userId }) as TData, ...options });
/**
* Get Health
* @returns HealthInfoResponse Successful Response
Expand Down
6 changes: 4 additions & 2 deletions airflow-core/src/airflow/ui/openapi-gen/queries/suspense.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1223,6 +1223,7 @@ export const useHumanInTheLoopServiceGetMappedTiHitlDetailSuspense = <TData = Co
* @param data.orderBy
* @param data.dagIdPattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported.
* @param data.dagRunId
* @param data.taskIdPattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported.
* @param data.state
* @param data.responseReceived
* @param data.userId
Expand All @@ -1231,7 +1232,7 @@ export const useHumanInTheLoopServiceGetMappedTiHitlDetailSuspense = <TData = Co
* @returns HITLDetailCollection Successful Response
* @throws ApiError
*/
export const useHumanInTheLoopServiceGetHitlDetailsSuspense = <TData = Common.HumanInTheLoopServiceGetHitlDetailsDefaultResponse, TError = unknown, TQueryKey extends Array<unknown> = unknown[]>({ bodySearch, dagIdPattern, dagRunId, limit, offset, orderBy, responseReceived, state, subjectSearch, userId }: {
export const useHumanInTheLoopServiceGetHitlDetailsSuspense = <TData = Common.HumanInTheLoopServiceGetHitlDetailsDefaultResponse, TError = unknown, TQueryKey extends Array<unknown> = unknown[]>({ bodySearch, dagIdPattern, dagRunId, limit, offset, orderBy, responseReceived, state, subjectSearch, taskIdPattern, userId }: {
bodySearch?: string;
dagIdPattern?: string;
dagRunId?: string;
Expand All @@ -1241,8 +1242,9 @@ export const useHumanInTheLoopServiceGetHitlDetailsSuspense = <TData = Common.Hu
responseReceived?: boolean;
state?: string[];
subjectSearch?: string;
taskIdPattern?: string;
userId?: string[];
} = {}, queryKey?: TQueryKey, options?: Omit<UseQueryOptions<TData, TError>, "queryKey" | "queryFn">) => useSuspenseQuery<TData, TError>({ queryKey: Common.UseHumanInTheLoopServiceGetHitlDetailsKeyFn({ bodySearch, dagIdPattern, dagRunId, limit, offset, orderBy, responseReceived, state, subjectSearch, userId }, queryKey), queryFn: () => HumanInTheLoopService.getHitlDetails({ bodySearch, dagIdPattern, dagRunId, limit, offset, orderBy, responseReceived, state, subjectSearch, userId }) as TData, ...options });
} = {}, queryKey?: TQueryKey, options?: Omit<UseQueryOptions<TData, TError>, "queryKey" | "queryFn">) => useSuspenseQuery<TData, TError>({ queryKey: Common.UseHumanInTheLoopServiceGetHitlDetailsKeyFn({ bodySearch, dagIdPattern, dagRunId, limit, offset, orderBy, responseReceived, state, subjectSearch, taskIdPattern, userId }, queryKey), queryFn: () => HumanInTheLoopService.getHitlDetails({ bodySearch, dagIdPattern, dagRunId, limit, offset, orderBy, responseReceived, state, subjectSearch, taskIdPattern, userId }) as TData, ...options });
/**
* Get Health
* @returns HealthInfoResponse Successful Response
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3516,6 +3516,7 @@ export class HumanInTheLoopService {
* @param data.orderBy
* @param data.dagIdPattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported.
* @param data.dagRunId
* @param data.taskIdPattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported.
* @param data.state
* @param data.responseReceived
* @param data.userId
Expand All @@ -3534,6 +3535,7 @@ export class HumanInTheLoopService {
order_by: data.orderBy,
dag_id_pattern: data.dagIdPattern,
dag_run_id: data.dagRunId,
task_id_pattern: data.taskIdPattern,
state: data.state,
response_received: data.responseReceived,
user_id: data.userId,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2957,6 +2957,10 @@ export type GetHitlDetailsData = {
* SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported.
*/
subjectSearch?: string | null;
/**
* SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported.
*/
taskIdPattern?: string | null;
userId?: Array<(string)>;
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,11 +48,12 @@

DAG_ID = "test_hitl_dag"
ANOTHER_DAG_ID = "another_hitl_dag"
TASK_ID = "sample_task_hitl"


@pytest.fixture
def sample_ti(create_task_instance: CreateTaskInstance) -> TaskInstance:
return create_task_instance(dag_id=DAG_ID)
return create_task_instance(dag_id=DAG_ID, task_id=TASK_ID)


@pytest.fixture
Expand Down Expand Up @@ -219,8 +220,8 @@ def expected_sample_hitl_detail_dict(sample_ti: TaskInstance) -> dict[str, Any]:
"scheduled_when": None,
"start_date": None,
"state": None,
"task_display_name": "op1",
"task_id": "op1",
"task_display_name": "sample_task_hitl",
"task_id": TASK_ID,
"trigger": None,
"triggerer_job": None,
"try_number": 0,
Expand Down Expand Up @@ -495,6 +496,7 @@ def test_should_respond_200_with_existing_response(
({"dag_id_pattern": "hitl_dag"}, 5),
({"dag_id_pattern": "other_Dag_"}, 3),
({"dag_run_id": "hitl_run_0"}, 1),
({"task_id_pattern": "another_hitl"}, 3),
({"state": "running"}, 5),
({"state": "success"}, 3),
# hitl detail related filter
Expand All @@ -508,6 +510,7 @@ def test_should_respond_200_with_existing_response(
"dag_id_hitl_dag",
"dag_id_other_dag",
"dag_run_id",
"task_id",
"ti_state_running",
"ti_state_success",
"subject",
Expand Down