Releases: python-caldav/caldav
v2.2.3 - multiplexing/authentication workaround
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.
v1.6.0
v1.5.0
[1.5.0] - 2025-05-24
Version 1.5 comes with support for alarms (searching for alarms if the server permits and easy interface for adding alamrs when creating events), lots of workarounds and fixes ensuring compatibility with various servers, refactored some code, and done some preparations for the upcoming server compatibility hints project.
Deprecated
Python 3.7 is no longer tested (dependency problems) - but it should work. Please file a bug report if it doesn't work. (Note that the caldav library pulls in many dependencies, and not all of them supports dead snakes).
Fixed
- Servers that return a quoted URL in their path will now be parsed correctly by @edel-macias-cubix in #473
- Compatibility workaround: If
event.load()fails, it will retry the load by doing a multiget - #460 and #475 - #459 - Compatibility workaround: A problem with a wiki calendar fixed by @soundstorm in #469
- Blank passwords should be acceptable - #481
- Compatibility workaround: Accept XML content from calendar server even if it's marked up with content-type text/plain by @niccokunzmann in #465
- Bugfix for saving component failing on multi-component recurrence objects - #467
- Some exotic servers may return object URLs on search, but it does not work out to fetch the calendar data. Now it will log an error instead of raising an error in such cases.
- Some workarounds and fixes for getting tests passing on all the test servers I had at hand in #492
- Search for todo-items would ignore recurring tasks with COMPLETED recurrence instances, ref #495, fixed in #496
Changed
- The
tests/compatibility_issues.pyhas been moved tocaldav/compatibility_hints.py, this to make it available for a caldav-server-tester-tool that I'm splitting off to a separate project/repository, and also to make #402 possible.
Refactoring
- Minor code cleanups by github user @ArtemIsmagilov in #456
- The very much overgrown
objects.py-file has been split into three - #483 - Refactor compatibility issues by @tobixen in #484
- Refactoring of
multigetin #492
Documentation
- Add more project links to PyPI by @niccokunzmann in #464
- Document how to use tox for testing by @niccokunzmann in #466
- Readthedocs integration has been repaired (#453 - but eventually the fix was introduced directly in the master branch)
Test framework
- Radicale tests have been broken for a while, but now it's fixed ... and github will be running those tests as well. #480 plus commits directly to the main branch.
- Python 3.13 is officially supported by github user @ArtemIsmagilov in #454
- Functional test framework has been refactored in #450
- code for setting up and rigging down xandikos/radicale servers have been moved from
tests/test_caldav.pytotests/conf.py. This allows for:- Adding code (including system calls or remote API calls) for Setting up and tearing down calendar servers in
conf_private.py - Creating a local xandikos or radicale server in the
tests.client-method, which is also used in theexamples-section. - Allows offline testing of my upcoming
check_server_compatibility-script
- Adding code (including system calls or remote API calls) for Setting up and tearing down calendar servers in
- Also added the possibility to tag test servers with a name
- code for setting up and rigging down xandikos/radicale servers have been moved from
- Many changes done to the compatibility flag list (due to work on the server-checker project)
- Functional tests for multiget in #489
Added
- Methods for verifying and adding reverse relations - #336
- Easy creation of events and tasks with alarms, search for alarms - #221
- Work in progress:
auto_conn,auto_calendarandauto_calendarsmay read caldav connection and calendar configuration from a config file, environmental variables or other sources. Currently I've made the minimal possible work to be able to test the caldav-server-tester script. - By now
calendar.search(..., sort_keys=("DTSTART")will work. Sort keys expects a list or a tuple, but it's easy to send an attribute by mistake. #448 #449 - The
class_-parameter now works when sending data tosave_event()etc. - Search method now takes parameter
journal=True. ref #237 and #486
Release v1.4.0
- Lots of work lifting the project up to more modern standards and improving code, thanks to Georges Toth (github @sim0nx), Matthias Urlichs (github @smurfix) and @ArtemIsmagilov. While this shouldn't matter for existing users, it will make the library more future-proof.
- Quite long lists of fixes, improvements and some few changes, nothing big, main focus is on ensuring compatibility with as many server implementations as possible. See the CHANGELOG.md file for details.
Pull requests included
- Add inline typing by @sim0nx in #358
- Remove dependency on pytz by @sim0nx in #363
- Use setuptools-scm / pyproject.toml (modern packaging) by @sim0nx in #364
- debug option to write all server communication to persistent tempfiles by @tobixen in #249
- Code formatting / style fixes: by @sim0nx in #365
- fix: google may return empty ical by @zhwei in #366
- fixing an setuptools_scm annoyance by @tobixen in #367
- tests were a bit broken for calendars without mkcalendar. by @tobixen in #368
- workaround for #360 by @tobixen in #369
- Fixing ftests and compatibility matrix by @tobixen in #370
- COMPLETED should be a timestamp and not a date by @tobixen in #387
- Various bugfixes by @tobixen in #381
- Make it possible to modify User-Agent by @tobixen in #386
- Partial revert of 0758419 by @tobixen in #390
- by default dict loops yield only key by @ArtemIsmagilov in #405
- list comprehension would be redundant by @ArtemIsmagilov in #404
- try use new versions github-actions and drop unsupported python3.7 by @ArtemIsmagilov in #406
- use list comprehension, more faster this usecase by @ArtemIsmagilov in #407
- change mut arg on None and added checker is None by @ArtemIsmagilov in #408
- copy resolve mut arg in funcs, methods by @ArtemIsmagilov in #409
- replace typing.* in imports type objects by @ArtemIsmagilov in #412
- copy resolving extra code with PR #405 by @ArtemIsmagilov in #414
- use isinstance with tuple classes by @ArtemIsmagilov in #415
- remove extra .keys() by @ArtemIsmagilov in #418
- filters var linking in on line by @ArtemIsmagilov in #419
- refactoring maps code on set comprehension by @ArtemIsmagilov in #417
- incorrect args
["--application-directories", "src"], nothing doing by @ArtemIsmagilov in #421 - change version action cache to latest - 4 by @ArtemIsmagilov in #423
- feat: another example of using by @Truenya in #427
- Remove unused dep pytest-cov. by @ArtemIsmagilov in #430
- Clarify python 3.7-3.12 by @ArtemIsmagilov in #431
- Allow to reverse the sorting order on search function by @twissell- in #433
- Change fixup log lvl to warning and merge diff log messages into related parent log by @MrEbbinghaus in #438
- Don't use
datetime.utcnow(). by @smurfix in #440 - Purelymail support (WIP) by @tobixen in #442
- Make tests ignore broken server-side expand for radicale by @tobixen in #441
- CHange default User-Agent from Mozilla/5 to python-caldav/$version by @tobixen in #392
- randomly testing out things, hoping to get tests working on python3.8 by @tobixen in #443
- Better support for calendar.mail.ru by @tobixen in #403
- Preparing for v1.4.0-release by @tobixen in #447
New Contributors
- @sim0nx made their first contribution in #358
- @zhwei made their first contribution in #366
- @ArtemIsmagilov made their first contribution in #405
- @Truenya made their first contribution in #427
- @twissell- made their first contribution in #433
- @MrEbbinghaus made their first contribution in #438
- @smurfix made their first contribution in #440
Full Changelog: v1.3.9...v1.4.0
v1.3.8 - various bugfixes
Refer to the CHANGELOG.md for a full list