parent
7e439c1fdf
commit
aceee6ac4d
28
web_view.py
28
web_view.py
|
@ -2,10 +2,11 @@
|
||||||
|
|
||||||
"""Web page to show upcoming events."""
|
"""Web page to show upcoming events."""
|
||||||
|
|
||||||
|
import functools
|
||||||
import inspect
|
import inspect
|
||||||
import sys
|
import sys
|
||||||
import traceback
|
import traceback
|
||||||
from datetime import date, datetime, timezone
|
from datetime import date, datetime
|
||||||
|
|
||||||
import flask
|
import flask
|
||||||
import werkzeug
|
import werkzeug
|
||||||
|
@ -44,22 +45,27 @@ def exception_handler(e: werkzeug.exceptions.InternalServerError) -> tuple[str,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def delta_days(today: date, when: date) -> str:
|
||||||
|
"""Return number of days from today as a string."""
|
||||||
|
delta = (when - today).days
|
||||||
|
|
||||||
|
match delta:
|
||||||
|
case 0:
|
||||||
|
return "today"
|
||||||
|
case 1:
|
||||||
|
return "1 day"
|
||||||
|
case _:
|
||||||
|
return f"{delta:,d} days"
|
||||||
|
|
||||||
|
|
||||||
@app.route("/")
|
@app.route("/")
|
||||||
def index() -> str:
|
def index() -> str:
|
||||||
"""Index page."""
|
"""Index page."""
|
||||||
now = datetime.now()
|
now = datetime.now()
|
||||||
today = now.date()
|
|
||||||
data = get_data(now)
|
data = get_data(now)
|
||||||
now_utc = datetime.now(timezone.utc)
|
days = functools.partial(delta_days, now.date())
|
||||||
|
|
||||||
def days_hours(when: datetime) -> str:
|
return flask.render_template("index.html", days=days, **data)
|
||||||
delta = when - (now if when.tzinfo is None else now_utc)
|
|
||||||
return f"{delta.days:>5,d} days {delta.seconds // 3600:>2.0f} hours"
|
|
||||||
|
|
||||||
def days(when: date) -> str:
|
|
||||||
return "today" if when == today else f"{(when - today).days:,d} days"
|
|
||||||
|
|
||||||
return flask.render_template("index.html", days=days, days_hours=days_hours, **data)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
Loading…
Reference in a new issue