Given a list of trait data items, validated by TraitSerializerFull, generate a list of TraitModel objects for the given identity. :param trait_data_items: list of dictionaries validated by TraitSerializerFull :param persist: determines whether the traits should be p
(
self,
trait_data_items: list[SDKTraitData],
persist: bool = False,
)
| 177 | return "Account %s" % self.identifier |
| 178 | |
| 179 | def generate_traits( |
| 180 | self, |
| 181 | trait_data_items: list[SDKTraitData], |
| 182 | persist: bool = False, |
| 183 | ) -> list[Trait]: |
| 184 | """ |
| 185 | Given a list of trait data items, validated by TraitSerializerFull, generate |
| 186 | a list of TraitModel objects for the given identity. |
| 187 | |
| 188 | :param trait_data_items: list of dictionaries validated by TraitSerializerFull |
| 189 | :param persist: determines whether the traits should be persisted to db |
| 190 | :return: list of TraitModels |
| 191 | """ |
| 192 | trait_models = [] |
| 193 | trait_models_to_persist = [] |
| 194 | |
| 195 | for trait_data_item in trait_data_items: |
| 196 | # exclude traits with null values |
| 197 | if (trait_value := trait_data_item["trait_value"]) is None: |
| 198 | continue |
| 199 | |
| 200 | trait_key = trait_data_item["trait_key"] |
| 201 | trait = Trait( |
| 202 | trait_key=trait_key, |
| 203 | identity=self, |
| 204 | **Trait.generate_trait_value_data(trait_value), |
| 205 | ) |
| 206 | if trait_data_item.get("transient"): |
| 207 | trait.transient = True |
| 208 | else: |
| 209 | trait_models_to_persist.append(trait) |
| 210 | trait_models.append(trait) |
| 211 | |
| 212 | if persist: |
| 213 | Trait.objects.bulk_create(trait_models_to_persist) |
| 214 | |
| 215 | return trait_models |
| 216 | |
| 217 | def update_traits( |
| 218 | self, |