MCPcopy Create free account
hub / github.com/Flagsmith/flagsmith / UpdateFlagV2Serializer

Class UpdateFlagV2Serializer

api/features/feature_states/serializers.py:166–248  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

164
165
166class UpdateFlagV2Serializer(BaseFeatureUpdateSerializer):
167 feature = FeatureIdentifierSerializer(required=True)
168 environment_default = EnvironmentDefaultSerializer(required=True)
169 segment_overrides = SegmentOverrideSerializer(many=True, required=False)
170
171 def validate_segment_overrides(
172 self,
173 value: list[dict], # type: ignore[type-arg]
174 ) -> list[dict]: # type: ignore[type-arg]
175 if not value:
176 return value
177
178 segment_ids = [override["segment_id"] for override in value]
179 if len(segment_ids) != len(set(segment_ids)):
180 raise serializers.ValidationError(
181 "Duplicate segment_id values are not allowed"
182 )
183
184 # TODO: optimise this once out of experimentation
185 for segment_id in segment_ids:
186 self.validate_segment_id(segment_id)
187
188 return value
189
190 def validate(self, data: dict) -> dict: # type: ignore[type-arg]
191 overrides = data.get("segment_overrides", [])
192 if any(o.get("multivariate_feature_state_values") for o in overrides):
193 feature = Feature.objects.filter(
194 project_id=self.environment.project_id, **data["feature"]
195 ).first()
196 if feature is not None:
197 for override in overrides:
198 validate_multivariate_state_values(
199 feature,
200 override.get("multivariate_feature_state_values", []),
201 )
202 return data
203
204 @property
205 def change_set_v2(self) -> FlagChangeSetV2:
206 validated_data = self.validated_data
207
208 env_default = validated_data["environment_default"]
209 env_value_data = env_default["value"]
210
211 segment_overrides_data = validated_data.get("segment_overrides", [])
212 segment_overrides = []
213
214 for override_data in segment_overrides_data:
215 value_data = override_data["value"]
216
217 multivariate_data = override_data.get("multivariate_feature_state_values")
218 segment_override = SegmentOverrideChangeSet(
219 segment_id=override_data["segment_id"],
220 enabled=override_data["enabled"],
221 feature_state_value=value_data["value"],
222 type_=value_data["type"],
223 priority=override_data.get("priority"),

Used in the wild real call sites across dependent graphs

searching dependent graphs…