Development #60383
toulouse_smart: passer les dates en UTC à smart
0%
Description
ex: 2021-01-30T18:00:00
Cela reste à préciser (#60337) mais smart semble traiter des dates UTC.
ex: 2021-01-30T17:00:00Z
Les dates ne sont pas stockée dans le connecteur, juste transférées.
Ainsi suivant l'interlocuteur, il faudrait faire la conversion :
- 'Europe/Paris' -> UTC pour smart
- UTC -> 'Europe/Paris' pour w.c.s
Fichiers
Révisions associées
Historique
Mis à jour par Thomas Noël il y a plus de 2 ans
J'ai l'impression que wcs fournit des dates sur le fuseau horaire français.
A quel moment ? Si c'est dans un appel webservice, w.c.s. il fournit ce qu'on lui demande...
Pour info, {{ une_date|date:"c" }} sort de l'ISO 8601.
Si tu veux jouer avec les fuseaux, regarde https://docs.djangoproject.com/fr/2.2/topics/i18n/timezones/#time-zones-in-templates
{% load tz %}{{ une_date|utc }} te renvoie un objet datetime en UTC, à partir de ça tu peux forger une chaine « 2021-01-30T17:00:00Z »
Mis à jour par Benjamin Dauvergne il y a plus de 2 ans
Moui, moi je ne ferai rien dans w.c.s si c'est inutile. w.c.s. envoie du localtime par défaut, on parse le localtime et on ressort en UTC avec le suffixe Z puisque SMART semble avoir un parseur compatible RFC3339 au minimum.
Mis à jour par Benjamin Dauvergne il y a plus de 2 ans
Benjamin Dauvergne a écrit :
Moui, moi je ne ferai rien dans w.c.s si c'est inutile. w.c.s. envoie du localtime par défaut, on parse le localtime et on ressort en UTC avec le suffixe Z puisque SMART semble avoir un parseur compatible RFC3339 au minimum.
Dans la proposition autant je vois bien dans le code où on envoie des dates à SMART mais par contre je ne vois pas la liste des cas où SMART nous retourne une date.
Mis à jour par Nicolas Roche il y a plus de 2 ans
Smart nous renvoie les dates passées ( interventionCreated
et interventionDesired
) modifiées (ou pas).
Seule interventionCreated
est mise à jour.
Par exemple via le endpoint get_intervention
ou sur la réponse à v1/intervention
(endpoint create_intervention
).
Mis à jour par Benjamin Dauvergne il y a plus de 2 ans
Nicolas Roche a écrit :
Smart nous renvoie les dates passées (
interventionCreated
etinterventionDesired
) modifiées (ou pas).
SeuleinterventionCreated
est mise à jour.
Par exemple via le endpointget_intervention
ou sur la réponse àv1/intervention
(endpointcreate_intervention
).
Ok donc on a juste à traiter ces deux champs en entrée et en sortie.
Mis à jour par Nicolas Roche il y a plus de 2 ans
- Fichier 0001-toulouse_smart-manage-timezone-translations-60383.patch 0001-toulouse_smart-manage-timezone-translations-60383.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Seule interventionCreated est mise à jour.
En fait non, les 2 dates sont modifiées par Smart, mais différemment.
J'envoie :
(Pdb) self.payload { ... 'interventionCreated': '2022-01-07T10:40:19.000000Z', 'interventionDesired': '2022-01-07T10:40:19.000000Z' }
et je reçois :
(Pdb) self.result 'interventionCreated': '2022-01-07T10:41:44.657Z', 'interventionDesired': '2022-01-07T10:40:19Z'
Peut-être attendre un retour sur #60337 avent de relire/pousser ce patch ?
il faudrait nous préciser le format attendu en entrée et renvoyé par SMART.
Mis à jour par Benjamin Dauvergne il y a plus de 2 ans
Nicolas Roche a écrit :
Peut-être attendre un retour sur #60337 avent de relire/pousser ce patch ?
il faudrait nous préciser le format attendu en entrée et renvoyé par SMART.
Je ne sais pas, pour moi le bug était évident avant sans le ticket de Cyril, ajouter un 'Z' à une date locale formatée ISO n'en a jamais fait une date UTC correcte (pour pas dire que c'était mal et que ça a passé ma relecture :) ).
Mis à jour par Benjamin Dauvergne il y a plus de 2 ans
- Statut changé de Solution proposée à En cours
django.utils.dateparse.parse_datetime
pour parser tes dates (ou dateutil.parser.isoparse) pas strptime
- dans le sens w.c.s. -> SMART :
make_aware(parse_datetime(value)).as_timezone(django.utils.timezone.utc).isoformat() + 'Z'
- dans le sens SMART -> w.c.s :
localtime(parse_datetime(value)).isoformat()
Mis à jour par Nicolas Roche il y a plus de 2 ans
- Fichier 0001-toulouse_smart-manage-timezone-translations-60383.patch 0001-toulouse_smart-manage-timezone-translations-60383.patch ajouté
- Statut changé de En cours à Solution proposée
Zut, smart n'accepte pas l'isoformat "aware" en entrée.
'2021-06-30T16:08:05+00:00Z ^^^^^^J'ai repris tes indications (merci pour le parseur), cependant :
- j'ai utilisé
strftime
pour pousser vers smart (je n'ai pas réussi à avoir une date naïve sur le fuseau UTC) - j'ai poussé une date naïve vers w.c.s.
Dans l'inspecteur je récupère bien la date de ma demande :
form_workflow_data_smart_response_data_payload_interventionCreated 2022-01-07T14:22:30.000000Z form_workflow_data_smart_response_data_payload_interventionDesired 2022-01-07T14:22:30.000000Z form_workflow_data_smart_response_data_result_interventionCreated 2022-01-07T15:22:32.891000 form_workflow_data_smart_response_data_result_interventionDesired 2022-01-07T15:22:30
et wcs semble content :
{{ form_workflow_data_smart_response_data_result_interventionCreated|date:"Y/m/d H:i:s"}} 2022/01/07 15:22:32
Mis à jour par Benjamin Dauvergne il y a plus de 2 ans
Ok parce que c'est faux "'2021-06-30T16:08:05+00:00Z" n'est pas valide y a deux fuseaux horaires "+00:00" et "Z", soit tu fais aware_datetime_in_utc.isoformat().replace('+00:00', 'Z')
soit tu fais aware_date_in_utc.replace(tzinfo=None).isoformat() + 'Z'
Mis à jour par Benjamin Dauvergne il y a plus de 2 ans
- Statut changé de Solution proposée à En cours
Mis à jour par Nicolas Roche il y a plus de 2 ans
- Fichier 0001-toulouse_smart-manage-timezone-translations-60383.patch 0001-toulouse_smart-manage-timezone-translations-60383.patch ajouté
- Statut changé de En cours à Solution proposée
n'est pas valide y a deux fuseaux horaires
Désolé, décidément j'ai du mal.
dans le sens w.c.s. -> SMART : make_aware(parse_datetime(value)).as_timezone(django.utils.timezone.utc).isoformat() ...
J'ai donc repris ça.
Mis à jour par Benjamin Dauvergne il y a plus de 2 ans
- Statut changé de Solution proposée à Solution validée
Nicolas Roche a écrit :
n'est pas valide y a deux fuseaux horaires
Désolé, décidément j'ai du mal.
dans le sens w.c.s. -> SMART : make_aware(parse_datetime(value)).as_timezone(django.utils.timezone.utc).isoformat() ...
J'ai donc repris ça.
Si tu peux confirmer que SMART comprend bien le "+00:00", c'est bon pour moi.
Mis à jour par Nicolas Roche il y a plus de 2 ans
Si tu peux confirmer que SMART comprend bien le "+00:00", c'est bon pour moi.
D'après mes tests oui (mais j'avoue que ça reste empirique).
Mis à jour par Nicolas Roche il y a plus de 2 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit fd86f95ff02c565651d48a7f92bcd6d36b3ae2fd Author: Nicolas ROCHE <nroche@entrouvert.com> Date: Fri Jan 7 09:03:04 2022 +0100 toulouse_smart: manage timezone translations (#60383)
Mis à jour par Frédéric Péters il y a plus de 2 ans
- Statut changé de Résolu (à déployer) à Solution déployée
toulouse_smart: manage timezone translations (#60383)