Skip to content

Commit 5a287e1

Browse files
committed
Added Accessor with comments
1 parent 8dc9b0c commit 5a287e1

File tree

1 file changed

+10
-1
lines changed

1 file changed

+10
-1
lines changed

featuremanagement/_featuremanagerbase.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import hashlib
77
import logging
88
from abc import ABC
9-
from typing import List, Optional, Dict, Tuple, Any, Mapping
9+
from typing import List, Optional, Dict, Tuple, Any, Mapping, Callable
1010
from ._models import FeatureFlag, Variant, VariantAssignmentReason, TargetingContext, EvaluationEvent, VariantReference
1111

1212

@@ -77,6 +77,7 @@ def __init__(self, configuration: Mapping[str, Any], **kwargs: Any):
7777
self._cache: Dict[str, Optional[FeatureFlag]] = {}
7878
self._copy = configuration.get(FEATURE_MANAGEMENT_KEY)
7979
self._on_feature_evaluated = kwargs.pop("on_feature_evaluated", None)
80+
self._targeting_context_accessor: Optional[Callable[[],TargetingContext]] = kwargs.pop("targeting_context_accessor", None)
8081

8182
@staticmethod
8283
def _assign_default_disabled_variant(evaluation_event: EvaluationEvent) -> None:
@@ -229,9 +230,17 @@ def _build_targeting_context(self, args: Tuple[Any]) -> TargetingContext:
229230
if len(args) == 1:
230231
arg = args[0]
231232
if isinstance(arg, str):
233+
# If the user_id is provided, return a TargetingContext with the user_id
232234
return TargetingContext(user_id=arg, groups=[])
233235
if isinstance(arg, TargetingContext):
236+
# If a TargetingContext is provided, return it
234237
return arg
238+
elif self._targeting_context_accessor and callable(self._targeting_context_accessor):
239+
# If a targeting_context_accessor is provided, return the TargetingContext from it
240+
targeting_context = self._targeting_context_accessor()
241+
if targeting_context and isinstance(targeting_context, TargetingContext):
242+
return targeting_context
243+
logging.warning("targeting_context_accessor did not return a TargetingContext")
235244
return TargetingContext()
236245

237246
def _assign_allocation(self, evaluation_event: EvaluationEvent, targeting_context: TargetingContext) -> None:

0 commit comments

Comments
 (0)