Projet

Général

Profil

Development #28767

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

Ajouté par Marie Kuntz il y a plus de 5 ans. Mis à jour il y a presque 4 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
-
Catégorie:
-
Version cible:
-
Début:
07 décembre 2018
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Non
Planning:
Non

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

FrenchHolidays.ics (13 ko) FrenchHolidays.ics Marie Kuntz, 07 décembre 2018 18:33
Screenshot_2018-12-07 Chrono - excep.png (39,9 ko) Screenshot_2018-12-07 Chrono - excep.png Frédéric Péters, 07 décembre 2018 18:50
testferie_until.ics (433 octets) testferie_until.ics Marie Kuntz, 13 décembre 2018 15:12
testferie_count.ics (419 octets) testferie_count.ics Marie Kuntz, 13 décembre 2018 15:14

Demandes liées

Lié à Chrono - Development #36167: Lever la limite de 600 jours lors de l'import des exceptionsRejeté16 septembre 2019

Actions
Lié à Chrono - 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 dateFermé09 juillet 2020

Actions

Historique

#1

Mis à jour par Frédéric Péters il y a plus de 5 ans

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

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.

#3

Mis à jour par Marie Kuntz il y a plus de 5 ans

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

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.

#5

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.

#7

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.

#8

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

#9

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.

#10

Mis à jour par Marie Kuntz il y a plus de 4 ans

ok, j'avais mal compris

#11

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.

#12

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é
#13

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é
#14

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.

Formats disponibles : Atom PDF