o
    Mf                  
   @   s8  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mZmZmZ ddlmZ ddlmZ e ZeeZdd Zdd Zdd Z dd Z!dd Z"eej#dddddddeej$ddd d!dd"d#e ej$d$d%d&dd"de!ej#d'd(d)dd"dgZ%dS )*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)AllPermissions)start_job_async_or_sync)	load_func)evaluate_predictions)settings)Project)update_tasks_counters)
AnnotationAnnotationDraft
PredictionTask)WebhookAction)emit_webhooks_for_instancec                 K   s&   t | | dt|  d 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kwargs r   i/var/www/html/analyze/labelStudio/lib/python3.10/site-packages/label_studio/data_manager/actions/basic.pyretrieve_tasks_predictions   s   r   c                 K   s   t |d}t|}dd |D }| j }tjj|d}|jdd ||kr4t	tj
| | j  nt	t|| j | jdddd	 t| j| tj| d}| j s\| j   d}t| ||d
t| d dS )znDelete tasks by ids

    :param project: project instance
    :param queryset: filtered tasks db queryset
    idc                 S   s   g | ]}|d  qS r   r   ).0taskr   r   r   
<listcomp>'   s    z delete_tasks.<locals>.<listcomp>id__inN)r   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summaryreset#async_project_summary_recalculationr   update_tasks_statesr   organizationr   TASKS_DELETEDexistsviewsalldeleteafter_bulk_delete_actionsr   )r   r   r   	tasks_idsr   tasks_ids_listproject_countr'   r   r   r   delete_tasks   s(   


r>   c                 K   s  |j ddd}tjj|d}| }tt|j ddd}t|d}| j	| t
jj|d}| j| |  |  t| j| tj| |d }	tjj|d}
|
jt |	jd | j|d	 ttj}|d
ur|tjj|d}
|| |
fi | |dt| d dS )zDelete all annotations and drafts by tasks ids

    :param project: project instance
    :param queryset: filtered tasks db queryset
    r   Tflattask__id__intask__idrequestr!   )
updated_at
updated_by)tasks_querysetNr&   z annotationsr   )values_listr
   r,   r-   r   setr(   r)   r0   %remove_created_annotations_and_labelsr    remove_created_drafts_and_labelsr9   r   r4   r   ANNOTATIONS_DELETEDr   r.   r   nowuser$update_tasks_counters_and_is_labeledr   r   $DELETE_TASKS_ANNOTATIONS_POSTPROCESSr   )r   r   r   task_idsannotationsr   real_task_idsannotations_idsdraftsrD   r+   postprocessr   r   r   delete_tasks_annotationsH   s(   
rW   c                 K   sl   |j ddd}tjj|d}tt|j ddd}| }|  tt	t
jj|d |dt| d d	S )
z~Delete all predictions by tasks ids

    :param project: project instance
    :param queryset: filtered tasks db queryset
    r   Tr?   rA   rC   r!   r&   r   r   )rH   r   r,   r-   rI   r(   r   r9   r   r	   r   r   )r   r   r   rQ   predictionsrS   r   r   r   r   delete_tasks_predictionso   s   rY   c                 C   sL   t jj| d}tjj|d}|jtjj|d |j| t 	| d S )Nr!   r   )task__in)
r   r,   r-   r   getr0   rJ   r
   remove_data_columnsdelete_tasks_without_signals)r<   
project_idr   r   r   r   r   r2   ~   s
   r2   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texttype)entry_point
permissionra   orderdialogzDelete Tasksd   TzGYou are going to delete the selected tasks. Please confirm your action.)rb   rc   )rd   re   ra   rf   r'   rg   zDelete Annotationse   z\You are going to delete all annotations from the selected tasks. Please confirm your action.zDelete Predictionsf   z\You are going to delete all predictions from the selected tasks. Please confirm your action.)&__doc__loggingr   core.permissionsr   
core.redisr   core.utils.commonr   data_manager.functionsr   django.confr   projects.modelsr   tasks.functionsr	   tasks.modelsr
   r   r   r   webhooks.modelsr   webhooks.utilsr   all_permissions	getLogger__name__loggerr   r>   rW   rY   r2   predictions_anytasks_deleteactionsr   r   r   r   <module>   sn    

)'
