improve iso8601 handling

This commit is contained in:
Jon Dugan 2016-04-29 13:58:49 -05:00
parent d48d24176f
commit 8e3b9b430e
3 changed files with 31 additions and 3 deletions

View File

@ -1,5 +1,6 @@
import datetime
import json
import iso8601
from graphql.core.language import ast
@ -33,9 +34,8 @@ class DateTime(Scalar):
@staticmethod
def parse_literal(node):
if isinstance(node, ast.StringValue):
return datetime.datetime.strptime(
node.value, "%Y-%m-%dT%H:%M:%S.%f")
return iso8601.parse_date(node.value)
@staticmethod
def parse_value(value):
return datetime.datetime.strptime(value, "%Y-%m-%dT%H:%M:%S.%f")
return iso8601.parse_date(value)

View File

@ -0,0 +1,27 @@
import iso8601
from graphql.core.language.ast import StringValue
from ..custom_scalars import DateTime
def test_date_time():
test_iso_string = "2016-04-29T18:34:12.502Z"
def check_datetime(test_dt):
assert test_dt.tzinfo == iso8601.UTC
assert test_dt.year == 2016
assert test_dt.month == 04
assert test_dt.day == 29
assert test_dt.hour == 18
assert test_dt.minute == 34
assert test_dt.second == 12
test_dt = DateTime().parse_value(test_iso_string)
check_datetime(test_dt)
assert DateTime.serialize(test_dt) == "2016-04-29T18:34:12.502000+00:00"
node = StringValue(test_iso_string)
test_dt = DateTime.parse_literal(node)
check_datetime(test_dt)

View File

@ -57,6 +57,7 @@ setup(
'six>=1.10.0',
'graphql-core>=0.4.9',
'graphql-relay==0.3.3',
'iso8601==0.1.11',
],
tests_require=[
'django-filter>=0.10.0',