3
3
import datetime
4
4
5
5
from 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
8
8
9
9
from .scalars import Scalar
10
10
@@ -20,25 +20,30 @@ class Date(Scalar):
20
20
def serialize (date ):
21
21
if isinstance (date , datetime .datetime ):
22
22
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 )))
26
25
return date .isoformat ()
27
26
28
27
@classmethod
29
28
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 )
32
34
33
35
@staticmethod
34
36
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
+ )
35
43
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 )
40
45
except ValueError :
41
- return Undefined
46
+ raise GraphQLError ( "Date cannot represent value: {}" . format ( repr ( value )))
42
47
43
48
44
49
class DateTime (Scalar ):
@@ -50,25 +55,32 @@ class DateTime(Scalar):
50
55
51
56
@staticmethod
52
57
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 )))
56
60
return dt .isoformat ()
57
61
58
62
@classmethod
59
63
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 )
62
69
63
70
@staticmethod
64
71
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
+ )
65
78
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 )
70
80
except ValueError :
71
- return Undefined
81
+ raise GraphQLError (
82
+ "DateTime cannot represent value: {}" .format (repr (value ))
83
+ )
72
84
73
85
74
86
class Time (Scalar ):
@@ -80,22 +92,27 @@ class Time(Scalar):
80
92
81
93
@staticmethod
82
94
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 )))
86
97
return time .isoformat ()
87
98
88
99
@classmethod
89
100
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 )
92
106
93
107
@classmethod
94
108
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
+ )
95
115
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 )
100
117
except ValueError :
101
- return Undefined
118
+ raise GraphQLError ( "Time cannot represent value: {}" . format ( repr ( value )))
0 commit comments