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

Method clone

api/segments/models.py:152–181  ·  view source on GitHub ↗

Create a revision of the segment

(self, is_revision: bool = False, **extra_attrs: typing.Any)

Source from the content-addressed store, hash-verified

150
151 @transaction.atomic
152 def clone(self, is_revision: bool = False, **extra_attrs: typing.Any) -> "Segment":
153 """
154 Create a revision of the segment
155 """
156 cloned_segment = deepcopy(self)
157 cloned_segment.pk = None
158 cloned_segment.uuid = uuid.uuid4()
159 cloned_segment.version_of = None # Unset for now
160 cloned_segment.version = 0 # Unset for now
161 for attr_name, value in extra_attrs.items():
162 setattr(cloned_segment, attr_name, value)
163 cloned_segment.save()
164
165 cloned_segment.copy_rules_and_conditions_from(self)
166
167 # Handle versioning
168 version_of = self if is_revision else cloned_segment
169 cloned_segment.version_of = extra_attrs.get("version_of", version_of)
170 cloned_segment.version = self.version if is_revision else 1
171 Segment.objects.filter(pk=cloned_segment.pk).update(
172 version_of=cloned_segment.version_of,
173 version=cloned_segment.version,
174 )
175
176 # Increase self version
177 if is_revision:
178 self.version = (self.version or 1) + 1
179 Segment.objects.filter(pk=self.pk).update(version=self.version)
180
181 return cloned_segment
182
183 def copy_rules_and_conditions_from(self, source_segment: "Segment") -> None:
184 copy_segment_rules_and_conditions(

Calls 4

saveMethod · 0.45
getMethod · 0.45
updateMethod · 0.45