Skip to content

Commit 415b71f

Browse files
authored
Merge pull request #679 from anisjonischkeit/patch-1
Made DateTime types return GraphQLError on fail
2 parents f4d1553 + 9973fd3 commit 415b71f

File tree

2 files changed

+42
-5
lines changed

2 files changed

+42
-5
lines changed

graphene/types/datetime.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,10 @@ def parse_literal(cls, node):
3838

3939
@staticmethod
4040
def parse_value(value):
41-
return iso8601.parse_date(value).date()
41+
try:
42+
return iso8601.parse_date(value).date()
43+
except iso8601.ParseError:
44+
return None
4245

4346

4447
class DateTime(Scalar):
@@ -62,7 +65,10 @@ def parse_literal(cls, node):
6265

6366
@staticmethod
6467
def parse_value(value):
65-
return iso8601.parse_date(value)
68+
try:
69+
return iso8601.parse_date(value)
70+
except iso8601.ParseError:
71+
return None
6672

6773

6874
class Time(Scalar):
@@ -87,5 +93,8 @@ def parse_literal(cls, node):
8793

8894
@classmethod
8995
def parse_value(cls, value):
90-
dt = iso8601.parse_date('{}T{}'.format(cls.epoch_date, value))
91-
return datetime.time(dt.hour, dt.minute, dt.second, dt.microsecond, dt.tzinfo)
96+
try:
97+
dt = iso8601.parse_date('{}T{}'.format(cls.epoch_date, value))
98+
return datetime.time(dt.hour, dt.minute, dt.second, dt.microsecond, dt.tzinfo)
99+
except iso8601.ParseError:
100+
return None

graphene/types/tests/test_datetime.py

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import pytz
44

5+
from graphql import GraphQLError
6+
57
from ..datetime import DateTime, Date, Time
68
from ..objecttype import ObjectType
79
from ..schema import Schema
@@ -34,7 +36,7 @@ def test_datetime_query():
3436
assert result.data == {'datetime': isoformat}
3537

3638

37-
def test_datetime_query():
39+
def test_date_query():
3840
now = datetime.datetime.now().replace(tzinfo=pytz.utc).date()
3941
isoformat = now.isoformat()
4042

@@ -53,6 +55,32 @@ def test_time_query():
5355
assert not result.errors
5456
assert result.data == {'time': isoformat}
5557

58+
def test_bad_datetime_query():
59+
not_a_date = "Some string that's not a date"
60+
61+
result = schema.execute('''{ datetime(in: "%s") }''' % not_a_date)
62+
63+
assert len(result.errors) == 1
64+
assert isinstance(result.errors[0], GraphQLError)
65+
assert result.data == None
66+
67+
def test_bad_date_query():
68+
not_a_date = "Some string that's not a date"
69+
70+
result = schema.execute('''{ date(in: "%s") }''' % not_a_date)
71+
72+
assert len(result.errors) == 1
73+
assert isinstance(result.errors[0], GraphQLError)
74+
assert result.data == None
75+
76+
def test_bad_time_query():
77+
not_a_date = "Some string that's not a date"
78+
79+
result = schema.execute('''{ time(at: "%s") }''' % not_a_date)
80+
81+
assert len(result.errors) == 1
82+
assert isinstance(result.errors[0], GraphQLError)
83+
assert result.data == None
5684

5785
def test_datetime_query_variable():
5886
now = datetime.datetime.now().replace(tzinfo=pytz.utc)

0 commit comments

Comments
 (0)