2222)
2323from flagsmith .models import Segment
2424from flagsmith .types import (
25+ FeatureMetadata ,
2526 SDKEvaluationContext ,
2627 SegmentMetadata ,
2728 StreamEvent ,
2829 TraitConfig ,
2930)
3031
3132OverrideKey = typing .Tuple [
32- str ,
33+ int ,
3334 str ,
3435 bool ,
3536 typing .Any ,
@@ -148,7 +149,7 @@ def map_environment_document_to_context(
148149
149150def _map_identity_overrides_to_segments (
150151 identity_overrides : list [IdentityModel ],
151- ) -> dict [str , SegmentContext [SegmentMetadata ]]:
152+ ) -> dict [str , SegmentContext [SegmentMetadata , FeatureMetadata ]]:
152153 features_to_identifiers : typing .Dict [
153154 OverridesKey ,
154155 typing .List [str ],
@@ -159,7 +160,7 @@ def _map_identity_overrides_to_segments(
159160 continue
160161 overrides_key = tuple (
161162 (
162- str ( feature_state ["feature" ]["id" ]) ,
163+ feature_state ["feature" ]["id" ],
163164 feature_state ["feature" ]["name" ],
164165 feature_state ["enabled" ],
165166 feature_state ["feature_state_value" ],
@@ -170,7 +171,13 @@ def _map_identity_overrides_to_segments(
170171 )
171172 )
172173 features_to_identifiers [overrides_key ].append (identity_override ["identifier" ])
173- segment_contexts : typing .Dict [str , SegmentContext [SegmentMetadata ]] = {}
174+ segment_contexts : typing .Dict [
175+ str ,
176+ SegmentContext [
177+ SegmentMetadata ,
178+ FeatureMetadata ,
179+ ],
180+ ] = {}
174181 for overrides_key , identifiers in features_to_identifiers .items ():
175182 # Create a segment context for each unique set of overrides
176183 # Generate a unique key to avoid collisions
@@ -193,13 +200,14 @@ def _map_identity_overrides_to_segments(
193200 overrides = [
194201 {
195202 "key" : "" , # Identity overrides never carry multivariate options
196- "feature_key" : feature_key ,
203+ "feature_key" : str ( flagsmith_id ) ,
197204 "name" : feature_name ,
198205 "enabled" : feature_enabled ,
199206 "value" : feature_value ,
200207 "priority" : float ("-inf" ), # Highest possible priority
208+ "metadata" : {"flagsmith_id" : int (flagsmith_id )},
201209 }
202- for feature_key , feature_name , feature_enabled , feature_value in overrides_key
210+ for flagsmith_id , feature_name , feature_enabled , feature_value in overrides_key
203211 ],
204212 metadata = SegmentMetadata (source = "identity_overrides" ),
205213 )
@@ -230,16 +238,18 @@ def _map_environment_document_rules_to_context_rules(
230238
231239def _map_environment_document_feature_states_to_feature_contexts (
232240 feature_states : list [FeatureStateModel ],
233- ) -> typing .Iterable [FeatureContext ]:
241+ ) -> typing .Iterable [FeatureContext [ FeatureMetadata ] ]:
234242 for feature_state in feature_states :
235- feature_context = FeatureContext (
243+ metadata : FeatureMetadata = {"flagsmith_id" : feature_state ["feature" ]["id" ]}
244+ feature_context = FeatureContext [FeatureMetadata ](
236245 key = str (
237246 feature_state .get ("django_id" ) or feature_state ["featurestate_uuid" ]
238247 ),
239248 feature_key = str (feature_state ["feature" ]["id" ]),
240249 name = feature_state ["feature" ]["name" ],
241250 enabled = feature_state ["enabled" ],
242251 value = feature_state ["feature_state_value" ],
252+ metadata = metadata ,
243253 )
244254 if multivariate_feature_state_values := feature_state .get (
245255 "multivariate_feature_state_values"
0 commit comments