From ec4a49498dee7ef8a910a08dbd1b225f61a4a220 Mon Sep 17 00:00:00 2001 From: Syrus Akbary Date: Sat, 13 Aug 2016 13:19:58 -0700 Subject: [PATCH] Added datetime scalar --- graphene/new_types/datetime.py | 39 ++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 graphene/new_types/datetime.py diff --git a/graphene/new_types/datetime.py b/graphene/new_types/datetime.py new file mode 100644 index 00000000..9baa731e --- /dev/null +++ b/graphene/new_types/datetime.py @@ -0,0 +1,39 @@ +from __future__ import absolute_import + +import datetime + +from graphql.language import ast + +from .scalars import Scalar + +try: + import iso8601 +except: + raise ImportError( + "iso8601 package is required for DateTime Scalar.\n" + "You can install it using: pip install iso8601." + ) + + +class DateTime(Scalar): + ''' + The `DateTime` scalar type represents a DateTime + value as specified by + [iso8601](https://en.wikipedia.org/wiki/ISO_8601). + ''' + + @staticmethod + def serialize(dt): + assert isinstance(dt, (datetime.datetime, datetime.date)), ( + 'Received not compatible datetime "{}"'.format(repr(dt)) + ) + return dt.isoformat() + + @staticmethod + def parse_literal(node): + if isinstance(node, ast.StringValue): + return iso8601.parse_date(node.value) + + @staticmethod + def parse_value(value): + return datetime.datetime.strptime(value, "%Y-%m-%dT%H:%M:%S.%f")