Completing a fixed-time recurring task before its DTSTART does not advance it
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
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
- Không có Dockerfile hay tệp Docker Compose
- Không có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- 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.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của python-caldav/caldav
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
python-caldav/caldav#792 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
python-caldav/caldav#788 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
python-caldav/caldav#687 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 35/100
python-caldav/caldav#817 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 65/100
python-caldav/caldav#815 ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của python-caldav/caldav
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
Maintainer thường phản hồi trong vòng 1 ngày
-
enhancement good first issue
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
iceboundrock/AutoForge#304 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
enhancement
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
fossasia/visdom-dev#77 ·
Maintainer thường phản hồi trong vòng 4 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
aws-cloudformation/cfn-lint#4890 ·
Maintainer thường phản hồi trong vòng 2 ngày