33import datetime
44
55from aniso8601 import parse_date , parse_datetime , parse_time
6- from graphql import Undefined
7- from graphql .language import StringValueNode
6+ from graphql . error import GraphQLError
7+ from graphql .language import StringValueNode , print_ast
88
99from .scalars import Scalar
1010
@@ -20,25 +20,30 @@ class Date(Scalar):
2020 def serialize (date ):
2121 if isinstance (date , datetime .datetime ):
2222 date = date .date ()
23- assert isinstance (
24- date , datetime .date
25- ), 'Received not compatible date "{}"' .format (repr (date ))
23+ if not isinstance (date , datetime .date ):
24+ raise GraphQLError ("Date cannot represent value: {}" .format (repr (date )))
2625 return date .isoformat ()
2726
2827 @classmethod
2928 def parse_literal (cls , node ):
30- if isinstance (node , StringValueNode ):
31- return cls .parse_value (node .value )
29+ if not isinstance (node , StringValueNode ):
30+ raise GraphQLError (
31+ "Date cannot represent non-string value: {}" .format (print_ast (node ))
32+ )
33+ return cls .parse_value (node .value )
3234
3335 @staticmethod
3436 def parse_value (value ):
37+ if isinstance (value , datetime .date ):
38+ return value
39+ if not isinstance (value , str ):
40+ raise GraphQLError (
41+ "Date cannot represent non-string value: {}" .format (repr (value ))
42+ )
3543 try :
36- if isinstance (value , datetime .date ):
37- return value
38- elif isinstance (value , str ):
39- return parse_date (value )
44+ return parse_date (value )
4045 except ValueError :
41- return Undefined
46+ raise GraphQLError ( "Date cannot represent value: {}" . format ( repr ( value )))
4247
4348
4449class DateTime (Scalar ):
@@ -50,25 +55,32 @@ class DateTime(Scalar):
5055
5156 @staticmethod
5257 def serialize (dt ):
53- assert isinstance (
54- dt , (datetime .datetime , datetime .date )
55- ), 'Received not compatible datetime "{}"' .format (repr (dt ))
58+ if not isinstance (dt , (datetime .datetime , datetime .date )):
59+ raise GraphQLError ("DateTime cannot represent value: {}" .format (repr (dt )))
5660 return dt .isoformat ()
5761
5862 @classmethod
5963 def parse_literal (cls , node ):
60- if isinstance (node , StringValueNode ):
61- return cls .parse_value (node .value )
64+ if not isinstance (node , StringValueNode ):
65+ raise GraphQLError (
66+ "DateTime cannot represent non-string value: {}" .format (print_ast (node ))
67+ )
68+ return cls .parse_value (node .value )
6269
6370 @staticmethod
6471 def parse_value (value ):
72+ if isinstance (value , datetime .datetime ):
73+ return value
74+ if not isinstance (value , str ):
75+ raise GraphQLError (
76+ "DateTime cannot represent non-string value: {}" .format (repr (value ))
77+ )
6578 try :
66- if isinstance (value , datetime .datetime ):
67- return value
68- elif isinstance (value , str ):
69- return parse_datetime (value )
79+ return parse_datetime (value )
7080 except ValueError :
71- return Undefined
81+ raise GraphQLError (
82+ "DateTime cannot represent value: {}" .format (repr (value ))
83+ )
7284
7385
7486class Time (Scalar ):
@@ -80,22 +92,27 @@ class Time(Scalar):
8092
8193 @staticmethod
8294 def serialize (time ):
83- assert isinstance (
84- time , datetime .time
85- ), 'Received not compatible time "{}"' .format (repr (time ))
95+ if not isinstance (time , datetime .time ):
96+ raise GraphQLError ("Time cannot represent value: {}" .format (repr (time )))
8697 return time .isoformat ()
8798
8899 @classmethod
89100 def parse_literal (cls , node ):
90- if isinstance (node , StringValueNode ):
91- return cls .parse_value (node .value )
101+ if not isinstance (node , StringValueNode ):
102+ raise GraphQLError (
103+ "Time cannot represent non-string value: {}" .format (print_ast (node ))
104+ )
105+ return cls .parse_value (node .value )
92106
93107 @classmethod
94108 def parse_value (cls , value ):
109+ if isinstance (value , datetime .time ):
110+ return value
111+ if not isinstance (value , str ):
112+ raise GraphQLError (
113+ "Time cannot represent non-string value: {}" .format (repr (value ))
114+ )
95115 try :
96- if isinstance (value , datetime .time ):
97- return value
98- elif isinstance (value , str ):
99- return parse_time (value )
116+ return parse_time (value )
100117 except ValueError :
101- return Undefined
118+ raise GraphQLError ( "Time cannot represent value: {}" . format ( repr ( value )))
0 commit comments