Releases: python-caldav/caldav
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.py
has 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
multiget
in #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.py
totests/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_calendar
andauto_calendars
may 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
v1.2.1
Bugfix for wrong passwords
Thanks to @bvanjeelharia for reporting and investigating (actually the traceback was reported already by @robinmayol in #270 but we failed to connect the dots).
Version 1.2.0
What's Changed from 1.1 to 1.2
Not much, but one bugfix, again the caldav library was not working for everyone despite lots of functional testing ...
Full Changelog: v1.1.3...v1.2.0
Cleaned out some python2-specific stuff
Pull request by @danigm in #228
Python2 has not been tested for quite some time, hence it has probably been broken since one of the 0.x-releases. I decided to officially drop support for python2 in version 1.0 - but since the release was overdue I procrastinated merging this pull request. To avoid breaking changes in v1.x, I threw in an assert instead.
New feature - custom http headers
Pull request by @JasonSanDiego in #288 (with style fixup in #291 ) allows headers
parameter to the DAVClient
constructor.
Rationale given in #285 :
I'm using Nextcloud and want to retrieve calendar (read only) subscriptions along with the normal read/write calendars. Nextcloud supports two ways of doing this. The easier of the two is to pass the custom HTTP header: X-NC-CalDAV-Webcal-Caching: On
Bugfix - basic auth broken for some servers
A bug was introduced in version 1.0, via #260 - the code would only work if there was a space in the WWW-Authenticate
header. This works for most servers as they will challenge for credentials using a header like WWW-Authenticate: Basic realm="My CalDAV server"
- however, WWW-Authenticate: Basic
is fully allowed by RFC2617.
Thanks to @jdrozdnovak for debugging and reporting.
v1.1.3
Full Changelog: v1.1.2...v1.1.3
v1.1.0.dev0 - continued development
What's Changed
Bugfixes, workarounds and annoyances
- Potential fix for issue #267 by @tobixen in #268
- misc bugfixes by @tobixen in #265
- rate-limiting of error messages when encountering broken ical by @tobixen in #272
- DAViCal workaround - set STATUS=NEEDS-ACTION by default by @tobixen in #263
- Remove annoying assert from icalendar_component by @tobixen in #274
Documentation
New features
- Allow principle.calendar(calendar_url=...) by @tobixen in #273
- Allow checking DUE on dependent before moving DUE by @tobixen in #275
- allow conditional load by @tobixen in #276
Work on the test suite
Lots of work, by @tobixen in #264
Full Changelog: v1.0.1...v1.1.0.dev0