From 7339c15b1e1e0a949075a375e5986ce58b99769a Mon Sep 17 00:00:00 2001 From: luxick Date: Sun, 3 Mar 2019 11:44:17 +0100 Subject: [PATCH] Additional buttons and infos on episode page. --- app.py | 32 +++++++++++++++++++-- models.py | 4 +++ templates/episode_details.html | 51 ++++++++++++++++++++++++++++++---- util.py | 19 ++++++++++--- 4 files changed, 94 insertions(+), 12 deletions(-) diff --git a/app.py b/app.py index 81a8461..bd871fd 100644 --- a/app.py +++ b/app.py @@ -8,6 +8,7 @@ from flask_bootstrap import Bootstrap import db import forms import models +import util from config import Config @@ -27,6 +28,22 @@ app = create_app() app.config.from_object(Config) +@app.template_filter("format_time") +def format_time(value): + """Make the datetime to time string formatting available to jinja2""" + if value is None: + return "" + return util.datetime_time_str(value) + + +@app.template_filter("format_timedelta") +def format_timedelta(value): + """Make formatting for timedeltas available to jinja2""" + if value is None: + return "" + return util.timedelta_to_str(value) + + @app.cli.command("initdb") def init_db_command(): """Initializes the database.""" @@ -188,10 +205,15 @@ def episode_detail(season_id: int, episode_id: int): episode = db.query_db(sql, args, one=True, cls=models.Episode) sql, args = db.load_episode_players(episode_id) ep_players = db.query_db(sql, args, cls=models.Player) + + events = {"entries": [], "victory_count": 0, "defeat_count": 0} + model = { "title": f"{season.code}{episode.code}", "episode": episode, - "players": ep_players + "season": season, + "players": ep_players, + "events": events, } return render_template("episode_details.html", model=model) @@ -289,7 +311,13 @@ def episode_edit(season_id: int, episode_id: int): return redirect(url_for("season_overview", season_id=season_id)) -@app.route("/players/new") +@app.route("/seasons//episodes//events/new", methods=["GET"]) +@authorize +def event_new(season_id: int, episode_id: int): + pass + + +@app.route("/players/new", methods=["GET"]) @authorize def player_new(): form = forms.PlayerForm() diff --git a/models.py b/models.py index d2f46f1..2203b58 100644 --- a/models.py +++ b/models.py @@ -113,6 +113,10 @@ class Episode: end: Union[datetime.datetime, Rational] code: str + @property + def playtime(self): + return self.end - self.start + def __post_init__(self): if isinstance(self.date, str): self.date = datetime.datetime.strptime(self.date, util.DATE_FMT).date() diff --git a/templates/episode_details.html b/templates/episode_details.html index 2f10b17..b842c87 100644 --- a/templates/episode_details.html +++ b/templates/episode_details.html @@ -2,10 +2,22 @@ {% set active_page = "seasons" %} {% block title %}{{ model.title }} {{ super() }}{% endblock %} -{% block content %} -
+{% block page %} + {% if g.is_editor %} + + {% endif %} +
-
+
@@ -14,6 +26,34 @@ {{ model.episode.code }}: {{ model.episode.title }}
+
+
    +
  • + Date: + {{ model.episode.date }} +
  • +
  • + Start: + {{ model.episode.start|format_time }} +
  • +
  • + End: + {{ model.episode.end|format_time }} +
  • +
  • + Play Time: + {{ model.episode.playtime }} +
  • +
  • + Enemies Defeated: + {{ model.events.victory_count }} +
  • +
  • + Deaths: + {{ model.events.defeat_count }} +
  • +
+
@@ -49,15 +89,14 @@
-
+
- Events + Event List
-
{% endblock %} \ No newline at end of file diff --git a/util.py b/util.py index 887e441..c3b944c 100644 --- a/util.py +++ b/util.py @@ -12,15 +12,26 @@ def str_to_datetime(data: str) -> datetime.datetime: return datetime.datetime.strptime(data, TIME_FMT) -def time_to_str(data: datetime.time) -> str: +def datetime_time_str(data: datetime) -> str: """ - Convert a datetime.time object into a formatted string for sqlite - :param data: datetime.time + Convert a datetime object into a formatted string for display + :param data: datetime :return: str """ return data.strftime(TIME_FMT) +def timedelta_to_str(data: datetime.timedelta) -> str: + """ + Remove second and microsecond portion from timedeltas for display + :param data: datetime.timedelta + :return: str + """ + return str( + data - datetime.timedelta(seconds=data.seconds, microseconds=data.microseconds) + ) + + def combine_datetime(date: datetime.date, time: datetime.time): """ Combine a date and time object into a datetime object @@ -32,5 +43,5 @@ def combine_datetime(date: datetime.date, time: datetime.time): time.hour, time.minute, time.second, - time.microsecond + time.microsecond, )