Skip to content

Commit d8aacc3

Browse files
authored
Merge pull request #701 from graphql-python/feature/date-improvements
Datetime improvements
2 parents d46d8e8 + 50cd43c commit d8aacc3

File tree

4 files changed

+16
-16
lines changed

4 files changed

+16
-16
lines changed

graphene/__init__.py

+4
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
Schema,
1212
Scalar,
1313
String, ID, Int, Float, Boolean,
14+
Date, DateTime, Time,
1415
JSONString,
1516
UUID,
1617
List, NonNull,
@@ -54,6 +55,9 @@
5455
'Float',
5556
'Enum',
5657
'Boolean',
58+
'Date',
59+
'DateTime',
60+
'Time',
5761
'JSONString',
5862
'UUID',
5963
'List',

graphene/types/__init__.py

+4
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from .interface import Interface
66
from .mutation import Mutation
77
from .scalars import Scalar, String, ID, Int, Float, Boolean
8+
from .datetime import Date, DateTime, Time
89
from .json import JSONString
910
from .uuid import UUID
1011
from .schema import Schema
@@ -36,6 +37,9 @@
3637
'ID',
3738
'Int',
3839
'Float',
40+
'Date',
41+
'DateTime',
42+
'Time',
3943
'JSONString',
4044
'UUID',
4145
'Boolean',

graphene/types/datetime.py

+7-16
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,10 @@
33
import datetime
44

55
from graphql.language import ast
6+
from aniso8601 import parse_datetime, parse_date, parse_time
67

78
from .scalars import Scalar
89

9-
try:
10-
import iso8601
11-
except ImportError:
12-
raise ImportError(
13-
"iso8601 package is required for DateTime Scalar.\n"
14-
"You can install it using: pip install iso8601."
15-
)
16-
1710

1811
class Date(Scalar):
1912
'''
@@ -39,8 +32,8 @@ def parse_literal(cls, node):
3932
@staticmethod
4033
def parse_value(value):
4134
try:
42-
return iso8601.parse_date(value).date()
43-
except iso8601.ParseError:
35+
return parse_date(value)
36+
except ValueError:
4437
return None
4538

4639

@@ -66,8 +59,8 @@ def parse_literal(cls, node):
6659
@staticmethod
6760
def parse_value(value):
6861
try:
69-
return iso8601.parse_date(value)
70-
except iso8601.ParseError:
62+
return parse_datetime(value)
63+
except ValueError:
7164
return None
7265

7366

@@ -77,7 +70,6 @@ class Time(Scalar):
7770
specified by
7871
[iso8601](https://en.wikipedia.org/wiki/ISO_8601).
7972
'''
80-
epoch_date = '1970-01-01'
8173

8274
@staticmethod
8375
def serialize(time):
@@ -94,7 +86,6 @@ def parse_literal(cls, node):
9486
@classmethod
9587
def parse_value(cls, value):
9688
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:
89+
return parse_time(value)
90+
except ValueError:
10091
return None

setup.py

+1
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ def run_tests(self):
9090
'graphql-core>=2.0,<3',
9191
'graphql-relay>=0.4.5,<1',
9292
'promise>=2.1,<3',
93+
'aniso8601>=3,<4',
9394
],
9495
tests_require=tests_require,
9596
extras_require={

0 commit comments

Comments
 (0)