Imports name this capability’s declared dependencies, which fune builds next to it in your project; each one links to its page.
from .dates_add_days import parse_iso_date ← from dates.add-days ^1.0.0 · built alongside by fune
from .dates_day_of_week import day_name ← from dates.day-of-week ^1.0.0 · built alongside by fune
from .dates_days_between import days_between ← from dates.days-between ^1.0.0 · built alongside by fune
from .todo_due_status import due_status ← from todo.due-status ^1.0.0 · built alongside by fune
from .todo_item import Todo ← from todo.item ^1.0.0 · built alongside by fune
MONTHS = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
def due_label(todo: Todo, today: str) -> str:
"""The short English label for a todo's due date, built on due_status."""
status = due_status(todo, today)
if status == "done" or status == "none":
return ""
due = todo.due
assert due is not None
if status == "overdue":
late = days_between(due, today)
return "1 day overdue" if late == 1 else "%d days overdue" % late
if status == "today":
return "Due today"
if status == "tomorrow":
return "Due tomorrow"
d = parse_iso_date(due)
label = "Due %s %d %s" % (day_name(due)[0:3], d.day, MONTHS[d.month - 1])
# The year only when it differs, so next January never reads as this one.
return label if d.year == parse_iso_date(today).year else "%s %d" % (label, d.year)