88 OpenFeatureError ,
99 TypeMismatchError ,
1010)
11- from open_feature .exception .exceptions import GeneralError
12- from open_feature .flag_evaluation .error_code import ErrorCode
1311from open_feature .flag_evaluation .flag_evaluation_details import FlagEvaluationDetails
1412from open_feature .flag_evaluation .flag_evaluation_options import FlagEvaluationOptions
1513from open_feature .flag_evaluation .flag_type import FlagType
2624from open_feature .provider .no_op_provider import NoOpProvider
2725from open_feature .provider .provider import AbstractProvider
2826
29- NUMERIC_TYPES = [FlagType .FLOAT , FlagType .INTEGER ]
30- GetDetailsCallable = typing .Callable [
31- [str , typing .Any , typing .Optional [EvaluationContext ]], FlagEvaluationDetails
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+ ],
3244]
3345
3446
3547class OpenFeatureClient :
3648 def __init__ (
3749 self ,
38- name : str ,
39- version : str ,
40- context : EvaluationContext = None ,
41- hooks : typing .List [ Hook ] = None ,
42- 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 ,
4355 ):
4456 self .name = name
4557 self .version = version
@@ -54,8 +66,8 @@ def get_boolean_value(
5466 self ,
5567 flag_key : str ,
5668 default_value : bool ,
57- evaluation_context : EvaluationContext = None ,
58- flag_evaluation_options : FlagEvaluationOptions = None ,
69+ evaluation_context : typing . Optional [ EvaluationContext ] = None ,
70+ flag_evaluation_options : typing . Optional [ FlagEvaluationOptions ] = None ,
5971 ) -> bool :
6072 return self .evaluate_flag_details (
6173 FlagType .BOOLEAN ,
@@ -69,8 +81,8 @@ def get_boolean_details(
6981 self ,
7082 flag_key : str ,
7183 default_value : bool ,
72- evaluation_context : EvaluationContext = None ,
73- flag_evaluation_options : FlagEvaluationOptions = None ,
84+ evaluation_context : typing . Optional [ EvaluationContext ] = None ,
85+ flag_evaluation_options : typing . Optional [ FlagEvaluationOptions ] = None ,
7486 ) -> FlagEvaluationDetails :
7587 return self .evaluate_flag_details (
7688 FlagType .BOOLEAN ,
@@ -84,8 +96,8 @@ def get_string_value(
8496 self ,
8597 flag_key : str ,
8698 default_value : str ,
87- evaluation_context : EvaluationContext = None ,
88- flag_evaluation_options : FlagEvaluationOptions = None ,
99+ evaluation_context : typing . Optional [ EvaluationContext ] = None ,
100+ flag_evaluation_options : typing . Optional [ FlagEvaluationOptions ] = None ,
89101 ) -> str :
90102 return self .evaluate_flag_details (
91103 FlagType .STRING ,
@@ -99,8 +111,8 @@ def get_string_details(
99111 self ,
100112 flag_key : str ,
101113 default_value : str ,
102- evaluation_context : EvaluationContext = None ,
103- flag_evaluation_options : FlagEvaluationOptions = None ,
114+ evaluation_context : typing . Optional [ EvaluationContext ] = None ,
115+ flag_evaluation_options : typing . Optional [ FlagEvaluationOptions ] = None ,
104116 ) -> FlagEvaluationDetails :
105117 return self .evaluate_flag_details (
106118 FlagType .STRING ,
@@ -114,8 +126,8 @@ def get_integer_value(
114126 self ,
115127 flag_key : str ,
116128 default_value : int ,
117- evaluation_context : EvaluationContext = None ,
118- flag_evaluation_options : FlagEvaluationOptions = None ,
129+ evaluation_context : typing . Optional [ EvaluationContext ] = None ,
130+ flag_evaluation_options : typing . Optional [ FlagEvaluationOptions ] = None ,
119131 ) -> int :
120132 return self .get_integer_details (
121133 flag_key ,
@@ -128,8 +140,8 @@ def get_integer_details(
128140 self ,
129141 flag_key : str ,
130142 default_value : int ,
131- evaluation_context : EvaluationContext = None ,
132- flag_evaluation_options : FlagEvaluationOptions = None ,
143+ evaluation_context : typing . Optional [ EvaluationContext ] = None ,
144+ flag_evaluation_options : typing . Optional [ FlagEvaluationOptions ] = None ,
133145 ) -> FlagEvaluationDetails :
134146 return self .evaluate_flag_details (
135147 FlagType .INTEGER ,
@@ -143,8 +155,8 @@ def get_float_value(
143155 self ,
144156 flag_key : str ,
145157 default_value : float ,
146- evaluation_context : EvaluationContext = None ,
147- flag_evaluation_options : FlagEvaluationOptions = None ,
158+ evaluation_context : typing . Optional [ EvaluationContext ] = None ,
159+ flag_evaluation_options : typing . Optional [ FlagEvaluationOptions ] = None ,
148160 ) -> float :
149161 return self .get_float_details (
150162 flag_key ,
@@ -157,8 +169,8 @@ def get_float_details(
157169 self ,
158170 flag_key : str ,
159171 default_value : float ,
160- evaluation_context : EvaluationContext = None ,
161- flag_evaluation_options : FlagEvaluationOptions = None ,
172+ evaluation_context : typing . Optional [ EvaluationContext ] = None ,
173+ flag_evaluation_options : typing . Optional [ FlagEvaluationOptions ] = None ,
162174 ) -> FlagEvaluationDetails :
163175 return self .evaluate_flag_details (
164176 FlagType .FLOAT ,
@@ -172,8 +184,8 @@ def get_object_value(
172184 self ,
173185 flag_key : str ,
174186 default_value : dict ,
175- evaluation_context : EvaluationContext = None ,
176- flag_evaluation_options : FlagEvaluationOptions = None ,
187+ evaluation_context : typing . Optional [ EvaluationContext ] = None ,
188+ flag_evaluation_options : typing . Optional [ FlagEvaluationOptions ] = None ,
177189 ) -> dict :
178190 return self .evaluate_flag_details (
179191 FlagType .OBJECT ,
@@ -187,8 +199,8 @@ def get_object_details(
187199 self ,
188200 flag_key : str ,
189201 default_value : dict ,
190- evaluation_context : EvaluationContext = None ,
191- flag_evaluation_options : FlagEvaluationOptions = None ,
202+ evaluation_context : typing . Optional [ EvaluationContext ] = None ,
203+ flag_evaluation_options : typing . Optional [ FlagEvaluationOptions ] = None ,
192204 ) -> FlagEvaluationDetails :
193205 return self .evaluate_flag_details (
194206 FlagType .OBJECT ,
@@ -203,8 +215,8 @@ def evaluate_flag_details(
203215 flag_type : FlagType ,
204216 flag_key : str ,
205217 default_value : typing .Any ,
206- evaluation_context : EvaluationContext = None ,
207- flag_evaluation_options : FlagEvaluationOptions = None ,
218+ evaluation_context : typing . Optional [ EvaluationContext ] = None ,
219+ flag_evaluation_options : typing . Optional [ FlagEvaluationOptions ] = None ,
208220 ) -> FlagEvaluationDetails :
209221 """
210222 Evaluate the flag requested by the user from the clients provider.
@@ -307,7 +319,7 @@ def _create_provider_evaluation(
307319 flag_type : FlagType ,
308320 flag_key : str ,
309321 default_value : typing .Any ,
310- evaluation_context : EvaluationContext = None ,
322+ evaluation_context : typing . Optional [ EvaluationContext ] = None ,
311323 ) -> FlagEvaluationDetails :
312324 """
313325 Encapsulated method to create a FlagEvaluationDetail from a specific provider.
@@ -329,16 +341,15 @@ def _create_provider_evaluation(
329341 logging .info ("No provider configured, using no-op provider." )
330342 self .provider = NoOpProvider ()
331343
332- get_details_callable = {
344+ get_details_callables : typing . Mapping [ FlagType , GetDetailCallable ] = {
333345 FlagType .BOOLEAN : self .provider .resolve_boolean_details ,
334346 FlagType .INTEGER : self .provider .resolve_integer_details ,
335347 FlagType .FLOAT : self .provider .resolve_float_details ,
336348 FlagType .OBJECT : self .provider .resolve_object_details ,
337349 FlagType .STRING : self .provider .resolve_string_details ,
338- }. get ( flag_type )
350+ }
339351
340352 get_details_callable = get_details_callables .get (flag_type )
341-
342353 if not get_details_callable :
343354 raise GeneralError (error_message = "Unknown flag type" )
344355
0 commit comments