Skip to content
Snippets Groups Projects
Commit 39de781f authored by Martin Mareš's avatar Martin Mareš
Browse files

Vlastní WTF widget na zadávání data a času

Na rozdíl od toho defaultního má jen minutovou přesnost a převádí
čas do lokálního časového pásma.

To mimo jiné opravuje, že timestamp, který prošel přes formulář,
byl různý od původně načteného z DB, protože neměl explicitní TZ.
Tím pádem vznikala spousta triviálních záznamů v logu.
parent d35e2e24
Branches
No related tags found
No related merge requests found
from typing import Optional, Tuple import datetime
from flask import render_template, g, redirect, url_for, flash, request from flask import render_template, g, redirect, url_for, flash, request
import locale import locale
from flask_wtf.form import FlaskForm from flask_wtf.form import FlaskForm
from sqlalchemy import func from sqlalchemy import func
from sqlalchemy.orm import joinedload from sqlalchemy.orm import joinedload
from sqlalchemy.sql.functions import coalesce from sqlalchemy.sql.functions import coalesce
from typing import Optional, Tuple
import werkzeug.exceptions import werkzeug.exceptions
import wtforms import wtforms
from wtforms import validators from wtforms import validators
...@@ -336,26 +337,33 @@ def org_round_import(id: int): ...@@ -336,26 +337,33 @@ def org_round_import(id: int):
return generic_import(round, None) return generic_import(round, None)
class MODateTimeField(wtforms.DateTimeField):
def __init__(self, label, format='%Y-%m-%d %H:%M', description='Ve formátu 2000-01-01 12:34', **kwargs):
super().__init__(label, format=format, description=description, **kwargs)
def process_formdata(self, valuelist):
super().process_formdata(valuelist)
if self.data is not None:
self.data = self.data.astimezone()
class RoundEditForm(FlaskForm): class RoundEditForm(FlaskForm):
state = wtforms.SelectField("Stav kola", choices=db.RoundState.choices(), coerce=db.RoundState.coerce) state = wtforms.SelectField("Stav kola", choices=db.RoundState.choices(), coerce=db.RoundState.coerce)
# Only the desktop Firefox does not support datetime-local field nowadays, # Only the desktop Firefox does not support datetime-local field nowadays,
# other browsers does provide date and time picker UI :( # other browsers does provide date and time picker UI :(
tasks_file = wtforms.StringField("Soubor se zadáním", description="Cesta k ručně uploadovanému souboru", filters=[lambda x: x or None]) tasks_file = wtforms.StringField("Soubor se zadáním", description="Cesta k ručně uploadovanému souboru", filters=[lambda x: x or None])
ct_tasks_start = wtforms.DateTimeField( ct_tasks_start = MODateTimeField(
"Čas zveřejnění úloh pro účastníky", validators=[validators.Optional()], "Čas zveřejnění úloh pro účastníky", validators=[validators.Optional()],
description="Ve formátu 2020-01-01 00:00:00"
) )
pr_tasks_start = wtforms.DateTimeField( pr_tasks_start = MODateTimeField(
"Čas zveřejnění úloh pro dozor", validators=[validators.Optional()], "Čas zveřejnění úloh pro dozor", validators=[validators.Optional()],
description="Ve formátu 2020-01-01 00:00:00"
) )
ct_submit_end = wtforms.DateTimeField( ct_submit_end = MODateTimeField(
"Konec odevzdávání pro účastníky", validators=[validators.Optional()], "Konec odevzdávání pro účastníky", validators=[validators.Optional()],
description="Ve formátu 2020-01-01 00:00:00"
) )
pr_submit_end = wtforms.DateTimeField( pr_submit_end = MODateTimeField(
"Konec odevzdávání pro dozor", validators=[validators.Optional()], "Konec odevzdávání pro dozor", validators=[validators.Optional()],
description="Ve formátu 2020-01-01 00:00:00"
) )
submit = wtforms.SubmitField('Uložit') submit = wtforms.SubmitField('Uložit')
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment