Skip to content

Commit 6a030da

Browse files
authored
feat: Support segment metadata (#264)
1 parent 8eaa386 commit 6a030da

File tree

6 files changed

+21
-13
lines changed

6 files changed

+21
-13
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 = v2.0.0
4+
tag = v2.1.0

flag_engine/context/types.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# generated by datamodel-codegen:
2-
# filename: https://raw.githubusercontent.com/Flagsmith/flagsmith/main/sdk/evaluation-context.json # noqa: E501
3-
# timestamp: 2025-08-25T11:10:31+00:00
2+
# filename: https://raw.githubusercontent.com/Flagsmith/flagsmith/main/sdk/evaluation-context.json
3+
# timestamp: 2025-10-10T16:01:57+00:00
44

55
from __future__ import annotations
66

@@ -63,6 +63,7 @@ class SegmentContext(TypedDict):
6363
name: str
6464
rules: List[SegmentRule]
6565
overrides: NotRequired[List[FeatureContext]]
66+
metadata: NotRequired[Dict[str, Any]]
6667

6768

6869
class EvaluationContext(TypedDict):

flag_engine/result/types.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
# generated by datamodel-codegen:
2-
# filename: https://raw.githubusercontent.com/Flagsmith/flagsmith/refs/heads/chore/improve-evaluation-result/sdk/evaluation-result.json # noqa: E501
3-
# timestamp: 2025-10-01T11:31:34+00:00
2+
# filename: https://raw.githubusercontent.com/Flagsmith/flagsmith/refs/heads/main/sdk/evaluation-result.json
3+
# timestamp: 2025-10-10T16:01:29+00:00
44

55
from __future__ import annotations
66

77
from typing import Any, Dict, List, TypedDict
88

9+
from typing_extensions import NotRequired
10+
911

1012
class FlagResult(TypedDict):
1113
feature_key: str
@@ -18,6 +20,7 @@ class FlagResult(TypedDict):
1820
class SegmentResult(TypedDict):
1921
key: str
2022
name: str
23+
metadata: NotRequired[Dict[str, Any]]
2124

2225

2326
class EvaluationResult(TypedDict):

flag_engine/segments/evaluator.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,13 @@ def get_evaluation_result(context: EvaluationContext) -> EvaluationResult:
4848
if not is_context_in_segment(context, segment_context):
4949
continue
5050

51-
segments.append(
52-
{
53-
"key": segment_context["key"],
54-
"name": segment_context["name"],
55-
}
56-
)
51+
segment_result: SegmentResult = {
52+
"key": segment_context["key"],
53+
"name": segment_context["name"],
54+
}
55+
if metadata := segment_context.get("metadata"):
56+
segment_result["metadata"] = metadata
57+
segments.append(segment_result)
5758

5859
if overrides := segment_context.get("overrides"):
5960
for override_feature_context in overrides:

tests/engine_tests/test_engine.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,10 @@ def _extract_benchmark_contexts(
4040
yield pyjson5.loads((test_cases_dir_path / file_path).read_text())["context"]
4141

4242

43-
TEST_CASES = list(_extract_test_cases(TEST_CASES_PATH))
43+
TEST_CASES = sorted(
44+
_extract_test_cases(TEST_CASES_PATH),
45+
key=lambda param: str(param.id),
46+
)
4447
BENCHMARK_CONTEXTS = list(_extract_benchmark_contexts(TEST_CASES_PATH))
4548

4649

0 commit comments

Comments
 (0)