## Проблема `etesync-dav-0.35.1-alt1` не работает как CalDAV/CardDAV-мост с `python3-module-radicale-3.8.1-alt2` из Sisyphus: первый же PROPFIND клиента и GET любого элемента возвращают `500 Internal Server Error`. Upstream разрешает `Radicale<4,>=3.0.3`, т.е. формально сочетание допустимое. ## Как воспроизвести 1. Свой etebase-server (`etebase-server-0.14.2`) или любой Etebase-сервер, пользователь с календарём (коллекция `etebase.vevent`). 2. `ETESYNC_URL=https://<сервер> etesync-dav manage add USER`, затем `ETESYNC_URL=... etesync-dav`. 3. `curl -u USER:<пароль из etesync-dav manage get USER> -X PROPFIND -H 'Depth: 1' http://127.0.0.1:37358/USER/` → **500**. ## Ошибка 1: PROPFIND ``` File "/usr/lib/python3/site-packages/radicale/app/propfind.py", line 215, in xml_propfind_response clark_tag = xmlutils.make_clark(tag) File "/usr/lib/python3/site-packages/radicale/xmlutils.py", line 94, in make_clark ns_prefix, tag = human_tag.split(":", maxsplit=1) ValueError: not enough values to unpack (expected 2, got 1) ``` radicale 3.8 перебирает все ключи `collection.get_meta()` и ожидает имена вида `NS:tag`. `EtebaseCollection.get_meta()` (`etesync_dav/radicale/storage_etebase_collection.py`) при `key=None` возвращает «сырые» ключи метаданных Etebase (`name`, `mtime`, …) вместо `D:displayname` и т.п. ## Ошибка 2: GET элемента ``` File "/usr/lib/python3/site-packages/radicale/app/get.py", line 192, in do_GET assert item.last_modified AssertionError ``` Элементы создаются с `last_modified = ""`. ## Исправление Прилагаю патч (проверен на стенде с копией модуля через `PYTHONPATH`): - `get_meta()` без ключа отдаёт только отображённые DAV-имена (`D:displayname`, `C:calendar-description`, `ICAL:calendar-color`, `CR:addressbook-description`); - `last_modified` элемента берётся из `mtime` метаданных Etebase (HTTP-date), иначе — текущее время. С патчем проходят PROPFIND/REPORT/PUT/GET/DELETE для календаря и адресной книги, изменения синхронизируются в обе стороны с python3-module-etebase. ## Окружение ALT Sisyphus (LXC), etesync-dav-0.35.1-alt1, python3-module-radicale-3.8.1-alt2, python3-module-etebase-0.31.8-alt1, etebase-server-0.14.2-alt1. Связано: ALT bug #39984. Мелочь: в выводе ошибки `etesync-dav add USER --password ...` (без `manage`) пароль печатается в сообщении `unrecognized arguments`.
Created attachment 22355 [details] etesync-dav: fix get_meta() keys and empty last_modified for radicale 3.8 Патч проверен на ALT Sisyphus: etesync-dav-0.35.1-alt1 + python3-module-radicale-3.8.1-alt2, сервер etebase-server-0.14.2-alt1. PROPFIND/REPORT/PUT/GET/DELETE для календаря и адресной книги работают.
etesync-dav-0.35.1-alt2 -> sisyphus: Wed Oct 07 2026 Vitaly Lipatov <lav@altlinux.ru> 0.35.1-alt2 - fix compatibility with peewee 4.x (SqliteExtDatabase was removed). - Fix PROPFIND and GET with Radicale 3.8 (closes: #60849).