33
44from django .apps import apps
55from django .conf import settings
6- from django .contrib .contenttypes .models import ContentType
76from django .db import models
87from flag_engine .segments .constants import PERCENTAGE_SPLIT
98from rest_framework import serializers
@@ -118,7 +117,8 @@ def create(self, validated_data: dict[str, Any]) -> "Segment":
118117 self ._update_or_create_segment_rules (
119118 rules_data , segment = segment , is_create = True
120119 )
121- self ._update_or_create_metadata (metadata_data , segment = segment )
120+ self .update_metadata (segment , metadata_data )
121+ segment .refresh_from_db ()
122122 return segment
123123
124124 def update (
@@ -139,7 +139,7 @@ def update(
139139
140140 try :
141141 self ._update_segment_rules (rules_data , segment = instance )
142- self ._update_or_create_metadata ( metadata_data , segment = instance )
142+ self .update_metadata ( instance , metadata_data )
143143
144144 # remove rules from validated data to prevent error trying to create segment with nested rules
145145 del validated_data ["rules" ]
@@ -250,33 +250,6 @@ def _update_or_create_segment_rules(
250250 child_rules , rule = child_rule , is_create = is_create
251251 )
252252
253- def _update_or_create_metadata (
254- self ,
255- metadata_data : list [dict [str , Any ]],
256- segment : "Segment | None" = None ,
257- ) -> None :
258- Metadata = apps .get_model ("metadata" , "Metadata" )
259- Segment = apps .get_model ("segments" , "Segment" )
260- assert segment
261- if len (metadata_data ) == 0 :
262- Metadata .objects .filter (object_id = segment .id ).delete ()
263- return
264- if metadata_data is not None :
265- for metadata_item in metadata_data :
266- metadata_model_field = metadata_item .pop ("model_field" , None )
267- if metadata_item .get ("delete" ):
268- Metadata .objects .filter (model_field = metadata_model_field ).delete ()
269- continue
270-
271- Metadata .objects .update_or_create (
272- model_field = metadata_model_field ,
273- defaults = {
274- ** metadata_item ,
275- "content_type" : ContentType .objects .get_for_model (Segment ),
276- "object_id" : segment .id ,
277- },
278- )
279-
280253 @staticmethod
281254 def _update_or_create_segment_rule (
282255 rule_data : dict [str , Any ],
0 commit comments