Bin
2025-12-17 dcf780a91c16b6be28635b6e2e0e702060ee19f2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
from core.feature_flags import flag_set
 
 
class TaskMixin:
    def has_permission(self, user: 'User') -> bool:  # noqa: F821
        """Called by Task#has_permission"""
        return True
 
    def _get_is_labeled_value(self) -> bool:
        if flag_set('fflag_fix_fit_1082_overlap_use_distinct_annotators', user='auto'):
            n = self.completed_annotations.values('completed_by').distinct().count()
        else:
            n = self.completed_annotations.count()
        return n >= self.overlap
 
    def update_is_labeled(self, *args, **kwargs) -> None:
        self.is_labeled = self._get_is_labeled_value()
 
    @classmethod
    def post_process_bulk_update_stats(cls, tasks) -> None:
        pass
 
    def before_delete_actions(self):
        """
        Actions to execute before task deletion
        """
        pass
 
    @staticmethod
    def after_bulk_delete_actions(tasks_ids, project):
        """
        Actions to execute after bulk task deletion
        """
        pass
 
    def get_rejected_query(self):
        pass
 
 
class AnnotationMixin:
    def has_permission(self, user: 'User') -> bool:  # noqa: F821
        """Called by Annotation#has_permission"""
        return True