diff --git a/airflow-core/src/airflow/api_fastapi/common/parameters.py b/airflow-core/src/airflow/api_fastapi/common/parameters.py index c6ff8aa6f4608..896c00d487dff 100644 --- a/airflow-core/src/airflow/api_fastapi/common/parameters.py +++ b/airflow-core/src/airflow/api_fastapi/common/parameters.py @@ -987,14 +987,14 @@ def _optional_boolean(value: bool | None) -> bool | None: ) ), ] -QueryHITLDetailDagRunIdFilter = Annotated[ - FilterParam[str], +QueryHITLDetailTaskIdFilter = Annotated[ + FilterParam[str | None], Depends( filter_param_factory( - TaskInstance.run_id, - str, - filter_name="dag_run_id", - ), + TaskInstance.task_id, + str | None, + filter_name="task_id", + ) ), ] QueryHITLDetailSubjectSearch = Annotated[ @@ -1025,7 +1025,6 @@ def _optional_boolean(value: bool | None) -> bool | None: ) ), ] - QueryHITLDetailRespondedUserIdFilter = Annotated[ FilterParam[list[str]], Depends( @@ -1050,23 +1049,3 @@ def _optional_boolean(value: bool | None) -> bool | None: ) ), ] -QueryHITLDetailDagIdFilter = Annotated[ - FilterParam[str | None], - Depends( - filter_param_factory( - TaskInstance.dag_id, - str | None, - filter_name="dag_id", - ) - ), -] -QueryHITLDetailTaskIdFilter = Annotated[ - FilterParam[str | None], - Depends( - filter_param_factory( - TaskInstance.task_id, - str | None, - filter_name="task_id", - ) - ), -] 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 196118213aa13..fa6280ad70ac6 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 @@ -7968,10 +7968,10 @@ paths: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' - /api/v2/hitlDetails/{dag_id}/{dag_run_id}/{task_id}: + /api/v2/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/{map_index}/hitlDetails: patch: tags: - - HumanInTheLoop + - Task Instance summary: Update Hitl Detail description: Update a Human-in-the-loop detail. operationId: update_hitl_detail @@ -7998,11 +7998,10 @@ paths: type: string title: Task Id - name: map_index - in: query - required: false + in: path + required: true schema: type: integer - default: -1 title: Map Index requestBody: required: true @@ -8049,7 +8048,7 @@ paths: $ref: '#/components/schemas/HTTPValidationError' get: tags: - - HumanInTheLoop + - Task Instance summary: Get Hitl Detail description: Get a Human-in-the-loop detail of a specific task instance. operationId: get_hitl_detail @@ -8076,11 +8075,10 @@ paths: type: string title: Task Id - name: map_index - in: query - required: false + in: path + required: true schema: type: integer - default: -1 title: Map Index responses: '200': @@ -8113,10 +8111,10 @@ paths: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' - /api/v2/hitlDetails/: + /api/v2/dags/{dag_id}/dagRuns/{dag_run_id}/hitlDetails: get: tags: - - HumanInTheLoop + - Task Instance summary: Get Hitl Details description: Get Human-in-the-loop details. operationId: get_hitl_details @@ -8124,6 +8122,18 @@ paths: - OAuth2PasswordBearer: [] - HTTPBearer: [] parameters: + - name: dag_id + in: path + required: true + schema: + type: string + title: Dag Id + - name: dag_run_id + in: path + required: true + schema: + type: string + title: Dag Run Id - name: limit in: query required: false @@ -8150,14 +8160,6 @@ paths: default: - ti_id title: Order By - - name: dag_id - in: query - required: false - schema: - anyOf: - - type: string - - type: 'null' - title: Dag Id - name: dag_id_pattern in: query required: false @@ -8170,12 +8172,6 @@ paths: title: Dag Id Pattern description: "SQL LIKE expression \u2014 use `%` / `_` wildcards (e.g. `%customer_%`).\ \ Regular expressions are **not** supported." - - name: dag_run_id - in: query - required: false - schema: - type: string - title: Dag Run Id - name: task_id in: query required: false diff --git a/airflow-core/src/airflow/api_fastapi/core_api/routes/public/__init__.py b/airflow-core/src/airflow/api_fastapi/core_api/routes/public/__init__.py index 6db86ce2327a6..65cdbef6642f1 100644 --- a/airflow-core/src/airflow/api_fastapi/core_api/routes/public/__init__.py +++ b/airflow-core/src/airflow/api_fastapi/core_api/routes/public/__init__.py @@ -37,7 +37,7 @@ from airflow.api_fastapi.core_api.routes.public.dags import dags_router from airflow.api_fastapi.core_api.routes.public.event_logs import event_logs_router from airflow.api_fastapi.core_api.routes.public.extra_links import extra_links_router -from airflow.api_fastapi.core_api.routes.public.hitl import hitl_router +from airflow.api_fastapi.core_api.routes.public.hitl import task_instances_hitl_router from airflow.api_fastapi.core_api.routes.public.import_error import import_error_router from airflow.api_fastapi.core_api.routes.public.job import job_router from airflow.api_fastapi.core_api.routes.public.log import task_instances_log_router @@ -84,7 +84,7 @@ authenticated_router.include_router(dag_parsing_router) authenticated_router.include_router(dag_tags_router) authenticated_router.include_router(dag_versions_router) -authenticated_router.include_router(hitl_router) +authenticated_router.include_router(task_instances_hitl_router) # Include authenticated router in public router diff --git a/airflow-core/src/airflow/api_fastapi/core_api/routes/public/hitl.py b/airflow-core/src/airflow/api_fastapi/core_api/routes/public/hitl.py index c444a759ef35c..60d9f99fab953 100644 --- a/airflow-core/src/airflow/api_fastapi/core_api/routes/public/hitl.py +++ b/airflow-core/src/airflow/api_fastapi/core_api/routes/public/hitl.py @@ -28,9 +28,7 @@ from airflow.api_fastapi.common.db.common import SessionDep, paginated_select from airflow.api_fastapi.common.parameters import ( QueryHITLDetailBodySearch, - QueryHITLDetailDagIdFilter, QueryHITLDetailDagIdPatternSearch, - QueryHITLDetailDagRunIdFilter, QueryHITLDetailRespondedUserIdFilter, QueryHITLDetailRespondedUserNameFilter, QueryHITLDetailResponseReceivedFilter, @@ -56,7 +54,11 @@ from airflow.models.hitl import HITLDetail as HITLDetailModel, HITLUser from airflow.models.taskinstance import TaskInstance as TI -hitl_router = AirflowRouter(tags=["HumanInTheLoop"], prefix="/hitlDetails") +task_instances_hitl_router = AirflowRouter( + tags=["Task Instance"], + prefix="/dags/{dag_id}/dagRuns/{dag_run_id}", +) +task_instance_hitl_path = "/taskInstances/{task_id}/{map_index}/hitlDetails" log = structlog.get_logger(__name__) @@ -100,8 +102,8 @@ def _get_task_instance_with_hitl_detail( return task_instance -@hitl_router.patch( - "/{dag_id}/{dag_run_id}/{task_id}", +@task_instances_hitl_router.patch( + task_instance_hitl_path, responses=create_openapi_http_exception_doc( [ status.HTTP_403_FORBIDDEN, @@ -165,8 +167,8 @@ def update_hitl_detail( return HITLDetailResponse.model_validate(hitl_detail_model) -@hitl_router.get( - "/{dag_id}/{dag_run_id}/{task_id}", +@task_instances_hitl_router.get( + task_instance_hitl_path, status_code=status.HTTP_200_OK, responses=create_openapi_http_exception_doc([status.HTTP_404_NOT_FOUND]), dependencies=[Depends(requires_access_dag(method="GET", access_entity=DagAccessEntity.HITL_DETAIL))], @@ -189,12 +191,14 @@ def get_hitl_detail( return task_instance.hitl_detail -@hitl_router.get( - "/", +@task_instances_hitl_router.get( + "/hitlDetails", status_code=status.HTTP_200_OK, dependencies=[Depends(requires_access_dag(method="GET", access_entity=DagAccessEntity.HITL_DETAIL))], ) def get_hitl_details( + dag_id: str, + dag_run_id: str, limit: QueryLimit, offset: QueryOffset, order_by: Annotated[ @@ -220,9 +224,7 @@ def get_hitl_details( session: SessionDep, # ti related filter readable_ti_filter: ReadableTIFilterDep, - dag_id: QueryHITLDetailDagIdFilter, dag_id_pattern: QueryHITLDetailDagIdPatternSearch, - dag_run_id: QueryHITLDetailDagRunIdFilter, task_id: QueryHITLDetailTaskIdFilter, task_id_pattern: QueryHITLDetailTaskIdPatternSearch, ti_state: QueryTIStateFilter, @@ -244,14 +246,16 @@ def get_hitl_details( ) ) ) + if dag_id != "~": + query = query.where(TI.dag_id == dag_id) + if dag_run_id != "~": + query = query.where(TI.run_id == dag_run_id) hitl_detail_select, total_entries = paginated_select( statement=query, filters=[ # ti related filter readable_ti_filter, - dag_id, dag_id_pattern, - dag_run_id, task_id, task_id_pattern, ti_state, 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 5b4eb43217ccf..6e9f3f4a04b3f 100644 --- a/airflow-core/src/airflow/ui/openapi-gen/queries/common.ts +++ b/airflow-core/src/airflow/ui/openapi-gen/queries/common.ts @@ -1,7 +1,7 @@ // generated with @7nohe/openapi-react-query-codegen@1.6.2 import { UseQueryResult } from "@tanstack/react-query"; -import { AssetService, AuthLinksService, BackfillService, CalendarService, ConfigService, ConnectionService, DagParsingService, DagReportService, DagRunService, DagService, DagSourceService, DagStatsService, DagVersionService, DagWarningService, DashboardService, DependenciesService, EventLogService, ExperimentalService, ExtraLinksService, GridService, HumanInTheLoopService, ImportErrorService, JobService, LoginService, MonitorService, PluginService, PoolService, ProviderService, StructureService, TaskInstanceService, TaskService, VariableService, VersionService, XcomService } from "../requests/services.gen"; +import { AssetService, AuthLinksService, BackfillService, CalendarService, ConfigService, ConnectionService, DagParsingService, DagReportService, DagRunService, DagService, DagSourceService, DagStatsService, DagVersionService, DagWarningService, DashboardService, DependenciesService, EventLogService, ExperimentalService, ExtraLinksService, GridService, ImportErrorService, JobService, LoginService, MonitorService, PluginService, PoolService, ProviderService, StructureService, TaskInstanceService, TaskService, VariableService, VersionService, XcomService } from "../requests/services.gen"; import { DagRunState, DagWarningType } from "../requests/types.gen"; export type AssetServiceGetAssetsDefaultResponse = Awaited>; export type AssetServiceGetAssetsQueryResult = UseQueryResult; @@ -553,6 +553,34 @@ export const UseTaskInstanceServiceGetExternalLogUrlKeyFn = ({ dagId, dagRunId, taskId: string; tryNumber: number; }, queryKey?: Array) => [useTaskInstanceServiceGetExternalLogUrlKey, ...(queryKey ?? [{ dagId, dagRunId, mapIndex, taskId, tryNumber }])]; +export type TaskInstanceServiceGetHitlDetailDefaultResponse = Awaited>; +export type TaskInstanceServiceGetHitlDetailQueryResult = UseQueryResult; +export const useTaskInstanceServiceGetHitlDetailKey = "TaskInstanceServiceGetHitlDetail"; +export const UseTaskInstanceServiceGetHitlDetailKeyFn = ({ dagId, dagRunId, mapIndex, taskId }: { + dagId: string; + dagRunId: string; + mapIndex: number; + taskId: string; +}, queryKey?: Array) => [useTaskInstanceServiceGetHitlDetailKey, ...(queryKey ?? [{ dagId, dagRunId, mapIndex, taskId }])]; +export type TaskInstanceServiceGetHitlDetailsDefaultResponse = Awaited>; +export type TaskInstanceServiceGetHitlDetailsQueryResult = UseQueryResult; +export const useTaskInstanceServiceGetHitlDetailsKey = "TaskInstanceServiceGetHitlDetails"; +export const UseTaskInstanceServiceGetHitlDetailsKeyFn = ({ bodySearch, dagId, dagIdPattern, dagRunId, limit, offset, orderBy, respondedByUserId, respondedByUserName, responseReceived, state, subjectSearch, taskId, taskIdPattern }: { + bodySearch?: string; + dagId: string; + dagIdPattern?: string; + dagRunId: string; + limit?: number; + offset?: number; + orderBy?: string[]; + respondedByUserId?: string[]; + respondedByUserName?: string[]; + responseReceived?: boolean; + state?: string[]; + subjectSearch?: string; + taskId?: string; + taskIdPattern?: string; +}, queryKey?: Array) => [useTaskInstanceServiceGetHitlDetailsKey, ...(queryKey ?? [{ bodySearch, dagId, dagIdPattern, dagRunId, limit, offset, orderBy, respondedByUserId, respondedByUserName, responseReceived, state, subjectSearch, taskId, taskIdPattern }])]; export type ImportErrorServiceGetImportErrorDefaultResponse = Awaited>; export type ImportErrorServiceGetImportErrorQueryResult = UseQueryResult; export const useImportErrorServiceGetImportErrorKey = "ImportErrorServiceGetImportError"; @@ -706,34 +734,6 @@ export const UseDagVersionServiceGetDagVersionsKeyFn = ({ bundleName, bundleVers orderBy?: string[]; versionNumber?: number; }, queryKey?: Array) => [useDagVersionServiceGetDagVersionsKey, ...(queryKey ?? [{ bundleName, bundleVersion, dagId, limit, offset, orderBy, versionNumber }])]; -export type HumanInTheLoopServiceGetHitlDetailDefaultResponse = Awaited>; -export type HumanInTheLoopServiceGetHitlDetailQueryResult = UseQueryResult; -export const useHumanInTheLoopServiceGetHitlDetailKey = "HumanInTheLoopServiceGetHitlDetail"; -export const UseHumanInTheLoopServiceGetHitlDetailKeyFn = ({ dagId, dagRunId, mapIndex, taskId }: { - dagId: string; - dagRunId: string; - mapIndex?: number; - taskId: string; -}, queryKey?: Array) => [useHumanInTheLoopServiceGetHitlDetailKey, ...(queryKey ?? [{ dagId, dagRunId, mapIndex, taskId }])]; -export type HumanInTheLoopServiceGetHitlDetailsDefaultResponse = Awaited>; -export type HumanInTheLoopServiceGetHitlDetailsQueryResult = UseQueryResult; -export const useHumanInTheLoopServiceGetHitlDetailsKey = "HumanInTheLoopServiceGetHitlDetails"; -export const UseHumanInTheLoopServiceGetHitlDetailsKeyFn = ({ bodySearch, dagId, dagIdPattern, dagRunId, limit, offset, orderBy, respondedByUserId, respondedByUserName, responseReceived, state, subjectSearch, taskId, taskIdPattern }: { - bodySearch?: string; - dagId?: string; - dagIdPattern?: string; - dagRunId?: string; - limit?: number; - offset?: number; - orderBy?: string[]; - respondedByUserId?: string[]; - respondedByUserName?: string[]; - responseReceived?: boolean; - state?: string[]; - subjectSearch?: string; - taskId?: string; - taskIdPattern?: string; -} = {}, queryKey?: Array) => [useHumanInTheLoopServiceGetHitlDetailsKey, ...(queryKey ?? [{ bodySearch, dagId, dagIdPattern, dagRunId, limit, offset, orderBy, respondedByUserId, respondedByUserName, responseReceived, state, subjectSearch, taskId, taskIdPattern }])]; export type MonitorServiceGetHealthDefaultResponse = Awaited>; export type MonitorServiceGetHealthQueryResult = UseQueryResult; export const useMonitorServiceGetHealthKey = "MonitorServiceGetHealth"; @@ -871,12 +871,12 @@ export type TaskInstanceServicePatchTaskInstanceByMapIndexMutationResult = Await export type TaskInstanceServiceBulkTaskInstancesMutationResult = Awaited>; export type TaskInstanceServicePatchTaskInstanceDryRunByMapIndexMutationResult = Awaited>; export type TaskInstanceServicePatchTaskInstanceDryRunMutationResult = Awaited>; +export type TaskInstanceServiceUpdateHitlDetailMutationResult = Awaited>; export type PoolServicePatchPoolMutationResult = Awaited>; export type PoolServiceBulkPoolsMutationResult = Awaited>; export type XcomServiceUpdateXcomEntryMutationResult = Awaited>; export type VariableServicePatchVariableMutationResult = Awaited>; export type VariableServiceBulkVariablesMutationResult = Awaited>; -export type HumanInTheLoopServiceUpdateHitlDetailMutationResult = Awaited>; export type AssetServiceDeleteAssetQueuedEventsMutationResult = Awaited>; export type AssetServiceDeleteDagAssetQueuedEventsMutationResult = Awaited>; export type AssetServiceDeleteDagAssetQueuedEventMutationResult = Awaited>; diff --git a/airflow-core/src/airflow/ui/openapi-gen/queries/ensureQueryData.ts b/airflow-core/src/airflow/ui/openapi-gen/queries/ensureQueryData.ts index f5ce48703867c..2559b949cfaf1 100644 --- a/airflow-core/src/airflow/ui/openapi-gen/queries/ensureQueryData.ts +++ b/airflow-core/src/airflow/ui/openapi-gen/queries/ensureQueryData.ts @@ -1,7 +1,7 @@ // generated with @7nohe/openapi-react-query-codegen@1.6.2 import { type QueryClient } from "@tanstack/react-query"; -import { AssetService, AuthLinksService, BackfillService, CalendarService, ConfigService, ConnectionService, DagReportService, DagRunService, DagService, DagSourceService, DagStatsService, DagVersionService, DagWarningService, DashboardService, DependenciesService, EventLogService, ExperimentalService, ExtraLinksService, GridService, HumanInTheLoopService, ImportErrorService, JobService, LoginService, MonitorService, PluginService, PoolService, ProviderService, StructureService, TaskInstanceService, TaskService, VariableService, VersionService, XcomService } from "../requests/services.gen"; +import { AssetService, AuthLinksService, BackfillService, CalendarService, ConfigService, ConnectionService, DagReportService, DagRunService, DagService, DagSourceService, DagStatsService, DagVersionService, DagWarningService, DashboardService, DependenciesService, EventLogService, ExperimentalService, ExtraLinksService, GridService, ImportErrorService, JobService, LoginService, MonitorService, PluginService, PoolService, ProviderService, StructureService, TaskInstanceService, TaskService, VariableService, VersionService, XcomService } from "../requests/services.gen"; import { DagRunState, DagWarningType } from "../requests/types.gen"; import * as Common from "./common"; /** @@ -1051,6 +1051,60 @@ export const ensureUseTaskInstanceServiceGetExternalLogUrlData = (queryClient: Q tryNumber: number; }) => queryClient.ensureQueryData({ queryKey: Common.UseTaskInstanceServiceGetExternalLogUrlKeyFn({ dagId, dagRunId, mapIndex, taskId, tryNumber }), queryFn: () => TaskInstanceService.getExternalLogUrl({ dagId, dagRunId, mapIndex, taskId, tryNumber }) }); /** +* Get Hitl Detail +* Get a Human-in-the-loop detail of a specific task instance. +* @param data The data for the request. +* @param data.dagId +* @param data.dagRunId +* @param data.taskId +* @param data.mapIndex +* @returns HITLDetail Successful Response +* @throws ApiError +*/ +export const ensureUseTaskInstanceServiceGetHitlDetailData = (queryClient: QueryClient, { dagId, dagRunId, mapIndex, taskId }: { + dagId: string; + dagRunId: string; + mapIndex: number; + taskId: string; +}) => queryClient.ensureQueryData({ queryKey: Common.UseTaskInstanceServiceGetHitlDetailKeyFn({ dagId, dagRunId, mapIndex, taskId }), queryFn: () => TaskInstanceService.getHitlDetail({ dagId, dagRunId, mapIndex, taskId }) }); +/** +* Get Hitl Details +* Get Human-in-the-loop details. +* @param data The data for the request. +* @param data.dagId +* @param data.dagRunId +* @param data.limit +* @param data.offset +* @param data.orderBy +* @param data.dagIdPattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. +* @param data.taskId +* @param data.taskIdPattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. +* @param data.state +* @param data.responseReceived +* @param data.respondedByUserId +* @param data.respondedByUserName +* @param data.subjectSearch SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. +* @param data.bodySearch SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. +* @returns HITLDetailCollection Successful Response +* @throws ApiError +*/ +export const ensureUseTaskInstanceServiceGetHitlDetailsData = (queryClient: QueryClient, { bodySearch, dagId, dagIdPattern, dagRunId, limit, offset, orderBy, respondedByUserId, respondedByUserName, responseReceived, state, subjectSearch, taskId, taskIdPattern }: { + bodySearch?: string; + dagId: string; + dagIdPattern?: string; + dagRunId: string; + limit?: number; + offset?: number; + orderBy?: string[]; + respondedByUserId?: string[]; + respondedByUserName?: string[]; + responseReceived?: boolean; + state?: string[]; + subjectSearch?: string; + taskId?: string; + taskIdPattern?: string; +}) => queryClient.ensureQueryData({ queryKey: Common.UseTaskInstanceServiceGetHitlDetailsKeyFn({ bodySearch, dagId, dagIdPattern, dagRunId, limit, offset, orderBy, respondedByUserId, respondedByUserName, responseReceived, state, subjectSearch, taskId, taskIdPattern }), queryFn: () => TaskInstanceService.getHitlDetails({ bodySearch, dagId, dagIdPattern, dagRunId, limit, offset, orderBy, respondedByUserId, respondedByUserName, responseReceived, state, subjectSearch, taskId, taskIdPattern }) }); +/** * Get Import Error * Get an import error. * @param data The data for the request. @@ -1343,60 +1397,6 @@ export const ensureUseDagVersionServiceGetDagVersionsData = (queryClient: QueryC versionNumber?: number; }) => queryClient.ensureQueryData({ queryKey: Common.UseDagVersionServiceGetDagVersionsKeyFn({ bundleName, bundleVersion, dagId, limit, offset, orderBy, versionNumber }), queryFn: () => DagVersionService.getDagVersions({ bundleName, bundleVersion, dagId, limit, offset, orderBy, versionNumber }) }); /** -* Get Hitl Detail -* Get a Human-in-the-loop detail of a specific task instance. -* @param data The data for the request. -* @param data.dagId -* @param data.dagRunId -* @param data.taskId -* @param data.mapIndex -* @returns HITLDetail Successful Response -* @throws ApiError -*/ -export const ensureUseHumanInTheLoopServiceGetHitlDetailData = (queryClient: QueryClient, { dagId, dagRunId, mapIndex, taskId }: { - dagId: string; - dagRunId: string; - mapIndex?: number; - taskId: string; -}) => queryClient.ensureQueryData({ queryKey: Common.UseHumanInTheLoopServiceGetHitlDetailKeyFn({ dagId, dagRunId, mapIndex, taskId }), queryFn: () => HumanInTheLoopService.getHitlDetail({ dagId, dagRunId, mapIndex, taskId }) }); -/** -* Get Hitl Details -* Get Human-in-the-loop details. -* @param data The data for the request. -* @param data.limit -* @param data.offset -* @param data.orderBy -* @param data.dagId -* @param data.dagIdPattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. -* @param data.dagRunId -* @param data.taskId -* @param data.taskIdPattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. -* @param data.state -* @param data.responseReceived -* @param data.respondedByUserId -* @param data.respondedByUserName -* @param data.subjectSearch SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. -* @param data.bodySearch SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. -* @returns HITLDetailCollection Successful Response -* @throws ApiError -*/ -export const ensureUseHumanInTheLoopServiceGetHitlDetailsData = (queryClient: QueryClient, { bodySearch, dagId, dagIdPattern, dagRunId, limit, offset, orderBy, respondedByUserId, respondedByUserName, responseReceived, state, subjectSearch, taskId, taskIdPattern }: { - bodySearch?: string; - dagId?: string; - dagIdPattern?: string; - dagRunId?: string; - limit?: number; - offset?: number; - orderBy?: string[]; - respondedByUserId?: string[]; - respondedByUserName?: string[]; - responseReceived?: boolean; - state?: string[]; - subjectSearch?: string; - taskId?: string; - taskIdPattern?: string; -} = {}) => queryClient.ensureQueryData({ queryKey: Common.UseHumanInTheLoopServiceGetHitlDetailsKeyFn({ bodySearch, dagId, dagIdPattern, dagRunId, limit, offset, orderBy, respondedByUserId, respondedByUserName, responseReceived, state, subjectSearch, taskId, taskIdPattern }), queryFn: () => HumanInTheLoopService.getHitlDetails({ bodySearch, dagId, dagIdPattern, dagRunId, limit, offset, orderBy, respondedByUserId, respondedByUserName, responseReceived, state, subjectSearch, taskId, taskIdPattern }) }); -/** * Get Health * @returns HealthInfoResponse Successful Response * @throws ApiError 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 18257b1863747..76cdc9313a74e 100644 --- a/airflow-core/src/airflow/ui/openapi-gen/queries/prefetch.ts +++ b/airflow-core/src/airflow/ui/openapi-gen/queries/prefetch.ts @@ -1,7 +1,7 @@ // generated with @7nohe/openapi-react-query-codegen@1.6.2 import { type QueryClient } from "@tanstack/react-query"; -import { AssetService, AuthLinksService, BackfillService, CalendarService, ConfigService, ConnectionService, DagReportService, DagRunService, DagService, DagSourceService, DagStatsService, DagVersionService, DagWarningService, DashboardService, DependenciesService, EventLogService, ExperimentalService, ExtraLinksService, GridService, HumanInTheLoopService, ImportErrorService, JobService, LoginService, MonitorService, PluginService, PoolService, ProviderService, StructureService, TaskInstanceService, TaskService, VariableService, VersionService, XcomService } from "../requests/services.gen"; +import { AssetService, AuthLinksService, BackfillService, CalendarService, ConfigService, ConnectionService, DagReportService, DagRunService, DagService, DagSourceService, DagStatsService, DagVersionService, DagWarningService, DashboardService, DependenciesService, EventLogService, ExperimentalService, ExtraLinksService, GridService, ImportErrorService, JobService, LoginService, MonitorService, PluginService, PoolService, ProviderService, StructureService, TaskInstanceService, TaskService, VariableService, VersionService, XcomService } from "../requests/services.gen"; import { DagRunState, DagWarningType } from "../requests/types.gen"; import * as Common from "./common"; /** @@ -1051,6 +1051,60 @@ export const prefetchUseTaskInstanceServiceGetExternalLogUrl = (queryClient: Que tryNumber: number; }) => queryClient.prefetchQuery({ queryKey: Common.UseTaskInstanceServiceGetExternalLogUrlKeyFn({ dagId, dagRunId, mapIndex, taskId, tryNumber }), queryFn: () => TaskInstanceService.getExternalLogUrl({ dagId, dagRunId, mapIndex, taskId, tryNumber }) }); /** +* Get Hitl Detail +* Get a Human-in-the-loop detail of a specific task instance. +* @param data The data for the request. +* @param data.dagId +* @param data.dagRunId +* @param data.taskId +* @param data.mapIndex +* @returns HITLDetail Successful Response +* @throws ApiError +*/ +export const prefetchUseTaskInstanceServiceGetHitlDetail = (queryClient: QueryClient, { dagId, dagRunId, mapIndex, taskId }: { + dagId: string; + dagRunId: string; + mapIndex: number; + taskId: string; +}) => queryClient.prefetchQuery({ queryKey: Common.UseTaskInstanceServiceGetHitlDetailKeyFn({ dagId, dagRunId, mapIndex, taskId }), queryFn: () => TaskInstanceService.getHitlDetail({ dagId, dagRunId, mapIndex, taskId }) }); +/** +* Get Hitl Details +* Get Human-in-the-loop details. +* @param data The data for the request. +* @param data.dagId +* @param data.dagRunId +* @param data.limit +* @param data.offset +* @param data.orderBy +* @param data.dagIdPattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. +* @param data.taskId +* @param data.taskIdPattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. +* @param data.state +* @param data.responseReceived +* @param data.respondedByUserId +* @param data.respondedByUserName +* @param data.subjectSearch SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. +* @param data.bodySearch SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. +* @returns HITLDetailCollection Successful Response +* @throws ApiError +*/ +export const prefetchUseTaskInstanceServiceGetHitlDetails = (queryClient: QueryClient, { bodySearch, dagId, dagIdPattern, dagRunId, limit, offset, orderBy, respondedByUserId, respondedByUserName, responseReceived, state, subjectSearch, taskId, taskIdPattern }: { + bodySearch?: string; + dagId: string; + dagIdPattern?: string; + dagRunId: string; + limit?: number; + offset?: number; + orderBy?: string[]; + respondedByUserId?: string[]; + respondedByUserName?: string[]; + responseReceived?: boolean; + state?: string[]; + subjectSearch?: string; + taskId?: string; + taskIdPattern?: string; +}) => queryClient.prefetchQuery({ queryKey: Common.UseTaskInstanceServiceGetHitlDetailsKeyFn({ bodySearch, dagId, dagIdPattern, dagRunId, limit, offset, orderBy, respondedByUserId, respondedByUserName, responseReceived, state, subjectSearch, taskId, taskIdPattern }), queryFn: () => TaskInstanceService.getHitlDetails({ bodySearch, dagId, dagIdPattern, dagRunId, limit, offset, orderBy, respondedByUserId, respondedByUserName, responseReceived, state, subjectSearch, taskId, taskIdPattern }) }); +/** * Get Import Error * Get an import error. * @param data The data for the request. @@ -1343,60 +1397,6 @@ export const prefetchUseDagVersionServiceGetDagVersions = (queryClient: QueryCli versionNumber?: number; }) => queryClient.prefetchQuery({ queryKey: Common.UseDagVersionServiceGetDagVersionsKeyFn({ bundleName, bundleVersion, dagId, limit, offset, orderBy, versionNumber }), queryFn: () => DagVersionService.getDagVersions({ bundleName, bundleVersion, dagId, limit, offset, orderBy, versionNumber }) }); /** -* Get Hitl Detail -* Get a Human-in-the-loop detail of a specific task instance. -* @param data The data for the request. -* @param data.dagId -* @param data.dagRunId -* @param data.taskId -* @param data.mapIndex -* @returns HITLDetail Successful Response -* @throws ApiError -*/ -export const prefetchUseHumanInTheLoopServiceGetHitlDetail = (queryClient: QueryClient, { dagId, dagRunId, mapIndex, taskId }: { - dagId: string; - dagRunId: string; - mapIndex?: number; - taskId: string; -}) => queryClient.prefetchQuery({ queryKey: Common.UseHumanInTheLoopServiceGetHitlDetailKeyFn({ dagId, dagRunId, mapIndex, taskId }), queryFn: () => HumanInTheLoopService.getHitlDetail({ dagId, dagRunId, mapIndex, taskId }) }); -/** -* Get Hitl Details -* Get Human-in-the-loop details. -* @param data The data for the request. -* @param data.limit -* @param data.offset -* @param data.orderBy -* @param data.dagId -* @param data.dagIdPattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. -* @param data.dagRunId -* @param data.taskId -* @param data.taskIdPattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. -* @param data.state -* @param data.responseReceived -* @param data.respondedByUserId -* @param data.respondedByUserName -* @param data.subjectSearch SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. -* @param data.bodySearch SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. -* @returns HITLDetailCollection Successful Response -* @throws ApiError -*/ -export const prefetchUseHumanInTheLoopServiceGetHitlDetails = (queryClient: QueryClient, { bodySearch, dagId, dagIdPattern, dagRunId, limit, offset, orderBy, respondedByUserId, respondedByUserName, responseReceived, state, subjectSearch, taskId, taskIdPattern }: { - bodySearch?: string; - dagId?: string; - dagIdPattern?: string; - dagRunId?: string; - limit?: number; - offset?: number; - orderBy?: string[]; - respondedByUserId?: string[]; - respondedByUserName?: string[]; - responseReceived?: boolean; - state?: string[]; - subjectSearch?: string; - taskId?: string; - taskIdPattern?: string; -} = {}) => queryClient.prefetchQuery({ queryKey: Common.UseHumanInTheLoopServiceGetHitlDetailsKeyFn({ bodySearch, dagId, dagIdPattern, dagRunId, limit, offset, orderBy, respondedByUserId, respondedByUserName, responseReceived, state, subjectSearch, taskId, taskIdPattern }), queryFn: () => HumanInTheLoopService.getHitlDetails({ bodySearch, dagId, dagIdPattern, dagRunId, limit, offset, orderBy, respondedByUserId, respondedByUserName, responseReceived, state, subjectSearch, taskId, taskIdPattern }) }); -/** * Get Health * @returns HealthInfoResponse Successful Response * @throws ApiError 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 2328d79cd879d..541f2ee0277dd 100644 --- a/airflow-core/src/airflow/ui/openapi-gen/queries/queries.ts +++ b/airflow-core/src/airflow/ui/openapi-gen/queries/queries.ts @@ -1,7 +1,7 @@ // generated with @7nohe/openapi-react-query-codegen@1.6.2 import { UseMutationOptions, UseQueryOptions, useMutation, useQuery } from "@tanstack/react-query"; -import { AssetService, AuthLinksService, BackfillService, CalendarService, ConfigService, ConnectionService, DagParsingService, DagReportService, DagRunService, DagService, DagSourceService, DagStatsService, DagVersionService, DagWarningService, DashboardService, DependenciesService, EventLogService, ExperimentalService, ExtraLinksService, GridService, HumanInTheLoopService, ImportErrorService, JobService, LoginService, MonitorService, PluginService, PoolService, ProviderService, StructureService, TaskInstanceService, TaskService, VariableService, VersionService, XcomService } from "../requests/services.gen"; +import { AssetService, AuthLinksService, BackfillService, CalendarService, ConfigService, ConnectionService, DagParsingService, DagReportService, DagRunService, DagService, DagSourceService, DagStatsService, DagVersionService, DagWarningService, DashboardService, DependenciesService, EventLogService, ExperimentalService, ExtraLinksService, GridService, ImportErrorService, JobService, LoginService, MonitorService, PluginService, PoolService, ProviderService, StructureService, TaskInstanceService, TaskService, VariableService, VersionService, XcomService } from "../requests/services.gen"; import { BackfillPostBody, BulkBody_BulkTaskInstanceBody_, BulkBody_ConnectionBody_, BulkBody_PoolBody_, BulkBody_VariableBody_, ClearTaskInstancesBody, ConnectionBody, CreateAssetEventsBody, DAGPatchBody, DAGRunClearBody, DAGRunPatchBody, DAGRunsBatchBody, DagRunState, DagWarningType, PatchTaskInstanceBody, PoolBody, PoolPatchBody, TaskInstancesBatchBody, TriggerDAGRunPostBody, UpdateHITLDetailPayload, VariableBody, XComCreateBody, XComUpdateBody } from "../requests/types.gen"; import * as Common from "./common"; /** @@ -1051,6 +1051,60 @@ export const useTaskInstanceServiceGetExternalLogUrl = , "queryKey" | "queryFn">) => useQuery({ queryKey: Common.UseTaskInstanceServiceGetExternalLogUrlKeyFn({ dagId, dagRunId, mapIndex, taskId, tryNumber }, queryKey), queryFn: () => TaskInstanceService.getExternalLogUrl({ dagId, dagRunId, mapIndex, taskId, tryNumber }) as TData, ...options }); /** +* Get Hitl Detail +* Get a Human-in-the-loop detail of a specific task instance. +* @param data The data for the request. +* @param data.dagId +* @param data.dagRunId +* @param data.taskId +* @param data.mapIndex +* @returns HITLDetail Successful Response +* @throws ApiError +*/ +export const useTaskInstanceServiceGetHitlDetail = = unknown[]>({ dagId, dagRunId, mapIndex, taskId }: { + dagId: string; + dagRunId: string; + mapIndex: number; + taskId: string; +}, queryKey?: TQueryKey, options?: Omit, "queryKey" | "queryFn">) => useQuery({ queryKey: Common.UseTaskInstanceServiceGetHitlDetailKeyFn({ dagId, dagRunId, mapIndex, taskId }, queryKey), queryFn: () => TaskInstanceService.getHitlDetail({ dagId, dagRunId, mapIndex, taskId }) as TData, ...options }); +/** +* Get Hitl Details +* Get Human-in-the-loop details. +* @param data The data for the request. +* @param data.dagId +* @param data.dagRunId +* @param data.limit +* @param data.offset +* @param data.orderBy +* @param data.dagIdPattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. +* @param data.taskId +* @param data.taskIdPattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. +* @param data.state +* @param data.responseReceived +* @param data.respondedByUserId +* @param data.respondedByUserName +* @param data.subjectSearch SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. +* @param data.bodySearch SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. +* @returns HITLDetailCollection Successful Response +* @throws ApiError +*/ +export const useTaskInstanceServiceGetHitlDetails = = unknown[]>({ bodySearch, dagId, dagIdPattern, dagRunId, limit, offset, orderBy, respondedByUserId, respondedByUserName, responseReceived, state, subjectSearch, taskId, taskIdPattern }: { + bodySearch?: string; + dagId: string; + dagIdPattern?: string; + dagRunId: string; + limit?: number; + offset?: number; + orderBy?: string[]; + respondedByUserId?: string[]; + respondedByUserName?: string[]; + responseReceived?: boolean; + state?: string[]; + subjectSearch?: string; + taskId?: string; + taskIdPattern?: string; +}, queryKey?: TQueryKey, options?: Omit, "queryKey" | "queryFn">) => useQuery({ queryKey: Common.UseTaskInstanceServiceGetHitlDetailsKeyFn({ bodySearch, dagId, dagIdPattern, dagRunId, limit, offset, orderBy, respondedByUserId, respondedByUserName, responseReceived, state, subjectSearch, taskId, taskIdPattern }, queryKey), queryFn: () => TaskInstanceService.getHitlDetails({ bodySearch, dagId, dagIdPattern, dagRunId, limit, offset, orderBy, respondedByUserId, respondedByUserName, responseReceived, state, subjectSearch, taskId, taskIdPattern }) as TData, ...options }); +/** * Get Import Error * Get an import error. * @param data The data for the request. @@ -1343,60 +1397,6 @@ export const useDagVersionServiceGetDagVersions = , "queryKey" | "queryFn">) => useQuery({ queryKey: Common.UseDagVersionServiceGetDagVersionsKeyFn({ bundleName, bundleVersion, dagId, limit, offset, orderBy, versionNumber }, queryKey), queryFn: () => DagVersionService.getDagVersions({ bundleName, bundleVersion, dagId, limit, offset, orderBy, versionNumber }) as TData, ...options }); /** -* Get Hitl Detail -* Get a Human-in-the-loop detail of a specific task instance. -* @param data The data for the request. -* @param data.dagId -* @param data.dagRunId -* @param data.taskId -* @param data.mapIndex -* @returns HITLDetail Successful Response -* @throws ApiError -*/ -export const useHumanInTheLoopServiceGetHitlDetail = = unknown[]>({ dagId, dagRunId, mapIndex, taskId }: { - dagId: string; - dagRunId: string; - mapIndex?: number; - taskId: string; -}, queryKey?: TQueryKey, options?: Omit, "queryKey" | "queryFn">) => useQuery({ queryKey: Common.UseHumanInTheLoopServiceGetHitlDetailKeyFn({ dagId, dagRunId, mapIndex, taskId }, queryKey), queryFn: () => HumanInTheLoopService.getHitlDetail({ dagId, dagRunId, mapIndex, taskId }) as TData, ...options }); -/** -* Get Hitl Details -* Get Human-in-the-loop details. -* @param data The data for the request. -* @param data.limit -* @param data.offset -* @param data.orderBy -* @param data.dagId -* @param data.dagIdPattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. -* @param data.dagRunId -* @param data.taskId -* @param data.taskIdPattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. -* @param data.state -* @param data.responseReceived -* @param data.respondedByUserId -* @param data.respondedByUserName -* @param data.subjectSearch SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. -* @param data.bodySearch SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. -* @returns HITLDetailCollection Successful Response -* @throws ApiError -*/ -export const useHumanInTheLoopServiceGetHitlDetails = = unknown[]>({ bodySearch, dagId, dagIdPattern, dagRunId, limit, offset, orderBy, respondedByUserId, respondedByUserName, responseReceived, state, subjectSearch, taskId, taskIdPattern }: { - bodySearch?: string; - dagId?: string; - dagIdPattern?: string; - dagRunId?: string; - limit?: number; - offset?: number; - orderBy?: string[]; - respondedByUserId?: string[]; - respondedByUserName?: string[]; - responseReceived?: boolean; - state?: string[]; - subjectSearch?: string; - taskId?: string; - taskIdPattern?: string; -} = {}, queryKey?: TQueryKey, options?: Omit, "queryKey" | "queryFn">) => useQuery({ queryKey: Common.UseHumanInTheLoopServiceGetHitlDetailsKeyFn({ bodySearch, dagId, dagIdPattern, dagRunId, limit, offset, orderBy, respondedByUserId, respondedByUserName, responseReceived, state, subjectSearch, taskId, taskIdPattern }, queryKey), queryFn: () => HumanInTheLoopService.getHitlDetails({ bodySearch, dagId, dagIdPattern, dagRunId, limit, offset, orderBy, respondedByUserId, respondedByUserName, responseReceived, state, subjectSearch, taskId, taskIdPattern }) as TData, ...options }); -/** * Get Health * @returns HealthInfoResponse Successful Response * @throws ApiError @@ -2143,6 +2143,31 @@ export const useTaskInstanceServicePatchTaskInstanceDryRun = ({ mutationFn: ({ dagId, dagRunId, mapIndex, requestBody, taskId, updateMask }) => TaskInstanceService.patchTaskInstanceDryRun({ dagId, dagRunId, mapIndex, requestBody, taskId, updateMask }) as unknown as Promise, ...options }); /** +* Update Hitl Detail +* Update a Human-in-the-loop detail. +* @param data The data for the request. +* @param data.dagId +* @param data.dagRunId +* @param data.taskId +* @param data.mapIndex +* @param data.requestBody +* @returns HITLDetailResponse Successful Response +* @throws ApiError +*/ +export const useTaskInstanceServiceUpdateHitlDetail = (options?: Omit, "mutationFn">) => useMutation({ mutationFn: ({ dagId, dagRunId, mapIndex, requestBody, taskId }) => TaskInstanceService.updateHitlDetail({ dagId, dagRunId, mapIndex, requestBody, taskId }) as unknown as Promise, ...options }); +/** * Patch Pool * Update a Pool. * @param data The data for the request. @@ -2232,31 +2257,6 @@ export const useVariableServiceBulkVariables = ({ mutationFn: ({ requestBody }) => VariableService.bulkVariables({ requestBody }) as unknown as Promise, ...options }); /** -* Update Hitl Detail -* Update a Human-in-the-loop detail. -* @param data The data for the request. -* @param data.dagId -* @param data.dagRunId -* @param data.taskId -* @param data.requestBody -* @param data.mapIndex -* @returns HITLDetailResponse Successful Response -* @throws ApiError -*/ -export const useHumanInTheLoopServiceUpdateHitlDetail = (options?: Omit, "mutationFn">) => useMutation({ mutationFn: ({ dagId, dagRunId, mapIndex, requestBody, taskId }) => HumanInTheLoopService.updateHitlDetail({ dagId, dagRunId, mapIndex, requestBody, taskId }) as unknown as Promise, ...options }); -/** * Delete Asset Queued Events * Delete queued asset events for an asset. * @param data The data for the request. 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 4a2e25e606b5a..fe420fe4348c0 100644 --- a/airflow-core/src/airflow/ui/openapi-gen/queries/suspense.ts +++ b/airflow-core/src/airflow/ui/openapi-gen/queries/suspense.ts @@ -1,7 +1,7 @@ // generated with @7nohe/openapi-react-query-codegen@1.6.2 import { UseQueryOptions, useSuspenseQuery } from "@tanstack/react-query"; -import { AssetService, AuthLinksService, BackfillService, CalendarService, ConfigService, ConnectionService, DagReportService, DagRunService, DagService, DagSourceService, DagStatsService, DagVersionService, DagWarningService, DashboardService, DependenciesService, EventLogService, ExperimentalService, ExtraLinksService, GridService, HumanInTheLoopService, ImportErrorService, JobService, LoginService, MonitorService, PluginService, PoolService, ProviderService, StructureService, TaskInstanceService, TaskService, VariableService, VersionService, XcomService } from "../requests/services.gen"; +import { AssetService, AuthLinksService, BackfillService, CalendarService, ConfigService, ConnectionService, DagReportService, DagRunService, DagService, DagSourceService, DagStatsService, DagVersionService, DagWarningService, DashboardService, DependenciesService, EventLogService, ExperimentalService, ExtraLinksService, GridService, ImportErrorService, JobService, LoginService, MonitorService, PluginService, PoolService, ProviderService, StructureService, TaskInstanceService, TaskService, VariableService, VersionService, XcomService } from "../requests/services.gen"; import { DagRunState, DagWarningType } from "../requests/types.gen"; import * as Common from "./common"; /** @@ -1051,6 +1051,60 @@ export const useTaskInstanceServiceGetExternalLogUrlSuspense = , "queryKey" | "queryFn">) => useSuspenseQuery({ queryKey: Common.UseTaskInstanceServiceGetExternalLogUrlKeyFn({ dagId, dagRunId, mapIndex, taskId, tryNumber }, queryKey), queryFn: () => TaskInstanceService.getExternalLogUrl({ dagId, dagRunId, mapIndex, taskId, tryNumber }) as TData, ...options }); /** +* Get Hitl Detail +* Get a Human-in-the-loop detail of a specific task instance. +* @param data The data for the request. +* @param data.dagId +* @param data.dagRunId +* @param data.taskId +* @param data.mapIndex +* @returns HITLDetail Successful Response +* @throws ApiError +*/ +export const useTaskInstanceServiceGetHitlDetailSuspense = = unknown[]>({ dagId, dagRunId, mapIndex, taskId }: { + dagId: string; + dagRunId: string; + mapIndex: number; + taskId: string; +}, queryKey?: TQueryKey, options?: Omit, "queryKey" | "queryFn">) => useSuspenseQuery({ queryKey: Common.UseTaskInstanceServiceGetHitlDetailKeyFn({ dagId, dagRunId, mapIndex, taskId }, queryKey), queryFn: () => TaskInstanceService.getHitlDetail({ dagId, dagRunId, mapIndex, taskId }) as TData, ...options }); +/** +* Get Hitl Details +* Get Human-in-the-loop details. +* @param data The data for the request. +* @param data.dagId +* @param data.dagRunId +* @param data.limit +* @param data.offset +* @param data.orderBy +* @param data.dagIdPattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. +* @param data.taskId +* @param data.taskIdPattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. +* @param data.state +* @param data.responseReceived +* @param data.respondedByUserId +* @param data.respondedByUserName +* @param data.subjectSearch SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. +* @param data.bodySearch SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. +* @returns HITLDetailCollection Successful Response +* @throws ApiError +*/ +export const useTaskInstanceServiceGetHitlDetailsSuspense = = unknown[]>({ bodySearch, dagId, dagIdPattern, dagRunId, limit, offset, orderBy, respondedByUserId, respondedByUserName, responseReceived, state, subjectSearch, taskId, taskIdPattern }: { + bodySearch?: string; + dagId: string; + dagIdPattern?: string; + dagRunId: string; + limit?: number; + offset?: number; + orderBy?: string[]; + respondedByUserId?: string[]; + respondedByUserName?: string[]; + responseReceived?: boolean; + state?: string[]; + subjectSearch?: string; + taskId?: string; + taskIdPattern?: string; +}, queryKey?: TQueryKey, options?: Omit, "queryKey" | "queryFn">) => useSuspenseQuery({ queryKey: Common.UseTaskInstanceServiceGetHitlDetailsKeyFn({ bodySearch, dagId, dagIdPattern, dagRunId, limit, offset, orderBy, respondedByUserId, respondedByUserName, responseReceived, state, subjectSearch, taskId, taskIdPattern }, queryKey), queryFn: () => TaskInstanceService.getHitlDetails({ bodySearch, dagId, dagIdPattern, dagRunId, limit, offset, orderBy, respondedByUserId, respondedByUserName, responseReceived, state, subjectSearch, taskId, taskIdPattern }) as TData, ...options }); +/** * Get Import Error * Get an import error. * @param data The data for the request. @@ -1343,60 +1397,6 @@ export const useDagVersionServiceGetDagVersionsSuspense = , "queryKey" | "queryFn">) => useSuspenseQuery({ queryKey: Common.UseDagVersionServiceGetDagVersionsKeyFn({ bundleName, bundleVersion, dagId, limit, offset, orderBy, versionNumber }, queryKey), queryFn: () => DagVersionService.getDagVersions({ bundleName, bundleVersion, dagId, limit, offset, orderBy, versionNumber }) as TData, ...options }); /** -* Get Hitl Detail -* Get a Human-in-the-loop detail of a specific task instance. -* @param data The data for the request. -* @param data.dagId -* @param data.dagRunId -* @param data.taskId -* @param data.mapIndex -* @returns HITLDetail Successful Response -* @throws ApiError -*/ -export const useHumanInTheLoopServiceGetHitlDetailSuspense = = unknown[]>({ dagId, dagRunId, mapIndex, taskId }: { - dagId: string; - dagRunId: string; - mapIndex?: number; - taskId: string; -}, queryKey?: TQueryKey, options?: Omit, "queryKey" | "queryFn">) => useSuspenseQuery({ queryKey: Common.UseHumanInTheLoopServiceGetHitlDetailKeyFn({ dagId, dagRunId, mapIndex, taskId }, queryKey), queryFn: () => HumanInTheLoopService.getHitlDetail({ dagId, dagRunId, mapIndex, taskId }) as TData, ...options }); -/** -* Get Hitl Details -* Get Human-in-the-loop details. -* @param data The data for the request. -* @param data.limit -* @param data.offset -* @param data.orderBy -* @param data.dagId -* @param data.dagIdPattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. -* @param data.dagRunId -* @param data.taskId -* @param data.taskIdPattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. -* @param data.state -* @param data.responseReceived -* @param data.respondedByUserId -* @param data.respondedByUserName -* @param data.subjectSearch SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. -* @param data.bodySearch SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. -* @returns HITLDetailCollection Successful Response -* @throws ApiError -*/ -export const useHumanInTheLoopServiceGetHitlDetailsSuspense = = unknown[]>({ bodySearch, dagId, dagIdPattern, dagRunId, limit, offset, orderBy, respondedByUserId, respondedByUserName, responseReceived, state, subjectSearch, taskId, taskIdPattern }: { - bodySearch?: string; - dagId?: string; - dagIdPattern?: string; - dagRunId?: string; - limit?: number; - offset?: number; - orderBy?: string[]; - respondedByUserId?: string[]; - respondedByUserName?: string[]; - responseReceived?: boolean; - state?: string[]; - subjectSearch?: string; - taskId?: string; - taskIdPattern?: string; -} = {}, queryKey?: TQueryKey, options?: Omit, "queryKey" | "queryFn">) => useSuspenseQuery({ queryKey: Common.UseHumanInTheLoopServiceGetHitlDetailsKeyFn({ bodySearch, dagId, dagIdPattern, dagRunId, limit, offset, orderBy, respondedByUserId, respondedByUserName, responseReceived, state, subjectSearch, taskId, taskIdPattern }, queryKey), queryFn: () => HumanInTheLoopService.getHitlDetails({ bodySearch, dagId, dagIdPattern, dagRunId, limit, offset, orderBy, respondedByUserId, respondedByUserName, responseReceived, state, subjectSearch, taskId, taskIdPattern }) as TData, ...options }); -/** * Get Health * @returns HealthInfoResponse Successful Response * @throws ApiError 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 a9c1a84e22a22..5faf4b03b0aa3 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 @@ -3,7 +3,7 @@ import type { CancelablePromise } from './core/CancelablePromise'; import { OpenAPI } from './core/OpenAPI'; import { request as __request } from './core/request'; -import type { GetAssetsData, GetAssetsResponse, GetAssetAliasesData, GetAssetAliasesResponse, GetAssetAliasData, GetAssetAliasResponse, GetAssetEventsData, GetAssetEventsResponse, CreateAssetEventData, CreateAssetEventResponse, MaterializeAssetData, MaterializeAssetResponse, GetAssetQueuedEventsData, GetAssetQueuedEventsResponse, DeleteAssetQueuedEventsData, DeleteAssetQueuedEventsResponse, GetAssetData, GetAssetResponse, GetDagAssetQueuedEventsData, GetDagAssetQueuedEventsResponse, DeleteDagAssetQueuedEventsData, DeleteDagAssetQueuedEventsResponse, GetDagAssetQueuedEventData, GetDagAssetQueuedEventResponse, DeleteDagAssetQueuedEventData, DeleteDagAssetQueuedEventResponse, NextRunAssetsData, NextRunAssetsResponse, ListBackfillsData, ListBackfillsResponse, CreateBackfillData, CreateBackfillResponse, GetBackfillData, GetBackfillResponse, PauseBackfillData, PauseBackfillResponse, UnpauseBackfillData, UnpauseBackfillResponse, CancelBackfillData, CancelBackfillResponse, CreateBackfillDryRunData, CreateBackfillDryRunResponse, ListBackfillsUiData, ListBackfillsUiResponse, DeleteConnectionData, DeleteConnectionResponse, GetConnectionData, GetConnectionResponse, PatchConnectionData, PatchConnectionResponse, GetConnectionsData, GetConnectionsResponse, PostConnectionData, PostConnectionResponse, BulkConnectionsData, BulkConnectionsResponse, TestConnectionData, TestConnectionResponse, CreateDefaultConnectionsResponse, HookMetaDataResponse, GetDagRunData, GetDagRunResponse, DeleteDagRunData, DeleteDagRunResponse, PatchDagRunData, PatchDagRunResponse, GetUpstreamAssetEventsData, GetUpstreamAssetEventsResponse, ClearDagRunData, ClearDagRunResponse, GetDagRunsData, GetDagRunsResponse, TriggerDagRunData, TriggerDagRunResponse, WaitDagRunUntilFinishedData, WaitDagRunUntilFinishedResponse, GetListDagRunsBatchData, GetListDagRunsBatchResponse, GetDagSourceData, GetDagSourceResponse, GetDagStatsData, GetDagStatsResponse, GetDagReportsData, GetDagReportsResponse, GetConfigData, GetConfigResponse, GetConfigValueData, GetConfigValueResponse, GetConfigsResponse, ListDagWarningsData, ListDagWarningsResponse, GetDagsData, GetDagsResponse, PatchDagsData, PatchDagsResponse, GetDagData, GetDagResponse, PatchDagData, PatchDagResponse, DeleteDagData, DeleteDagResponse, GetDagDetailsData, GetDagDetailsResponse, FavoriteDagData, FavoriteDagResponse, UnfavoriteDagData, UnfavoriteDagResponse, GetDagTagsData, GetDagTagsResponse, GetDagsUiData, GetDagsUiResponse, GetLatestRunInfoData, GetLatestRunInfoResponse, GetEventLogData, GetEventLogResponse, GetEventLogsData, GetEventLogsResponse, GetExtraLinksData, GetExtraLinksResponse, GetTaskInstanceData, GetTaskInstanceResponse, PatchTaskInstanceData, PatchTaskInstanceResponse, DeleteTaskInstanceData, DeleteTaskInstanceResponse, GetMappedTaskInstancesData, GetMappedTaskInstancesResponse, GetTaskInstanceDependenciesByMapIndexData, GetTaskInstanceDependenciesByMapIndexResponse, GetTaskInstanceDependenciesData, GetTaskInstanceDependenciesResponse, GetTaskInstanceTriesData, GetTaskInstanceTriesResponse, GetMappedTaskInstanceTriesData, GetMappedTaskInstanceTriesResponse, GetMappedTaskInstanceData, GetMappedTaskInstanceResponse, PatchTaskInstanceByMapIndexData, PatchTaskInstanceByMapIndexResponse, GetTaskInstancesData, GetTaskInstancesResponse, BulkTaskInstancesData, BulkTaskInstancesResponse, GetTaskInstancesBatchData, GetTaskInstancesBatchResponse, GetTaskInstanceTryDetailsData, GetTaskInstanceTryDetailsResponse, GetMappedTaskInstanceTryDetailsData, GetMappedTaskInstanceTryDetailsResponse, PostClearTaskInstancesData, PostClearTaskInstancesResponse, PatchTaskInstanceDryRunByMapIndexData, PatchTaskInstanceDryRunByMapIndexResponse, PatchTaskInstanceDryRunData, PatchTaskInstanceDryRunResponse, GetLogData, GetLogResponse, GetExternalLogUrlData, GetExternalLogUrlResponse, GetImportErrorData, GetImportErrorResponse, GetImportErrorsData, GetImportErrorsResponse, GetJobsData, GetJobsResponse, GetPluginsData, GetPluginsResponse, ImportErrorsResponse, DeletePoolData, DeletePoolResponse, GetPoolData, GetPoolResponse, PatchPoolData, PatchPoolResponse, GetPoolsData, GetPoolsResponse, PostPoolData, PostPoolResponse, BulkPoolsData, BulkPoolsResponse, GetProvidersData, GetProvidersResponse, GetXcomEntryData, GetXcomEntryResponse, UpdateXcomEntryData, UpdateXcomEntryResponse, GetXcomEntriesData, GetXcomEntriesResponse, CreateXcomEntryData, CreateXcomEntryResponse, GetTasksData, GetTasksResponse, GetTaskData, GetTaskResponse, DeleteVariableData, DeleteVariableResponse, GetVariableData, GetVariableResponse, PatchVariableData, PatchVariableResponse, GetVariablesData, GetVariablesResponse, PostVariableData, PostVariableResponse, BulkVariablesData, BulkVariablesResponse, ReparseDagFileData, ReparseDagFileResponse, GetDagVersionData, GetDagVersionResponse, GetDagVersionsData, GetDagVersionsResponse, UpdateHitlDetailData, UpdateHitlDetailResponse, GetHitlDetailData, GetHitlDetailResponse, GetHitlDetailsData, GetHitlDetailsResponse, GetHealthResponse, GetVersionResponse, LoginData, LoginResponse, LogoutData, LogoutResponse, RefreshData, RefreshResponse, GetAuthMenusResponse, GetDependenciesData, GetDependenciesResponse, HistoricalMetricsData, HistoricalMetricsResponse, DagStatsResponse2, StructureDataData, StructureDataResponse2, GetDagStructureData, GetDagStructureResponse, GetGridRunsData, GetGridRunsResponse, GetGridTiSummariesData, GetGridTiSummariesResponse, GetCalendarData, GetCalendarResponse } from './types.gen'; +import type { GetAssetsData, GetAssetsResponse, GetAssetAliasesData, GetAssetAliasesResponse, GetAssetAliasData, GetAssetAliasResponse, GetAssetEventsData, GetAssetEventsResponse, CreateAssetEventData, CreateAssetEventResponse, MaterializeAssetData, MaterializeAssetResponse, GetAssetQueuedEventsData, GetAssetQueuedEventsResponse, DeleteAssetQueuedEventsData, DeleteAssetQueuedEventsResponse, GetAssetData, GetAssetResponse, GetDagAssetQueuedEventsData, GetDagAssetQueuedEventsResponse, DeleteDagAssetQueuedEventsData, DeleteDagAssetQueuedEventsResponse, GetDagAssetQueuedEventData, GetDagAssetQueuedEventResponse, DeleteDagAssetQueuedEventData, DeleteDagAssetQueuedEventResponse, NextRunAssetsData, NextRunAssetsResponse, ListBackfillsData, ListBackfillsResponse, CreateBackfillData, CreateBackfillResponse, GetBackfillData, GetBackfillResponse, PauseBackfillData, PauseBackfillResponse, UnpauseBackfillData, UnpauseBackfillResponse, CancelBackfillData, CancelBackfillResponse, CreateBackfillDryRunData, CreateBackfillDryRunResponse, ListBackfillsUiData, ListBackfillsUiResponse, DeleteConnectionData, DeleteConnectionResponse, GetConnectionData, GetConnectionResponse, PatchConnectionData, PatchConnectionResponse, GetConnectionsData, GetConnectionsResponse, PostConnectionData, PostConnectionResponse, BulkConnectionsData, BulkConnectionsResponse, TestConnectionData, TestConnectionResponse, CreateDefaultConnectionsResponse, HookMetaDataResponse, GetDagRunData, GetDagRunResponse, DeleteDagRunData, DeleteDagRunResponse, PatchDagRunData, PatchDagRunResponse, GetUpstreamAssetEventsData, GetUpstreamAssetEventsResponse, ClearDagRunData, ClearDagRunResponse, GetDagRunsData, GetDagRunsResponse, TriggerDagRunData, TriggerDagRunResponse, WaitDagRunUntilFinishedData, WaitDagRunUntilFinishedResponse, GetListDagRunsBatchData, GetListDagRunsBatchResponse, GetDagSourceData, GetDagSourceResponse, GetDagStatsData, GetDagStatsResponse, GetDagReportsData, GetDagReportsResponse, GetConfigData, GetConfigResponse, GetConfigValueData, GetConfigValueResponse, GetConfigsResponse, ListDagWarningsData, ListDagWarningsResponse, GetDagsData, GetDagsResponse, PatchDagsData, PatchDagsResponse, GetDagData, GetDagResponse, PatchDagData, PatchDagResponse, DeleteDagData, DeleteDagResponse, GetDagDetailsData, GetDagDetailsResponse, FavoriteDagData, FavoriteDagResponse, UnfavoriteDagData, UnfavoriteDagResponse, GetDagTagsData, GetDagTagsResponse, GetDagsUiData, GetDagsUiResponse, GetLatestRunInfoData, GetLatestRunInfoResponse, GetEventLogData, GetEventLogResponse, GetEventLogsData, GetEventLogsResponse, GetExtraLinksData, GetExtraLinksResponse, GetTaskInstanceData, GetTaskInstanceResponse, PatchTaskInstanceData, PatchTaskInstanceResponse, DeleteTaskInstanceData, DeleteTaskInstanceResponse, GetMappedTaskInstancesData, GetMappedTaskInstancesResponse, GetTaskInstanceDependenciesByMapIndexData, GetTaskInstanceDependenciesByMapIndexResponse, GetTaskInstanceDependenciesData, GetTaskInstanceDependenciesResponse, GetTaskInstanceTriesData, GetTaskInstanceTriesResponse, GetMappedTaskInstanceTriesData, GetMappedTaskInstanceTriesResponse, GetMappedTaskInstanceData, GetMappedTaskInstanceResponse, PatchTaskInstanceByMapIndexData, PatchTaskInstanceByMapIndexResponse, GetTaskInstancesData, GetTaskInstancesResponse, BulkTaskInstancesData, BulkTaskInstancesResponse, GetTaskInstancesBatchData, GetTaskInstancesBatchResponse, GetTaskInstanceTryDetailsData, GetTaskInstanceTryDetailsResponse, GetMappedTaskInstanceTryDetailsData, GetMappedTaskInstanceTryDetailsResponse, PostClearTaskInstancesData, PostClearTaskInstancesResponse, PatchTaskInstanceDryRunByMapIndexData, PatchTaskInstanceDryRunByMapIndexResponse, PatchTaskInstanceDryRunData, PatchTaskInstanceDryRunResponse, GetLogData, GetLogResponse, GetExternalLogUrlData, GetExternalLogUrlResponse, UpdateHitlDetailData, UpdateHitlDetailResponse, GetHitlDetailData, GetHitlDetailResponse, GetHitlDetailsData, GetHitlDetailsResponse, GetImportErrorData, GetImportErrorResponse, GetImportErrorsData, GetImportErrorsResponse, GetJobsData, GetJobsResponse, GetPluginsData, GetPluginsResponse, ImportErrorsResponse, DeletePoolData, DeletePoolResponse, GetPoolData, GetPoolResponse, PatchPoolData, PatchPoolResponse, GetPoolsData, GetPoolsResponse, PostPoolData, PostPoolResponse, BulkPoolsData, BulkPoolsResponse, GetProvidersData, GetProvidersResponse, GetXcomEntryData, GetXcomEntryResponse, UpdateXcomEntryData, UpdateXcomEntryResponse, GetXcomEntriesData, GetXcomEntriesResponse, CreateXcomEntryData, CreateXcomEntryResponse, GetTasksData, GetTasksResponse, GetTaskData, GetTaskResponse, DeleteVariableData, DeleteVariableResponse, GetVariableData, GetVariableResponse, PatchVariableData, PatchVariableResponse, GetVariablesData, GetVariablesResponse, PostVariableData, PostVariableResponse, BulkVariablesData, BulkVariablesResponse, ReparseDagFileData, ReparseDagFileResponse, GetDagVersionData, GetDagVersionResponse, GetDagVersionsData, GetDagVersionsResponse, GetHealthResponse, GetVersionResponse, LoginData, LoginResponse, LogoutData, LogoutResponse, RefreshData, RefreshResponse, GetAuthMenusResponse, GetDependenciesData, GetDependenciesResponse, HistoricalMetricsData, HistoricalMetricsResponse, DagStatsResponse2, StructureDataData, StructureDataResponse2, GetDagStructureData, GetDagStructureResponse, GetGridRunsData, GetGridRunsResponse, GetGridTiSummariesData, GetGridTiSummariesResponse, GetCalendarData, GetCalendarResponse } from './types.gen'; export class AssetService { /** @@ -2712,6 +2712,121 @@ export class TaskInstanceService { }); } + /** + * Update Hitl Detail + * Update a Human-in-the-loop detail. + * @param data The data for the request. + * @param data.dagId + * @param data.dagRunId + * @param data.taskId + * @param data.mapIndex + * @param data.requestBody + * @returns HITLDetailResponse Successful Response + * @throws ApiError + */ + public static updateHitlDetail(data: UpdateHitlDetailData): CancelablePromise { + return __request(OpenAPI, { + method: 'PATCH', + url: '/api/v2/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/{map_index}/hitlDetails', + path: { + dag_id: data.dagId, + dag_run_id: data.dagRunId, + task_id: data.taskId, + map_index: data.mapIndex + }, + body: data.requestBody, + mediaType: 'application/json', + errors: { + 401: 'Unauthorized', + 403: 'Forbidden', + 404: 'Not Found', + 409: 'Conflict', + 422: 'Validation Error' + } + }); + } + + /** + * Get Hitl Detail + * Get a Human-in-the-loop detail of a specific task instance. + * @param data The data for the request. + * @param data.dagId + * @param data.dagRunId + * @param data.taskId + * @param data.mapIndex + * @returns HITLDetail Successful Response + * @throws ApiError + */ + public static getHitlDetail(data: GetHitlDetailData): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v2/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/{map_index}/hitlDetails', + path: { + dag_id: data.dagId, + dag_run_id: data.dagRunId, + task_id: data.taskId, + map_index: data.mapIndex + }, + errors: { + 401: 'Unauthorized', + 403: 'Forbidden', + 404: 'Not Found', + 422: 'Validation Error' + } + }); + } + + /** + * Get Hitl Details + * Get Human-in-the-loop details. + * @param data The data for the request. + * @param data.dagId + * @param data.dagRunId + * @param data.limit + * @param data.offset + * @param data.orderBy + * @param data.dagIdPattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. + * @param data.taskId + * @param data.taskIdPattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. + * @param data.state + * @param data.responseReceived + * @param data.respondedByUserId + * @param data.respondedByUserName + * @param data.subjectSearch SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. + * @param data.bodySearch SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. + * @returns HITLDetailCollection Successful Response + * @throws ApiError + */ + public static getHitlDetails(data: GetHitlDetailsData): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v2/dags/{dag_id}/dagRuns/{dag_run_id}/hitlDetails', + path: { + dag_id: data.dagId, + dag_run_id: data.dagRunId + }, + query: { + limit: data.limit, + offset: data.offset, + order_by: data.orderBy, + dag_id_pattern: data.dagIdPattern, + task_id: data.taskId, + task_id_pattern: data.taskIdPattern, + state: data.state, + response_received: data.responseReceived, + responded_by_user_id: data.respondedByUserId, + responded_by_user_name: data.respondedByUserName, + subject_search: data.subjectSearch, + body_search: data.bodySearch + }, + errors: { + 401: 'Unauthorized', + 403: 'Forbidden', + 422: 'Validation Error' + } + }); + } + } export class ImportErrorService { @@ -3542,126 +3657,6 @@ export class DagVersionService { } -export class HumanInTheLoopService { - /** - * Update Hitl Detail - * Update a Human-in-the-loop detail. - * @param data The data for the request. - * @param data.dagId - * @param data.dagRunId - * @param data.taskId - * @param data.requestBody - * @param data.mapIndex - * @returns HITLDetailResponse Successful Response - * @throws ApiError - */ - public static updateHitlDetail(data: UpdateHitlDetailData): CancelablePromise { - return __request(OpenAPI, { - method: 'PATCH', - url: '/api/v2/hitlDetails/{dag_id}/{dag_run_id}/{task_id}', - path: { - dag_id: data.dagId, - dag_run_id: data.dagRunId, - task_id: data.taskId - }, - query: { - map_index: data.mapIndex - }, - body: data.requestBody, - mediaType: 'application/json', - errors: { - 401: 'Unauthorized', - 403: 'Forbidden', - 404: 'Not Found', - 409: 'Conflict', - 422: 'Validation Error' - } - }); - } - - /** - * Get Hitl Detail - * Get a Human-in-the-loop detail of a specific task instance. - * @param data The data for the request. - * @param data.dagId - * @param data.dagRunId - * @param data.taskId - * @param data.mapIndex - * @returns HITLDetail Successful Response - * @throws ApiError - */ - public static getHitlDetail(data: GetHitlDetailData): CancelablePromise { - return __request(OpenAPI, { - method: 'GET', - url: '/api/v2/hitlDetails/{dag_id}/{dag_run_id}/{task_id}', - path: { - dag_id: data.dagId, - dag_run_id: data.dagRunId, - task_id: data.taskId - }, - query: { - map_index: data.mapIndex - }, - errors: { - 401: 'Unauthorized', - 403: 'Forbidden', - 404: 'Not Found', - 422: 'Validation Error' - } - }); - } - - /** - * Get Hitl Details - * Get Human-in-the-loop details. - * @param data The data for the request. - * @param data.limit - * @param data.offset - * @param data.orderBy - * @param data.dagId - * @param data.dagIdPattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. - * @param data.dagRunId - * @param data.taskId - * @param data.taskIdPattern SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. - * @param data.state - * @param data.responseReceived - * @param data.respondedByUserId - * @param data.respondedByUserName - * @param data.subjectSearch SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. - * @param data.bodySearch SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. - * @returns HITLDetailCollection Successful Response - * @throws ApiError - */ - public static getHitlDetails(data: GetHitlDetailsData = {}): CancelablePromise { - return __request(OpenAPI, { - method: 'GET', - url: '/api/v2/hitlDetails/', - query: { - limit: data.limit, - offset: data.offset, - order_by: data.orderBy, - dag_id: data.dagId, - dag_id_pattern: data.dagIdPattern, - dag_run_id: data.dagRunId, - task_id: data.taskId, - task_id_pattern: data.taskIdPattern, - state: data.state, - response_received: data.responseReceived, - responded_by_user_id: data.respondedByUserId, - responded_by_user_name: data.respondedByUserName, - subject_search: data.subjectSearch, - body_search: data.bodySearch - }, - errors: { - 401: 'Unauthorized', - 403: 'Forbidden', - 422: 'Validation Error' - } - }); - } - -} - export class MonitorService { /** * Get Health 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 1e94eb665226c..f24570cdfed05 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 @@ -2831,6 +2831,56 @@ export type GetExternalLogUrlData = { export type GetExternalLogUrlResponse = ExternalLogUrlResponse; +export type UpdateHitlDetailData = { + dagId: string; + dagRunId: string; + mapIndex: number; + requestBody: UpdateHITLDetailPayload; + taskId: string; +}; + +export type UpdateHitlDetailResponse = HITLDetailResponse; + +export type GetHitlDetailData = { + dagId: string; + dagRunId: string; + mapIndex: number; + taskId: string; +}; + +export type GetHitlDetailResponse = HITLDetail; + +export type GetHitlDetailsData = { + /** + * SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. + */ + bodySearch?: string | null; + dagId: string; + /** + * SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. + */ + dagIdPattern?: string | null; + dagRunId: string; + limit?: number; + offset?: number; + orderBy?: Array<(string)>; + respondedByUserId?: Array<(string)>; + respondedByUserName?: Array<(string)>; + responseReceived?: boolean | null; + state?: Array<(string)>; + /** + * SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. + */ + subjectSearch?: string | null; + taskId?: string | null; + /** + * SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. + */ + taskIdPattern?: string | null; +}; + +export type GetHitlDetailsResponse = HITLDetailCollection; + export type GetImportErrorData = { importErrorId: number; }; @@ -3077,56 +3127,6 @@ export type GetDagVersionsData = { export type GetDagVersionsResponse = DAGVersionCollectionResponse; -export type UpdateHitlDetailData = { - dagId: string; - dagRunId: string; - mapIndex?: number; - requestBody: UpdateHITLDetailPayload; - taskId: string; -}; - -export type UpdateHitlDetailResponse = HITLDetailResponse; - -export type GetHitlDetailData = { - dagId: string; - dagRunId: string; - mapIndex?: number; - taskId: string; -}; - -export type GetHitlDetailResponse = HITLDetail; - -export type GetHitlDetailsData = { - /** - * SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. - */ - bodySearch?: string | null; - dagId?: string | null; - /** - * SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. - */ - dagIdPattern?: string | null; - dagRunId?: string; - limit?: number; - offset?: number; - orderBy?: Array<(string)>; - respondedByUserId?: Array<(string)>; - respondedByUserName?: Array<(string)>; - responseReceived?: boolean | null; - state?: Array<(string)>; - /** - * SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. - */ - subjectSearch?: string | null; - taskId?: string | null; - /** - * SQL LIKE expression — use `%` / `_` wildcards (e.g. `%customer_%`). Regular expressions are **not** supported. - */ - taskIdPattern?: string | null; -}; - -export type GetHitlDetailsResponse = HITLDetailCollection; - export type GetHealthResponse = HealthInfoResponse; export type GetVersionResponse = VersionInfo; @@ -5396,6 +5396,85 @@ export type $OpenApiTs = { }; }; }; + '/api/v2/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/{map_index}/hitlDetails': { + patch: { + req: UpdateHitlDetailData; + res: { + /** + * Successful Response + */ + 200: HITLDetailResponse; + /** + * Unauthorized + */ + 401: HTTPExceptionResponse; + /** + * Forbidden + */ + 403: HTTPExceptionResponse; + /** + * Not Found + */ + 404: HTTPExceptionResponse; + /** + * Conflict + */ + 409: HTTPExceptionResponse; + /** + * Validation Error + */ + 422: HTTPValidationError; + }; + }; + get: { + req: GetHitlDetailData; + res: { + /** + * Successful Response + */ + 200: HITLDetail; + /** + * Unauthorized + */ + 401: HTTPExceptionResponse; + /** + * Forbidden + */ + 403: HTTPExceptionResponse; + /** + * Not Found + */ + 404: HTTPExceptionResponse; + /** + * Validation Error + */ + 422: HTTPValidationError; + }; + }; + }; + '/api/v2/dags/{dag_id}/dagRuns/{dag_run_id}/hitlDetails': { + get: { + req: GetHitlDetailsData; + res: { + /** + * Successful Response + */ + 200: HITLDetailCollection; + /** + * Unauthorized + */ + 401: HTTPExceptionResponse; + /** + * Forbidden + */ + 403: HTTPExceptionResponse; + /** + * Validation Error + */ + 422: HTTPValidationError; + }; + }; + }; '/api/v2/importErrors/{import_error_id}': { get: { req: GetImportErrorData; @@ -6108,85 +6187,6 @@ export type $OpenApiTs = { }; }; }; - '/api/v2/hitlDetails/{dag_id}/{dag_run_id}/{task_id}': { - patch: { - req: UpdateHitlDetailData; - res: { - /** - * Successful Response - */ - 200: HITLDetailResponse; - /** - * Unauthorized - */ - 401: HTTPExceptionResponse; - /** - * Forbidden - */ - 403: HTTPExceptionResponse; - /** - * Not Found - */ - 404: HTTPExceptionResponse; - /** - * Conflict - */ - 409: HTTPExceptionResponse; - /** - * Validation Error - */ - 422: HTTPValidationError; - }; - }; - get: { - req: GetHitlDetailData; - res: { - /** - * Successful Response - */ - 200: HITLDetail; - /** - * Unauthorized - */ - 401: HTTPExceptionResponse; - /** - * Forbidden - */ - 403: HTTPExceptionResponse; - /** - * Not Found - */ - 404: HTTPExceptionResponse; - /** - * Validation Error - */ - 422: HTTPValidationError; - }; - }; - }; - '/api/v2/hitlDetails/': { - get: { - req: GetHitlDetailsData; - res: { - /** - * Successful Response - */ - 200: HITLDetailCollection; - /** - * Unauthorized - */ - 401: HTTPExceptionResponse; - /** - * Forbidden - */ - 403: HTTPExceptionResponse; - /** - * Validation Error - */ - 422: HTTPValidationError; - }; - }; - }; '/api/v2/monitor/health': { get: { res: { diff --git a/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_hitl.py b/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_hitl.py index f29fe60cfeff9..61f6488d5fc68 100644 --- a/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_hitl.py +++ b/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_hitl.py @@ -65,7 +65,7 @@ def sample_ti( @pytest.fixture def sample_ti_url_identifier() -> str: - return f"{DAG_ID}/test/{TASK_ID}" + return f"/dags/{DAG_ID}/dagRuns/test/taskInstances/{TASK_ID}/-1" @pytest.fixture @@ -269,11 +269,10 @@ def cleanup_audit_log(session: Session) -> None: session.commit() -def _assert_sample_audit_log(audit_log: Log, map_index: int | None) -> None: +def _assert_sample_audit_log(audit_log: Log) -> None: assert audit_log.dag_id == DAG_ID assert audit_log.task_id == TASK_ID assert audit_log.run_id == "test" - assert audit_log.map_index is None assert audit_log.try_number is None assert audit_log.owner == "test" assert audit_log.owner_display_name == "test" @@ -286,9 +285,8 @@ def _assert_sample_audit_log(audit_log: Log, map_index: int | None) -> None: "chosen_options": ["Approve"], "params_input": {"input_1": 2}, "method": "PATCH", + "map_index": "-1", } - if map_index is not None: - expected_extra["map_index"] = str(map_index) assert json.loads(audit_log.extra) == expected_extra @@ -301,21 +299,17 @@ def sample_update_payload() -> dict[str, Any]: class TestUpdateHITLDetailEndpoint: @time_machine.travel(datetime(2025, 7, 3, 0, 0, 0), tick=False) @pytest.mark.usefixtures("sample_hitl_detail") - @pytest.mark.parametrize("map_index", [None, -1]) def test_should_respond_200_with_existing_response( self, test_client: TestClient, sample_ti_url_identifier: str, - map_index: int | None, sample_update_payload: dict[str, Any], session: Session, ) -> None: - query_param = "" if map_index is None else f"?map_index={map_index}" response = test_client.patch( - f"/hitlDetails/{sample_ti_url_identifier}{query_param}", + f"{sample_ti_url_identifier}/hitlDetails", json=sample_update_payload, ) - assert response.status_code == 200 assert response.json() == { "params_input": {"input_1": 2}, @@ -325,23 +319,20 @@ def test_should_respond_200_with_existing_response( } audit_log = session.scalar(select(Log)) - _assert_sample_audit_log(audit_log, map_index=map_index) + _assert_sample_audit_log(audit_log) @time_machine.travel(datetime(2025, 7, 3, 0, 0, 0), tick=False) @pytest.mark.usefixtures("sample_hitl_detail_respondent") - @pytest.mark.parametrize("map_index", [None, -1]) def test_should_respond_200_to_assigned_users( self, test_client: TestClient, sample_ti_url_identifier: str, - map_index: int | None, sample_update_payload: dict[str, Any], session: Session, ): """Test with an authorized user and the user is a respondent to the task.""" - query_param = "" if map_index is None else f"?map_index={map_index}" response = test_client.patch( - f"/hitlDetails/{sample_ti_url_identifier}{query_param}", + f"{sample_ti_url_identifier}/hitlDetails", json=sample_update_payload, ) @@ -354,37 +345,32 @@ def test_should_respond_200_to_assigned_users( } audit_log = session.scalar(select(Log)) - _assert_sample_audit_log(audit_log, map_index=map_index) + _assert_sample_audit_log(audit_log) - @pytest.mark.parametrize("query_param", ["", "?map_index=-1"]) def test_should_respond_401( self, unauthenticated_test_client: TestClient, sample_ti_url_identifier: str, sample_update_payload: dict[str, Any], - query_param: str, ) -> None: response = unauthenticated_test_client.patch( - f"/hitlDetails/{sample_ti_url_identifier}{query_param}", + f"{sample_ti_url_identifier}/hitlDetails", json=sample_update_payload, ) assert response.status_code == 401 - @pytest.mark.parametrize("query_param", ["", "?map_index=-1"]) def test_should_respond_403( self, unauthorized_test_client: TestClient, sample_ti_url_identifier: str, sample_update_payload: dict[str, Any], - query_param: str, ) -> None: response = unauthorized_test_client.patch( - f"/hitlDetails/{sample_ti_url_identifier}{query_param}", + f"{sample_ti_url_identifier}/hitlDetails", json=sample_update_payload, ) assert response.status_code == 403 - @pytest.mark.parametrize("query_param", ["", "?map_index=-1"]) @time_machine.travel(datetime(2025, 7, 3, 0, 0, 0), tick=False) @pytest.mark.usefixtures("sample_hitl_detail_non_respondent") def test_should_respond_403_to_non_respondent_user( @@ -392,58 +378,51 @@ def test_should_respond_403_to_non_respondent_user( test_client: TestClient, sample_ti_url_identifier: str, sample_update_payload: dict[str, Any], - query_param: str, ): """Test with an authorized user but the user is not a respondent to the task.""" response = test_client.patch( - f"/hitlDetails/{sample_ti_url_identifier}{query_param}", + f"{sample_ti_url_identifier}/hitlDetails", json=sample_update_payload, ) assert response.status_code == 403 - @pytest.mark.parametrize("query_param", ["", "?map_index=-1"]) def test_should_respond_404_without_ti( self, test_client: TestClient, sample_ti_url_identifier: str, - query_param: str, ) -> None: response = test_client.patch( - f"/hitlDetails/{sample_ti_url_identifier}{query_param}", + f"{sample_ti_url_identifier}/hitlDetails", json={"chosen_options": ["Approve"], "params_input": {"input_1": 2}}, ) assert response.status_code == 404 assert response.json() == {"detail": expected_ti_not_found_error_msg} - @pytest.mark.parametrize("query_param", ["", "?map_index=-1"]) def test_should_respond_404_without_hitl_detail( self, test_client: TestClient, sample_ti_url_identifier: str, sample_update_payload: dict[str, Any], - query_param: str, expected_hitl_detail_not_found_error_msg: str, ) -> None: response = test_client.patch( - f"/hitlDetails/{sample_ti_url_identifier}{query_param}", + f"{sample_ti_url_identifier}/hitlDetails", json=sample_update_payload, ) assert response.status_code == 404 assert response.json() == {"detail": expected_hitl_detail_not_found_error_msg} - @pytest.mark.parametrize("query_param", ["", "?map_index=-1"]) @time_machine.travel(datetime(2025, 7, 3, 0, 0, 0), tick=False) @pytest.mark.usefixtures("sample_hitl_detail") def test_should_respond_409( self, test_client: TestClient, sample_ti_url_identifier: str, - query_param: str, sample_ti: TaskInstance, ) -> None: response = test_client.patch( - f"/hitlDetails/{sample_ti_url_identifier}{query_param}", + f"{sample_ti_url_identifier}/hitlDetails", json={"chosen_options": ["Approve"], "params_input": {"input_1": 2}}, ) @@ -457,7 +436,7 @@ def test_should_respond_409( assert response.json() == expected_response response = test_client.patch( - f"/hitlDetails/{sample_ti_url_identifier}{query_param}", + f"{sample_ti_url_identifier}/hitlDetails", json={"chosen_options": ["Approve"], "params_input": {"input_1": 3}}, ) assert response.status_code == 409 @@ -469,16 +448,14 @@ def test_should_respond_409( ) } - @pytest.mark.parametrize("query_param", ["", "?map_index=-1"]) @pytest.mark.usefixtures("sample_hitl_detail") def test_should_respond_422_with_empty_option( self, test_client: TestClient, sample_ti_url_identifier: str, - query_param: str, ) -> None: response = test_client.patch( - f"/hitlDetails/{sample_ti_url_identifier}{query_param}", + f"{sample_ti_url_identifier}/hitlDetails", json={"chosen_options": [], "params_input": {"input_1": 2}}, ) @@ -486,59 +463,49 @@ def test_should_respond_422_with_empty_option( class TestGetHITLDetailEndpoint: - @pytest.mark.parametrize("query_param", ["", "?map_index=-1"]) @pytest.mark.usefixtures("sample_hitl_detail") def test_should_respond_200_with_existing_response( self, test_client: TestClient, sample_ti_url_identifier: str, expected_sample_hitl_detail_dict: dict[str, Any], - query_param: str, ) -> None: - response = test_client.get(f"/hitlDetails/{sample_ti_url_identifier}{query_param}") + response = test_client.get(f"{sample_ti_url_identifier}/hitlDetails") assert response.status_code == 200 assert response.json() == expected_sample_hitl_detail_dict - @pytest.mark.parametrize("query_param", ["", "?map_index=-1"]) def test_should_respond_401( self, unauthenticated_test_client: TestClient, sample_ti_url_identifier: str, - query_param: str, ) -> None: - response = unauthenticated_test_client.get(f"/hitlDetails/{sample_ti_url_identifier}{query_param}") + response = unauthenticated_test_client.get(f"{sample_ti_url_identifier}/hitlDetails") assert response.status_code == 401 - @pytest.mark.parametrize("query_param", ["", "?map_index=-1"]) def test_should_respond_403( self, unauthorized_test_client: TestClient, sample_ti_url_identifier: str, - query_param: str, ) -> None: - response = unauthorized_test_client.get(f"/hitlDetails/{sample_ti_url_identifier}{query_param}") + response = unauthorized_test_client.get(f"{sample_ti_url_identifier}/hitlDetails") assert response.status_code == 403 - @pytest.mark.parametrize("query_param", ["", "?map_index=-1"]) def test_should_respond_404_without_ti( self, test_client: TestClient, sample_ti_url_identifier: str, - query_param: str, ) -> None: - response = test_client.get(f"/hitlDetails/{sample_ti_url_identifier}{query_param}") + response = test_client.get(f"{sample_ti_url_identifier}/hitlDetails") assert response.status_code == 404 assert response.json() == {"detail": expected_ti_not_found_error_msg} - @pytest.mark.parametrize("query_param", ["", "?map_index=-1"]) def test_should_respond_404_without_hitl_detail( self, test_client: TestClient, sample_ti_url_identifier: str, expected_hitl_detail_not_found_error_msg: str, - query_param: str, ) -> None: - response = test_client.get(f"/hitlDetails/{sample_ti_url_identifier}{query_param}") + response = test_client.get(f"{sample_ti_url_identifier}/hitlDetails") assert response.status_code == 404 assert response.json() == {"detail": expected_hitl_detail_not_found_error_msg} @@ -550,7 +517,7 @@ def test_should_respond_200_with_existing_response( test_client: TestClient, expected_sample_hitl_detail_dict: dict[str, Any], ) -> None: - response = test_client.get("/hitlDetails/") + response = test_client.get("/dags/~/dagRuns/~/hitlDetails") assert response.status_code == 200 assert response.json() == { "hitl_details": [expected_sample_hitl_detail_dict], @@ -564,8 +531,6 @@ def test_should_respond_200_with_existing_response( # ti related filter ({"dag_id_pattern": "hitl_dag"}, 5), ({"dag_id_pattern": "other_Dag_"}, 3), - ({"dag_id": "hitl_dag_0"}, 1), - ({"dag_run_id": "hitl_run_0"}, 1), ({"task_id": "hitl_task_0"}, 1), ({"task_id_pattern": "another_hitl"}, 3), ({"state": "running"}, 5), @@ -581,8 +546,6 @@ def test_should_respond_200_with_existing_response( ids=[ "dag_id_pattern_hitl_dag", "dag_id_pattern_other_dag", - "dag_id", - "dag_run_id", "task_id_pattern", "task_id", "ti_state_running", @@ -601,11 +564,39 @@ def test_should_respond_200_with_existing_response_and_query( params: dict[str, Any], expected_ti_count: int, ) -> None: - response = test_client.get("/hitlDetails/", params=params) + response = test_client.get("/dags/~/dagRuns/~/hitlDetails", params=params) assert response.status_code == 200 assert response.json()["total_entries"] == expected_ti_count assert len(response.json()["hitl_details"]) == expected_ti_count + @pytest.mark.usefixtures("sample_hitl_details") + def test_should_respond_200_with_existing_response_and_concrete_query( + self, + test_client: TestClient, + ) -> None: + response = test_client.get("/dags/hitl_dag_0/dagRuns/hitl_run_0/hitlDetails") + assert response.status_code == 200 + assert response.json() == { + "hitl_details": [ + { + "task_instance": mock.ANY, + "options": ["Approve", "Reject"], + "subject": "This is subject 0", + "body": "this is body 0", + "defaults": ["Approve"], + "multiple": False, + "params": {"input_1": 1}, + "assigned_users": [], + "responded_by_user": None, + "responded_at": None, + "chosen_options": None, + "params_input": {}, + "response_received": False, + } + ], + "total_entries": 1, + } + @pytest.mark.usefixtures("sample_hitl_details") @pytest.mark.parametrize("asc_desc_mark", ["", "-"], ids=["asc", "desc"]) @pytest.mark.parametrize( @@ -642,7 +633,9 @@ def test_should_respond_200_with_existing_response_and_order_by( ) -> None: reverse = asc_desc_mark == "-" - response = test_client.get("/hitlDetails/", params={"order_by": f"{asc_desc_mark}{key}"}) + response = test_client.get( + "/dags/~/dagRuns/~/hitlDetails", params={"order_by": f"{asc_desc_mark}{key}"} + ) data = response.json() hitl_details = data["hitl_details"] @@ -664,7 +657,7 @@ def test_should_respond_200_with_existing_response_and_order_by( assert hitl_details == sorted_hitl_details def test_should_respond_200_without_response(self, test_client: TestClient) -> None: - response = test_client.get("/hitlDetails/") + response = test_client.get("/dags/~/dagRuns/~/hitlDetails") assert response.status_code == 200 assert response.json() == { "hitl_details": [], @@ -672,9 +665,9 @@ def test_should_respond_200_without_response(self, test_client: TestClient) -> N } def test_should_respond_401(self, unauthenticated_test_client: TestClient) -> None: - response = unauthenticated_test_client.get("/hitlDetails/") + response = unauthenticated_test_client.get("/dags/~/dagRuns/~/hitlDetails") assert response.status_code == 401 def test_should_respond_403(self, unauthorized_test_client: TestClient) -> None: - response = unauthorized_test_client.get("/hitlDetails/") + response = unauthorized_test_client.get("/dags/~/dagRuns/~/hitlDetails") assert response.status_code == 403