11import typing
2+ from collections import defaultdict
23
34from flag_engine .context .types import (
45 EvaluationContext ,
1718from flag_engine .result .types import FlagResult
1819from flag_engine .segments .models import SegmentRuleModel
1920
21+ OverrideKey = typing .Tuple [
22+ str ,
23+ str ,
24+ bool ,
25+ typing .Any ,
26+ ]
27+ OverridesKey = typing .Tuple [OverrideKey , ...]
28+
2029
2130def map_environment_identity_to_context (
2231 environment : EnvironmentModel ,
@@ -47,9 +56,9 @@ def map_environment_identity_to_context(
4756 # Concatenate feature states overriden for identities
4857 # to segment contexts
4958 features_to_identifiers : typing .Dict [
50- typing . Tuple [ typing . Tuple [ str , str , bool , typing . Any ], ...] ,
59+ OverridesKey ,
5160 typing .List [str ],
52- ] = {}
61+ ] = defaultdict ( list )
5362 for identity_override in (* environment .identity_overrides , identity ):
5463 identity_features : typing .List [FeatureStateModel ] = (
5564 identity_override .identity_features
@@ -65,9 +74,7 @@ def map_environment_identity_to_context(
6574 )
6675 for feature_state in sorted (identity_features , key = _get_name )
6776 )
68- features_to_identifiers .setdefault (overrides_key , []).append (
69- identity_override .identifier
70- )
77+ features_to_identifiers [overrides_key ].append (identity_override .identifier )
7178 for overrides_key , identifiers in features_to_identifiers .items ():
7279 segment_name = f"overrides_{ abs (hash (overrides_key ))} "
7380 segments [segment_name ] = SegmentContext (
@@ -140,7 +147,8 @@ def map_feature_states_to_feature_contexts(
140147 MultivariateFeatureStateValueModel
141148 ]
142149 if (
143- multivariate_feature_state_values := feature_state .multivariate_feature_state_values
150+ multivariate_feature_state_values
151+ := feature_state .multivariate_feature_state_values
144152 ):
145153 feature_ctx_data ["variants" ] = [
146154 {
0 commit comments