Skip to content

Commit d019803

Browse files
committed
* 'develop' of https://github.com/awslabs/aws-lambda-powertools-python: feat(feature_flags): Added inequality conditions (aws-powertools#721) fix(feature-flags): rules should evaluate with an AND op (aws-powertools#724) fix(logger): push extra keys to the end (aws-powertools#722)
2 parents 6047f6c + 922ecf2 commit d019803

File tree

4 files changed

+357
-10
lines changed

4 files changed

+357
-10
lines changed

Diff for: aws_lambda_powertools/utilities/feature_flags/feature_flags.py

+8-6
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,11 @@ def _match_by_action(self, action: str, condition_value: Any, context_value: Any
4545
return False
4646
mapping_by_action = {
4747
schema.RuleAction.EQUALS.value: lambda a, b: a == b,
48+
schema.RuleAction.NOT_EQUALS.value: lambda a, b: a != b,
49+
schema.RuleAction.KEY_GREATER_THAN_VALUE.value: lambda a, b: a > b,
50+
schema.RuleAction.KEY_GREATER_THAN_OR_EQUAL_VALUE.value: lambda a, b: a >= b,
51+
schema.RuleAction.KEY_LESS_THAN_VALUE.value: lambda a, b: a < b,
52+
schema.RuleAction.KEY_LESS_THAN_OR_EQUAL_VALUE.value: lambda a, b: a <= b,
4853
schema.RuleAction.STARTSWITH.value: lambda a, b: a.startswith(b),
4954
schema.RuleAction.ENDSWITH.value: lambda a, b: a.endswith(b),
5055
schema.RuleAction.IN.value: lambda a, b: a in b,
@@ -105,12 +110,9 @@ def _evaluate_rules(
105110
if self._evaluate_conditions(rule_name=rule_name, feature_name=feature_name, rule=rule, context=context):
106111
return bool(rule_match_value)
107112

108-
# no rule matched, return default value of feature
109-
self.logger.debug(
110-
f"no rule matched, returning feature default, default={feat_default}, name={feature_name}"
111-
)
112-
return feat_default
113-
return False
113+
# no rule matched, return default value of feature
114+
self.logger.debug(f"no rule matched, returning feature default, default={feat_default}, name={feature_name}")
115+
return feat_default
114116

115117
def get_configuration(self) -> Dict:
116118
"""Get validated feature flag schema from configured store.

Diff for: aws_lambda_powertools/utilities/feature_flags/schema.py

+5
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@
1717

1818
class RuleAction(str, Enum):
1919
EQUALS = "EQUALS"
20+
NOT_EQUALS = "NOT_EQUALS"
21+
KEY_GREATER_THAN_VALUE = "KEY_GREATER_THAN_VALUE"
22+
KEY_GREATER_THAN_OR_EQUAL_VALUE = "KEY_GREATER_THAN_OR_EQUAL_VALUE"
23+
KEY_LESS_THAN_VALUE = "KEY_LESS_THAN_VALUE"
24+
KEY_LESS_THAN_OR_EQUAL_VALUE = "KEY_LESS_THAN_OR_EQUAL_VALUE"
2025
STARTSWITH = "STARTSWITH"
2126
ENDSWITH = "ENDSWITH"
2227
IN = "IN"

Diff for: docs/utilities/feature_flags.md

+5
Original file line numberDiff line numberDiff line change
@@ -455,6 +455,11 @@ The `action` configuration can have the following values, where the expressions
455455
Action | Equivalent expression
456456
------------------------------------------------- | ---------------------------------------------------------------------------------
457457
**EQUALS** | `lambda a, b: a == b`
458+
**NOT_EQUALS** | `lambda a, b: a != b`
459+
**KEY_GREATER_THAN_VALUE** | `lambda a, b: a > b`
460+
**KEY_GREATER_THAN_OR_EQUAL_VALUE** | `lambda a, b: a >= b`
461+
**KEY_LESS_THAN_VALUE** | `lambda a, b: a < b`
462+
**KEY_LESS_THAN_OR_EQUAL_VALUE** | `lambda a, b: a <= b`
458463
**STARTSWITH** | `lambda a, b: a.startswith(b)`
459464
**ENDSWITH** | `lambda a, b: a.endswith(b)`
460465
**KEY_IN_VALUE** | `lambda a, b: a in b`

0 commit comments

Comments
 (0)