@@ -25,9 +25,11 @@ def __init__(
25
25
self ,
26
26
config_requestor : ExperimentConfigurationRequestor ,
27
27
assignment_logger : AssignmentLogger ,
28
+ is_graceful_mode : bool = True ,
28
29
):
29
30
self .__config_requestor = config_requestor
30
31
self .__assignment_logger = assignment_logger
32
+ self .__is_graceful_mode = is_graceful_mode
31
33
self .__poller = Poller (
32
34
interval_millis = POLL_INTERVAL_MILLIS ,
33
35
jitter_millis = POLL_JITTER_MILLIS ,
@@ -38,77 +40,131 @@ def __init__(
38
40
def get_string_assignment (
39
41
self , subject_key : str , flag_key : str , subject_attributes = dict ()
40
42
) -> Optional [str ]:
41
- assigned_variation = self .get_assignment_variation (
42
- subject_key , flag_key , subject_attributes , VariationType .STRING
43
- )
44
- return (
45
- assigned_variation .typed_value
46
- if assigned_variation is not None
47
- else assigned_variation
48
- )
43
+ try :
44
+ assigned_variation = self .get_assignment_variation (
45
+ subject_key , flag_key , subject_attributes , VariationType .STRING
46
+ )
47
+ return (
48
+ assigned_variation .typed_value
49
+ if assigned_variation is not None
50
+ else assigned_variation
51
+ )
52
+ except ValueError as e :
53
+ # allow ValueError to bubble up as it is a validation error
54
+ raise e
55
+ except Exception as e :
56
+ if self .__is_graceful_mode :
57
+ logger .error ("[Eppo SDK] Error getting assignment: " + str (e ))
58
+ return None
59
+ raise e
49
60
50
61
def get_numeric_assignment (
51
62
self , subject_key : str , flag_key : str , subject_attributes = dict ()
52
63
) -> Optional [Number ]:
53
- assigned_variation = self .get_assignment_variation (
54
- subject_key , flag_key , subject_attributes , VariationType .NUMERIC
55
- )
56
- return (
57
- assigned_variation .typed_value
58
- if assigned_variation is not None
59
- else assigned_variation
60
- )
64
+ try :
65
+ assigned_variation = self .get_assignment_variation (
66
+ subject_key , flag_key , subject_attributes , VariationType .NUMERIC
67
+ )
68
+ return (
69
+ assigned_variation .typed_value
70
+ if assigned_variation is not None
71
+ else assigned_variation
72
+ )
73
+ except ValueError as e :
74
+ # allow ValueError to bubble up as it is a validation error
75
+ raise e
76
+ except Exception as e :
77
+ if self .__is_graceful_mode :
78
+ logger .error ("[Eppo SDK] Error getting assignment: " + str (e ))
79
+ return None
80
+ raise e
61
81
62
82
def get_boolean_assignment (
63
83
self , subject_key : str , flag_key : str , subject_attributes = dict ()
64
84
) -> Optional [bool ]:
65
- assigned_variation = self .get_assignment_variation (
66
- subject_key , flag_key , subject_attributes , VariationType .BOOLEAN
67
- )
68
- return (
69
- assigned_variation .typed_value
70
- if assigned_variation is not None
71
- else assigned_variation
72
- )
85
+ try :
86
+ assigned_variation = self .get_assignment_variation (
87
+ subject_key , flag_key , subject_attributes , VariationType .BOOLEAN
88
+ )
89
+ return (
90
+ assigned_variation .typed_value
91
+ if assigned_variation is not None
92
+ else assigned_variation
93
+ )
94
+ except ValueError as e :
95
+ # allow ValueError to bubble up as it is a validation error
96
+ raise e
97
+ except Exception as e :
98
+ if self .__is_graceful_mode :
99
+ logger .error ("[Eppo SDK] Error getting assignment: " + str (e ))
100
+ return None
101
+ raise e
73
102
74
103
def get_parsed_json_assignment (
75
104
self , subject_key : str , flag_key : str , subject_attributes = dict ()
76
105
) -> Optional [Dict [Any , Any ]]:
77
- assigned_variation = self .get_assignment_variation (
78
- subject_key , flag_key , subject_attributes , VariationType .JSON
79
- )
80
- return (
81
- assigned_variation .typed_value
82
- if assigned_variation is not None
83
- else assigned_variation
84
- )
106
+ try :
107
+ assigned_variation = self .get_assignment_variation (
108
+ subject_key , flag_key , subject_attributes , VariationType .JSON
109
+ )
110
+ return (
111
+ assigned_variation .typed_value
112
+ if assigned_variation is not None
113
+ else assigned_variation
114
+ )
115
+ except ValueError as e :
116
+ # allow ValueError to bubble up as it is a validation error
117
+ raise e
118
+ except Exception as e :
119
+ if self .__is_graceful_mode :
120
+ logger .error ("[Eppo SDK] Error getting assignment: " + str (e ))
121
+ return None
122
+ raise e
85
123
86
124
def get_json_string_assignment (
87
125
self , subject_key : str , flag_key : str , subject_attributes = dict ()
88
126
) -> Optional [str ]:
89
- assigned_variation = self .get_assignment_variation (
90
- subject_key , flag_key , subject_attributes , VariationType .JSON
91
- )
92
- return (
93
- assigned_variation .value
94
- if assigned_variation is not None
95
- else assigned_variation
96
- )
127
+ try :
128
+ assigned_variation = self .get_assignment_variation (
129
+ subject_key , flag_key , subject_attributes , VariationType .JSON
130
+ )
131
+ return (
132
+ assigned_variation .value
133
+ if assigned_variation is not None
134
+ else assigned_variation
135
+ )
136
+ except ValueError as e :
137
+ # allow ValueError to bubble up as it is a validation error
138
+ raise e
139
+ except Exception as e :
140
+ if self .__is_graceful_mode :
141
+ logger .error ("[Eppo SDK] Error getting assignment: " + str (e ))
142
+ return None
143
+ raise e
97
144
98
145
@deprecated (
99
146
"get_assignment is deprecated in favor of the typed get_<type>_assignment methods"
100
147
)
101
148
def get_assignment (
102
149
self , subject_key : str , flag_key : str , subject_attributes = dict ()
103
150
) -> Optional [str ]:
104
- assigned_variation = self .get_assignment_variation (
105
- subject_key , flag_key , subject_attributes
106
- )
107
- return (
108
- assigned_variation .value
109
- if assigned_variation is not None
110
- else assigned_variation
111
- )
151
+ try :
152
+ assigned_variation = self .get_assignment_variation (
153
+ subject_key , flag_key , subject_attributes
154
+ )
155
+ return (
156
+ assigned_variation .value
157
+ if assigned_variation is not None
158
+ else assigned_variation
159
+ )
160
+ except ValueError as e :
161
+ # allow ValueError to bubble up as it is a validation error
162
+ raise e
163
+ except Exception as e :
164
+ if self .__is_graceful_mode :
165
+ logger .error ("[Eppo SDK] Error getting assignment: " + str (e ))
166
+ return None
167
+ raise e
112
168
113
169
def get_assignment_variation (
114
170
self ,
0 commit comments