-
Notifications
You must be signed in to change notification settings - Fork 108
V 3.0-dev - async support and misc #610
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
f7c9243 to
3d1b79b
Compare
|
@tevepiercy - quite a lot of API changes have been done in this pull request / git branch. I've asked the AI to update the docs and examples, but with one exception I haven't done any QA of the doc updates done in this branch. The exception is the "tutorial", the AI destroyed the whole "tutorial"-concept and spewed lots of irrelevant information to it. Definitively the documentation needs some human hands to become useful for human consumption. (I've particularly seen that the Claude AI seem to have no concepts of what is important for the end user and what is not - it's just dumping down whatever it has in its current "context") Please have a look and see if you can work with some of this. The docs and examples are lliving under |
3b8bbfe to
a3286b8
Compare
Doc fixing, CHANGELOG updates and a workaround for some test problems.
Introduce a complete architectural refactoring that enables both synchronous
and asynchronous CalDAV operations using the same domain objects.
Architecture:
- Protocol layer (caldav/protocol/): Pure functions for XML building/parsing
- Operations layer (caldav/operations/): High-level CalDAV operations
- Dual-mode domain objects: Calendar, Event, Todo, etc. work with both clients
New async API:
from caldav.async_davclient import get_davclient
async with await get_davclient(url, username, password) as client:
principal = await client.get_principal()
calendars = await client.get_calendars()
Key changes:
- Minimum Python version: 3.10+ (was 3.8+)
- niquests is the default HTTP library (httpx also supported for async)
- Sync client shares common code with async via BaseDAVClient
- Added search_principals() and capability check aliases
- Documentation updated for new get_davclient() factory method
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Test Framework: - New tests/test_servers/ module with YAML-based configuration - Support for embedded servers (Radicale, Xandikos) - Support for Docker-based servers (Nextcloud, Baikal, etc.) - Automatic server lifecycle management - client_context helper for test fixtures - Removed legacy tests/conf.py (conf_private.py will be ignored) Data State: - New caldav/datastate.py for managing calendar object data representations - Efficient caching between raw/vobject/icalendar formats - Lazy conversion on first access Closes #613 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
CI/Tooling: - Add linkcheck workflow with lychee - Update pre-commit to use ruff (format + lint) - Configure pytest-asyncio and warning filters - Add deptry for dependency verification Search API (closes #590): - Add calendar.searcher() for advanced search queries - Fix duplicate dictionary keys in compatibility_hints.py Documentation: - Update examples to use get_davclient() factory - Add get_calendars_example.py - Update tutorial and howtos for v3.0 API - Fix ReST link formatting in http-libraries.rst - Add cross-reference to http-libraries from about.rst - Improve CHANGELOG deprecation section with issue references Dependencies: - Add httpx, pytest-asyncio as dependencies - Update minimum Python to 3.10 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
I've been "vibing" with Claude Code in a "playground" branch for a long time now, but the end result starts looking like something it's possible to continue with.
I still have a TODO-list before I can make a release candidate for 3.0, so this is still a draft PR.