
    	]j+                         d dl mZ d dlmZ d dlmZ d dlmZmZ  ee	      Z
erd dlmZmZ d Zd Zdd	d
ddeddfdZy)    )	getLogger)TYPE_CHECKING)QuerySet)AnnotationDraftTask)ProjectProjectSummaryc                    t        | t        t        f      rF| sg S t        | d   t              rt        t	        |             S t        t	        d | D                    S t        | t              rE| sg S t        t        |             }t        |t              rt        |       S t        d | D              S t        | t              rt        | j                  dd            S t        dt        |              )a  
    Convert various input types to a list of unique IDs.

    :param tasks_queryset: Can be:
        - list of IDs (integers)
        - list of objects with 'id' attribute
        - Django QuerySet
        - set of IDs or objects
    :return: list of unique IDs
    r   c              3   4   K   | ]  }|j                     y wNid.0objs     O/root/env/lib/python3.12/site-packages/label_studio/projects/functions/utils.py	<genexpr>z&get_unique_ids_list.<locals>.<genexpr>"   s     939   c              3   4   K   | ]  }|j                     y wr   r   r   s     r   r   z&get_unique_ids_list.<locals>.<genexpr>.   s     5sCFF5r   r   T)flatz%Unsupported type for tasks_queryset: )
isinstancelisttupleintsetnextiterr   values_list
ValueErrortype)tasks_queryset
first_items     r   get_unique_ids_listr#      s     .4-0I nQ'-N+,, C9.99::	NC	(I $~./
j#&'' 5n555	NH	-N..t$.?@@ @nAU@VWXX    c                 8   t        | t              rt        |       } t        | t              r\t        |       dkD  rNt        | d   t              r| D cg c]  }|j
                   } }t        j                  j                  |       }|S g }| D ]f  }t        |t              r|j                  |j
                         /t        |t              r|j                  |       Qt        dt        |              t        j                  j                  |      }|S c c}w )z~
    Make queryset from list/set of int/Tasks
    :param tasks_list: Iterable of Tasks or IDs
    :return: Tasks queryset
    r   )id__inzUnknown object type: )r   r   r   lenr   r   objectsfilterappendr   r   str)
tasks_listtaskquerysetidss       r   make_queryset_from_iterabler0   8   s     *c"*%
*d#J!(;jmT*.89d$''9J9<<&&j&9 O  	FD$%

477#D#&

4  #8T!DEE	F <<&&c&2O :s   Dprojectr   summaryr	   organization_idreturnNc                 z   t         j                  d| j                   d|        t         j                  d| j                          i |_        g |_        |j                  | j                  j                  d             i i c|_        |_	        |j                  | j                  j                                i |_        t        j                  j!                  |       }|j#                  |       t         j                  d| j                   d| d|j                   d|j                   d	|j                   
       y
)a  Recalculate from scratch:
     task columns
     created_labels
     created_annotations
     created_labels_drafts

    :param project: Project
    :param summary: ProjectSummary
    :param organization_id: Organization.id, it is required for django-rq displaying on admin page
    z Reset cache started for project z and organization zCrecalculate_created_annotations_and_labels_from_scratch project_id=data)task__projectz!Reset cache finished for project z:
created_annotations = z
created_labels = z
created_labels_drafts = N)loggerinfor   all_data_columnscommon_data_columnsupdate_data_columnstasksonlycreated_labelscreated_annotations%update_created_annotations_and_labelsannotationsallcreated_labels_draftsr   r(   r)   update_created_labels_drafts)r1   r2   r3   draftss       r   7recalculate_created_annotations_and_labels_from_scratchrG   S   s%    KK27::,>PQ`Pabc
KKUV]V`V`Uabc!G"$G 2 26 :;:<b7GG711'2E2E2I2I2KL$&G!$$++'+BF((0
KK
+GJJ<7I/IZ [!!(!<!< = >#223 4##*#@#@"A	Cr$   )loggingr   typingr   django.db.modelsr   tasks.modelsr   r   __name__r8   projects.modelsr   r	   r#   r0   r   rG    r$   r   <module>rO      sT       % .	8	 7'YT6!1DG	r$   