24
24
from open_feature .provider .no_op_provider import NoOpProvider
25
25
from open_feature .provider .provider import AbstractProvider
26
26
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
+ ]
28
45
29
46
30
47
class OpenFeatureClient :
31
48
def __init__ (
32
49
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 ,
38
55
):
39
56
self .name = name
40
57
self .version = version
@@ -49,8 +66,8 @@ def get_boolean_value(
49
66
self ,
50
67
flag_key : str ,
51
68
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 ,
54
71
) -> bool :
55
72
return self .evaluate_flag_details (
56
73
FlagType .BOOLEAN ,
@@ -64,8 +81,8 @@ def get_boolean_details(
64
81
self ,
65
82
flag_key : str ,
66
83
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 ,
69
86
) -> FlagEvaluationDetails :
70
87
return self .evaluate_flag_details (
71
88
FlagType .BOOLEAN ,
@@ -79,8 +96,8 @@ def get_string_value(
79
96
self ,
80
97
flag_key : str ,
81
98
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 ,
84
101
) -> str :
85
102
return self .evaluate_flag_details (
86
103
FlagType .STRING ,
@@ -94,8 +111,8 @@ def get_string_details(
94
111
self ,
95
112
flag_key : str ,
96
113
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 ,
99
116
) -> FlagEvaluationDetails :
100
117
return self .evaluate_flag_details (
101
118
FlagType .STRING ,
@@ -109,8 +126,8 @@ def get_integer_value(
109
126
self ,
110
127
flag_key : str ,
111
128
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 ,
114
131
) -> int :
115
132
return self .get_integer_details (
116
133
flag_key ,
@@ -123,8 +140,8 @@ def get_integer_details(
123
140
self ,
124
141
flag_key : str ,
125
142
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 ,
128
145
) -> FlagEvaluationDetails :
129
146
return self .evaluate_flag_details (
130
147
FlagType .INTEGER ,
@@ -138,8 +155,8 @@ def get_float_value(
138
155
self ,
139
156
flag_key : str ,
140
157
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 ,
143
160
) -> float :
144
161
return self .get_float_details (
145
162
flag_key ,
@@ -152,8 +169,8 @@ def get_float_details(
152
169
self ,
153
170
flag_key : str ,
154
171
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 ,
157
174
) -> FlagEvaluationDetails :
158
175
return self .evaluate_flag_details (
159
176
FlagType .FLOAT ,
@@ -167,8 +184,8 @@ def get_object_value(
167
184
self ,
168
185
flag_key : str ,
169
186
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 ,
172
189
) -> dict :
173
190
return self .evaluate_flag_details (
174
191
FlagType .OBJECT ,
@@ -182,8 +199,8 @@ def get_object_details(
182
199
self ,
183
200
flag_key : str ,
184
201
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 ,
187
204
) -> FlagEvaluationDetails :
188
205
return self .evaluate_flag_details (
189
206
FlagType .OBJECT ,
@@ -198,8 +215,8 @@ def evaluate_flag_details(
198
215
flag_type : FlagType ,
199
216
flag_key : str ,
200
217
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 ,
203
220
) -> FlagEvaluationDetails :
204
221
"""
205
222
Evaluate the flag requested by the user from the clients provider.
@@ -302,7 +319,7 @@ def _create_provider_evaluation(
302
319
flag_type : FlagType ,
303
320
flag_key : str ,
304
321
default_value : typing .Any ,
305
- evaluation_context : EvaluationContext = None ,
322
+ evaluation_context : typing . Optional [ EvaluationContext ] = None ,
306
323
) -> FlagEvaluationDetails :
307
324
"""
308
325
Encapsulated method to create a FlagEvaluationDetail from a specific provider.
@@ -324,14 +341,15 @@ def _create_provider_evaluation(
324
341
logging .info ("No provider configured, using no-op provider." )
325
342
self .provider = NoOpProvider ()
326
343
327
- get_details_callable = {
344
+ get_details_callables : typing . Mapping [ FlagType , GetDetailCallable ] = {
328
345
FlagType .BOOLEAN : self .provider .resolve_boolean_details ,
329
346
FlagType .INTEGER : self .provider .resolve_integer_details ,
330
347
FlagType .FLOAT : self .provider .resolve_float_details ,
331
348
FlagType .OBJECT : self .provider .resolve_object_details ,
332
349
FlagType .STRING : self .provider .resolve_string_details ,
333
- }. get ( flag_type )
350
+ }
334
351
352
+ get_details_callable = get_details_callables .get (flag_type )
335
353
if not get_details_callable :
336
354
raise GeneralError (error_message = "Unknown flag type" )
337
355
0 commit comments