diff --git a/senju/main.py b/senju/main.py index 048c5e9..d22eae8 100644 --- a/senju/main.py +++ b/senju/main.py @@ -33,6 +33,7 @@ Dependencies * Flask: Core web application framework * Haiku: Custom class for poem representation and generation * StoreManager: Database abstraction for persistence operations +* datetime: Datetime helper to facilitate Haiku of the day Implementation -------------- @@ -44,6 +45,8 @@ for the complete web interface are defined within this module. from __future__ import annotations import os +import random +from datetime import date from pathlib import Path from flask import (Flask, redirect, render_template, request, @@ -56,6 +59,9 @@ app = Flask(__name__) store = StoreManager(Path("/tmp/store.db")) +stored_date = date.today() +random_number = 1 + @app.route("/") def index_view(): @@ -65,7 +71,22 @@ def index_view(): :return: The index.html template with title "Senju". :rtype: flask.Response """ - return render_template("index.html", title="Senju") + global stored_date + global random_number + + if stored_date != date.today(): + random_number = random.randint(0, store.count_entries()) + stored_date = date.today() + + haiku: Haiku | None = store.load_haiku(random_number) + if haiku is None: + raise KeyError("haiku not found") + context: dict = { + "haiku": haiku, + } + + return render_template("index.html", context=context, + title="Haiku of the day") @app.route("/haiku/") diff --git a/senju/store_manager.py b/senju/store_manager.py index e94295b..aeb86a5 100644 --- a/senju/store_manager.py +++ b/senju/store_manager.py @@ -175,6 +175,15 @@ class StoreManager: """ return self._save(data.__dict__) + def count_entries(self) -> int: + """ + Query the store how many Haikus are stored. + + :return: Number of stored haikus. + :rtype: int + """ + return len(self._db.all()) + def get_id_of_latest_haiku(self) -> Optional[int]: """ Get the ID of the most recently added haiku. diff --git a/senju/templates/index.html b/senju/templates/index.html index 67a7d27..8b3103a 100644 --- a/senju/templates/index.html +++ b/senju/templates/index.html @@ -1,4 +1,24 @@ {% extends "base.html" %} {% block content %} -
+
+ {% for line in context.haiku.lines %}
+ {{ line }}
+ {% endfor %}
+