Skip to content

Commit 8e3b9b4

Browse files
committed
improve iso8601 handling
1 parent d48d241 commit 8e3b9b4

File tree

3 files changed

+31
-3
lines changed

3 files changed

+31
-3
lines changed

graphene/core/types/custom_scalars.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import datetime
22
import json
3+
import iso8601
34

45
from graphql.core.language import ast
56

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

3939
@staticmethod
4040
def parse_value(value):
41-
return datetime.datetime.strptime(value, "%Y-%m-%dT%H:%M:%S.%f")
41+
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+
def test_date_time():
8+
test_iso_string = "2016-04-29T18:34:12.502Z"
9+
10+
def check_datetime(test_dt):
11+
assert test_dt.tzinfo == iso8601.UTC
12+
assert test_dt.year == 2016
13+
assert test_dt.month == 04
14+
assert test_dt.day == 29
15+
assert test_dt.hour == 18
16+
assert test_dt.minute == 34
17+
assert test_dt.second == 12
18+
19+
test_dt = DateTime().parse_value(test_iso_string)
20+
check_datetime(test_dt)
21+
22+
assert DateTime.serialize(test_dt) == "2016-04-29T18:34:12.502000+00:00"
23+
24+
node = StringValue(test_iso_string)
25+
test_dt = DateTime.parse_literal(node)
26+
check_datetime(test_dt)
27+

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==0.1.11',
6061
],
6162
tests_require=[
6263
'django-filter>=0.10.0',

0 commit comments

Comments
 (0)