Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitmodules
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
[submodule "tests/engine_tests/engine-test-data"]
path = tests/engine_tests/engine-test-data
url = https://github.com/flagsmith/engine-test-data.git
tag = v3.2.0
branch = feat/mv-regression
31 changes: 14 additions & 17 deletions flag_engine/segments/evaluator.py
Original file line number Diff line number Diff line change
Expand Up @@ -146,38 +146,35 @@ def evaluate_features(
if segment_override := segment_overrides.get(
feature_context["name"],
):
feature_context = segment_override["feature_context"]
flag_result: FlagResult[FeatureMetadataT]
flags[feature_name] = flag_result = {
"enabled": feature_context["enabled"],
"name": feature_context["name"],
"reason": f"TARGETING_MATCH; segment={segment_override['segment_name']}",
"value": feature_context.get("value"),
}
if feature_metadata := feature_context.get("metadata"):
flag_result["metadata"] = feature_metadata
flags[feature_name] = get_flag_result_from_context(
context=context,
feature_context=segment_override["feature_context"],
reason=f"TARGETING_MATCH; segment={segment_override['segment_name']}",
)
continue
flags[feature_name] = get_flag_result_from_context(
context=context,
feature_name=feature_name,
feature_context=context["features"][feature_name],
reason="DEFAULT",
)

return flags


def get_flag_result_from_context(
context: EvaluationContext[typing.Any, FeatureMetadataT],
feature_name: str,
context: _EvaluationContextAnyMeta,
feature_context: FeatureContext[FeatureMetadataT],
reason: str,
) -> FlagResult[FeatureMetadataT]:
"""
Get a feature value from the evaluation context
for a given feature name.

:param context: the evaluation context
:param feature_name: the feature name to get the value for
:param context: evaluation context
:param feature_context: feature context
:param reason: reason to use when no variant selected
:return: the value for the feature name in the evaluation context
"""
feature_context = context["features"][feature_name]
key = _get_identity_key(context)

flag_result: typing.Optional[FlagResult[FeatureMetadataT]] = None
Expand Down Expand Up @@ -209,7 +206,7 @@ def get_flag_result_from_context(
flag_result = {
"enabled": feature_context["enabled"],
"name": feature_context["name"],
"reason": "DEFAULT",
"reason": reason,
"value": feature_context["value"],
}

Expand Down
2 changes: 1 addition & 1 deletion tests/engine_tests/engine-test-data
Submodule engine-test-data updated 105 files
9 changes: 4 additions & 5 deletions tests/unit/segments/test_segments_evaluator.py
Original file line number Diff line number Diff line change
Expand Up @@ -856,13 +856,13 @@ def test_get_flag_result_from_context__calls_returns_expected(
{"value": "bar", "weight": 30, "priority": 2},
],
}
context["features"]["my_feature"] = feature_context
context["identity"] = {"identifier": expected_key, "key": expected_key}

# When
result = get_flag_result_from_context(
context=context,
feature_name="my_feature",
feature_context=feature_context,
reason="DEFAULT",
)

# the value of the feature state is correct based on the percentage value returned
Expand Down Expand Up @@ -899,15 +899,14 @@ def test_get_flag_result_from_feature_context__null_key__calls_returns_expected(
],
}

context["features"]["my_feature"] = feature_context

# no identity context present
context["identity"] = None

# When
result = get_flag_result_from_context(
context=context,
feature_name="my_feature",
feature_context=feature_context,
reason="DEFAULT",
)

# Then
Expand Down