Skip to content

Commit f1f15c7

Browse files
committed
docs: prepare CHANGELOG for v3.1.0-release
1 parent e1a11f6 commit f1f15c7

1 file changed

Lines changed: 42 additions & 3 deletions

File tree

CHANGELOG.md

Lines changed: 42 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,46 @@ Changelogs prior to v2.0 is pruned, but was available in the v2.x releases
1212

1313
This project should adhere to [Semantic Versioning](https://semver.org/spec/v2.0.0.html), though for pre-releases PEP 440 takes precedence.
1414

15-
## [3.0.2] - 2026-03-05
15+
## [3.1.0] - 2026-03-19
16+
17+
Highlights:
18+
19+
* **Fixups on the async support**. Perhaps the "sans-io" design concept wasn't such a great idea - quite some gaps in the async support has been identified and fixed,.
20+
* **Multi-server `get_calendars()`:** a single `get_calendars()` call can now span multiple config-file sections (including glob/wildcard expansion), aggregating calendars from multiple servers into one `CalendarCollection`. This was the idea (and has been implemented in my `plann` project for quite some time), but fell short of getting into the v3.0-release.
21+
* Full async tutorial added to the documentation.
22+
23+
### Added
24+
25+
* `get_icalendar_component()` returns a deep-copy of the inner VEVENT/VTODO/VJOURNAL sub-component for read-only inspection, consistent with the `get_icalendar_instance()` naming convention.
26+
* `edit_icalendar_component()` context manager yields the inner component for editing and delegates to `edit_icalendar_instance()` so all borrow/state/save machinery is reused.
27+
* `get_calendars()` now accepts a `config_section` value that is expanded via `expand_config_section()`, so wildcards like `"work_*"` or `"all"` resolve to multiple leaf sections; each section gets its own `DAVClient` and all calendars are aggregated into a `CalendarCollection`. `CalendarCollection` now closes all its clients on context-manager exit.
28+
* New config helper: `get_all_file_connection_params(config_file, section)`.
29+
* `PYTHON_CALDAV_USE_TEST_SERVER=1` (or `testconfig=True`) falls back to automatically starting the first available enabled server from the test-server registry when no `testing_allowed` config section is present. Three new env vars (`PYTHON_CALDAV_TEST_EMBEDDED`, `PYTHON_CALDAV_TEST_DOCKER`, `PYTHON_CALDAV_TEST_EXTERNAL`) control which server categories are eligible. Per-server `priority:` keys in config files are honoured.
30+
* New `caldav/testing.py` (shipped with the package): `EmbeddedServer`, `XandikosServer`, `RadicaleServer` — so pip-installed users can use `PYTHON_CALDAV_USE_TEST_SERVER=1` without a source checkout.
31+
32+
### Fixed
33+
34+
* `get_object_by_uid()` (and `get_event_by_uid()`, `get_todo_by_uid()`, `get_journal_by_uid()`, and their deprecated aliases) raised `TypeError` with async clients because `search()` returned a coroutine that was iterated directly. Fixes https://github.com/python-caldav/caldav/issues/642
35+
* `complete()` and the save()-recurrence path were not awaited for async clients.
36+
* `uncomplete()`, `set_relation()`, `get_relatives()`, and `invite()` lacked async dispatch.
37+
* `_handle_reverse_relations()` called `get_relatives()` without `await`, silently returning a coroutine.
38+
* `get_calendar()` and `get_calendars()` were missing from the `caldav.aio` re-export.
39+
* `get_calendars(config_section=…)` silently ignored `calendar_name` and `calendar_url` keys in config sections — they were stripped before reaching the filter logic.
40+
* `expand_config_section()` was not called when reading the config file, so `contains:`-style meta-sections had no effect.
41+
* `date` objects passed to `calendar.search()` or `calendar.searcher()` as time-range boundaries now get coerced to UTC `datetime` before being forwarded to `icalendar_searcher`, silencing the "Date-range searches not well supported yet" warning.
42+
* `XandikosServer.is_accessible()` now sends a minimal `PROPFIND` requesting only `{DAV:}resourcetype` instead of an implicit `allprop`, avoiding spurious `NotImplementedError` log lines from Xandikos during test-server startup.
43+
44+
### Tests and documentation
45+
46+
* Full async tutorial added: `docs/source/async_tutorial.rst`. Covers the same ground as the sync tutorial plus a "Parallel Operations" section demonstrating `asyncio.gather()`. The sync tutorial now links to it.
47+
* `docs/source/configfile.rst` has been rewritten and extended; tests for `inherits` and env-var expansion added.
48+
* `docs/source/tutorial.rst` rewritten and fixed.
49+
* The caldav-server-tester tool is now documented in the config file guide.
50+
* Design notes on the dual-mode sync/async pattern and its trade-offs added in `docs/source/`.
51+
* Test server spin-up/teardown tweaked for reliability.
52+
* CI: deptry and lychee link-checker fixups.
53+
54+
## [3.0.2] - 2026-03-15
1655

1756
Highlight: Reintroducing debug communication dump functionality.
1857

@@ -23,8 +62,8 @@ Highlight: Reintroducing debug communication dump functionality.
2362

2463
### Tests and documentation
2564

26-
* All links to the RFC is now in a cannonical format. Links in docstrings and ReST-documntation follows the sphinx-standard. Fixes https://github.com/python-caldav/caldav/issues/635 - pull request https://github.com/python-caldav/caldav/pull/636
27-
* I've decided to try to stick to the conventionalcommits standard. This is documented in CONTRIBUTING.md, and I've added a pre-commit hookk for enforcing it (but it needs to be installed through pre-commit ... so I will most likely have to police pull requests manually)
65+
* All links to the RFC is now in a canonical format. Links in docstrings and ReST-documentation follows the sphinx-standard. Fixes https://github.com/python-caldav/caldav/issues/635 - pull request https://github.com/python-caldav/caldav/pull/636
66+
* I've decided to try to stick to the conventionalcommits standard. This is documented in CONTRIBUTING.md, and I've added a pre-commit hook for enforcing it (but it needs to be installed through pre-commit ... so I will most likely have to police pull requests manually)
2867
* Some code refactoring in the test code.
2968
* Improved the lychee link testing setup
3069

0 commit comments

Comments
 (0)