Skip to content

Commit f8fab5a

Browse files
authored
fix(trait/create): use update_or_create to avoid race condition (#371)
1 parent 880acab commit f8fab5a

File tree

1 file changed

+3
-7
lines changed

1 file changed

+3
-7
lines changed

api/environments/identities/models.py

+3-7
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,6 @@ def update_traits(self, trait_data_items):
159159
"""
160160
current_traits = self.get_all_user_traits()
161161

162-
new_traits = []
163162
keys_to_delete = []
164163

165164
for trait_data_item in trait_data_items:
@@ -180,12 +179,9 @@ def update_traits(self, trait_data_items):
180179
setattr(current_trait, attr, value)
181180
current_trait.save()
182181
else:
183-
# create a new trait and append it to the list of new traits
184-
new_traits.append(
185-
Trait.objects.create(
186-
trait_key=trait_key, identity=self, **trait_value_data
187-
)
188-
)
182+
# use update_or_create to avoid race condition
183+
kwargs = {"trait_key": trait_key, "identity": self}
184+
Trait.objects.update_or_create(defaults=trait_value_data, **kwargs)
189185

190186
# delete the traits that had their keys set to None
191187
if keys_to_delete:

0 commit comments

Comments
 (0)