| 218 | |
| 219 | |
| 220 | class ExperimentRolloutSerializer(serializers.Serializer): # type: ignore[type-arg] |
| 221 | enabled = serializers.BooleanField(required=True) |
| 222 | rollout_percentage = serializers.FloatField( |
| 223 | required=True, min_value=0, max_value=100 |
| 224 | ) |
| 225 | feature_state_value = FeatureValueSerializer(required=True) |
| 226 | multivariate_feature_state_values = MultivariateValueSerializer( |
| 227 | many=True, required=False |
| 228 | ) |
| 229 | |
| 230 | @staticmethod |
| 231 | def to_spec(data: dict[str, Any], request: Any) -> RolloutSpec: |
| 232 | value = data["feature_state_value"] |
| 233 | return RolloutSpec( |
| 234 | enabled=data["enabled"], |
| 235 | rollout_percentage=data["rollout_percentage"], |
| 236 | feature_state_value=value["value"], |
| 237 | value_type=value["type"], |
| 238 | multivariate_values=[ |
| 239 | MultivariateValueChangeSet( |
| 240 | multivariate_feature_option_id=mv["multivariate_feature_option"], |
| 241 | percentage_allocation=mv["percentage_allocation"], |
| 242 | ) |
| 243 | for mv in data.get("multivariate_feature_state_values", []) |
| 244 | ], |
| 245 | author=AuthorData.from_request(request), |
| 246 | ) |
| 247 | |
| 248 | |
| 249 | class ExperimentSerializer(serializers.ModelSerializer): # type: ignore[type-arg] |
no test coverage detected
searching dependent graphs…