6
6
7
7
from devcycle_python_sdk import DevCycleLocalOptions , AbstractDevCycleClient
8
8
from devcycle_python_sdk .api .local_bucketing import LocalBucketing
9
- from devcycle_python_sdk .exceptions import VariableTypeMismatchError
10
9
from devcycle_python_sdk .managers .config_manager import EnvironmentConfigManager
11
10
from devcycle_python_sdk .managers .eval_hooks_manager import (
12
11
EvalHooksManager ,
17
16
from devcycle_python_sdk .models .bucketed_config import BucketedConfig
18
17
from devcycle_python_sdk .models .eval_hook import EvalHook
19
18
from devcycle_python_sdk .models .eval_hook_context import HookContext
19
+ from devcycle_python_sdk .models .eval_reason import (
20
+ DefaultReasonDetails ,
21
+ EvalReason ,
22
+ EvalReasons ,
23
+ )
20
24
from devcycle_python_sdk .models .event import DevCycleEvent , EventType
21
25
from devcycle_python_sdk .models .feature import Feature
22
26
from devcycle_python_sdk .models .platform_data import default_platform_data
@@ -139,7 +143,9 @@ def variable(self, user: DevCycleUser, key: str, default_value: Any) -> Variable
139
143
logger .warning (
140
144
f"DevCycle: Unable to track AggVariableDefaulted event for Variable { key } : { e } "
141
145
)
142
- return Variable .create_default_variable (key , default_value )
146
+ return Variable .create_default_variable (
147
+ key , default_value , DefaultReasonDetails .MISSING_CONFIG
148
+ )
143
149
144
150
context = HookContext (key , user , default_value )
145
151
variable = Variable .create_default_variable (
@@ -159,22 +165,28 @@ def variable(self, user: DevCycleUser, key: str, default_value: Any) -> Variable
159
165
)
160
166
if bucketed_variable is not None :
161
167
variable = bucketed_variable
168
+ else :
169
+ variable .eval = EvalReason (
170
+ reason = EvalReasons .DEFAULT ,
171
+ details = DefaultReasonDetails .USER_NOT_TARGETED ,
172
+ )
162
173
163
174
if before_hook_error is None :
164
175
self .eval_hooks_manager .run_after (context , variable )
165
176
else :
166
177
raise before_hook_error
167
- except VariableTypeMismatchError :
168
- logger .debug ("DevCycle: Variable type mismatch, returning default value" )
169
- return variable
170
- except BeforeHookError as e :
171
- self .eval_hooks_manager .run_error (context , e )
172
- return variable
173
- except AfterHookError as e :
174
- self .eval_hooks_manager .run_error (context , e )
175
- return variable
176
178
except Exception as e :
177
- logger .warning (f"DevCycle: Error retrieving variable for user: { e } " )
179
+ variable .eval = EvalReason (
180
+ reason = EvalReasons .DEFAULT , details = DefaultReasonDetails .ERROR
181
+ )
182
+
183
+ if isinstance (e , BeforeHookError ):
184
+ self .eval_hooks_manager .run_error (context , e )
185
+ elif isinstance (e , AfterHookError ):
186
+ self .eval_hooks_manager .run_error (context , e )
187
+ else :
188
+ logger .warning (f"DevCycle: Error retrieving variable for user: { e } " )
189
+
178
190
return variable
179
191
finally :
180
192
self .eval_hooks_manager .run_finally (context , variable )
0 commit comments