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

Class IdentityModel

api/util/engine_models/identities/models.py:37–93  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

35
36
37class IdentityModel(BaseModel):
38 identifier: str
39 environment_api_key: str
40 created_date: datetime.datetime = Field(default_factory=utcnow_with_tz)
41 identity_features: IdentityFeaturesList = Field(
42 default_factory=IdentityFeaturesList
43 )
44 identity_traits: typing.List[TraitModel] = Field(default_factory=list)
45 identity_uuid: UUID4 = Field(default_factory=uuid.uuid4)
46 django_id: typing.Optional[int] = None
47
48 dashboard_alias: typing.Optional[str] = None
49
50 @computed_field # type: ignore[prop-decorator]
51 @property
52 def composite_key(self) -> str:
53 return self.generate_composite_key(self.environment_api_key, self.identifier)
54
55 @staticmethod
56 def generate_composite_key(env_key: str, identifier: str) -> str:
57 return f"{env_key}_{identifier}"
58
59 def get_hash_key(self, use_identity_composite_key_for_hashing: bool) -> str:
60 return (
61 self.composite_key
62 if use_identity_composite_key_for_hashing
63 else self.identifier
64 )
65
66 def update_traits(
67 self, traits: typing.List[TraitModel]
68 ) -> typing.Tuple[typing.List[TraitModel], bool]:
69 existing_traits = {trait.trait_key: trait for trait in self.identity_traits}
70 traits_changed = False
71
72 for trait in traits:
73 existing_trait = existing_traits.get(trait.trait_key)
74
75 if trait.trait_value is None and existing_trait:
76 existing_traits.pop(trait.trait_key)
77 traits_changed = True
78
79 elif getattr(existing_trait, "trait_value", None) != trait.trait_value:
80 existing_traits[trait.trait_key] = trait
81 traits_changed = True
82
83 self.identity_traits = list(existing_traits.values())
84 return self.identity_traits, traits_changed
85
86 def prune_features(self, valid_feature_names: typing.List[str]) -> None:
87 self.identity_features = IdentityFeaturesList(
88 [
89 fs
90 for fs in self.identity_features
91 if fs.feature.name in valid_feature_names
92 ]
93 )

Callers 3

create_identityFunction · 0.90
initialMethod · 0.90
map_identity_to_engineFunction · 0.90

Calls

no outgoing calls

Tested by 1

create_identityFunction · 0.72

Used in the wild real call sites across dependent graphs

searching dependent graphs…