ariadne-django icon indicating copy to clipboard operation
ariadne-django copied to clipboard

Change timedelta scalar to return ISO format

Open gdalmau opened this issue 3 years ago • 1 comments

Currently the timedelta scalar serializer returns a float equivalent to the total amount of seconds.

https://github.com/reset-button/ariadne_django/blob/5a7c9d15a2b0e0baa8b7e7aad032c738a3dcd1fe/ariadne_django/scalars/timedelta.py#L10-L12

It could be an idea to return the ISO format for durations (see https://en.wikipedia.org/wiki/ISO_8601#Durations). Since python doesn't implement a way to do timedelta(days=1).isoformat(), we could use django duration_iso_string:

from datetime import timedelta
from django.utils.duration import duration_iso_string

timedelta_scalar = ScalarType("Timedelta")

 @timedelta_scalar.serializer 
 def serialize_timedelta(value: timedelta) -> float: 
     return duration_iso_string(value)

Also instead of Timedelta it could be called Duration

gdalmau avatar Sep 22 '21 11:09 gdalmau