Skip to content

Commit 1d42bf6

Browse files
committed
compare against lowest possible priority
1 parent fb31c9c commit 1d42bf6

File tree

3 files changed

+102
-2
lines changed

3 files changed

+102
-2
lines changed

flag_engine/segments/constants.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,6 @@
2020
IS_SET: ConditionOperator = "IS_SET"
2121
IS_NOT_SET: ConditionOperator = "IS_NOT_SET"
2222
IN: ConditionOperator = "IN"
23+
24+
# Lowest possible priority for segment overrides
25+
DEFAULT_PRIORITY = float("inf")

flag_engine/segments/evaluator.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,14 @@ def get_evaluation_result(context: EvaluationContext) -> EvaluationResult:
9696
feature_key = override_feature_context["feature_key"]
9797
if (
9898
feature_key not in segment_feature_contexts
99-
or override_feature_context.get("priority", 0)
100-
< segment_feature_contexts[feature_key].get("priority", 0)
99+
or override_feature_context.get(
100+
"priority",
101+
constants.DEFAULT_PRIORITY,
102+
)
103+
< segment_feature_contexts[feature_key].get(
104+
"priority",
105+
constants.DEFAULT_PRIORITY,
106+
)
101107
):
102108
segment_feature_contexts[feature_key] = override_feature_context
103109

tests/unit/segments/test_segments_evaluator.py

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -812,6 +812,97 @@ def test_get_evaluation_result__two_segments_override_same_feature__returns_expe
812812
}
813813

814814

815+
def test_get_evaluation_result__segment_override__no_priority__returns_expected() -> (
816+
None
817+
):
818+
# Given
819+
context: EvaluationContext = {
820+
"environment": {"key": "api-key", "name": ""},
821+
"identity": {
822+
"identifier": "identity_2",
823+
"key": "api-key_identity_2",
824+
"traits": {"foo": "bar"},
825+
},
826+
"features": {
827+
"feature_1": {
828+
"key": "1",
829+
"feature_key": "1",
830+
"name": "feature_1",
831+
"enabled": False,
832+
"value": None,
833+
},
834+
},
835+
"segments": {
836+
"1": {
837+
"key": "1",
838+
"name": "segment_without_override_priority",
839+
"rules": [
840+
{
841+
"type": "ALL",
842+
"conditions": [
843+
{"property": "foo", "operator": "EQUAL", "value": "bar"}
844+
],
845+
"rules": [],
846+
}
847+
],
848+
"overrides": [
849+
{
850+
"key": "3",
851+
"feature_key": "1",
852+
"name": "feature_1",
853+
"enabled": True,
854+
"value": "overridden_without_priority",
855+
}
856+
],
857+
},
858+
"2": {
859+
"key": "2",
860+
"name": "segment_with_override_priority",
861+
"rules": [
862+
{
863+
"type": "ALL",
864+
"conditions": [
865+
{"property": "foo", "operator": "EQUAL", "value": "bar"}
866+
],
867+
"rules": [],
868+
}
869+
],
870+
"overrides": [
871+
{
872+
"key": "4",
873+
"feature_key": "1",
874+
"name": "feature_1",
875+
"enabled": True,
876+
"value": "overridden_with_priority",
877+
"priority": 1,
878+
}
879+
],
880+
},
881+
},
882+
}
883+
884+
# When
885+
result = get_evaluation_result(context)
886+
887+
# Then
888+
assert result == {
889+
"context": context,
890+
"flags": [
891+
{
892+
"enabled": True,
893+
"feature_key": "1",
894+
"name": "feature_1",
895+
"reason": "TARGETING_MATCH; segment=segment_with_override_priority",
896+
"value": "overridden_with_priority",
897+
},
898+
],
899+
"segments": [
900+
{"key": "1", "name": "segment_without_override_priority"},
901+
{"key": "2", "name": "segment_with_override_priority"},
902+
],
903+
}
904+
905+
815906
def test_get_evaluation_result__identity_override__returns_expected(
816907
environment: EnvironmentModel,
817908
feature_1: FeatureModel,

0 commit comments

Comments
 (0)