Project

General

Profile

Development #28767

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

Added by Marie Kuntz 5 months ago. Updated 3 months ago.

Status:
Nouveau
Priority:
Normal
Assignee:
-
Category:
-
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

History

#1 Updated by Frédéric Péters 5 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 5 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 4 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 3 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 3 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.

Also available in: Atom PDF