diff --git a/radicale/__init__.py b/radicale/__init__.py index 9354287..695439d 100644 --- a/radicale/__init__.py +++ b/radicale/__init__.py @@ -244,6 +244,8 @@ class Application: read_allowed_items = [] write_allowed_items = [] for item in items: + if not item: + continue if isinstance(item, self.Collection): path = item.path else: diff --git a/radicale/storage.py b/radicale/storage.py index 80c28f9..e38e3c4 100644 --- a/radicale/storage.py +++ b/radicale/storage.py @@ -34,6 +34,7 @@ import stat import subprocess import threading import time +import datetime from contextlib import contextmanager from hashlib import md5 from importlib import import_module @@ -699,8 +700,13 @@ class Collection(BaseCollection): def serialize(self): items = [] + time_begin = datetime.datetime.now() for href in self.list(): items.append(self.get(href).item) + time_end = datetime.datetime.now() + self.logger.info( + "Collection read %d items in %s sec from %s", len(items), + (time_end - time_begin).total_seconds(), self._filesystem_path) if self.get_meta("tag") == "VCALENDAR": collection = vobject.iCalendar() for item in items: diff --git a/radicale/xmlutils.py b/radicale/xmlutils.py index a882c7a..aa73e8e 100644 --- a/radicale/xmlutils.py +++ b/radicale/xmlutils.py @@ -872,6 +872,8 @@ def report(base_prefix, path, xml_request, collection): items = collection.pre_filtered_list(filters) for item in items: + if not item: + continue if filters: match = ( _comp_match if collection.get_meta("tag") == "VCALENDAR"