etesync-dav: fix compatibility with radicale 3.6

Radicale 3.5.5 changed the upload() return type to a 2-tuple and
Radicale 3.5.10 changed WSGIResponse from a 3-tuple to a 4-tuple.

Proposed for upstreaming in https://github.com/etesync/etesync-dav/pull/365
This commit is contained in:
phaer
2026-02-27 09:07:34 +01:00
parent c637936870
commit d637c631f1
2 changed files with 77 additions and 0 deletions
+5
View File
@@ -18,6 +18,11 @@ python3Packages.buildPythonApplication (finalAttrs: {
hash = "sha256-y4BhU2kSn+RWqc5+pJQFhbwfat9cMWD0ED0EXJp25cY=";
};
patches = [
# https://github.com/etesync/etesync-dav/pull/365
./radicale-3-6-compat.patch
];
build-system = with python3Packages; [ setuptools ];
pythonRelaxDeps = [ "radicale" ];
@@ -0,0 +1,72 @@
diff --git a/etesync_dav/radicale/storage.py b/etesync_dav/radicale/storage.py
index d6312b1..8d4b0e1 100644
--- a/etesync_dav/radicale/storage.py
+++ b/etesync_dav/radicale/storage.py
@@ -22,6 +22,8 @@ from contextlib import contextmanager
import etesync as api
import vobject
+import radicale
+from packaging.version import Version
from radicale import pathutils
from radicale.item import Item, get_etag
from radicale.storage import (
@@ -421,7 +423,10 @@ class Collection(BaseCollection):
href_mapper = HrefMapper(content=etesync_item._cache_obj, href=href)
href_mapper.save(force_insert=True)
- return self._get(href)
+ uploaded = self._get(href)
+ if Version(radicale.VERSION) >= Version("3.5.5"):
+ return (uploaded, item)
+ return uploaded
def delete(self, href=None):
"""Delete an item.
diff --git a/etesync_dav/radicale/storage_etebase_collection.py b/etesync_dav/radicale/storage_etebase_collection.py
index 1ccc6dd..0f68561 100644
--- a/etesync_dav/radicale/storage_etebase_collection.py
+++ b/etesync_dav/radicale/storage_etebase_collection.py
@@ -1,6 +1,8 @@
import re
import vobject
+import radicale
+from packaging.version import Version
from radicale import pathutils
from radicale.item import Item
from radicale.storage import (
@@ -294,7 +296,10 @@ class Collection(BaseCollection):
href_mapper = HrefMapper(content=etesync_item.cache_item, href=href)
href_mapper.save(force_insert=True)
- return self._get(href)
+ uploaded = self._get(href)
+ if Version(radicale.VERSION) >= Version("3.5.5"):
+ return (uploaded, item)
+ return uploaded
def delete(self, href=None):
"""Delete an item.
diff --git a/etesync_dav/radicale/web.py b/etesync_dav/radicale/web.py
index 869624f..6b4c515 100644
--- a/etesync_dav/radicale/web.py
+++ b/etesync_dav/radicale/web.py
@@ -12,6 +12,8 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
+import radicale
+from packaging.version import Version
from radicale import web
from etesync_dav.mac_helpers import has_ssl
@@ -31,6 +33,8 @@ class Web(web.BaseWeb):
environ["wsgi.url_scheme"] = "https"
body = list(app(environ, start_response))[0]
ret_response.append(body)
+ if Version(radicale.VERSION) >= Version("3.5.10"):
+ ret_response.append(None) # xml_request field
return tuple(ret_response)
def get(self, environ, base_prefix, path, user):