2424from open_feature .provider .no_op_provider import NoOpProvider
2525from open_feature .provider .provider import AbstractProvider
2626
27- NUMERIC_TYPES = [FlagType .FLOAT , FlagType .INTEGER ]
27+
28+ GetDetailCallable = typing .Union [
29+ typing .Callable [
30+ [str , bool , typing .Optional [EvaluationContext ]], FlagEvaluationDetails [bool ]
31+ ],
32+ typing .Callable [
33+ [str , int , typing .Optional [EvaluationContext ]], FlagEvaluationDetails [int ]
34+ ],
35+ typing .Callable [
36+ [str , float , typing .Optional [EvaluationContext ]], FlagEvaluationDetails [float ]
37+ ],
38+ typing .Callable [
39+ [str , str , typing .Optional [EvaluationContext ]], FlagEvaluationDetails [str ]
40+ ],
41+ typing .Callable [
42+ [str , dict , typing .Optional [EvaluationContext ]], FlagEvaluationDetails [dict ]
43+ ],
44+ ]
2845
2946
3047class OpenFeatureClient :
3148 def __init__ (
3249 self ,
33- name : str ,
34- version : str ,
35- context : EvaluationContext = None ,
36- hooks : typing .List [ Hook ] = None ,
37- provider : AbstractProvider = None ,
50+ name : typing . Optional [ str ] ,
51+ version : typing . Optional [ str ] ,
52+ provider : AbstractProvider ,
53+ context : typing .Optional [ EvaluationContext ] = None ,
54+ hooks : typing . Optional [ typing . List [ Hook ]] = None ,
3855 ):
3956 self .name = name
4057 self .version = version
@@ -49,8 +66,8 @@ def get_boolean_value(
4966 self ,
5067 flag_key : str ,
5168 default_value : bool ,
52- evaluation_context : EvaluationContext = None ,
53- flag_evaluation_options : FlagEvaluationOptions = None ,
69+ evaluation_context : typing . Optional [ EvaluationContext ] = None ,
70+ flag_evaluation_options : typing . Optional [ FlagEvaluationOptions ] = None ,
5471 ) -> bool :
5572 return self .evaluate_flag_details (
5673 FlagType .BOOLEAN ,
@@ -64,8 +81,8 @@ def get_boolean_details(
6481 self ,
6582 flag_key : str ,
6683 default_value : bool ,
67- evaluation_context : EvaluationContext = None ,
68- flag_evaluation_options : FlagEvaluationOptions = None ,
84+ evaluation_context : typing . Optional [ EvaluationContext ] = None ,
85+ flag_evaluation_options : typing . Optional [ FlagEvaluationOptions ] = None ,
6986 ) -> FlagEvaluationDetails :
7087 return self .evaluate_flag_details (
7188 FlagType .BOOLEAN ,
@@ -79,8 +96,8 @@ def get_string_value(
7996 self ,
8097 flag_key : str ,
8198 default_value : str ,
82- evaluation_context : EvaluationContext = None ,
83- flag_evaluation_options : FlagEvaluationOptions = None ,
99+ evaluation_context : typing . Optional [ EvaluationContext ] = None ,
100+ flag_evaluation_options : typing . Optional [ FlagEvaluationOptions ] = None ,
84101 ) -> str :
85102 return self .evaluate_flag_details (
86103 FlagType .STRING ,
@@ -94,8 +111,8 @@ def get_string_details(
94111 self ,
95112 flag_key : str ,
96113 default_value : str ,
97- evaluation_context : EvaluationContext = None ,
98- flag_evaluation_options : FlagEvaluationOptions = None ,
114+ evaluation_context : typing . Optional [ EvaluationContext ] = None ,
115+ flag_evaluation_options : typing . Optional [ FlagEvaluationOptions ] = None ,
99116 ) -> FlagEvaluationDetails :
100117 return self .evaluate_flag_details (
101118 FlagType .STRING ,
@@ -109,8 +126,8 @@ def get_integer_value(
109126 self ,
110127 flag_key : str ,
111128 default_value : int ,
112- evaluation_context : EvaluationContext = None ,
113- flag_evaluation_options : FlagEvaluationOptions = None ,
129+ evaluation_context : typing . Optional [ EvaluationContext ] = None ,
130+ flag_evaluation_options : typing . Optional [ FlagEvaluationOptions ] = None ,
114131 ) -> int :
115132 return self .get_integer_details (
116133 flag_key ,
@@ -123,8 +140,8 @@ def get_integer_details(
123140 self ,
124141 flag_key : str ,
125142 default_value : int ,
126- evaluation_context : EvaluationContext = None ,
127- flag_evaluation_options : FlagEvaluationOptions = None ,
143+ evaluation_context : typing . Optional [ EvaluationContext ] = None ,
144+ flag_evaluation_options : typing . Optional [ FlagEvaluationOptions ] = None ,
128145 ) -> FlagEvaluationDetails :
129146 return self .evaluate_flag_details (
130147 FlagType .INTEGER ,
@@ -138,8 +155,8 @@ def get_float_value(
138155 self ,
139156 flag_key : str ,
140157 default_value : float ,
141- evaluation_context : EvaluationContext = None ,
142- flag_evaluation_options : FlagEvaluationOptions = None ,
158+ evaluation_context : typing . Optional [ EvaluationContext ] = None ,
159+ flag_evaluation_options : typing . Optional [ FlagEvaluationOptions ] = None ,
143160 ) -> float :
144161 return self .get_float_details (
145162 flag_key ,
@@ -152,8 +169,8 @@ def get_float_details(
152169 self ,
153170 flag_key : str ,
154171 default_value : float ,
155- evaluation_context : EvaluationContext = None ,
156- flag_evaluation_options : FlagEvaluationOptions = None ,
172+ evaluation_context : typing . Optional [ EvaluationContext ] = None ,
173+ flag_evaluation_options : typing . Optional [ FlagEvaluationOptions ] = None ,
157174 ) -> FlagEvaluationDetails :
158175 return self .evaluate_flag_details (
159176 FlagType .FLOAT ,
@@ -167,8 +184,8 @@ def get_object_value(
167184 self ,
168185 flag_key : str ,
169186 default_value : dict ,
170- evaluation_context : EvaluationContext = None ,
171- flag_evaluation_options : FlagEvaluationOptions = None ,
187+ evaluation_context : typing . Optional [ EvaluationContext ] = None ,
188+ flag_evaluation_options : typing . Optional [ FlagEvaluationOptions ] = None ,
172189 ) -> dict :
173190 return self .evaluate_flag_details (
174191 FlagType .OBJECT ,
@@ -182,8 +199,8 @@ def get_object_details(
182199 self ,
183200 flag_key : str ,
184201 default_value : dict ,
185- evaluation_context : EvaluationContext = None ,
186- flag_evaluation_options : FlagEvaluationOptions = None ,
202+ evaluation_context : typing . Optional [ EvaluationContext ] = None ,
203+ flag_evaluation_options : typing . Optional [ FlagEvaluationOptions ] = None ,
187204 ) -> FlagEvaluationDetails :
188205 return self .evaluate_flag_details (
189206 FlagType .OBJECT ,
@@ -198,8 +215,8 @@ def evaluate_flag_details(
198215 flag_type : FlagType ,
199216 flag_key : str ,
200217 default_value : typing .Any ,
201- evaluation_context : EvaluationContext = None ,
202- flag_evaluation_options : FlagEvaluationOptions = None ,
218+ evaluation_context : typing . Optional [ EvaluationContext ] = None ,
219+ flag_evaluation_options : typing . Optional [ FlagEvaluationOptions ] = None ,
203220 ) -> FlagEvaluationDetails :
204221 """
205222 Evaluate the flag requested by the user from the clients provider.
@@ -302,7 +319,7 @@ def _create_provider_evaluation(
302319 flag_type : FlagType ,
303320 flag_key : str ,
304321 default_value : typing .Any ,
305- evaluation_context : EvaluationContext = None ,
322+ evaluation_context : typing . Optional [ EvaluationContext ] = None ,
306323 ) -> FlagEvaluationDetails :
307324 """
308325 Encapsulated method to create a FlagEvaluationDetail from a specific provider.
@@ -324,14 +341,15 @@ def _create_provider_evaluation(
324341 logging .info ("No provider configured, using no-op provider." )
325342 self .provider = NoOpProvider ()
326343
327- get_details_callable = {
344+ get_details_callables : typing . Mapping [ FlagType , GetDetailCallable ] = {
328345 FlagType .BOOLEAN : self .provider .resolve_boolean_details ,
329346 FlagType .INTEGER : self .provider .resolve_integer_details ,
330347 FlagType .FLOAT : self .provider .resolve_float_details ,
331348 FlagType .OBJECT : self .provider .resolve_object_details ,
332349 FlagType .STRING : self .provider .resolve_string_details ,
333- }. get ( flag_type )
350+ }
334351
352+ get_details_callable = get_details_callables .get (flag_type )
335353 if not get_details_callable :
336354 raise GeneralError (error_message = "Unknown flag type" )
337355
0 commit comments