Skip to content

Commit 5df8aa9

Browse files
Revert "fix: FIT-1058: I don't see task states in JSON Export (#8903)"
This reverts commit dcef58c.
1 parent fd7884a commit 5df8aa9

File tree

4 files changed

+3
-89
lines changed

4 files changed

+3
-89
lines changed

label_studio/data_export/api.py

Lines changed: 1 addition & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
from django.core.files import File
1515
from django.core.files.storage import FileSystemStorage
1616
from django.db import transaction
17-
from django.db.models import Prefetch
1817
from django.http import FileResponse, HttpResponse
1918
from django.utils.decorators import method_decorator
2019
from drf_spectacular.types import OpenApiTypes
@@ -167,34 +166,7 @@ def get_queryset(self):
167166
return Project.objects.filter(organization=self.request.user.active_organization)
168167

169168
def get_task_queryset(self, queryset):
170-
# Import here to avoid circular dependencies
171-
from core.feature_flags import flag_set
172-
from tasks.models import Annotation
173-
174-
# Create a prefetch for annotations with FSM state
175-
annotations_qs = Annotation.objects.all()
176-
177-
# Only annotate FSM state if both feature flags are enabled
178-
user = getattr(self.request, 'user', None)
179-
if (
180-
flag_set('fflag_feat_fit_568_finite_state_management', user=user)
181-
and flag_set('fflag_feat_fit_710_fsm_state_fields', user=user)
182-
and hasattr(annotations_qs, 'with_state')
183-
):
184-
annotations_qs = annotations_qs.with_state()
185-
186-
qs = queryset.select_related('project').prefetch_related(
187-
Prefetch('annotations', queryset=annotations_qs), 'predictions'
188-
)
189-
190-
# Add FSM state annotation to tasks as well to avoid N+1 queries during export
191-
if (
192-
flag_set('fflag_feat_fit_568_finite_state_management', user=user)
193-
and flag_set('fflag_feat_fit_710_fsm_state_fields', user=user)
194-
and hasattr(qs, 'with_state')
195-
):
196-
qs = qs.with_state()
197-
return qs
169+
return queryset.select_related('project').prefetch_related('annotations', 'predictions')
198170

199171
def get(self, request, *args, **kwargs):
200172
project = self.get_object()

label_studio/data_export/mixins.py

Lines changed: 1 addition & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -152,21 +152,9 @@ def _get_export_serializer_option(serialization_options):
152152
return options
153153

154154
def get_task_queryset(self, ids, annotation_filter_options):
155-
from core.feature_flags import flag_set
156-
157155
annotations_qs = self._get_filtered_annotations_queryset(annotation_filter_options=annotation_filter_options)
158156

159-
# Only annotate FSM state if both feature flags are enabled
160-
# This prevents unnecessary query annotations when state won't be serialized
161-
user = getattr(self, 'created_by', None)
162-
if (
163-
flag_set('fflag_feat_fit_568_finite_state_management', user=user)
164-
and flag_set('fflag_feat_fit_710_fsm_state_fields', user=user)
165-
and hasattr(annotations_qs, 'with_state')
166-
):
167-
annotations_qs = annotations_qs.with_state()
168-
169-
qs = (
157+
return (
170158
Task.objects.filter(id__in=ids)
171159
.select_related('file_upload') # select_related more efficient for regular foreign-key relationship
172160
.prefetch_related(
@@ -176,16 +164,6 @@ def get_task_queryset(self, ids, annotation_filter_options):
176164
)
177165
)
178166

179-
# Add FSM state annotation to tasks as well to avoid N+1 queries during export
180-
if (
181-
flag_set('fflag_feat_fit_568_finite_state_management', user=user)
182-
and flag_set('fflag_feat_fit_710_fsm_state_fields', user=user)
183-
and hasattr(qs, 'with_state')
184-
):
185-
qs = qs.with_state()
186-
187-
return qs
188-
189167
def get_export_data(self, task_filter_options=None, annotation_filter_options=None, serialization_options=None):
190168
"""
191169
serialization_options: None or Dict({

label_studio/data_export/serializers.py

Lines changed: 1 addition & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
from core.utils.common import load_func
55
from data_export.models import DataExport
66
from django.conf import settings
7-
from fsm.serializer_fields import FSMStateField
87
from label_studio_sdk._extensions.label_studio_tools.core.label_config import is_video_object_tracking
98
from label_studio_sdk._extensions.label_studio_tools.postprocessing.video import extract_key_frames
109
from ml.mixins import InteractiveMixin
@@ -27,30 +26,12 @@ class Meta:
2726
class AnnotationSerializer(FlexFieldsModelSerializer):
2827
completed_by = serializers.PrimaryKeyRelatedField(read_only=True)
2928
result = serializers.SerializerMethodField()
30-
state = FSMStateField(read_only=True) # FSM state for annotations
3129

3230
class Meta:
3331
model = Annotation
3432
fields = '__all__'
3533
expandable_fields = {'completed_by': (CompletedBySerializer,)}
3634

37-
def to_representation(self, instance):
38-
"""Override to conditionally exclude FSM state field when feature flags are disabled."""
39-
from core.current_request import CurrentContext
40-
from core.feature_flags import flag_set
41-
42-
ret = super().to_representation(instance)
43-
44-
# Remove state field from output if either feature flag is disabled
45-
user = CurrentContext.get_user()
46-
if not (
47-
flag_set('fflag_feat_fit_568_finite_state_management', user=user)
48-
and flag_set('fflag_feat_fit_710_fsm_state_fields', user=user)
49-
):
50-
ret.pop('state', None)
51-
52-
return ret
53-
5435
def get_result(self, obj):
5536
# run frames extraction on param, result and result type
5637
if (
@@ -67,13 +48,9 @@ class BaseExportDataSerializer(FlexFieldsModelSerializer):
6748
file_upload = serializers.ReadOnlyField(source='file_upload_name')
6849
drafts = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
6950
predictions = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
70-
state = FSMStateField(read_only=True) # FSM state for tasks
7151

7252
# resolve $undefined$ key in task data, if any
7353
def to_representation(self, task):
74-
from core.current_request import CurrentContext
75-
from core.feature_flags import flag_set
76-
7754
# avoid long project initializations
7855
project = getattr(self, '_project', None)
7956
if project is None:
@@ -88,17 +65,7 @@ def to_representation(self, task):
8865
)
8966
replace_task_data_undefined_with_config_field(data, project)
9067

91-
ret = super().to_representation(task)
92-
93-
# Remove state field from output if either feature flag is disabled
94-
user = CurrentContext.get_user()
95-
if not (
96-
flag_set('fflag_feat_fit_568_finite_state_management', user=user)
97-
and flag_set('fflag_feat_fit_710_fsm_state_fields', user=user)
98-
):
99-
ret.pop('state', None)
100-
101-
return ret
68+
return super().to_representation(task)
10269

10370
class Meta:
10471
model = Task

web/libs/datamanager/src/components/Common/Table/Table.jsx

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -526,9 +526,6 @@ const TaskSourceView = ({ content, onTaskLoad, sdkType }) => {
526526
formatted.annotations = response.annotations ?? [];
527527
formatted.predictions = response.predictions ?? [];
528528
}
529-
if (response.state) {
530-
formatted.state = response.state;
531-
}
532529
setSource(formatted);
533530
});
534531
}, []);

0 commit comments

Comments
 (0)