Skip to content

Commit efe710c

Browse files
authored
fix: reintroduced-get-identity-segments (#237)
* fix: reintroduced-get-identity-segments * fix: added-test-coverage * fix: lint
1 parent 969c812 commit efe710c

File tree

2 files changed

+46
-0
lines changed

2 files changed

+46
-0
lines changed

flag_engine/segments/evaluator.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@
66

77
import semver
88

9+
from flag_engine.context.mappers import map_environment_identity_to_context
910
from flag_engine.context.types import EvaluationContext
11+
from flag_engine.environments.models import EnvironmentModel
12+
from flag_engine.identities.models import IdentityModel
1013
from flag_engine.identities.traits.types import ContextValue
1114
from flag_engine.segments import constants
1215
from flag_engine.segments.models import (
@@ -20,6 +23,25 @@
2023
from flag_engine.utils.types import SupportsStr, get_casting_function
2124

2225

26+
def get_identity_segments(
27+
identity: IdentityModel,
28+
environment: EnvironmentModel,
29+
) -> typing.List[SegmentModel]:
30+
"""
31+
Get a list of segments for a given identity in a given environment.
32+
33+
:param identity: the identity model object to get the segments for
34+
:param environment: the environment model object the identity belongs to
35+
:return: list of segments that the identity belongs to in the environment
36+
"""
37+
context = map_environment_identity_to_context(
38+
environment=environment,
39+
identity=identity,
40+
override_traits=None,
41+
)
42+
return get_context_segments(context, environment.project.segments)
43+
44+
2345
def get_context_segments(
2446
context: EvaluationContext,
2547
segments: typing.List[SegmentModel],

tests/unit/segments/test_segments_evaluator.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,15 @@
44
from pytest_lazyfixture import lazy_fixture
55
from pytest_mock import MockerFixture
66

7+
from flag_engine.context.mappers import map_environment_identity_to_context
78
from flag_engine.context.types import EvaluationContext
9+
from flag_engine.environments.models import EnvironmentModel
10+
from flag_engine.identities.models import IdentityModel
811
from flag_engine.segments import constants
912
from flag_engine.segments.evaluator import (
1013
_matches_context_value,
1114
context_matches_condition,
15+
get_identity_segments,
1216
is_context_in_segment,
1317
)
1418
from flag_engine.segments.models import (
@@ -254,6 +258,26 @@ def test_context_in_segment_percentage_split(
254258
assert result == expected_result
255259

256260

261+
def test_get_identity_segments_calls_get_context_segments(
262+
mocker: MockerFixture,
263+
environment: EnvironmentModel,
264+
identity: IdentityModel,
265+
) -> None:
266+
# Given
267+
mock_get_context_segments = mocker.patch(
268+
"flag_engine.segments.evaluator.get_context_segments"
269+
)
270+
271+
context = map_environment_identity_to_context(environment, identity, None)
272+
# When
273+
get_identity_segments(identity, environment)
274+
275+
# Then
276+
mock_get_context_segments.assert_called_once_with(
277+
context, environment.project.segments
278+
)
279+
280+
257281
def test_context_in_segment_percentage_split__trait_value__calls_expected(
258282
mocker: MockerFixture,
259283
context: EvaluationContext,

0 commit comments

Comments
 (0)