| 25 | |
| 26 | |
| 27 | class AnnotationSerializer(FlexFieldsModelSerializer): |
| 28 | completed_by = serializers.PrimaryKeyRelatedField(read_only=True) |
| 29 | result = serializers.SerializerMethodField() |
| 30 | state = FSMStateField(read_only=True) # FSM state for annotations |
| 31 | |
| 32 | class Meta: |
| 33 | model = Annotation |
| 34 | fields = '__all__' |
| 35 | expandable_fields = {'completed_by': (CompletedBySerializer,)} |
| 36 | |
| 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 | |
| 54 | def get_result(self, obj): |
| 55 | # run frames extraction on param, result and result type |
| 56 | if ( |
| 57 | obj.result |
| 58 | and self.context.get('interpolate_key_frames', False) |
| 59 | and is_video_object_tracking(parsed_config=obj.project.get_parsed_config()) |
| 60 | ): |
| 61 | return extract_key_frames(obj.result) |
| 62 | return obj.result |
| 63 | |
| 64 | |
| 65 | class BaseExportDataSerializer(FlexFieldsModelSerializer): |
no test coverage detected