complete(handle_rrule=True) fails with ScheduleTagMismatchError, leaving a half-completed recurring task
维护者通常 1 天内回复
还没有人认领这个 Issue。
评估
调研方向
Start in caldav/calendarobjectresource.py at _complete_recurring_safe (around line 2326), which is reached from complete() (around line 2455). The issue names two candidate fixes: save the recurring task before the completed copy, or delete the copy when the second save fails. Pick one after checking how _post_put and _raise_precondition_failed surface a 412. Done when a mocked 412 on the recurring save leaves no orphaned completed copy.
由索引模型根据 Issue 内容生成。
描述
Disclaimer: AI-generated text below the line, generated by Claude Opus 5.5, from the prompt:
Create an issue to fix this:
(traceback pasted)
Completing a recurring task from plann (plann ... panic → complete) crashed with caldav at v3.4.0-50-g8d7c6c0f:
File "plann/interactive.py", line 79, in command_edit
obj.complete(handle_rrule=True)
File "caldav/calendarobjectresource.py", line 2455, in complete
return getattr(self, "_complete_recurring_%s" % rrule_mode)(completion_timestamp)
File "caldav/calendarobjectresource.py", line 2326, in _complete_recurring_safe
self.save()
...
File "caldav/calendarobjectresource.py", line 1247, in _post_put
self._raise_precondition_failed(r, headers)
File "caldav/davobject.py", line 678, in _raise_precondition_failed
raise error.ScheduleTagMismatchError(errmsg(r))
caldav.lib.error.ScheduleTagMismatchError: ScheduleTagMismatchError at '412 Precondition Failed', reason no reason
One problem, and an explanation:
-
Non-atomic completion.
_complete_recurring_safefirst saves the completed copy (completed.save(), succeeded) and then the advanced recurring task (self.save(), failed). The calendar is now left with a completed copy while the recurring task still points at the same occurrence. Retrying the completion creates a second completed copy. Either save the recurring task first (a 412 then leaves nothing behind), or delete the copy when the second save fails. -
The 412 itself is correct. Server: Xandikos. Another client changed the task (STATUS, CATEGORIES) between plann's search and the save, which changes Xandikos' Schedule-Tag. Since 45e7bee5 the search caches the tag, so caldav caught this instead of silently overwriting that change. The only bug is (1).
- 主要语言
- Python
- 星标
- 412
- 派生
- 113
- 平均合并
- 22 小时 43 分钟
- 30 天内合并 PR
- 43
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 没有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
python-caldav/caldav 的其他 Issue
-
难度 2/5 1-3 小时 新手友好度 62/100
python-caldav/caldav#687 ·
维护者通常 1 天内回复
-
难度 4/5 3-5 天 新手友好度 48/100
python-caldav/caldav#784 · 1 条评论 ·
维护者通常 1 天内回复
-
难度 4/5 3-5 天 新手友好度 35/100
python-caldav/caldav#783 · 1 条评论 ·
维护者通常 1 天内回复
-
难度 3/5 1-2 天 新手友好度 55/100
python-caldav/caldav#782 ·
维护者通常 1 天内回复
-
难度 3/5 1-2 天 新手友好度 55/100
python-caldav/caldav#780 ·
维护者通常 1 天内回复
查看 python-caldav/caldav 的全部 Issue
相似的 Issue
-
难度 1/5 1 小时以内 新手友好度 65/100
521xueweihan/HelloGitHub#4025 ·
-
难度 2/5 1-3 小时 新手友好度 85/100
aws-samples/sample-per-model-bedrock#321 ·
维护者通常 1 天内回复
-
难度 1/5 1-3 小时 新手友好度 68/100
FavioVazquez/showtime#101 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 78/100
koush/ha_scrypted#81 ·
-
难度 2/5 1-3 小时 新手友好度 82/100
google/osv-scanner-action#147 ·