@@ -318,37 +318,48 @@ def _get_assigned_rollout(
318318 return rollout
319319
320320 return None
321- def _is_runtime_rules_engine_satisfied (self , rollout : Rollout , context : Dict [str , Any ]) -> bool :
322- if not rollout .runtime_evaluation_rule :
323- return self ._is_runtime_evaluation_satisfied (rollout , context )
321+
322+ def _get_runtime_parameters (self , context : Dict [str , Any ]) -> Optional [Dict [str , Any ]]:
324323 if not (custom_properties := context .get ("custom_properties" )):
325- return False
324+ return None
326325 if not isinstance (custom_properties , dict ):
327- return False
328- try :
329- result = json_logic .jsonLogic (rollout .runtime_evaluation_rule , custom_properties )
330- return bool (result )
331- except Exception :
332- logger .exception ("Error evaluating runtime evaluation rule" )
333- return False
326+ return None
327+ return custom_properties
328+
329+ def _is_runtime_rules_engine_satisfied (self , rollout : Rollout , context : Dict [str , Any ]) -> bool :
330+ if rollout .runtime_evaluation_rule :
331+ parameters_for_runtime_rule = self ._get_runtime_parameters (context )
332+ if parameters_for_runtime_rule is None :
333+ return False
334334
335- def _is_runtime_evaluation_satisfied (
335+ try :
336+ result = json_logic .jsonLogic (rollout .runtime_evaluation_rule , parameters_for_runtime_rule )
337+ return bool (result )
338+ except Exception :
339+ logger .exception ("Error evaluating runtime evaluation rule" )
340+ return False
341+
342+ elif rollout .runtime_evaluation_definition : # legacy field supporting only exact match conditions
343+ return self ._is_legacy_runtime_evaluation_rule_satisfied (rollout , context )
344+
345+ else :
346+ return True
347+
348+ def _is_legacy_runtime_evaluation_rule_satisfied (
336349 self , rollout : Rollout , context : Dict [str , Any ]
337350 ) -> bool :
338351 if not rollout .runtime_evaluation_definition :
339352 return True
340353
341- if not (custom_properties := context .get ("custom_properties" )):
342- return False
343-
344- if not isinstance (custom_properties , dict ):
354+ parameters_for_runtime_rule = self ._get_runtime_parameters (context )
355+ if parameters_for_runtime_rule is None :
345356 return False
346357
347358 for key , expected_value in rollout .runtime_evaluation_definition .items ():
348- if key not in custom_properties :
359+ if key not in parameters_for_runtime_rule :
349360 return False
350361
351- actual_value = custom_properties [key ]
362+ actual_value = parameters_for_runtime_rule [key ]
352363 if actual_value .casefold () != expected_value .casefold ():
353364 return False
354365
0 commit comments