
    	]j                     l    d dl mZmZmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ erd dlmZ  G d d      Zy	)
    )TYPE_CHECKINGMappingOptional)start_job_async_or_sync)QuerySet)cached_property)get_unique_ids_listUserc                   j    e Zd Zd ZddZ	 	 ddeeeef      fdZ	d Z
d Zd Zed	ed
   fd       Zy)ProjectMixinc                 .    t        | j                         y)zV
        Async start rearrange overlap depending on annotation count in tasks
        N)r   _rearrange_overlap_cohortselfs    F/root/env/lib/python3.12/site-packages/label_studio/projects/mixins.pyrearrange_overlap_cohortz%ProjectMixin.rearrange_overlap_cohort   s     	  > >?    c                 J    t        |      }t        | j                  ||       y)z
        Async start updating tasks counters and than is_labeled
        :param tasks_queryset: Tasks to update queryset
        :param from_scratch: Skip calculated tasks
        )from_scratchN)r	   r   %_update_tasks_counters_and_is_labeled)r   tasks_querysetr   task_idss       r   $update_tasks_counters_and_is_labeledz1ProjectMixin.update_tasks_counters_and_is_labeled   s!     '~6 J JHcopr   Nrecalculate_stats_countsc           	      R    t        |      }t        | j                  ||||||       y)a  
        Async start updating tasks counters and than rearrange
        :param tasks_queryset: Tasks to update queryset
        :param maximum_annotations_changed: If maximum_annotations param changed
        :param overlap_cohort_percentage_changed: If cohort_percentage param changed
        :param tasks_number_changed: If tasks number changed in project
        :param from_scratch: Skip calculated tasks
        )r   r   N)r	   r   &_update_tasks_counters_and_task_states)r   r   maximum_annotations_changed!overlap_cohort_percentage_changedtasks_number_changedr   r   r   s           r   %update_tasks_counters_and_task_statesz2ProjectMixin.update_tasks_counters_and_task_states   s1    $ '~677'- %%=	
r   c                 4    t        | j                  |||       y)a7  
        Async start updating tasks states after settings change
        :param maximum_annotations_changed: If maximum_annotations param changed
        :param overlap_cohort_percentage_changed: If cohort_percentage param changed
        :param tasks_number_changed: If tasks number changed in project
        N)r   _update_tasks_states)r   r   r   r    s       r   update_tasks_statesz ProjectMixin.update_tasks_states:   s     	 %%'- 		
r   c                     | |_         y)z/
        Dummy stub for has_permission
        T)project)r   users     r   has_permissionzProjectMixin.has_permissionJ   s     r   c                      y)z[
        Returns if we can use overlap for is_labeled calculation
        :return:
        T r   s    r   _can_use_overlapzProjectMixin._can_use_overlapQ   s    
 r   returnr   c                     ddl m} |j                  j                  | j                  j
                  j                  d            S )zN
        Returns all users of project
        :return: QuerySet[User]
        r   r
   user__id)id__in)users.modelsr   objectsfilterorganizationmembersvalues_list)r   r   s     r   all_memberszProjectMixin.all_membersX   s7     	&||""$*;*;*C*C*O*OPZ*["\\r   )T)TN)__name__
__module____qualname__r   r   r   r   strintr!   r$   r(   r+   r   r   r6   r*   r   r   r   r      se    @q  @D
 #+738+<"=
:
  ]Xf- ] ]r   r   N)typingr   r   r   
core.redisr   django.db.modelsr   django.utils.functionalr   projects.functions.utilsr	   r0   r   r   r*   r   r   <module>rA      s+    3 3 . % 3 8!T] T]r   