8
8
OpenFeatureError ,
9
9
TypeMismatchError ,
10
10
)
11
- from open_feature .exception .exceptions import GeneralError
12
- from open_feature .flag_evaluation .error_code import ErrorCode
13
11
from open_feature .flag_evaluation .flag_evaluation_details import FlagEvaluationDetails
14
12
from open_feature .flag_evaluation .flag_evaluation_options import FlagEvaluationOptions
15
13
from open_feature .flag_evaluation .flag_type import FlagType
26
24
from open_feature .provider .no_op_provider import NoOpProvider
27
25
from open_feature .provider .provider import AbstractProvider
28
26
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
+ ],
32
44
]
33
45
34
46
35
47
class OpenFeatureClient :
36
48
def __init__ (
37
49
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 ,
43
55
):
44
56
self .name = name
45
57
self .version = version
@@ -54,8 +66,8 @@ def get_boolean_value(
54
66
self ,
55
67
flag_key : str ,
56
68
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 ,
59
71
) -> bool :
60
72
return self .evaluate_flag_details (
61
73
FlagType .BOOLEAN ,
@@ -69,8 +81,8 @@ def get_boolean_details(
69
81
self ,
70
82
flag_key : str ,
71
83
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 ,
74
86
) -> FlagEvaluationDetails :
75
87
return self .evaluate_flag_details (
76
88
FlagType .BOOLEAN ,
@@ -84,8 +96,8 @@ def get_string_value(
84
96
self ,
85
97
flag_key : str ,
86
98
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 ,
89
101
) -> str :
90
102
return self .evaluate_flag_details (
91
103
FlagType .STRING ,
@@ -99,8 +111,8 @@ def get_string_details(
99
111
self ,
100
112
flag_key : str ,
101
113
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 ,
104
116
) -> FlagEvaluationDetails :
105
117
return self .evaluate_flag_details (
106
118
FlagType .STRING ,
@@ -114,8 +126,8 @@ def get_integer_value(
114
126
self ,
115
127
flag_key : str ,
116
128
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 ,
119
131
) -> int :
120
132
return self .get_integer_details (
121
133
flag_key ,
@@ -128,8 +140,8 @@ def get_integer_details(
128
140
self ,
129
141
flag_key : str ,
130
142
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 ,
133
145
) -> FlagEvaluationDetails :
134
146
return self .evaluate_flag_details (
135
147
FlagType .INTEGER ,
@@ -143,8 +155,8 @@ def get_float_value(
143
155
self ,
144
156
flag_key : str ,
145
157
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 ,
148
160
) -> float :
149
161
return self .get_float_details (
150
162
flag_key ,
@@ -157,8 +169,8 @@ def get_float_details(
157
169
self ,
158
170
flag_key : str ,
159
171
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 ,
162
174
) -> FlagEvaluationDetails :
163
175
return self .evaluate_flag_details (
164
176
FlagType .FLOAT ,
@@ -172,8 +184,8 @@ def get_object_value(
172
184
self ,
173
185
flag_key : str ,
174
186
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 ,
177
189
) -> dict :
178
190
return self .evaluate_flag_details (
179
191
FlagType .OBJECT ,
@@ -187,8 +199,8 @@ def get_object_details(
187
199
self ,
188
200
flag_key : str ,
189
201
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 ,
192
204
) -> FlagEvaluationDetails :
193
205
return self .evaluate_flag_details (
194
206
FlagType .OBJECT ,
@@ -203,8 +215,8 @@ def evaluate_flag_details(
203
215
flag_type : FlagType ,
204
216
flag_key : str ,
205
217
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 ,
208
220
) -> FlagEvaluationDetails :
209
221
"""
210
222
Evaluate the flag requested by the user from the clients provider.
@@ -307,7 +319,7 @@ def _create_provider_evaluation(
307
319
flag_type : FlagType ,
308
320
flag_key : str ,
309
321
default_value : typing .Any ,
310
- evaluation_context : EvaluationContext = None ,
322
+ evaluation_context : typing . Optional [ EvaluationContext ] = None ,
311
323
) -> FlagEvaluationDetails :
312
324
"""
313
325
Encapsulated method to create a FlagEvaluationDetail from a specific provider.
@@ -329,16 +341,15 @@ def _create_provider_evaluation(
329
341
logging .info ("No provider configured, using no-op provider." )
330
342
self .provider = NoOpProvider ()
331
343
332
- get_details_callable = {
344
+ get_details_callables : typing . Mapping [ FlagType , GetDetailCallable ] = {
333
345
FlagType .BOOLEAN : self .provider .resolve_boolean_details ,
334
346
FlagType .INTEGER : self .provider .resolve_integer_details ,
335
347
FlagType .FLOAT : self .provider .resolve_float_details ,
336
348
FlagType .OBJECT : self .provider .resolve_object_details ,
337
349
FlagType .STRING : self .provider .resolve_string_details ,
338
- }. get ( flag_type )
350
+ }
339
351
340
352
get_details_callable = get_details_callables .get (flag_type )
341
-
342
353
if not get_details_callable :
343
354
raise GeneralError (error_message = "Unknown flag type" )
344
355
0 commit comments