(
experiment: Experiment,
target_status: str,
user: FFAdminUser,
)
| 505 | |
| 506 | |
| 507 | def transition_experiment_status( |
| 508 | experiment: Experiment, |
| 509 | target_status: str, |
| 510 | user: FFAdminUser, |
| 511 | ) -> Experiment: |
| 512 | valid_targets = VALID_STATUS_TRANSITIONS.get(experiment.status, set()) |
| 513 | if target_status not in valid_targets: |
| 514 | raise ValueError( |
| 515 | f"Cannot transition from '{experiment.status}' to '{target_status}'." |
| 516 | ) |
| 517 | |
| 518 | experiment.status = target_status |
| 519 | |
| 520 | if target_status == ExperimentStatus.RUNNING and not experiment.started_at: |
| 521 | experiment.started_at = timezone.now() |
| 522 | elif target_status == ExperimentStatus.COMPLETED: |
| 523 | experiment.ended_at = timezone.now() |
| 524 | |
| 525 | experiment.save() |
| 526 | create_experiment_audit_log(experiment, user, action=target_status) |
| 527 | return experiment |
| 528 | |
| 529 | |
| 530 | def _create_rollout_segment( |
no test coverage detected
searching dependent graphs…