@@ -431,7 +431,7 @@ def evaluate_percent_condition(self, percent_condition,
431431 True if the condition is met, False otherwise.
432432 """
433433 if not context .get ('randomization_id' ):
434- logger .warning ("Missing randomization ID for percent condition." )
434+ logger .warning ("Missing randomization_id in context for evaluating percent condition." )
435435 return False
436436
437437 seed = percent_condition .get ('seed' )
@@ -442,8 +442,8 @@ def evaluate_percent_condition(self, percent_condition,
442442 logger .warning ("Missing percent operator for percent condition." )
443443 return False
444444 if micro_percent_range :
445- norm_percent_upper_bound = micro_percent_range .get ('microPercentUpperBound' )
446- norm_percent_lower_bound = micro_percent_range .get ('microPercentLowerBound' )
445+ norm_percent_upper_bound = micro_percent_range .get ('microPercentUpperBound' ) or 0
446+ norm_percent_lower_bound = micro_percent_range .get ('microPercentLowerBound' ) or 0
447447 else :
448448 norm_percent_upper_bound = 0
449449 norm_percent_lower_bound = 0
@@ -503,7 +503,7 @@ def evaluate_custom_signal_condition(self, custom_signal_condition,
503503 actual_custom_signal_value = context .get (custom_signal_key ) or {}
504504
505505 if not actual_custom_signal_value :
506- logger .warning ("Custom signal value not found in context: %s" , custom_signal_key )
506+ logger .debug ("Custom signal value not found in context: %s" , custom_signal_key )
507507 return False
508508
509509 if custom_signal_operator == CustomSignalOperator .STRING_CONTAINS .value :
@@ -525,53 +525,65 @@ def evaluate_custom_signal_condition(self, custom_signal_condition,
525525
526526 # For numeric operators only one target value is allowed.
527527 if custom_signal_operator == CustomSignalOperator .NUMERIC_LESS_THAN .value :
528- return self ._compare_numbers (target_custom_signal_values [0 ],
528+ return self ._compare_numbers (custom_signal_key ,
529+ target_custom_signal_values [0 ],
529530 actual_custom_signal_value ,
530531 lambda r : r < 0 )
531532 if custom_signal_operator == CustomSignalOperator .NUMERIC_LESS_EQUAL .value :
532- return self ._compare_numbers (target_custom_signal_values [0 ],
533+ return self ._compare_numbers (custom_signal_key ,
534+ target_custom_signal_values [0 ],
533535 actual_custom_signal_value ,
534536 lambda r : r <= 0 )
535537 if custom_signal_operator == CustomSignalOperator .NUMERIC_EQUAL .value :
536- return self ._compare_numbers (target_custom_signal_values [0 ],
538+ return self ._compare_numbers (custom_signal_key ,
539+ target_custom_signal_values [0 ],
537540 actual_custom_signal_value ,
538541 lambda r : r == 0 )
539542 if custom_signal_operator == CustomSignalOperator .NUMERIC_NOT_EQUAL .value :
540- return self ._compare_numbers (target_custom_signal_values [0 ],
543+ return self ._compare_numbers (custom_signal_key ,
544+ target_custom_signal_values [0 ],
541545 actual_custom_signal_value ,
542546 lambda r : r != 0 )
543547 if custom_signal_operator == CustomSignalOperator .NUMERIC_GREATER_THAN .value :
544- return self ._compare_numbers (target_custom_signal_values [0 ],
548+ return self ._compare_numbers (custom_signal_key ,
549+ target_custom_signal_values [0 ],
545550 actual_custom_signal_value ,
546551 lambda r : r > 0 )
547552 if custom_signal_operator == CustomSignalOperator .NUMERIC_GREATER_EQUAL .value :
548- return self ._compare_numbers (target_custom_signal_values [0 ],
553+ return self ._compare_numbers (custom_signal_key ,
554+ target_custom_signal_values [0 ],
549555 actual_custom_signal_value ,
550556 lambda r : r >= 0 )
551557
552558 # For semantic operators only one target value is allowed.
553559 if custom_signal_operator == CustomSignalOperator .SEMANTIC_VERSION_LESS_THAN .value :
554- return self ._compare_semantic_versions (target_custom_signal_values [0 ],
560+ return self ._compare_semantic_versions (custom_signal_key ,
561+ target_custom_signal_values [0 ],
555562 actual_custom_signal_value ,
556563 lambda r : r < 0 )
557564 if custom_signal_operator == CustomSignalOperator .SEMANTIC_VERSION_LESS_EQUAL .value :
558- return self ._compare_semantic_versions (target_custom_signal_values [0 ],
565+ return self ._compare_semantic_versions (custom_signal_key ,
566+ target_custom_signal_values [0 ],
559567 actual_custom_signal_value ,
560568 lambda r : r <= 0 )
561569 if custom_signal_operator == CustomSignalOperator .SEMANTIC_VERSION_EQUAL .value :
562- return self ._compare_semantic_versions (target_custom_signal_values [0 ],
570+ return self ._compare_semantic_versions (custom_signal_key ,
571+ target_custom_signal_values [0 ],
563572 actual_custom_signal_value ,
564573 lambda r : r == 0 )
565574 if custom_signal_operator == CustomSignalOperator .SEMANTIC_VERSION_NOT_EQUAL .value :
566- return self ._compare_semantic_versions (target_custom_signal_values [0 ],
575+ return self ._compare_semantic_versions (custom_signal_key ,
576+ target_custom_signal_values [0 ],
567577 actual_custom_signal_value ,
568578 lambda r : r != 0 )
569579 if custom_signal_operator == CustomSignalOperator .SEMANTIC_VERSION_GREATER_THAN .value :
570- return self ._compare_semantic_versions (target_custom_signal_values [0 ],
580+ return self ._compare_semantic_versions (custom_signal_key ,
581+ target_custom_signal_values [0 ],
571582 actual_custom_signal_value ,
572583 lambda r : r > 0 )
573584 if custom_signal_operator == CustomSignalOperator .SEMANTIC_VERSION_GREATER_EQUAL .value :
574- return self ._compare_semantic_versions (target_custom_signal_values [0 ],
585+ return self ._compare_semantic_versions (custom_signal_key ,
586+ target_custom_signal_values [0 ],
575587 actual_custom_signal_value ,
576588 lambda r : r >= 0 )
577589 logger .warning ("Unknown custom signal operator: %s" , custom_signal_operator )
@@ -597,22 +609,25 @@ def _compare_strings(self, target_values, actual_value, predicate_fn) -> bool:
597609 return True
598610 return False
599611
600- def _compare_numbers (self , target_value , actual_value , predicate_fn ) -> bool :
612+ def _compare_numbers (self , custom_signal_key , target_value , actual_value , predicate_fn ) -> bool :
601613 try :
602614 target = float (target_value )
603615 actual = float (actual_value )
604616 result = - 1 if actual < target else 1 if actual > target else 0
605617 return predicate_fn (result )
606618 except ValueError :
607- logger .warning ("Invalid numeric value for comparison." )
619+ logger .warning ("Invalid numeric value for comparison for custom signal key %s." ,
620+ custom_signal_key )
608621 return False
609622
610- def _compare_semantic_versions (self , target_value , actual_value , predicate_fn ) -> bool :
623+ def _compare_semantic_versions (self , custom_signal_key ,
624+ target_value , actual_value , predicate_fn ) -> bool :
611625 """Compares the actual semantic version value of a signal against a target value.
612626 Calls the predicate function with -1, 0, 1 if actual is less than, equal to,
613627 or greater than target.
614628
615629 Args:
630+ custom_signal_key: The custom singal for which the evaluation is being performed.
616631 target_values: A list of target string values.
617632 actual_value: The actual value to compare, which can be a string or number.
618633 predicate_fn: A function that takes an integer (-1, 0, or 1) and returns a boolean.
@@ -621,13 +636,15 @@ def _compare_semantic_versions(self, target_value, actual_value, predicate_fn) -
621636 bool: True if the predicate function returns True for the result of the comparison,
622637 False otherwise.
623638 """
624- return self ._compare_versions (str (actual_value ),
639+ return self ._compare_versions (custom_signal_key , str (actual_value ),
625640 str (target_value ), predicate_fn )
626641
627- def _compare_versions (self , sem_version_1 , sem_version_2 , predicate_fn ) -> bool :
642+ def _compare_versions (self , custom_signal_key ,
643+ sem_version_1 , sem_version_2 , predicate_fn ) -> bool :
628644 """Compares two semantic version strings.
629645
630646 Args:
647+ custom_signal_key: The custom singal for which the evaluation is being performed.
631648 sem_version_1: The first semantic version string.
632649 sem_version_2: The second semantic version string.
633650 predicate_fn: A function that takes an integer and returns a boolean.
@@ -651,7 +668,9 @@ def _compare_versions(self, sem_version_1, sem_version_2, predicate_fn) -> bool:
651668 return predicate_fn (1 )
652669 return predicate_fn (0 )
653670 except ValueError :
654- logger .warning ("Invalid semantic version format for comparison." )
671+ logger .warning (
672+ "Invalid semantic version format for comparison for custom signal key %s." ,
673+ custom_signal_key )
655674 return False
656675
657676async def get_server_template (app : App = None , default_config : Optional [Dict [str , str ]] = None ):
0 commit comments