(self, validated_data: dict[str, Any])
| 323 | ) |
| 324 | |
| 325 | def create(self, validated_data: dict[str, Any]) -> Experiment: |
| 326 | metrics: list[dict[str, Any]] = validated_data.pop("metrics", []) |
| 327 | rollout: dict[str, Any] | None = validated_data.pop("experiment_rollout", None) |
| 328 | with transaction.atomic(): |
| 329 | experiment: Experiment = super().create(validated_data) |
| 330 | ExperimentMetric.objects.bulk_create( |
| 331 | ExperimentMetric( |
| 332 | experiment=experiment, |
| 333 | metric=entry["metric"], |
| 334 | expected_direction=entry["expected_direction"], |
| 335 | ) |
| 336 | for entry in metrics |
| 337 | ) |
| 338 | if rollout is not None: |
| 339 | apply_experiment_rollout( |
| 340 | experiment, |
| 341 | ExperimentRolloutSerializer.to_spec( |
| 342 | rollout, self.context["request"] |
| 343 | ), |
| 344 | ) |
| 345 | return experiment |
| 346 | |
| 347 | |
| 348 | class ExperimentFeatureSerializer(serializers.ModelSerializer): # type: ignore[type-arg] |
no test coverage detected