Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Know when icalendar_instance was modified

Abierto
#761 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
5/5
Tiempo estimado
Más de una semana
Aptitud para principiantes
25/100
Tipo de issue
Nueva funcionalidad
Claridad
Bastante claro
Estado de actividad
Activo
Stack tecnológico
python

Línea de trabajo

Start by reading the linked icalendar#1914 proposal and caldav issue #613 to understand the dependency and the existing DataState design. Then inspect IcalendarState and the data access and save paths; the issue gives no file or test names. Done means safely detecting modifications, caching serialization, and skipping unchanged saves while accounting for in-place list mutations and the vobject path.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

enhancement

Disclaimer: AI-generated text below the line, generated by Claude Opus 5.5 (Claude Code), from the prompts:

Have a look at https://github.com/collective/icalendar/issues/1914 - how could this help us in this library?
Make an issue in the caldav tracker, but make it clear that it depends on #1914 [collective/icalendar#1914] and that it has low priority.


Low priority. Blocked on https://github.com/collective/icalendar/issues/1914, which is an open proposal and not implemented yet.

Since https://github.com/python-caldav/caldav/issues/613, a CalendarObjectResource keeps its data in a DataState. In IcalendarState, caldav cannot know whether the user has changed the icalendar.Calendar it handed out, so get_data() calls to_ical() again on every call, and save() cannot tell an unchanged object from a changed one.

icalendar#1914 proposes a ComponentFactory that is also used for parsing, plus Component.convert_to(factory). With it, caldav could parse into its own subclasses of icalendar.Event/Todo/Journal (and Calendar) that override __setitem__, __delitem__, pop and update to mark the object as modified. I checked this against icalendar 7.3.1.dev188 with a Todo subclass: writes through the typed properties all go through those methods (summary, status, DUE, DURATION, DTSTART, categories = [...], add(), del). In-place changes such as categories.append(...) do not.

What it would allow:

  • IcalendarState.get_data() could cache the serialised string and drop the cache on a write, so it would not call to_ical() on every read.
  • save() could skip a write, or log one, when nothing was changed.
  • The objects that come out of recurrence expansion (recurring-ical-events) would keep the subclass if r-i-e uses the same factory. That is what collective/icalendar#1914 is meant for.

Limits:

  • In-place mutation of returned lists is not seen, so a snapshot comparison is still needed as a fallback before trusting "unchanged".
  • It depends on icalendar sending every write through those dict methods. That is true today, but it is an implementation detail, and icalendar would have to promise it.
  • isinstance(x, icalendar.Event) still holds for a subclass, so user code is not affected, but it raises caldav's minimum icalendar version.
  • The vobject path gets nothing from this.

The same approach has been chosen for change tracking in https://github.com/pycalendar/calendaring (see open question 13 in docs/design/API_DESIGN.md). If it works there, caldav can follow.

Lenguaje dominante
Python
Estrellas
412
Forks
113
Merge medio
1 d 7 h
PR fusionados (30 d)
34

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de python-caldav/caldav

Todos los issues de python-caldav/caldav

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.