From 1f0f39c24c5c325e7cbb0d2f8beadbb91d788157 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Wed, 30 May 2018 08:49:34 +0200 Subject: [PATCH 4/4] agendas: fix export/import of TimePeriodException (#24152) - convert datetime to naive before serialization, - export missing fields: external_id, recurrence_id and update_datetime. --- chrono/agendas/models.py | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/chrono/agendas/models.py b/chrono/agendas/models.py index c59df79..7a3f214 100644 --- a/chrono/agendas/models.py +++ b/chrono/agendas/models.py @@ -619,15 +619,25 @@ class TimePeriodException(models.Model): @classmethod def import_json(cls, data): - data['start_datetime'] = make_aware(datetime.datetime.strptime( - data['start_datetime'], '%Y-%m-%d %H:%M:%S')) - data['end_datetime'] = make_aware(datetime.datetime.strptime( - data['end_datetime'], '%Y-%m-%d %H:%M:%S')) + def import_datetime(s): + '''Import datetime as a naive ISO8601 serialization''' + return make_aware(datetime.datetime.strptime(s, '%Y-%m-%d %H:%M:%S')) + + for k, v in data.items(): + if k.endswith('_datetime'): + data[k] = import_datetime(v) return cls(**data) def export_json(self): + def export_datetime(dt): + '''Export datetime as a naive ISO8601 serialization''' + return make_naive(dt).strftime('%Y-%m-%d %H:%M:%S') + return { 'label': self.label, - 'start_datetime': self.start_datetime.strftime('%Y-%m-%d %H:%M:%S'), - 'end_datetime': self.end_datetime.strftime('%Y-%m-%d %H:%M:%S'), + 'start_datetime': export_datetime(self.start_datetime), + 'end_datetime': export_datetime(self.end_datetime), + 'external_id': self.external_id, + 'recurrence_id': self.recurrence_id, + 'update_datetime': export_datetime(self.update_datetime), } -- 2.17.0