from dataclasses import replace from typing import Optional from .dates_add_days import add_days from .todo_item import Recurrence def reschedule_recurrence( recurrence: Optional[Recurrence], from_due: Optional[str], to_due: Optional[str] ) -> Optional[Recurrence]: """The repeat a todo keeps when its due date is edited: a moved date becomes the anchor.""" # add_days(x, 0) is the date check: it raises dates.add-days's message. if from_due is not None: add_days(from_due, 0) if to_due is not None: add_days(to_due, 0) if recurrence is None: return None add_days(recurrence.anchor, 0) # No date: todo.item's validate_draft says a repeating todo needs one. if to_due is None or to_due == from_due: return recurrence return replace(recurrence, anchor=to_due)