Skip to content

Commit 3834b48

Browse files
pijushcsPijush Chakraborty
and
Pijush Chakraborty
authored
Integrating minor fixes with SSRC branch
* Fixing percentage lowebound issues * Updating logs * Fixing lint issues --------- Co-authored-by: Pijush Chakraborty <[email protected]>
1 parent 0c6aaac commit 3834b48

File tree

1 file changed

+41
-22
lines changed

1 file changed

+41
-22
lines changed

firebase_admin/remote_config.py

+41-22
Original file line numberDiff line numberDiff line change
@@ -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

657676
async def get_server_template(app: App = None, default_config: Optional[Dict[str, str]] = None):

0 commit comments

Comments
 (0)