11import typing
22
3+ from openfeature .contrib .provider .flagd .resolvers .process .connector .file_watcher import (
4+ FileWatcher ,
5+ )
36from openfeature .evaluation_context import EvaluationContext
7+ from openfeature .event import ProviderEventDetails
48from openfeature .exception import FlagNotFoundError , ParseError
59from openfeature .flag_evaluation import FlagResolutionDetails , Reason
6- from openfeature .provider import AbstractProvider
710
811from ..config import Config
9- from .process .file_watcher import FileWatcherFlagStore
12+ from .process .connector import FlagStateConnector
13+ from .process .flags import FlagStore
1014from .process .targeting import targeting
1115
1216T = typing .TypeVar ("T" )
1317
1418
1519class InProcessResolver :
16- def __init__ (self , config : Config , provider : AbstractProvider ):
20+ def __init__ (
21+ self ,
22+ config : Config ,
23+ emit_provider_ready : typing .Callable [[ProviderEventDetails ], None ],
24+ emit_provider_error : typing .Callable [[ProviderEventDetails ], None ],
25+ emit_provider_stale : typing .Callable [[ProviderEventDetails ], None ],
26+ emit_provider_configuration_changed : typing .Callable [
27+ [ProviderEventDetails ], None
28+ ],
29+ ):
1730 self .config = config
18- self .provider = provider
1931 if not self .config .offline_flag_source_path :
2032 raise ValueError (
2133 "offline_flag_source_path must be provided when using in-process resolver"
2234 )
23- self .flag_store = FileWatcherFlagStore (
24- self .config .offline_flag_source_path ,
25- self .provider ,
26- self .config .retry_backoff_ms * 0.001 ,
35+ self .flag_store = FlagStore (emit_provider_configuration_changed )
36+ self .connector : FlagStateConnector = FileWatcher (
37+ self .config , self .flag_store , emit_provider_ready , emit_provider_error
2738 )
2839
2940 def initialize (self , evaluation_context : EvaluationContext ) -> None :
30- pass
41+ self . connector . initialize ( evaluation_context )
3142
3243 def shutdown (self ) -> None :
33- self .flag_store .shutdown ()
44+ self .connector .shutdown ()
3445
3546 def resolve_boolean_details (
3647 self ,
@@ -54,7 +65,10 @@ def resolve_float_details(
5465 default_value : float ,
5566 evaluation_context : typing .Optional [EvaluationContext ] = None ,
5667 ) -> FlagResolutionDetails [float ]:
57- return self ._resolve (key , default_value , evaluation_context )
68+ result = self ._resolve (key , default_value , evaluation_context )
69+ if isinstance (result .value , int ):
70+ result .value = float (result .value )
71+ return result
5872
5973 def resolve_integer_details (
6074 self ,
0 commit comments