Skip to content

Commit 0e11d30

Browse files
committed
chore: replacing-deprecated-methods
1 parent b6d2c84 commit 0e11d30

File tree

5 files changed

+419
-313
lines changed

5 files changed

+419
-313
lines changed

flagsmith/flagsmith.py

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from flag_engine.identities.models import IdentityModel
1111
from flag_engine.identities.traits.models import TraitModel
1212
from flag_engine.identities.traits.types import TraitValue
13-
from flag_engine.segments.evaluator import get_identity_segments
13+
from flag_engine.context.mappers import map_environment_identity_to_context
1414
from requests.adapters import HTTPAdapter
1515
from requests.utils import default_user_agent
1616
from urllib3 import Retry
@@ -280,10 +280,18 @@ def get_identity_segments(
280280

281281
traits = traits or {}
282282
identity_model = self._get_identity_model(identifier, **traits)
283-
segment_models = get_identity_segments(
284-
environment=self._environment, identity=identity_model
283+
context = map_environment_identity_to_context(
284+
environment=self._environment,
285+
identity=identity_model,
286+
override_traits=None,
285287
)
286-
return [Segment(id=sm.id, name=sm.name) for sm in segment_models]
288+
evaluation_result = engine.get_evaluation_result(
289+
context=context,
290+
)
291+
return [
292+
Segment(id=int(sm["key"]), name=sm["name"])
293+
for sm in evaluation_result.get("segments", [])
294+
]
287295

288296
def update_environment(self) -> None:
289297
try:
@@ -322,6 +330,7 @@ def _get_environment_flags_from_document(self) -> Flags:
322330
if self._environment is None:
323331
raise TypeError("No environment present")
324332
return Flags.from_feature_state_models(
333+
# TODO: Use from_evaluation_result
325334
feature_states=engine.get_environment_feature_states(self._environment),
326335
analytics_processor=self._analytics_processor,
327336
default_flag_handler=self.default_flag_handler,
@@ -333,14 +342,21 @@ def _get_identity_flags_from_document(
333342
identity_model = self._get_identity_model(identifier, **traits)
334343
if self._environment is None:
335344
raise TypeError("No environment present")
336-
feature_states = engine.get_identity_feature_states(
337-
self._environment, identity_model
345+
context = map_environment_identity_to_context(
346+
environment=self._environment,
347+
identity=identity_model,
348+
override_traits=None,
338349
)
339-
return Flags.from_feature_state_models(
340-
feature_states=feature_states,
350+
351+
evaluation_result = engine.get_evaluation_result(
352+
context=context,
353+
)
354+
355+
return Flags.from_evaluation_result(
356+
evaluation_result=evaluation_result,
341357
analytics_processor=self._analytics_processor,
342-
identity_id=identity_model.composite_key,
343358
default_flag_handler=self.default_flag_handler,
359+
identity_id=identity_model.composite_key,
344360
)
345361

346362
def _get_environment_flags_from_api(self) -> Flags:

flagsmith/models.py

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from dataclasses import dataclass, field
55

66
from flag_engine.features.models import FeatureStateModel
7-
7+
from flag_engine.result.types import EvaluationResult, FlagResult
88
from flagsmith.analytics import AnalyticsProcessor
99
from flagsmith.exceptions import FlagsmithFeatureDoesNotExistError
1010

@@ -39,6 +39,19 @@ def from_feature_state_model(
3939
feature_id=feature_state_model.feature.id,
4040
)
4141

42+
@classmethod
43+
def from_evaluation_result(
44+
cls,
45+
flag: FlagResult,
46+
identity_id: typing.Optional[typing.Union[str, int]] = None,
47+
) -> Flag:
48+
return Flag(
49+
enabled=flag["enabled"],
50+
value=flag["value"],
51+
feature_name=flag["name"],
52+
feature_id=int(flag["feature_key"]),
53+
)
54+
4255
@classmethod
4356
def from_api_flag(cls, flag_data: typing.Mapping[str, typing.Any]) -> Flag:
4457
return Flag(
@@ -76,6 +89,28 @@ def from_feature_state_models(
7689
_analytics_processor=analytics_processor,
7790
)
7891

92+
@classmethod
93+
def from_evaluation_result(
94+
cls,
95+
evaluation_result: EvaluationResult,
96+
analytics_processor: typing.Optional[AnalyticsProcessor],
97+
default_flag_handler: typing.Optional[typing.Callable[[str], DefaultFlag]],
98+
identity_id: typing.Optional[typing.Union[str, int]] = None,
99+
) -> Flags:
100+
return cls(
101+
flags={
102+
flag["name"]: Flag(
103+
enabled=flag["enabled"],
104+
value=flag["value"],
105+
feature_name=flag["name"],
106+
feature_id=int(flag["feature_key"]),
107+
)
108+
for flag in evaluation_result["flags"]
109+
},
110+
default_flag_handler=default_flag_handler,
111+
_analytics_processor=analytics_processor,
112+
)
113+
79114
@classmethod
80115
def from_api_flags(
81116
cls,

0 commit comments

Comments
 (0)