Last active
March 31, 2017 07:28
-
-
Save richmondwang/3a6ae068d205981720817a0e82d71394 to your computer and use it in GitHub Desktop.
This is a custom Scalar type. This DateTime Scalar can be formatted into anything the consumer needs it to be.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
import datetime | |
import graphene | |
from graphene.types.datetime import DateTime | |
class FormattedDateTime(DateTime): | |
""" | |
This is a custom Scalar type. This DateTime Scalar can be formatted into | |
anything the consumer needs it to be. | |
""" | |
__format_description__ = """ | |
Default is in [iso8601](https://en.wikipedia.org/wiki/ISO_8601) format. | |
====== ================================================================================================ ========================== | |
Code Meaning Example | |
====== ================================================================================================ ========================== | |
%a Weekday as locale’s abbreviated name. Mon | |
%A Weekday as locale’s full name. Monday | |
%w Weekday as a decimal number, where 0 is Sunday and 6 is Saturday. 1 | |
%d Day of the month as a zero-padded decimal number. 30 | |
%-d Day of the month as a decimal number. (Platform specific) 30 | |
%b Month as locale’s abbreviated name. Sep | |
%B Month as locale’s full name. September | |
%m Month as a zero-padded decimal number. 9 | |
%-m Month as a decimal number. (Platform specific) 9 | |
%y Year without century as a zero-padded decimal number. 13 | |
%Y Year with century as a decimal number. 2013 | |
%H Hour (24-hour clock) as a zero-padded decimal number. 7 | |
%-H Hour (24-hour clock) as a decimal number. (Platform specific) 7 | |
%I Hour (12-hour clock) as a zero-padded decimal number. 7 | |
%-I Hour (12-hour clock) as a decimal number. (Platform specific) 7 | |
%p Locale’s equivalent of either AM or PM. AM | |
%M Minute as a zero-padded decimal number. 6 | |
%-M Minute as a decimal number. (Platform specific) 6 | |
%S Second as a zero-padded decimal number. 5 | |
%-S Second as a decimal number. (Platform specific) 5 | |
%f Microsecond as a decimal number, zero-padded on the left. 0 | |
%z UTC offset in the form +HHMM or -HHMM (empty string if the the object is naive). | |
%Z Time zone name (empty string if the object is naive). | |
%j Day of the year as a zero-padded decimal number. 273 | |
%-j Day of the year as a decimal number. (Platform specific) 273 | |
%U Week number of the year (Sunday as the first day of the week) as a zero padded decimal number. 39 | |
%W Week number of the year (Monday as the first day of the week) as a decimal number. 39 | |
%c Locale’s appropriate date and time representation. Mon Sep 30 07:06:05 2013 | |
%x Locale’s appropriate date representation. 09/30/13 | |
%X Locale’s appropriate time representation. 7:06:05 | |
%% A literal '%' character. % | |
====== ================================================================================================ ========================== | |
Please see [Strftime.org](http://strftime.org/) for more details. | |
""" | |
def __init__(self, *args, **kwargs): | |
kwargs['fmt'] = graphene.Argument( | |
graphene.String, | |
description='The format of the DateTime you want be returned.' + | |
self.__format_description__) | |
kwargs['tz'] = graphene.Argument( | |
graphene.String, | |
description='The Time Zone you want the DateTime to be in.') | |
super().__init__(*args, **kwargs) | |
@staticmethod | |
def serialize(dt): | |
if isinstance(dt, (datetime.datetime, datetime.date)): | |
return dt.isoformat() | |
return dt | |
# sample query | |
""" | |
{ | |
me { | |
username | |
givenName | |
familyName | |
createdAt(fmt: "Registred on %a %d, %m %Y %H:%M%:S", tz='JST') | |
updatedAt(fmt: "Updated on %a %d, %m %Y %H:%M%:S", tz='JST') | |
} | |
} | |
""" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment