Project

General

Profile

Development #28767

Import d'un ICS : prise en charge de la règle RRULE

Added by Marie Kuntz 9 months ago. Updated 5 days ago.

Status:
Nouveau
Priority:
Normal
Assignee:
-
Category:
-
Target version:
-
Start date:
07 Dec 2018
Due date:
% Done:

0%

Patch proposed:
No
Planning:
No

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 ?

FrenchHolidays.ics View (13 KB) Marie Kuntz, 07 Dec 2018 06:33 PM

Screenshot_2018-12-07 Chrono - excep.png View (39.9 KB) Frédéric Péters, 07 Dec 2018 06:50 PM

testferie_until.ics View (433 Bytes) Marie Kuntz, 13 Dec 2018 03:12 PM

testferie_count.ics View (419 Bytes) Marie Kuntz, 13 Dec 2018 03:14 PM

29927

Related issues

Related to Chrono - Development #36167: Lever la limite de 600 jours lors de l'import des exceptions Nouveau 16 Sep 2019

History

#1 Updated by Frédéric Péters 9 months ago

29927

J'ai pris ton fichier je l'ai importé et j'ai eu le bon résultat.

Où as-tu eu un problème ?

#2 Updated by Marie Kuntz 9 months ago

  • Status changed from Information nécessaire to 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.

#3 Updated by Marie Kuntz 9 months ago

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

#4 Updated by Benjamin Dauvergne 8 months ago

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.

#5 Updated by Benjamin Dauvergne 8 months ago

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.

#7 Updated by Benjamin Dauvergne about 2 months ago

La version est désormais bonne en stable (buster), 2.7.3-3.

#8 Updated by Marie Kuntz about 2 months ago

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

#9 Updated by Benjamin Dauvergne about 2 months ago

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.

#10 Updated by Marie Kuntz about 2 months ago

ok, j'avais mal compris

#11 Updated by Benjamin Dauvergne 5 days ago

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.

#12 Updated by Marie Kuntz about 7 hours ago

  • Related to Development #36167: Lever la limite de 600 jours lors de l'import des exceptions added

Also available in: Atom PDF