Imports name this capability’s declared dependencies, which fune builds next to it in your project; each one links to its page.
from dataclasses import replace
from typing import Optional
from .dates_add_days import add_days ← from dates.add-days ^1.0.0 · built alongside by fune
from .todo_item import Recurrence ← from todo.item ^1.0.0 · built alongside by fune
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)