Skip to content

Commit 6272057

Browse files
committed
Merge pull request #152 from jdugan1024/improve-iso8601-handling
improve iso8601 handling
2 parents d48d241 + aea560e commit 6272057

File tree

3 files changed

+31
-4
lines changed

3 files changed

+31
-4
lines changed

graphene/core/types/custom_scalars.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import datetime
21
import json
2+
import iso8601
33

44
from graphql.core.language import ast
55

@@ -33,9 +33,8 @@ def serialize(dt):
3333
@staticmethod
3434
def parse_literal(node):
3535
if isinstance(node, ast.StringValue):
36-
return datetime.datetime.strptime(
37-
node.value, "%Y-%m-%dT%H:%M:%S.%f")
36+
return iso8601.parse_date(node.value)
3837

3938
@staticmethod
4039
def parse_value(value):
41-
return datetime.datetime.strptime(value, "%Y-%m-%dT%H:%M:%S.%f")
40+
return iso8601.parse_date(value)
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import iso8601
2+
3+
from graphql.core.language.ast import StringValue
4+
5+
from ..custom_scalars import DateTime
6+
7+
8+
def test_date_time():
9+
test_iso_string = "2016-04-29T18:34:12.502Z"
10+
11+
def check_datetime(test_dt):
12+
assert test_dt.tzinfo == iso8601.UTC
13+
assert test_dt.year == 2016
14+
assert test_dt.month == 4
15+
assert test_dt.day == 29
16+
assert test_dt.hour == 18
17+
assert test_dt.minute == 34
18+
assert test_dt.second == 12
19+
20+
test_dt = DateTime().parse_value(test_iso_string)
21+
check_datetime(test_dt)
22+
23+
assert DateTime.serialize(test_dt) == "2016-04-29T18:34:12.502000+00:00"
24+
25+
node = StringValue(test_iso_string)
26+
test_dt = DateTime.parse_literal(node)
27+
check_datetime(test_dt)

setup.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ def run_tests(self):
5757
'six>=1.10.0',
5858
'graphql-core>=0.4.9',
5959
'graphql-relay==0.3.3',
60+
'iso8601',
6061
],
6162
tests_require=[
6263
'django-filter>=0.10.0',

0 commit comments

Comments
 (0)