mirror of
https://github.com/tmdinosaurcenter/kiosk-guestbook.git
synced 2026-06-04 01:50:03 -06:00
feat: display admin timestamps in America/Denver time
Convert UTC timestamps from SQLite to Mountain Time (America/Denver) using a Jinja2 template filter backed by zoneinfo; add tzdata dependency for IANA timezone data in the slim Docker image.
This commit is contained in:
@@ -3,6 +3,8 @@ import os
|
|||||||
import re
|
import re
|
||||||
import sqlite3
|
import sqlite3
|
||||||
import threading
|
import threading
|
||||||
|
from datetime import datetime, timezone
|
||||||
|
from zoneinfo import ZoneInfo
|
||||||
|
|
||||||
from email_validator import validate_email, EmailNotValidError
|
from email_validator import validate_email, EmailNotValidError
|
||||||
from flask import Flask, render_template, request, redirect, url_for, jsonify, abort
|
from flask import Flask, render_template, request, redirect, url_for, jsonify, abort
|
||||||
@@ -23,6 +25,19 @@ app.secret_key = os.environ.get('SECRET_KEY', 'dev-secret-key-change-in-producti
|
|||||||
|
|
||||||
limiter = Limiter(get_remote_address, app=app, default_limits=[])
|
limiter = Limiter(get_remote_address, app=app, default_limits=[])
|
||||||
|
|
||||||
|
_DISPLAY_TZ = ZoneInfo('America/Denver')
|
||||||
|
|
||||||
|
@app.template_filter('localtime')
|
||||||
|
def localtime_filter(value):
|
||||||
|
if not value:
|
||||||
|
return value
|
||||||
|
try:
|
||||||
|
dt = datetime.strptime(str(value), '%Y-%m-%d %H:%M:%S')
|
||||||
|
dt = dt.replace(tzinfo=timezone.utc)
|
||||||
|
return dt.astimezone(_DISPLAY_TZ).strftime('%Y-%m-%d %H:%M')
|
||||||
|
except ValueError:
|
||||||
|
return value
|
||||||
|
|
||||||
login_manager = LoginManager(app)
|
login_manager = LoginManager(app)
|
||||||
login_manager.login_view = 'admin_login'
|
login_manager.login_view = 'admin_login'
|
||||||
|
|
||||||
|
|||||||
@@ -4,3 +4,4 @@ Flask-Limiter>=3.0
|
|||||||
Flask-Login>=0.6
|
Flask-Login>=0.6
|
||||||
email-validator>=2.0
|
email-validator>=2.0
|
||||||
gunicorn
|
gunicorn
|
||||||
|
tzdata
|
||||||
@@ -42,7 +42,7 @@
|
|||||||
<td>{{ g[4] }}</td>
|
<td>{{ g[4] }}</td>
|
||||||
<td>{{ g[5] or '—' }}</td>
|
<td>{{ g[5] or '—' }}</td>
|
||||||
<td>{{ 'Yes' if g[6] else 'No' }}</td>
|
<td>{{ 'Yes' if g[6] else 'No' }}</td>
|
||||||
<td class="text-nowrap">{{ g[7] }}</td>
|
<td class="text-nowrap">{{ g[7] | localtime }}</td>
|
||||||
<td>
|
<td>
|
||||||
{% if current_user.role != 'viewer' %}
|
{% if current_user.role != 'viewer' %}
|
||||||
<form method="POST" action="{{ url_for('admin_delete', entry_id=g[0]) }}?page={{ page }}"
|
<form method="POST" action="{{ url_for('admin_delete', entry_id=g[0]) }}?page={{ page }}"
|
||||||
|
|||||||
Reference in New Issue
Block a user