Pair an event in a chosen calendar with an interview, make an interview from one, and stop an alarm's text replacing the notes #11
Labels
No labels
bug
documentation
enhancement
performance
security
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
Postulo/postulo-dav#11
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The plugin keeps interviews and one calendar in step: every interview from 90 days ago onwards goes into the named calendar as a
VEVENT, and new times, place, notes or a cancellation made there come back (src/postulo_dav/sync.py:193-217,:554-673). Any other event is left alone as "not from Postulo", and nothing can be paired by hand. The request:What is wrong today
text_to_events(src/postulo_dav/text.py:234-265) does not track nested components, so aVALARM'sDESCRIPTIONoverwrites the event's own. Pushed events carry the interview's reminder as aVALARM, so a pull replaces an interview's notes with the reminder's text. Confirmed by running it; the tests use empty notes (tests/test_dav.py:592-617).event_textpasses nourltoevent_lines(sync.py:169-179). With no request,POSTULO_PUBLIC_URL(the wiki's Configuration) joined with the application'sget_absolute_url()gives one; unset, the link is left out, not written as a bare path.What the plugin should do
Which calendars are read or written is #13; the pairing key and re-finding a moved event are #7.
calendar-querytime range, RFC 4791 §7.8), can be paired with one of the person's interviews and kept in step. Postulo's own event for it, if any, is deleted (withIf-Match) so the meeting is not shown twice.schedule_interview, with its timeline entry and reminder; the person picks the kind.no-uid-conflict). An event made elsewhere is patched, not rebuilt: only the properties Postulo owns change. Deleting the interview unpairs it; only an event Postulo made is deleted. Unpaired events are left alone.DURATIONcounts as well asDTEND(RFC 5545 §3.6.1); the "With:" line and link Postulo wrote are told apart from the notes.Decisions
UID, the address being arbitrary (RFC 4791 §5.3.2). Alternative: a Postulo link in the event'sURLis the key. Recommend the first.src/postulo/applications/agenda.py:197in the core). The last three are whole days with derived UIDs, and nothing on the surface changes them. Recommend: reminders go as tasks (#12); whole days are pushed one way as all-day events, behind a switch off by default, since no feed a phone can subscribe to carries them (the web one needs a session; the API's holds interviews only). Alternatives: pair whole days both ways, which needs write services the core lacks; or a timeline entry such as a call, but entries are append-only.RECURRENCE-ID).SUMMARY,DESCRIPTION,URL,ATTENDEEor alarms. An event with anORGANIZERcan be a scheduling object, where a write can make the server message the other participants, or be refused (RFC 6638 §3; not tried against a server), so pair it read-only. Alternative: everything, as for Postulo's own events.Needs from the core
schedule_interview, and reading the whole days.The parser fix and the link need none and can ship first.
New strings go through
uv run postulo-messages extract, fr-fr and pt-pt filled on the commit (the test gates them), the 23 EU catalogues before a tag (uv run pytest -m release). New surface names mean repinning the core (pyproject.toml's dev group pins commit1d6cdd7e0) and extendingtests/test_surface.py.Done when
ORGANIZERis never written to.POSTULO_PUBLIC_URLis set.From the list of DAV plugin improvements of 2026-09-30.
From postulo/postulo-dav#14, which closed with
32cca53: one thing it asked for can only be done here.A
LANGUAGEparameter found on a event made elsewhere survives a push. The parameter is a BCP 47 language tag (RFC 5545 §3.2.10), and this issue is where a event is patched instead of rebuilt, so it is where one that is already there must be kept as it was written. If Postulo ever writes one of its own, it writes the tag in its canonical form, as the core does since postulo/postulo#337 (pt-BR, notpt-br).Worth a test of its own here: a event carrying
LANGUAGE=pt-BRon a property comes back from a push with it.The maintainer's list of 2026-10-02 asks for iCalendar as the format for events. Core issue postulo/postulo#661 exports every dated thing the calendar page draws, imports
.icsfiles, and offers on the plugin surface a reader that returns plain values, keeps an alarm's text apart from the notes and never guesses a time zone as UTC.Those are this issue's “What is wrong today” and postulo-dav#24, so
text_to_events(src/postulo_dav/text.py:234) could be dropped. It also proposes a stable UID for whole days, which the whole-day decision here depends on.This issue keeps its own scope: pairing by calendar and UID, patching events it did not make, and making an interview from a chosen event.
From the list of improvements of 2026-10-02.