@@ -36,8 +36,9 @@ class EvaluationStrategy(typing.Protocol):
3636 """
3737 Strategy interface for determining which provider's result to use.
3838
39- Strategies can be 'sequential' (evaluate one at a time, stop early) or
40- 'parallel' (evaluate all simultaneously).
39+ Current implementation supports 'sequential' mode (evaluate one at a time,
40+ stop early). 'parallel' mode (evaluate all simultaneously using asyncio.gather
41+ or ThreadPoolExecutor) is planned for a future enhancement.
4142 """
4243
4344 run_mode : typing .Literal ["sequential" , "parallel" ]
@@ -168,7 +169,12 @@ def get_provider_hooks(self) -> list[Hook]:
168169 return hooks
169170
170171 def initialize (self , evaluation_context : EvaluationContext ) -> None :
171- """Initialize all providers in parallel."""
172+ """
173+ Initialize all providers sequentially.
174+
175+ Note: Parallel initialization using ThreadPoolExecutor or asyncio.gather()
176+ is planned for a future enhancement.
177+ """
172178 errors : list [Exception ] = []
173179
174180 for name , provider in self ._registered_providers :
@@ -201,6 +207,10 @@ def _evaluate_with_providers(
201207 """
202208 Core evaluation logic that delegates to providers based on strategy.
203209
210+ Current implementation evaluates providers sequentially regardless of
211+ strategy.run_mode. True concurrent evaluation for 'parallel' mode is
212+ planned for a future enhancement.
213+
204214 :param flag_key: The flag key to evaluate
205215 :param default_value: Default value for the flag
206216 :param evaluation_context: Evaluation context
@@ -229,7 +239,7 @@ def _evaluate_with_providers(
229239 )
230240 results .append ((provider_name , error_result ))
231241
232- # In parallel mode or if all sequential attempts completed, pick best result
242+ # If all sequential attempts completed (or parallel mode) , pick best result
233243 for provider_name , result in results :
234244 if self .strategy .should_use_result (flag_key , provider_name , result ):
235245 return result
@@ -264,7 +274,13 @@ async def resolve_boolean_details_async(
264274 default_value : bool ,
265275 evaluation_context : EvaluationContext | None = None ,
266276 ) -> FlagResolutionDetails [bool ]:
267- # For async, delegate to sync for now (async aggregation would be more complex)
277+ """
278+ Async boolean evaluation (currently delegates to sync implementation).
279+
280+ Note: True async evaluation using await and provider-level async methods
281+ is planned for a future enhancement. The current implementation maintains
282+ API compatibility but does not provide non-blocking I/O benefits.
283+ """
268284 return self .resolve_boolean_details (flag_key , default_value , evaluation_context )
269285
270286 def resolve_string_details (
@@ -286,6 +302,7 @@ async def resolve_string_details_async(
286302 default_value : str ,
287303 evaluation_context : EvaluationContext | None = None ,
288304 ) -> FlagResolutionDetails [str ]:
305+ """Async string evaluation (currently delegates to sync implementation)."""
289306 return self .resolve_string_details (flag_key , default_value , evaluation_context )
290307
291308 def resolve_integer_details (
@@ -307,6 +324,7 @@ async def resolve_integer_details_async(
307324 default_value : int ,
308325 evaluation_context : EvaluationContext | None = None ,
309326 ) -> FlagResolutionDetails [int ]:
327+ """Async integer evaluation (currently delegates to sync implementation)."""
310328 return self .resolve_integer_details (flag_key , default_value , evaluation_context )
311329
312330 def resolve_float_details (
@@ -328,6 +346,7 @@ async def resolve_float_details_async(
328346 default_value : float ,
329347 evaluation_context : EvaluationContext | None = None ,
330348 ) -> FlagResolutionDetails [float ]:
349+ """Async float evaluation (currently delegates to sync implementation)."""
331350 return self .resolve_float_details (flag_key , default_value , evaluation_context )
332351
333352 def resolve_object_details (
@@ -349,4 +368,5 @@ async def resolve_object_details_async(
349368 default_value : Sequence [FlagValueType ] | Mapping [str , FlagValueType ],
350369 evaluation_context : EvaluationContext | None = None ,
351370 ) -> FlagResolutionDetails [Sequence [FlagValueType ] | Mapping [str , FlagValueType ]]:
371+ """Async object evaluation (currently delegates to sync implementation)."""
352372 return self .resolve_object_details (flag_key , default_value , evaluation_context )
0 commit comments