Development #28767
Import d'un ICS : prise en charge de la règle RRULE
0%
Description
J'ai voulu importer un ICS (en PJ) dans un agenda pour créer des exceptions. Les dates fixes sont indiquées avec l'entrée RRULE pour indiquer la récurrence :
RRULE:FREQ=YEARLY
Ce n'est pas compris lors de l'import et ces dates sont totalement ignorées. Est-il possible de modifier ce comportement pour que ça soit pris en compte ?
Fichiers
Demandes liées
Historique
Mis à jour par Frédéric Péters il y a plus de 5 ans
- Fichier Screenshot_2018-12-07 Chrono - excep.png Screenshot_2018-12-07 Chrono - excep.png ajouté
- Statut changé de Nouveau à Information nécessaire
J'ai pris ton fichier je l'ai importé et j'ai eu le bon résultat.
Où as-tu eu un problème ?
Mis à jour par Marie Kuntz il y a plus de 5 ans
- Statut changé de Information nécessaire à Rejeté
My bad, j'ai utilisé un fichier qui démarrait en 2010. Lors de l'import sur mon instance, entre 2010 et 2018 aucune de ces dates n'avait été créée en exception, probablement parce qu'elles sont dans le passé. Je viens de vérifier, elles sont bien présentes à partir de 2019, plus Noël 2018.
Mis à jour par Marie Kuntz il y a plus de 5 ans
- Fichier testferie_until.ics testferie_until.ics ajouté
- Fichier testferie_count.ics testferie_count.ics ajouté
- Statut changé de Rejeté à Nouveau
Alors en fait, si, il y a bien un bug : en cas d'utilisation de RRULE, seuls 2 événements sont créés (cf capture de fpeters).
Si l'on ajoute le paramètre COUNT il n'est pas pris en compte, le paramètre UNTIL fait planter l'import (cf debug ci-dessous)
Environment: Request Method: POST Request URL: https://agendas-mkuntz.test.entrouvert.org/manage/agendas/desk/8/import-exceptions-from-ics/ Django Version: 1.8.18 Python Version: 2.7.9 Installed Applications: '' Installed Middleware: '' Traceback: File "/usr/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response 132. response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/usr/lib/python2.7/dist-packages/django/contrib/auth/decorators.py" in _wrapped_view 22. return view_func(request, *args, **kwargs) File "/usr/lib/python2.7/dist-packages/django/views/generic/base.py" in view 71. return self.dispatch(request, *args, **kwargs) File "/usr/lib/python2.7/dist-packages/chrono/manager/views.py" in dispatch 470. return super(ManagedAgendaSubobjectMixin, self).dispatch(request, *args, **kwargs) File "/usr/lib/python2.7/dist-packages/django/views/generic/base.py" in dispatch 89. return handler(request, *args, **kwargs) File "/usr/lib/python2.7/dist-packages/django/views/generic/edit.py" in post 272. return super(BaseUpdateView, self).post(request, *args, **kwargs) File "/usr/lib/python2.7/dist-packages/django/views/generic/edit.py" in post 215. return self.form_valid(form) File "/usr/lib/python2.7/dist-packages/chrono/manager/views.py" in form_valid 773. exceptions = form.instance.create_timeperiod_exceptions_from_ics(ics_file_content) File "/usr/lib/python2.7/dist-packages/chrono/agendas/models.py" in create_timeperiod_exceptions_from_ics 555. elif vevent.rruleset.count(): File "/usr/lib/python2.7/dist-packages/dateutil/rrule.py" in count 167. for x in self: pass File "/usr/lib/python2.7/dist-packages/dateutil/rrule.py" in _iter 884. self._genitem(rlist, gen) File "/usr/lib/python2.7/dist-packages/dateutil/rrule.py" in __init__ 833. self.dt = advance_iterator(gen) File "/usr/lib/python2.7/dist-packages/dateutil/rrule.py" in _iter 515. if until and res > until: Exception Type: TypeError at /manage/agendas/desk/8/import-exceptions-from-ics/ Exception Value: can't compare offset-naive and offset-aware datetimes
Mis à jour par Benjamin Dauvergne il y a plus de 5 ans
Le fichier avec UNTIL tu l'as créé à la main ? Parce que le fichier contient des dates avec timezone et sans timezone et je ne sais pas si c'est légal ou normal pour un logiciel de faire cela, surtout sans déclarer de timezone au niveau du fichier; il faudrait que je lise la norme iCalendar.
Mis à jour par Benjamin Dauvergne il y a plus de 5 ans
Bon bug corrigé en dateutil 2.7.3, https://github.com/dateutil/dateutil/blob/master/NEWS#L38 mais on est au mieux en 2.6.1 sur stretch il faudrait un backport (et de vobject aussi par la même occasion), les deux versions sont bonnes en unstable.
Mis à jour par Benjamin Dauvergne il y a plus de 4 ans
La version est désormais bonne en stable (buster), 2.7.3-3.
Mis à jour par Marie Kuntz il y a plus de 4 ans
Problème toujours présent :
- le fichier FrenchHolidays.ics est traité mais toutes les exceptions ne sont pas importées (les dates fixes sont importées jusqu'à an+1, dans les dates variables, seule la dernière est prise en compte)
- le fichier testferie_count.ics qui utilise le paramètre COUNT est traité mais seules deux dates sont importées
- le fichier testferie_until.ics qui utilise le paramètre UNTIL plante à l'import :
can't compare offset-naive and offset-aware datetimes
Mis à jour par Benjamin Dauvergne il y a plus de 4 ans
Marie Kuntz a écrit :
Problème toujours présent :
- le fichier FrenchHolidays.ics est traité mais toutes les exceptions ne sont pas importées (les dates fixes sont importées jusqu'à an+1, dans les dates variables, seule la dernière est prise en compte)
- le fichier testferie_count.ics qui utilise le paramètre COUNT est traité mais seules deux dates sont importées
- le fichier testferie_until.ics qui utilise le paramètre UNTIL plante à l'import :
[...]
On est pas en buster, je ne dis pas que c'est corrigé (sinon j'aurai fermé le ticket), je dis juste qu'il suffit soit de backporter soit de migrer vers buster pour corriger le souci.
Mis à jour par Benjamin Dauvergne il y a plus de 4 ans
Marie Kuntz a écrit :
Problème toujours présent :
- le fichier FrenchHolidays.ics est traité mais toutes les exceptions ne sont pas importées (les dates fixes sont importées jusqu'à an+1, dans les dates variables, seule la dernière est prise en compte)
- le fichier testferie_count.ics qui utilise le paramètre COUNT est traité mais seules deux dates sont importées
- le fichier testferie_until.ics qui utilise le paramètre UNTIL plante à l'import :
[...]
Ce ticket ne concerne que le bug sur UNTIL, si besoin d'évolutions sur les autres problèmes il faut ouvrir d'autres tickets, je pense que c'est lié à la limite de 600 jours dans le futur pour tout import (si c'est récurrent jusqu'à l'éternité on importe que les 600 prochains jours, faut refaire la manip tous les ans); une amélioration (à poser dans la descrition des nouveaux tickets) serait de conserver l'ICS et de le rejouer régulièrement genre tous les mois, comme ça on tiendrait à jour la liste des exceptions; ça c'est lié à un autre ticket qui parle de conserver un lien vers la source des exceptions.
Mis à jour par Marie Kuntz il y a plus de 4 ans
- Lié à Development #36167: Lever la limite de 600 jours lors de l'import des exceptions ajouté
Mis à jour par Benjamin Dauvergne il y a presque 4 ans
- Lié à Support #44999: erreur lors de l'import d'un fichier ICS avec un événement réccurent dont la date de fin est une datetime alors que l'occurence est une date ajouté
Mis à jour par Benjamin Dauvergne il y a presque 4 ans
- Statut changé de Nouveau à Solution déployée
C'est corrigé en production depuis passage à buster.