@@ -254,6 +254,59 @@ def get_dag_asset_queued_events(
254254 )
255255
256256
257+ @assets_router .get (
258+ "/dags/{dag_id}/assets/queuedEvent/{uri:path}" ,
259+ responses = create_openapi_http_exception_doc (
260+ [
261+ status .HTTP_404_NOT_FOUND ,
262+ ]
263+ ),
264+ )
265+ def get_dag_asset_queued_event (
266+ dag_id : str ,
267+ uri : str ,
268+ session : Annotated [Session , Depends (get_session )],
269+ before : OptionalDateTimeQuery = None ,
270+ ) -> QueuedEventResponse :
271+ """Get a queued asset event for a DAG."""
272+ where_clause = _generate_queued_event_where_clause (dag_id = dag_id , uri = uri , before = before )
273+ query = (
274+ select (AssetDagRunQueue )
275+ .join (AssetModel , AssetDagRunQueue .asset_id == AssetModel .id )
276+ .where (* where_clause )
277+ )
278+ adrq = session .scalar (query )
279+ if not adrq :
280+ raise HTTPException (
281+ status .HTTP_404_NOT_FOUND ,
282+ f"Queued event with dag_id: `{ dag_id } ` and asset uri: `{ uri } ` was not found" ,
283+ )
284+
285+ return QueuedEventResponse (created_at = adrq .created_at , dag_id = adrq .target_dag_id , uri = uri )
286+
287+
288+ @assets_router .delete (
289+ "/assets/queuedEvent/{uri:path}" ,
290+ status_code = status .HTTP_204_NO_CONTENT ,
291+ responses = create_openapi_http_exception_doc (
292+ [
293+ status .HTTP_404_NOT_FOUND ,
294+ ]
295+ ),
296+ )
297+ def delete_asset_queued_events (
298+ uri : str ,
299+ session : Annotated [Session , Depends (get_session )],
300+ before : OptionalDateTimeQuery = None ,
301+ ):
302+ """Delete queued asset events for an asset."""
303+ where_clause = _generate_queued_event_where_clause (uri = uri , before = before )
304+ delete_stmt = delete (AssetDagRunQueue ).where (* where_clause ).execution_options (synchronize_session = "fetch" )
305+ result = session .execute (delete_stmt )
306+ if result .rowcount == 0 :
307+ raise HTTPException (status .HTTP_404_NOT_FOUND , detail = f"Queue event with uri: `{ uri } ` was not found" )
308+
309+
257310@assets_router .delete (
258311 "/dags/{dag_id}/assets/queuedEvent" ,
259312 status_code = status .HTTP_204_NO_CONTENT ,
@@ -276,3 +329,32 @@ def delete_dag_asset_queued_events(
276329
277330 if result .rowcount == 0 :
278331 raise HTTPException (status .HTTP_404_NOT_FOUND , f"Queue event with dag_id: `{ dag_id } ` was not found" )
332+
333+
334+ @assets_router .delete (
335+ "/dags/{dag_id}/assets/queuedEvent/{uri:path}" ,
336+ status_code = status .HTTP_204_NO_CONTENT ,
337+ responses = create_openapi_http_exception_doc (
338+ [
339+ status .HTTP_400_BAD_REQUEST ,
340+ status .HTTP_404_NOT_FOUND ,
341+ ]
342+ ),
343+ )
344+ def delete_dag_asset_queued_event (
345+ dag_id : str ,
346+ uri : str ,
347+ session : Annotated [Session , Depends (get_session )],
348+ before : OptionalDateTimeQuery = None ,
349+ ):
350+ """Delete a queued asset event for a DAG."""
351+ where_clause = _generate_queued_event_where_clause (dag_id = dag_id , before = before , uri = uri )
352+ delete_statement = (
353+ delete (AssetDagRunQueue ).where (* where_clause ).execution_options (synchronize_session = "fetch" )
354+ )
355+ result = session .execute (delete_statement )
356+ if result .rowcount == 0 :
357+ raise HTTPException (
358+ status .HTTP_404_NOT_FOUND ,
359+ detail = f"Queued event with dag_id: `{ dag_id } ` and asset uri: `{ uri } ` was not found" ,
360+ )
0 commit comments