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,17 @@ 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+ identity = identity ,
68+ context = context ,
6069 ).values ()
6170 )
6271 if environment .get_hide_disabled_flags ():
@@ -80,8 +89,16 @@ def get_identity_feature_state(
8089 :return: feature state model based on the environment, any matching
8190 segments and any specific identity overrides
8291 """
92+ context = map_environment_identity_to_context (
93+ environment = environment ,
94+ identity = identity ,
95+ override_traits = override_traits ,
96+ )
97+
8398 feature_states = _get_identity_feature_states_dict (
84- environment , identity , override_traits
99+ environment = environment ,
100+ identity = identity ,
101+ context = context ,
85102 )
86103 matching_feature = next (
87104 filter (lambda feature : feature .name == feature_name , feature_states .keys ()),
@@ -97,22 +114,11 @@ def get_identity_feature_state(
97114def _get_identity_feature_states_dict (
98115 environment : EnvironmentModel ,
99116 identity : IdentityModel ,
100- override_traits : typing . Optional [ typing . List [ TraitModel ]] ,
117+ context : EvaluationContext ,
101118) -> typing .Dict [FeatureModel , FeatureStateModel ]:
102119 # Get feature states from the environment
103120 feature_states_by_feature = {fs .feature : fs for fs in environment .feature_states }
104121
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-
116122 # Override with any feature states defined by matching segments
117123 for context_segment in get_context_segments (
118124 context = context ,
0 commit comments