11import typing
22
33from flag_engine .context .mappers import map_environment_identity_to_context
4+ from flag_engine .context .types import EvaluationContext
45from flag_engine .environments .models import EnvironmentModel
56from flag_engine .features .models import FeatureModel , FeatureStateModel
67from flag_engine .identities .models import IdentityModel
@@ -54,9 +55,16 @@ def get_identity_feature_states(
5455 :return: list of feature state models based on the environment, any matching
5556 segments and any specific identity overrides
5657 """
58+ context = map_environment_identity_to_context (
59+ environment = environment ,
60+ identity = identity ,
61+ override_traits = override_traits ,
62+ )
63+
5764 feature_states = list (
5865 _get_identity_feature_states_dict (
59- environment , identity , override_traits
66+ environment = environment ,
67+ context = context ,
6068 ).values ()
6169 )
6270 if environment .get_hide_disabled_flags ():
@@ -80,8 +88,15 @@ def get_identity_feature_state(
8088 :return: feature state model based on the environment, any matching
8189 segments and any specific identity overrides
8290 """
91+ context = map_environment_identity_to_context (
92+ environment = environment ,
93+ identity = identity ,
94+ override_traits = override_traits ,
95+ )
96+
8397 feature_states = _get_identity_feature_states_dict (
84- environment , identity , override_traits
98+ environment = environment ,
99+ context = context ,
85100 )
86101 matching_feature = next (
87102 filter (lambda feature : feature .name == feature_name , feature_states .keys ()),
@@ -96,23 +111,11 @@ def get_identity_feature_state(
96111
97112def _get_identity_feature_states_dict (
98113 environment : EnvironmentModel ,
99- identity : IdentityModel ,
100- override_traits : typing .Optional [typing .List [TraitModel ]],
114+ context : EvaluationContext ,
101115) -> typing .Dict [FeatureModel , FeatureStateModel ]:
102116 # Get feature states from the environment
103117 feature_states_by_feature = {fs .feature : fs for fs in environment .feature_states }
104118
105- context = map_environment_identity_to_context (
106- environment = environment ,
107- identity = identity ,
108- )
109- if override_traits :
110- if typing .TYPE_CHECKING : # pragma: no cover
111- assert context ["identity" ]
112- context ["identity" ].setdefault ("traits" , {}).update (
113- {trait .trait_key : trait .trait_value for trait in override_traits }
114- )
115-
116119 # Override with any feature states defined by matching segments
117120 for context_segment in get_context_segments (
118121 context = context ,
0 commit comments