Added Date type in datetime

This commit is contained in:
Syrus Akbary 2017-11-02 21:17:06 -07:00
parent 43cda1d46a
commit 045d5fffbe
2 changed files with 51 additions and 1 deletions

View File

@ -15,6 +15,32 @@ except ImportError:
) )
class Date(Scalar):
'''
The `Date` scalar type represents a Date
value as specified by
[iso8601](https://en.wikipedia.org/wiki/ISO_8601).
'''
@staticmethod
def serialize(date):
if isinstance(date, datetime.datetime):
date = date.date()
assert isinstance(date, datetime.date), (
'Received not compatible date "{}"'.format(repr(date))
)
return date.isoformat()
@classmethod
def parse_literal(cls, node):
if isinstance(node, ast.StringValue):
return cls.parse_value(node.value)
@staticmethod
def parse_value(value):
return iso8601.parse_date(value).date()
class DateTime(Scalar): class DateTime(Scalar):
''' '''
The `DateTime` scalar type represents a DateTime The `DateTime` scalar type represents a DateTime

View File

@ -2,18 +2,22 @@ import datetime
import pytz import pytz
from ..datetime import DateTime, Time from ..datetime import DateTime, Date, Time
from ..objecttype import ObjectType from ..objecttype import ObjectType
from ..schema import Schema from ..schema import Schema
class Query(ObjectType): class Query(ObjectType):
datetime = DateTime(_in=DateTime(name='in')) datetime = DateTime(_in=DateTime(name='in'))
date = Date(_in=Date(name='in'))
time = Time(_at=Time(name='at')) time = Time(_at=Time(name='at'))
def resolve_datetime(self, info, _in=None): def resolve_datetime(self, info, _in=None):
return _in return _in
def resolve_date(self, info, _in=None):
return _in
def resolve_time(self, info, _at=None): def resolve_time(self, info, _at=None):
return _at return _at
@ -30,6 +34,15 @@ def test_datetime_query():
assert result.data == {'datetime': isoformat} assert result.data == {'datetime': isoformat}
def test_datetime_query():
now = datetime.datetime.now().replace(tzinfo=pytz.utc).date()
isoformat = now.isoformat()
result = schema.execute('''{ date(in: "%s") }''' % isoformat)
assert not result.errors
assert result.data == {'date': isoformat}
def test_time_query(): def test_time_query():
now = datetime.datetime.now().replace(tzinfo=pytz.utc) now = datetime.datetime.now().replace(tzinfo=pytz.utc)
time = datetime.time(now.hour, now.minute, now.second, now.microsecond, time = datetime.time(now.hour, now.minute, now.second, now.microsecond,
@ -52,6 +65,17 @@ def test_datetime_query_variable():
assert result.data == {'datetime': isoformat} assert result.data == {'datetime': isoformat}
def test_date_query_variable():
now = datetime.datetime.now().replace(tzinfo=pytz.utc).date()
isoformat = now.isoformat()
result = schema.execute(
'''query Test($date: Date){ date(in: $date) }''',
variable_values={'date': isoformat})
assert not result.errors
assert result.data == {'date': isoformat}
def test_time_query_variable(): def test_time_query_variable():
now = datetime.datetime.now().replace(tzinfo=pytz.utc) now = datetime.datetime.now().replace(tzinfo=pytz.utc)
time = datetime.time(now.hour, now.minute, now.second, now.microsecond, time = datetime.time(now.hour, now.minute, now.second, now.microsecond,