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

Method clone

api/features/models.py:658–704  ·  view source on GitHub ↗
(
        self,
        env: "Environment",
        live_from: datetime.datetime = None,  # type: ignore[assignment]
        as_draft: bool = False,
        version: int = None,  # type: ignore[assignment]
        environment_feature_version: "EnvironmentFeatureVersion" = None,  # type: ignore[assignment]
    )

Source from the content-addressed store, hash-verified

656 return bool(self.live_from and self.live_from > timezone.now())
657
658 def clone(
659 self,
660 env: "Environment",
661 live_from: datetime.datetime = None, # type: ignore[assignment]
662 as_draft: bool = False,
663 version: int = None, # type: ignore[assignment]
664 environment_feature_version: "EnvironmentFeatureVersion" = None, # type: ignore[assignment]
665 ) -> "FeatureState":
666 # Cloning the Identity is not allowed because they are closely tied
667 # to the environment
668 assert self.identity is None
669 clone = deepcopy(self)
670 clone.id = None
671 clone.uuid = uuid.uuid4()
672
673 if self.feature_segment:
674 # We can only create a new feature segment if we are cloning to another environment,
675 # or we are creating the feature segment in a new version (versioning v2). This is
676 # due to the default unique constraint on the FeatureSegment model which means that
677 # the same feature, segment and environment combination cannot exist more than once.
678 clone.feature_segment = (
679 self.feature_segment.clone(
680 environment=env,
681 environment_feature_version=environment_feature_version,
682 )
683 if env != self.environment or environment_feature_version is not None
684 else self.feature_segment
685 )
686
687 clone.environment = env
688 clone.version = (
689 None if as_draft or environment_feature_version else version or self.version
690 )
691 clone.live_from = live_from
692 clone.environment_feature_version = environment_feature_version
693 clone.save()
694 # clone the related objects
695 self.feature_state_value.clone(clone)
696
697 if self.feature.type == MULTIVARIATE:
698 mv_values = [
699 mv_value.clone(feature_state=clone, persist=False)
700 for mv_value in self.multivariate_feature_state_values.all()
701 ]
702 MultivariateFeatureStateValue.objects.bulk_create(mv_values)
703
704 return clone
705
706 def generate_feature_state_value_data(self, value): # type: ignore[no-untyped-def]
707 """

Callers 1

Calls 3

bulk_createMethod · 0.80
saveMethod · 0.45
allMethod · 0.45

Tested by

no test coverage detected