@@ -125,6 +125,13 @@ class ExpressionBase(ASTNodeBase):
125
125
def __repr__ (self ):
126
126
return "<{0} >" .format (self .__class__ .__name__ )
127
127
128
+ def _new_value (self , * args , ** kwargs ):
129
+ # perform a context aware load of value
130
+ value = coerce_value (* args , ** kwargs )
131
+ if isinstance (value , datetime .datetime ) and value .tzinfo is None :
132
+ value = value .replace (tzinfo = self .context .default_timezone )
133
+ return value
134
+
128
135
class LiteralExpressionBase (ExpressionBase ):
129
136
"""A base class for representing literal values from the grammar text."""
130
137
__slots__ = ('value' ,)
@@ -678,7 +685,7 @@ def evaluate(self, thing):
678
685
except errors .AttributeResolutionError as error :
679
686
attribute_error = error
680
687
else :
681
- return coerce_value (value , verify_type = False )
688
+ return self . _new_value (value , verify_type = False )
682
689
683
690
try :
684
691
value = self .context .resolve (resolved_obj , self .name )
@@ -692,7 +699,7 @@ def evaluate(self, thing):
692
699
attribute_error .suggestion = suggestion
693
700
raise attribute_error from None
694
701
value = default_value
695
- return coerce_value (value , verify_type = False )
702
+ return self . _new_value (value , verify_type = False )
696
703
697
704
def reduce (self ):
698
705
if not _is_reduced (self .object ):
@@ -766,7 +773,7 @@ def evaluate(self, thing):
766
773
if self .safe :
767
774
return None
768
775
raise errors .LookupError (resolved_obj , resolved_item )
769
- return coerce_value (value , verify_type = False )
776
+ return self . _new_value (value , verify_type = False )
770
777
771
778
def reduce (self ):
772
779
if isinstance (self .container .result_type , DataType .MAPPING .__class__ ):
@@ -891,9 +898,7 @@ def evaluate(self, thing):
891
898
if default_value is errors .UNDEFINED :
892
899
raise
893
900
value = default_value
894
- value = coerce_value (value , verify_type = False )
895
- if isinstance (value , datetime .datetime ) and value .tzinfo is None :
896
- value = value .replace (tzinfo = self .context .default_timezone )
901
+ value = self ._new_value (value , verify_type = False )
897
902
898
903
# if the expected result type is undefined, return the value
899
904
if self .result_type == DataType .UNDEFINED :
0 commit comments