[openstack-dev] [Oslo] jsonutils support for datetimes
Flavio Percoco
flavio at redhat.com
Mon Jun 3 11:33:45 UTC 2013
Hi,
I'm planning to re-factor current Oslo's jsonutils module and as part
of that re-factor process I'd like to add a better support for datetimes
objects.
Before going further with the implementation, I'd like to get some
feedback from folks and see if any of you have already done it or at
least thought about it.
Currently jsonutils serializes datetimes using timeutils.strtime
function, which returns a ISO8601 formatted string. Since this is a
string, there's no easy way to understand, when de-serializing,
whether it is a datetime, was a datetime before and / or should be
de-serialized as datetime.
The first point is:
1) Do we really need this?
From a "compatibiliy" POV I'd prefer not having it and avoid
sending datetimes that are supposed to be de-serialized. However,
there are definitely cases were this is useful and makes
implementations way easier.
2) Does it make sense to have this in Oslo?
My bet is yes. We currently need it in Glance and I think other
projects can benefit from this - nova does something similar. (We
can use Glance as a POC for this).
3) I've put some thoughts on it that I'd like to share:
1) Try always to convert the str to datetime - using
timeutils.parse_strtime. The drawback is that we might convert to
datetimes values that weren't datetime before being serialized.
Similar to what nova's sqlalchemy api does[0].
2) Add a prefix / suffix to the serialized datetime. This will
allow the de-serializer to know whether it should be converted to
datetime.
3) Serialize the datetime as a dictionary with the following
structure:
{"_type": "datetime",
"_value": "....",
"_format": "%Y-%m-%dT%H:%M:%S.%f"}
The above will allow the de-serializer to know whether it
should be converted, the object type (datetime, date or time)
and the format it was serialized with. I don't like this idea
but I see the benefit of having all that information.
[0]
https://github.com/openstack/nova/blob/master/nova/db/sqlalchemy/api.py#L276
Any thoughts / ideas?
Cheers,
FF
--
@flaper87
Flavio Percoco
More information about the OpenStack-dev
mailing list