Skip to content

Commit 6fb5c01

Browse files
unnest prod vs legacy comparisons
1 parent bf7871f commit 6fb5c01

File tree

1 file changed

+29
-18
lines changed

1 file changed

+29
-18
lines changed

mixpanel/flags/local_feature_flags.py

Lines changed: 29 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)