<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>60849</bug_id>
          
          <creation_ts>2026-10-07 13:07:20 +0300</creation_ts>
          <short_desc>etesync-dav 0.35.1: PROPFIND and GET fail with 500 on python3-module-radicale 3.8.1</short_desc>
          <delta_ts>2026-10-08 19:31:18 +0300</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>etesync-dav</component>
          <version>unstable</version>
          <rep_platform>x86_64</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P5</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Vitaly Lipatov">lav</reporter>
          <assigned_to name="Vitaly Lipatov">lav</assigned_to>
          <cc>lav</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>301405</commentid>
    <comment_count>0</comment_count>
    <who name="Vitaly Lipatov">lav</who>
    <bug_when>2026-10-07 13:07:20 +0300</bug_when>
    <thetext>## Проблема

`etesync-dav-0.35.1-alt1` не работает как CalDAV/CardDAV-мост с `python3-module-radicale-3.8.1-alt2` из Sisyphus: первый же PROPFIND клиента и GET любого элемента возвращают `500 Internal Server Error`. Upstream разрешает `Radicale&lt;4,&gt;=3.0.3`, т.е. формально сочетание допустимое.

## Как воспроизвести

1. Свой etebase-server (`etebase-server-0.14.2`) или любой Etebase-сервер, пользователь с календарём (коллекция `etebase.vevent`).
2. `ETESYNC_URL=https://&lt;сервер&gt; etesync-dav manage add USER`, затем `ETESYNC_URL=... etesync-dav`.
3. `curl -u USER:&lt;пароль из etesync-dav manage get USER&gt; -X PROPFIND -H &apos;Depth: 1&apos; http://127.0.0.1:37358/USER/` → **500**.

## Ошибка 1: PROPFIND

```
File &quot;/usr/lib/python3/site-packages/radicale/app/propfind.py&quot;, line 215, in xml_propfind_response
    clark_tag = xmlutils.make_clark(tag)
File &quot;/usr/lib/python3/site-packages/radicale/xmlutils.py&quot;, line 94, in make_clark
    ns_prefix, tag = human_tag.split(&quot;:&quot;, 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 &quot;/usr/lib/python3/site-packages/radicale/app/get.py&quot;, line 192, in do_GET
    assert item.last_modified
AssertionError
```

Элементы создаются с `last_modified = &quot;&quot;`.

## Исправление

Прилагаю патч (проверен на стенде с копией модуля через `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`.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301408</commentid>
    <comment_count>1</comment_count>
      <attachid>22355</attachid>
    <who name="Vitaly Lipatov">lav</who>
    <bug_when>2026-10-07 13:20:29 +0300</bug_when>
    <thetext>Created attachment 22355
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 для календаря и адресной книги работают.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301543</commentid>
    <comment_count>2</comment_count>
    <who name="Repository Robot">repository-robot</who>
    <bug_when>2026-10-08 19:31:18 +0300</bug_when>
    <thetext>etesync-dav-0.35.1-alt2 -&gt; sisyphus:

Wed Oct 07 2026 Vitaly Lipatov &lt;lav@altlinux.ru&gt; 0.35.1-alt2
- fix compatibility with peewee 4.x (SqliteExtDatabase was removed).
- Fix PROPFIND and GET with Radicale 3.8 (closes: #60849).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22355</attachid>
            <date>2026-10-07 13:20:29 +0300</date>
            <delta_ts>2026-10-07 13:20:29 +0300</delta_ts>
            <desc>etesync-dav: fix get_meta() keys and empty last_modified for radicale 3.8</desc>
            <filename>etesync-dav-radicale-3.8.patch</filename>
            <type>text/plain</type>
            <size>1396</size>
            <attacher name="Vitaly Lipatov">lav</attacher>
            
              <data encoding="base64">LS0tIGEvZXRlc3luY19kYXYvcmFkaWNhbGUvc3RvcmFnZV9ldGViYXNlX2NvbGxlY3Rpb24ucHkK
KysrIGIvZXRlc3luY19kYXYvcmFkaWNhbGUvc3RvcmFnZV9ldGViYXNlX2NvbGxlY3Rpb24ucHkK
QEAgLTEsMyArMSw0IEBACitmcm9tIGVtYWlsLnV0aWxzIGltcG9ydCBmb3JtYXRkYXRlCiBpbXBv
cnQgcmUKIAogaW1wb3J0IHZvYmplY3QKQEAgLTI3NCw3ICsyNzUsMTIgQEAKICAgICAgICAgICAg
ICAgICAgICAgaXRlbS5jb250ZW50c1sidmVyc2lvbiJdWzBdLnZhbHVlID0gIjMuMCIKICAgICAg
ICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9y
KCJGYWlsZWQgdG8gcGFyc2UgaXRlbSAlciBpbiAlciIgJSAoaHJlZiwgc2VsZi5wYXRoKSkgZnJv
bSBlCi0gICAgICAgIGxhc3RfbW9kaWZpZWQgPSAiIgorICAgICAgICAjIHJhZGljYWxlIDMuOCBh
c3NlcnRzIGEgbm9uLWVtcHR5IExhc3QtTW9kaWZpZWQgaW4gR0VUCisgICAgICAgIHRyeToKKyAg
ICAgICAgICAgIG10aW1lID0gZXRlc3luY19pdGVtLm1ldGEuZ2V0KCJtdGltZSIpCisgICAgICAg
IGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBtdGltZSA9IE5vbmUKKyAgICAgICAgbGFz
dF9tb2RpZmllZCA9IGZvcm1hdGRhdGUobXRpbWUgLyAxMDAwIGlmIG10aW1lIGVsc2UgTm9uZSwg
dXNlZ210PVRydWUpCiAKICAgICAgICAgcmV0dXJuIEV0ZVN5bmNJdGVtKAogICAgICAgICAgICAg
Y29sbGVjdGlvbj1zZWxmLCB2b2JqZWN0X2l0ZW09aXRlbSwgaHJlZj1ocmVmLCBsYXN0X21vZGlm
aWVkPWxhc3RfbW9kaWZpZWQsIGV0ZXN5bmNfaXRlbT1ldGVzeW5jX2l0ZW0KQEAgLTMzNCw3ICsz
NDAsMTEgQEAKICAgICAgICAgICAgIHJldCA9IHt9CiAgICAgICAgICAgICBtZXRhID0gc2VsZi5j
b2xsZWN0aW9uLm1ldGEKICAgICAgICAgICAgIGZvciBrZXkgaW4gbWV0YS5rZXlzKCk6Ci0gICAg
ICAgICAgICAgICAgcmV0W2tleV0gPSBzZWxmLm1ldGFfbWFwcGluZ3MubWFwX2dldChtZXRhLCBr
ZXkpWzFdCisgICAgICAgICAgICAgICAgIyByYWRpY2FsZSAzLjggZXhwZWN0cyAiTlM6dGFnIiBw
cm9wZXJ0eSBuYW1lcyBoZXJlCisgICAgICAgICAgICAgICAgZGF2X2tleSA9IHNlbGYubWV0YV9t
YXBwaW5ncy5fbWFwcGluZ19nZXQoa2V5KVswXQorICAgICAgICAgICAgICAgIGlmICI6IiBub3Qg
aW4gZGF2X2tleToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAg
ICByZXRbZGF2X2tleV0gPSBzZWxmLm1ldGFfbWFwcGluZ3MubWFwX2dldChtZXRhLCBkYXZfa2V5
KVsxXQogICAgICAgICAgICAgcmV0dXJuIHJldAogICAgICAgICBlbHNlOgogICAgICAgICAgICAg
bWV0YSA9IHNlbGYuY29sbGVjdGlvbi5tZXRhCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>