in experimenter/experimenter/legacy/legacy_experiments/models.py [0:0]
def clone(self, name, user):
cloned = copy.copy(self)
variants = ExperimentVariant.objects.filter(experiment=self)
set_to_none_fields = [
"addon_experiment_id",
"addon_release_url",
"recipe_slug",
"normandy_id",
"other_normandy_ids",
"bugzilla_id",
"review_science",
"review_engineering",
"review_qa_requested",
"review_intent_to_ship",
"review_bugzilla",
"review_qa",
"review_relman",
"review_advisory",
"review_legal",
"review_ux",
"review_security",
"review_vp",
"review_data_steward",
"review_comms",
"review_impacted_teams",
"proposed_start_date",
"results_url",
"results_initial",
"results_lessons_learned",
"results_fail_to_launch",
"results_recipe_errors",
"results_restarts",
"results_low_enrollment",
"results_early_end",
"results_no_usable_data",
"results_failures_notes",
"results_changes_to_firefox",
"results_data_for_hypothesis",
"results_confidence",
"results_measure_impact",
"results_impact_notes",
]
cloned.id = None
cloned.name = name
cloned.slug = slugify(cloned.name)
cloned.status = ExperimentConstants.STATUS_DRAFT
cloned.owner = user
cloned.parent = self
cloned.archived = False
cloned.is_paused = False
cloned.is_high_population = False
for field in set_to_none_fields:
setattr(cloned, field, None)
cloned.save()
# for the variants on the old experiment, duplicate each
# with id=none, set the experiment foreignkey to the new clone
for variant in variants:
variant.id = None
variant.experiment = cloned
variant.save()
if self.is_multi_pref:
original_variant = self.variants.get(slug=variant.slug)
for preference in original_variant.preferences.all():
preference.variant = variant
preference.id = None
preference.save()
cloned.projects.set(self.projects.all())
cloned.related_to.add(self)
cloned.countries.add(*self.countries.all())
cloned.locales.add(*self.locales.all())
ExperimentChangeLog.objects.create(
experiment=cloned,
changed_by=get_user_model().objects.get(id=user.id),
old_status=None,
new_status=ExperimentConstants.STATUS_DRAFT,
message=ExperimentChangeLog.STATUS_CLONED,
)
return cloned