@@ -431,7 +431,7 @@ def evaluate_percent_condition(self, percent_condition,
431
431
True if the condition is met, False otherwise.
432
432
"""
433
433
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." )
435
435
return False
436
436
437
437
seed = percent_condition .get ('seed' )
@@ -442,8 +442,8 @@ def evaluate_percent_condition(self, percent_condition,
442
442
logger .warning ("Missing percent operator for percent condition." )
443
443
return False
444
444
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
447
447
else :
448
448
norm_percent_upper_bound = 0
449
449
norm_percent_lower_bound = 0
@@ -503,7 +503,7 @@ def evaluate_custom_signal_condition(self, custom_signal_condition,
503
503
actual_custom_signal_value = context .get (custom_signal_key ) or {}
504
504
505
505
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 )
507
507
return False
508
508
509
509
if custom_signal_operator == CustomSignalOperator .STRING_CONTAINS .value :
@@ -525,53 +525,65 @@ def evaluate_custom_signal_condition(self, custom_signal_condition,
525
525
526
526
# For numeric operators only one target value is allowed.
527
527
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 ],
529
530
actual_custom_signal_value ,
530
531
lambda r : r < 0 )
531
532
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 ],
533
535
actual_custom_signal_value ,
534
536
lambda r : r <= 0 )
535
537
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 ],
537
540
actual_custom_signal_value ,
538
541
lambda r : r == 0 )
539
542
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 ],
541
545
actual_custom_signal_value ,
542
546
lambda r : r != 0 )
543
547
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 ],
545
550
actual_custom_signal_value ,
546
551
lambda r : r > 0 )
547
552
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 ],
549
555
actual_custom_signal_value ,
550
556
lambda r : r >= 0 )
551
557
552
558
# For semantic operators only one target value is allowed.
553
559
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 ],
555
562
actual_custom_signal_value ,
556
563
lambda r : r < 0 )
557
564
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 ],
559
567
actual_custom_signal_value ,
560
568
lambda r : r <= 0 )
561
569
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 ],
563
572
actual_custom_signal_value ,
564
573
lambda r : r == 0 )
565
574
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 ],
567
577
actual_custom_signal_value ,
568
578
lambda r : r != 0 )
569
579
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 ],
571
582
actual_custom_signal_value ,
572
583
lambda r : r > 0 )
573
584
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 ],
575
587
actual_custom_signal_value ,
576
588
lambda r : r >= 0 )
577
589
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:
597
609
return True
598
610
return False
599
611
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 :
601
613
try :
602
614
target = float (target_value )
603
615
actual = float (actual_value )
604
616
result = - 1 if actual < target else 1 if actual > target else 0
605
617
return predicate_fn (result )
606
618
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 )
608
621
return False
609
622
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 :
611
625
"""Compares the actual semantic version value of a signal against a target value.
612
626
Calls the predicate function with -1, 0, 1 if actual is less than, equal to,
613
627
or greater than target.
614
628
615
629
Args:
630
+ custom_signal_key: The custom singal for which the evaluation is being performed.
616
631
target_values: A list of target string values.
617
632
actual_value: The actual value to compare, which can be a string or number.
618
633
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) -
621
636
bool: True if the predicate function returns True for the result of the comparison,
622
637
False otherwise.
623
638
"""
624
- return self ._compare_versions (str (actual_value ),
639
+ return self ._compare_versions (custom_signal_key , str (actual_value ),
625
640
str (target_value ), predicate_fn )
626
641
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 :
628
644
"""Compares two semantic version strings.
629
645
630
646
Args:
647
+ custom_signal_key: The custom singal for which the evaluation is being performed.
631
648
sem_version_1: The first semantic version string.
632
649
sem_version_2: The second semantic version string.
633
650
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:
651
668
return predicate_fn (1 )
652
669
return predicate_fn (0 )
653
670
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 )
655
674
return False
656
675
657
676
async def get_server_template (app : App = None , default_config : Optional [Dict [str , str ]] = None ):
0 commit comments