Skip to content

Commit 045d5ff

Browse files
committed
Added Date type in datetime
1 parent 43cda1d commit 045d5ff

File tree

2 files changed

+51
-1
lines changed

2 files changed

+51
-1
lines changed

graphene/types/datetime.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,32 @@
1515
)
1616

1717

18+
class Date(Scalar):
19+
'''
20+
The `Date` scalar type represents a Date
21+
value as specified by
22+
[iso8601](https://en.wikipedia.org/wiki/ISO_8601).
23+
'''
24+
25+
@staticmethod
26+
def serialize(date):
27+
if isinstance(date, datetime.datetime):
28+
date = date.date()
29+
assert isinstance(date, datetime.date), (
30+
'Received not compatible date "{}"'.format(repr(date))
31+
)
32+
return date.isoformat()
33+
34+
@classmethod
35+
def parse_literal(cls, node):
36+
if isinstance(node, ast.StringValue):
37+
return cls.parse_value(node.value)
38+
39+
@staticmethod
40+
def parse_value(value):
41+
return iso8601.parse_date(value).date()
42+
43+
1844
class DateTime(Scalar):
1945
'''
2046
The `DateTime` scalar type represents a DateTime

graphene/types/tests/test_datetime.py

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,22 @@
22

33
import pytz
44

5-
from ..datetime import DateTime, Time
5+
from ..datetime import DateTime, Date, Time
66
from ..objecttype import ObjectType
77
from ..schema import Schema
88

99

1010
class Query(ObjectType):
1111
datetime = DateTime(_in=DateTime(name='in'))
12+
date = Date(_in=Date(name='in'))
1213
time = Time(_at=Time(name='at'))
1314

1415
def resolve_datetime(self, info, _in=None):
1516
return _in
1617

18+
def resolve_date(self, info, _in=None):
19+
return _in
20+
1721
def resolve_time(self, info, _at=None):
1822
return _at
1923

@@ -30,6 +34,15 @@ def test_datetime_query():
3034
assert result.data == {'datetime': isoformat}
3135

3236

37+
def test_datetime_query():
38+
now = datetime.datetime.now().replace(tzinfo=pytz.utc).date()
39+
isoformat = now.isoformat()
40+
41+
result = schema.execute('''{ date(in: "%s") }''' % isoformat)
42+
assert not result.errors
43+
assert result.data == {'date': isoformat}
44+
45+
3346
def test_time_query():
3447
now = datetime.datetime.now().replace(tzinfo=pytz.utc)
3548
time = datetime.time(now.hour, now.minute, now.second, now.microsecond,
@@ -52,6 +65,17 @@ def test_datetime_query_variable():
5265
assert result.data == {'datetime': isoformat}
5366

5467

68+
def test_date_query_variable():
69+
now = datetime.datetime.now().replace(tzinfo=pytz.utc).date()
70+
isoformat = now.isoformat()
71+
72+
result = schema.execute(
73+
'''query Test($date: Date){ date(in: $date) }''',
74+
variable_values={'date': isoformat})
75+
assert not result.errors
76+
assert result.data == {'date': isoformat}
77+
78+
5579
def test_time_query_variable():
5680
now = datetime.datetime.now().replace(tzinfo=pytz.utc)
5781
time = datetime.time(now.hour, now.minute, now.second, now.microsecond,

0 commit comments

Comments
 (0)