Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

complete(handle_rrule=True) fails with ScheduleTagMismatchError, leaving a half-completed recurring task

未关闭
#765 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

还没有人认领这个 Issue。

评估

难度
3/5
预计耗时
半天
新手友好度
50/100
Issue 类型
缺陷
描述清晰度
基本清楚
活跃度
活跃
技术栈
python
领域
backend

调研方向

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:

  1. Non-atomic completion. _complete_recurring_safe first 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.

  2. 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 模板
  • 阅读贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

python-caldav/caldav 的其他 Issue

查看 python-caldav/caldav 的全部 Issue

相似的 Issue

更多 Python Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。