1717from devcycle_python_sdk .models .bucketed_config import BucketedConfig
1818from devcycle_python_sdk .models .eval_hook import EvalHook
1919from devcycle_python_sdk .models .eval_hook_context import HookContext
20+ from devcycle_python_sdk .models .eval_reason import DefaultReasonDetails , EvalReason , EvalReasons
2021from devcycle_python_sdk .models .event import DevCycleEvent , EventType
2122from devcycle_python_sdk .models .feature import Feature
2223from devcycle_python_sdk .models .platform_data import default_platform_data
@@ -139,7 +140,7 @@ def variable(self, user: DevCycleUser, key: str, default_value: Any) -> Variable
139140 logger .warning (
140141 f"DevCycle: Unable to track AggVariableDefaulted event for Variable { key } : { e } "
141142 )
142- return Variable .create_default_variable (key , default_value )
143+ return Variable .create_default_variable (key , default_value , DefaultReasonDetails . MISSING_CONFIG )
143144
144145 context = HookContext (key , user , default_value )
145146 variable = Variable .create_default_variable (
@@ -159,22 +160,30 @@ def variable(self, user: DevCycleUser, key: str, default_value: Any) -> Variable
159160 )
160161 if bucketed_variable is not None :
161162 variable = bucketed_variable
163+ else :
164+ variable .eval = EvalReason (
165+ reason = EvalReasons .DEFAULT ,
166+ details = DefaultReasonDetails .USER_NOT_TARGETED
167+ )
162168
163169 if before_hook_error is None :
164170 self .eval_hooks_manager .run_after (context , variable )
165171 else :
166172 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
176173 except Exception as e :
177- logger .warning (f"DevCycle: Error retrieving variable for user: { e } " )
174+ variable .eval = EvalReason (
175+ reason = EvalReasons .DEFAULT ,
176+ details = DefaultReasonDetails .ERROR
177+ )
178+
179+ if isinstance (e , BeforeHookError ):
180+ self .eval_hooks_manager .run_error (context , e )
181+ elif isinstance (e , AfterHookError ):
182+ self .eval_hooks_manager .run_error (context , e )
183+ else :
184+ logger .warning (
185+ f"DevCycle: Error retrieving variable for user: { e } " )
186+
178187 return variable
179188 finally :
180189 self .eval_hooks_manager .run_finally (context , variable )
0 commit comments