Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Know when icalendar_instance was modified

Aperta
#761 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
5/5
Tempo stimato
Più di una settimana
Idoneità per principianti
25/100
Tipo di issue
Funzionalità
Chiarezza
Abbastanza chiara
Stato di attività
Attiva
Stack tecnologico
python
Ambito
backend, databases

Direzione di ricerca

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.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

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.

Lingua principale
Python
Stelle
412
Fork
113
Merge medio
1g 6h
PR unite (30g)
35

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di python-caldav/caldav

Tutte le issue di python-caldav/caldav

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.