* Change get_multi to also return missing items
get_multi is not used anywhere and this makes it easier to use.
* Use get_multi for report requests
* Add get_all to BaseCollection
This can be used for optimization on multifilesystem.
* Use iterator for files
* Remove unnecessary checks
This never happens and would be an error.
* Don't raise exception when calling get with colliding name
This behavior is wrong, it should be handled as if the file doesn't exist.
* Use get_all and get_multi to skip unnecessary checks
Collision checks are slow on big collections.
* Use exception instead of existence checks
It's a bit faster.
* Use os.scandir instead of os.listdir
It's faster and doesn't load all files at once.
* Cache metadata when storage is read-only
Metadata is queried a lot during a request. It's quiet slow to load and parse the file every time.
* Cache the etag when the storage is read-only
The etag is calculated twice for GET requests on collections.
* Add helper method for cleaning caches
* Use item etags to calculate collection etag
It's very slow and unnecessary to parse all files with VObject and serialize them again.
* Cache serialized collections in file system
Serialization is very slow for big collections. This caches the result in a file.
* Add helper function for prefilters
The simplify_prefilters functions converts XML filters to a simple tag and time range, which can be easily matched against the tag and time range that are extracted from vobject_items by the function find_tag_and_time_range.
* Add ability to cache etag and serialization of item
Parsing items with vobject is very slow and not required for many requests.
Caching can be used to speed it up.
* Cache metadata and serialization from items in file system
Store the serialized text and the tag and time range from vobject_items in the cache.
The metadata is used for prefilters.
* Remove the cache for the serialization of collections
* Serialize calendars without vobject
Merge the calendar components manually. This is much faster and requires less memory. Caching of the result is not required anymore.
* Allow pre_filtered_list to indicate that filters match
The storage backend can indicate that it evaluated the filters completely.
* Skip filtering with vobject if prefiltering is sufficient
``simplify_prefilters`` indicates if the simplified condition is identical to ``filters``.
This is used in the multifilesystem backend to detect if prefiltering is sufficient.
* Make constants global
* Use generator expressions
* Only extract elements from inside of VCALENDAR
This is unnecessary at the moment, the text representation should never contain anything but VCALENDAR.
* Improve comments
* restore backward compatiblity
* Small improvements for fastbackend
Previously it was silently ignored, which is dangerous when multiple instances of Radicale are running.
A configuration option to disable locking was added.