Releases: python-caldav/caldav
v3.0.1
v3.0.0
Version 3.0 should be fully backward-compatible with version 2.x - but there are massive code changes in version 3.0, so if you're using the Python CalDAV client library in some sharp production environment, I would recommend to wait for two months before upgrading.
Highlights
- As always, lots of compatibility-tweaking. This release have probably been tested on more server implementations than any earlier version.
- "Black Style" has been replaced with ruff. This causes quite some minor changes to the code.
- Full async support -- New
AsyncDAVClientand async domain objects using a Sans-I/O architecture. The sameCalendar,Event,Todo, etc. objects work with both sync and async clients. - Experimental JMAP client -- New
caldav.jmappackage withJMAPClientandAsyncJMAPClientfor servers implementing RFC 8620 (JMAP Core) and RFC 8984 (JMAP Calendars). Note that this is experimental, and the public API may be changed in upcoming minor-releases. - Overhaul of the official API -- v3.0 comes with an improved, more pythonic and more consistent API, but aims to be fully backeward compatible. Some work has been done on the documentation, but full QA and updates will have to wait for an upcoming patch release.
v3.0.0a2 -- Alpha Release
AI-generated release notes — see CHANGELOG.md for the full entry.
Mostly bugfixes and server compatibility improvements since 3.0.0a1, plus a few new features.
This is an alpha release for testing purposes. Please report issues at https://github.com/python-caldav/caldav/issues
New features
- Retry-After / rate-limit handling (RFC 6585 / RFC 9110) -- new
rate_limit_handle,rate_limit_default_sleep,rate_limit_max_sleepparameters onDAVClientandAsyncDAVClient; newRateLimitErrorexception withretry_after/retry_after_secondsattributes (PR #628, thanks temsocial) - Lazy imports (PEP 562) --
import caldavis now significantly faster; heavy dependencies deferred until first use search.is-not-defined.categoryandsearch.is-not-defined.dtendclient-side workaround sub-features- Base+override feature profiles in YAML config (
base: nextcloud) - Feature name validation in
caldav.config - Fallback to principal URL when
calendar-home-setproperty is missing CalendarObjectResource.load()fallback to UID lookup when servers change object URLs after save
Breaking changes
caldav/objects.pyre-export shim removed — updatefrom caldav.objects import Xtofrom caldav import Xcaldav.config.read_config()now raisesValueErroron YAML/JSON parse errors instead of silently returning{}icalendar-searcher >= 1.0.5now required (fixesis-not-definedfilter for CATEGORIES with icalendar >= 6.x, and for DTEND on recurring all-day events)
Bug fixes
- Fixed
ssl_verify_certnot passed through inget_sync_client/get_async_client - Fixed
_derive_from_subfeaturespartial-config derivation bug - Fixed feature name parsing when names include a
compatibility_hints.prefix - Fixed recursive
_search_with_comptypesfallback whensearch.comp-typeis broken - Fixed pending todo search on servers with broken comp-type filtering
- Fixed URL path quoting when extracting calendars from PROPFIND results
- Fixed
create-calendarfeature incorrectly derived as unsupported - Fixed
get_object_by_uid()routing throughsearch()for server-specific retry logic - Graceful handling of invalid recurrence data from some servers
Compatibility hints updated
CCS (Apple CalendarServer), Zimbra, Cyrus, Bedework, PurelyMail, GMX, ecloud, Posteo, SOGo, Baikal/Radicale, DAViCal, Synology, Xandikos
v2.2.6
v2.2.6 - various minor fixes
This will hopefully be the last releases before v3.0. 2.2.4 is without niquests dependency, 2.2.6 depends on niquests
See CHANGELOG.md for details.
v2.2.3 - multiplexing/authentication workaround
Users of the ckulka/baikal:nginx docker image could not get HTTP/2 multiplexing to work together with authentication. Workarounds done to turn off multiplexing on affected systems.
v2.2 - compatibility work and misc
Highlights:
- New ways to set up client connections:
- For cloud-based services, it should suffice to pass username, password and the name of the service, no URL needed (though, just some few providers supported so far)
- If the username is in email format, then it's generally not needed to pass a URL.
- v2.2 comes with lots of workarounds around lack of feature support in the servers - notably the sync-token API will work also towards servers not supporting sync-tokens. In some cases lack of server functionality is detected, but as for now it may be needed to specify what server one is user through the
featuresconfiguration flag. - v2.2 supports more complex searches. Client-side filtering will be utilized for the things that aren't supported on the server side.
v2.2.1 comes with the requests dependency, v2.2.2 comes with niquests dependency (and v2.2.0 with a non-existing riquests dependency ... duh)
Version 2.1.2
Version 2.1.0 comes without niquests in the dependency file. Version 2.1.2 come with niquests in the dependency file. Also fixed up some minor mistakes in the CHANGELOG. Version 2.1.1 was yet another mistake done during the release process and should be ignored.
See description of version 2.1.0 or CHANGELOG.md for more details.
v2.1.0
I'm working on a caldav compatibility checker side project. While doing so, I'm working on redefining the "compatibility matrix". This should only affect the test code. If you maintain a file tests/conf_private.py, chances are that the latest changesets will break Since "running tests towards private CalDAV servers" is not considered to be part of the public API, I deem this to be allowed without bumping the major version number. If you are affected and can't figure out of it, reach out by email, GitHub issue or GitHub discussions. (Frankly, I'm interessted if anyone except me uses this, so feel free to reach out also if you can figure out of it).
As always, the new release comes with quite some bugfixes, compatibility fixes and workarounds improving the support for various calendar servers observed in the wild.
v2.0.1 reverts from niquests back to requests
Version 2.0.0
Here are the most important changes in 2.0:
- Version 2.0 drops support for old python versions and replaces requests 2.x with niquests 3.x, a fork of requests.
- Major overhaul of the documentation
- Support for reading configuration from a config file or environmental variables - I didn't consider that to be within the scope of the caldav library, but why not - why should every application reinvent some configuration file format, and if an end-user have several applications based on python-caldav, why should he need to configure the caldav credentials explicitly for each of them?
- New method
davclient.principals()to search for other principals on the server - and from there it's possible to do calendar searches and probe what calendars one have access to. If the server will allow it.