Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

Completing a fixed-time recurring task before its DTSTART does not advance it

Đã đóng
#782 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
3/5
Thời gian dự kiến
1-2 ngày
Mức phù hợp với người mới
55/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
python
Lĩnh vực
backend

Hướng nghiên cứu

Start with Todo._next() and Todo.complete(handle_rrule=True) in the caldav package, then check _complete_recurring_thisandfuture, which passes the same completion_timestamp. Run the snippet from the issue to reproduce: completing a fixed-time RRULE task (BYMONTH) before its DTSTART returns the current occurrence instead of the next one. Done means the early-completion call advances to the next occurrence after DTSTART, and the after-DTSTART case still behaves as before.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

Disclaimer: AI-generated text below the line, generated by Claude Opus 5.5


Todo.complete(handle_rrule=True) moves a recurring task to self._next(completion_timestamp). For an RRULE with BY* parts ("fixed-time" recurrence), _next() keeps the original DTSTART and returns rrule.after(completion_timestamp). When the task is completed before its DTSTART, that is the current occurrence itself, so the task stays where it was. In "safe" mode a completed copy is written, and the recurring task still shows the occurrence that was just done.

from datetime import datetime, timezone
from caldav import Todo
t = Todo(data="""BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//x//y//EN
BEGIN:VTODO
UID:t1
DTSTAMP:20261016T120000Z
DTSTART:20270404T093000Z
DUE:20270404T123000Z
RRULE:FREQ=YEARLY;BYMONTH=4,9
SUMMARY:first layer
END:VTODO
END:VCALENDAR""")
t._next(datetime(2027, 4, 2, 10, tzinfo=timezone.utc))  # done two days early
# -> 2027-04-04 09:30 UTC, the same occurrence (expected 2027-09-04)
t._next(datetime(2027, 4, 4, 12, tzinfo=timezone.utc))  # done after DTSTART
# -> 2027-09-04 09:30 UTC, as expected

Suggested fix: for fixed-time recurrences, look for the next occurrence after max(completion_timestamp, DTSTART) (strictly after the current DTSTART). _complete_recurring_thisandfuture passes ts=completion_timestamp as well, and should probably get the same treatment.

Ngôn ngữ chính
Python
Star
412
Fork
113
Merge trung bình
10 giờ 20 phút
Pull request đã merge (30 ngày)
57

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của python-caldav/caldav

Tất cả issue của python-caldav/caldav

Issue tương tự

Thêm issue về Python

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.