Skip to content

Commit 6eff5f1

Browse files
committed
fix: Multivariate segment overrides not supported
1 parent 548ddf6 commit 6eff5f1

File tree

4 files changed

+20
-24
lines changed

4 files changed

+20
-24
lines changed

.gitmodules

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
[submodule "tests/engine_tests/engine-test-data"]
22
path = tests/engine_tests/engine-test-data
33
url = https://github.com/flagsmith/engine-test-data.git
4-
tag = v3.2.0
4+
branch = feat/mv-regression

flag_engine/segments/evaluator.py

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -146,38 +146,35 @@ def evaluate_features(
146146
if segment_override := segment_overrides.get(
147147
feature_context["name"],
148148
):
149-
feature_context = segment_override["feature_context"]
150-
flag_result: FlagResult[FeatureMetadataT]
151-
flags[feature_name] = flag_result = {
152-
"enabled": feature_context["enabled"],
153-
"name": feature_context["name"],
154-
"reason": f"TARGETING_MATCH; segment={segment_override['segment_name']}",
155-
"value": feature_context.get("value"),
156-
}
157-
if feature_metadata := feature_context.get("metadata"):
158-
flag_result["metadata"] = feature_metadata
149+
flags[feature_name] = get_flag_result_from_context(
150+
context=context,
151+
feature_context=segment_override["feature_context"],
152+
reason=f"TARGETING_MATCH; segment={segment_override['segment_name']}",
153+
)
159154
continue
160155
flags[feature_name] = get_flag_result_from_context(
161156
context=context,
162-
feature_name=feature_name,
157+
feature_context=context["features"][feature_name],
158+
reason="DEFAULT",
163159
)
164160

165161
return flags
166162

167163

168164
def get_flag_result_from_context(
169-
context: EvaluationContext[typing.Any, FeatureMetadataT],
170-
feature_name: str,
165+
context: _EvaluationContextAnyMeta,
166+
feature_context: FeatureContext[FeatureMetadataT],
167+
reason: str,
171168
) -> FlagResult[FeatureMetadataT]:
172169
"""
173170
Get a feature value from the evaluation context
174171
for a given feature name.
175172
176-
:param context: the evaluation context
177-
:param feature_name: the feature name to get the value for
173+
:param context: evaluation context
174+
:param feature_context: feature context
175+
:param reason: reason to use when no variant selected
178176
:return: the value for the feature name in the evaluation context
179177
"""
180-
feature_context = context["features"][feature_name]
181178
key = _get_identity_key(context)
182179

183180
flag_result: typing.Optional[FlagResult[FeatureMetadataT]] = None
@@ -209,7 +206,7 @@ def get_flag_result_from_context(
209206
flag_result = {
210207
"enabled": feature_context["enabled"],
211208
"name": feature_context["name"],
212-
"reason": "DEFAULT",
209+
"reason": reason,
213210
"value": feature_context["value"],
214211
}
215212

Submodule engine-test-data updated 105 files

tests/unit/segments/test_segments_evaluator.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -856,13 +856,13 @@ def test_get_flag_result_from_context__calls_returns_expected(
856856
{"value": "bar", "weight": 30, "priority": 2},
857857
],
858858
}
859-
context["features"]["my_feature"] = feature_context
860859
context["identity"] = {"identifier": expected_key, "key": expected_key}
861860

862861
# When
863862
result = get_flag_result_from_context(
864863
context=context,
865-
feature_name="my_feature",
864+
feature_context=feature_context,
865+
reason="DEFAULT",
866866
)
867867

868868
# the value of the feature state is correct based on the percentage value returned
@@ -899,15 +899,14 @@ def test_get_flag_result_from_feature_context__null_key__calls_returns_expected(
899899
],
900900
}
901901

902-
context["features"]["my_feature"] = feature_context
903-
904902
# no identity context present
905903
context["identity"] = None
906904

907905
# When
908906
result = get_flag_result_from_context(
909907
context=context,
910-
feature_name="my_feature",
908+
feature_context=feature_context,
909+
reason="DEFAULT",
911910
)
912911

913912
# Then

0 commit comments

Comments
 (0)