
    	]j%#              
          U d Z ddlZddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZmZmZmZ ddlmZ ddlmZ ddlmZ  e       Z  ejB                  e"      Z#d Z$d Z%d Z&d Z'd Z(d Z)e$e jT                  ddddddde%e jV                  dddd dd!d"e&e jX                  e jZ                  gd#d$d%de'd&de(e jT                  d'd(d)dd!dgZ.e/e   e0d*<   y)+zThis file and its contents are licensed under the Apache License 2.0. Please see the included NOTICE for copyright information and LICENSE for a copy of the license.
    N)datetime)flag_set)AllPermissions)start_job_async_or_sync)	load_func)DataManagerAction)evaluate_predictions)settings)Project)update_tasks_counters)
AnnotationAnnotationDraft
PredictionTask)User)WebhookAction)emit_webhooks_for_instancec                 x    t        |       |j                         dt        |j                               z   dz   dS )z|Retrieve predictions by tasks ids

    :param project: project instance
    :param queryset: filtered tasks db queryset
    z
Retrieved  predictionsprocessed_itemsdetail)r	   countstr)projectquerysetkwargss      Q/root/env/lib/python3.12/site-packages/label_studio/data_manager/actions/basic.pyretrieve_tasks_predictionsr      s5     "'~~/<#hnnN^J_;_bp;pqq    c                 \   t        |j                  d            }t        |      }|D cg c]  }|d   	 }}| j                  j	                         }t
        j                  j                  |      }|j                  d       ||k(  rZt        t
        j                  |d       t        j                  d| j                   d       | j                  j                          nt        t         || j                         | j#                  d	d	d
       t%        | j&                  | t(        j*                  |       d	}| j                  j-                         s*| j.                  j1                         j3                          d
}t        j4                  ||        ||dt7        |      z   dz   dS c c}w )znDelete tasks by ids

    :param project: project instance
    :param queryset: filtered tasks db queryset
    idid__inNr   low)
queue_namezcalling reset project_id=z delete_tasks()FT)maximum_annotations_changed!overlap_cohort_percentage_changedtasks_number_changedDeleted z tasks)r   reloadr   )listvalueslentasksr   r   objectsfilterupdater   *delete_tasks_without_signals_from_task_idsloggerinfor"   summaryreset#async_project_summary_recalculationupdate_tasks_statesr   organizationr   TASKS_DELETEDexistsviewsalldeleteafter_bulk_delete_actionsr   )	r   r   r   	tasks_idsr   tasktasks_ids_listproject_countr,   s	            r   delete_tasksrF   "   sk    X__T*+I	NE-67Td4j7N7MM'')M||""."9HOODO! O OQ_lqr/

|?KL
 	  C^U\U_U_`$)Uim    w33Wm>Y>Y[de F==!""$ 	"">7;$*sSXzBY\dBdee? 8s   F)c                 p   |d   }|j                   j                  d      }|j                  dd      }t        j                  j                  |      }|r|j                  t        |            }t        t        |j                  dd                  }t        |j                  d            }| j                  j                  |       t        j                  j                  |      }	|r|	j                  t        |      	      }	| j                  j                  |	       |j                         }
|j                          |	j                          t!        | j"                  | t$        j&                  |       |d   }t(        j                  j                  |
      }|j+                  t-        j.                         |j0                         | j3                  |       t5        t6        j8                        }|*t(        j                  j                  |
      } || |fi | |
dt;        |
      z   dz   dS )zDelete all annotations and drafts by tasks ids

    :param project: project instance
    :param queryset: filtered tasks db queryset
    request	annotatorr"   Tflattask__id__in)completed_bytask__id)userr#   )
updated_at
updated_by)tasks_querysetr+   z annotationsr   )datagetvalues_listr   r1   r2   intsetr-   r.   r7   %remove_created_annotations_and_labelsr    remove_created_drafts_and_labelsr   r@   r   r;   r   ANNOTATIONS_DELETEDr   r3   r   nowrP   $update_tasks_counters_and_is_labeledr   r
   $DELETE_TASKS_ANNOTATIONS_POSTPROCESSr   )r   r   r   rH   annotator_idtask_idsannotationsreal_task_idsannotations_idsdraftsr   r0   postprocesss                r   delete_tasks_annotationsrf   L   s    YG<<##K0L##Dt#4H$$+++BK!((c,6G(H [44Zd4KLMM;--d34OOO99+F $$+++BFC$56OO44V< E
MMOw33Wm>_>_apqYGLL}5E	LLHLLNw||LD000N HIIJK##8#4GU-f-$
SZ0G.0XYYr    c           
         t        t        j                  j                  |      j	                  dd            }t        t
        j                  j                  |      j	                  dd            }t        j                  j                  ||z         }dd	d
d|D  cg c]D  } t        | j                        | j                         xs | j                  xs | j                  dF c} dddgdgS c c} w )Nr%   rN   TrJ   )task__projectrP   r#      selectrI   	Annotator)valuelabelAll)typenamerm   optionsplaceholder
searchable)columnCountfields)r-   r   r1   r2   rV   r   r   r   r"   get_full_nameusernameemail)rP   r   annotator_idsdraft_annotator_idsuserss        r   delete_tasks_annotations_formr|   {   s    ++2272COOP^eiOjkM66==G=T``agnr`stLL}7J'JKE  %'( %*   #&dgg,9K9K9M9lQUQ^Q^9lbfblblm  $)"&
	
  s    A	C4c                    |j                  dd      }t        j                  j                  |      }t	        d| j
                        r0|j                         j                  dd      j                         }n%t        t        |j                  dd                  }|j                         }|j                          t        t        t        j                  j                  |             |d	t        |      z   d
z   dS )z~Delete all predictions by tasks ids

    :param project: project instance
    :param queryset: filtered tasks db queryset
    r"   TrJ   rL   *fflag_root_223_optimize_delete_predictions)r;   task_idr#   r+   r   r   )rV   r   r1   r2   r   r;   order_bydistinctrX   r-   r   r@   r   r   r   r   )r   r   r   r`   predictionsrb   r   s          r   delete_tasks_predictionsr      s     ##Dt#4H$$+++BK<7K_K_`#,,.::94:PYY[D!8!8!8!NOPE14<<3F3Fm3F3\]$
SZ0G.0XYYr    c                 V   t         j                  j                  |       }t        j                  j	                  |      }|j
                  j                  t        j                  j                  |             |j
                  j                  |       t        j                  |       y )Nr#   )r"   )task__in)
r   r1   r2   r   rU   r7   rY   r   remove_data_columnsdelete_tasks_without_signals)rD   
project_idr   r   s       r   r9   r9      sw    ||""."9Hoo!!Z!0GOO99*:L:L:S:S]e:S:fgOO''1%%h/r    zRetrieve PredictionsZ   zSend the selected tasks to all ML backends connected to the project.This operation might be abruptly interrupted due to a timeout. The recommended way to get predictions is to update tasks using the Label Studio API.Please confirm your action.confirm)titletextro   )entry_point
permissionr   orderdialogzDelete Tasksd   TzGYou are going to delete the selected tasks. Please confirm your action.)r   ro   )r   r   r   r   r,   r   zDelete Annotationse   zYou are going to delete annotations from the selected tasks.
You can select specific annotators to delete annotations for.
Please confirm your action.)r   ro   formzDelete Predictionsf   z\You are going to delete all predictions from the selected tasks. Please confirm your action.actions)1__doc__loggingr   core.feature_flagsr   core.permissionsr   
core.redisr   core.utils.commonr   data_manager.actionsr   data_manager.functionsr	   django.confr
   projects.modelsr   tasks.functionsr   tasks.modelsr   r   r   r   users.modelsr   webhooks.modelsr   webhooks.utilsr   all_permissions	getLogger__name__r5   r   rF   rf   r|   r   r9   predictions_anytasks_deletetasks_changeannotations_deleter   r-   __annotations__ r    r   <module>r      s9     ' + . ' 2 7   # 1 F F  ) 5 "			8	$r'fT,Z^0Z&0 2%55'+* 
 $%22]

 0&33_5W5WX%* 1
 0%55%r
	O1$	  1r    