Keep the server's raw bytes, and allow sending given bytes unchanged
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 35/100
Research direction
Start with _set_data() around line 1760 in calendarobjectresource.py and trace the GET, calendar-query, calendar-multiget, and save paths that call it or normalize data with vcal.fix(). The issue leaves the API shape open, so first read the linked calendaring design and compare these paths. Done means preserving the received bytes and offering an opt-in to send supplied bytes unchanged while retaining conditional request handling.
Written by the indexing model from the issue text.
Description
Disclaimer: AI-generated text below the line, generated by Claude Opus 5.5 (Claude Code), from the prompt:
Open the issue in the caldav library [comment made in a code-review document, on a finding that caldav's wire_data is not the bytes the server sent]
Low priority. Needed by the calendaring library's proposed Item.wire (https://github.com/pycalendar/calendaring, docs/design/API_DESIGN.md, "The stored form"), and by sync tools such as https://github.com/pycalendar/calendaring-sync, which compare and push the bytes a server stores.
Today a CalendarObjectResource cannot give back what the server sent:
_set_data()runs the incoming data throughvcal.fix()before storing it in_data(calendarobjectresource.py, around line 1760), so the raw response body is gone right after parsing the response.wire_datare-encodes_data(or serialisesicalendar_instance/vobject_instanceafter an edit), so it is caldav's normalised copy, not the server's bytes, and not a snapshot of what was read.- When saving, the same path normalises bytes the caller passes in, so "store exactly these bytes" is not possible either.
Suggested shape (open for discussion):
- Keep the unmodified response body of the last
GET/calendar-query/calendar-multigetin a read-only attribute (e.g.raw_data), cleared by any write or local edit, next to the etag it belongs to. - An opt-in to send given bytes without
vcal.fix()(e.g.save(raw=True), or settingraw_databeforesave()), still withIf-Match/If-None-Match.
vcal.fix() stays the default; this is only about not throwing the original away.
- Dominant language
- Python
- Stars
- 412
- Forks
- 113
- Avg merge
- 1d 7h
- Merged PRs (30d)
- 34
Getting set up
- No Dockerfile or Docker Compose file
- No pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from python-caldav/caldav
-
Difficulty 2/5 1-3 hours Newbie friendliness 62/100
python-caldav/caldav#687 ·
Maintainers usually reply within 1 day
-
enhancement
Difficulty 5/5 Over a week Newbie friendliness 25/100
python-caldav/caldav#761 ·
Maintainers usually reply within 1 day
-
Difficulty 4/5 3-5 days Newbie friendliness 48/100
python-caldav/caldav#725 ·
Maintainers usually reply within 1 day
-
Difficulty 3/5 1-2 days Newbie friendliness 48/100
python-caldav/caldav#720 ·
Maintainers usually reply within 1 day
-
Difficulty 5/5 Over a week Newbie friendliness 30/100
python-caldav/caldav#704 ·
Maintainers usually reply within 1 day
All issues in python-caldav/caldav
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
spec-kitty/spec-kitty#6112 ·
Maintainers usually reply within 1 day
-
[Bug]: OpenRouter streaming chunks report the requested router name instead of the model OpenRouter servedPossibly taken @Mrun25 claimed this today. Openbug llm translation
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
BerriAI/litellm#46095 · 1 comment ·
Maintainers usually reply within 1 day
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
uberdeveloper/fastbt#29 ·
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
andrew-blake/melcloudhome#368 ·
Maintainers usually reply within 1 day
-
lane:discover
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
SPARDiffData/differential-data-collection#33 ·
Maintainers usually reply within 1 day