WEBUI has datetime widgets

only used in "single" kind, and not supported in Chrome. But still!
refs #35
This commit is contained in:
boyska 2017-01-03 12:27:35 +01:00
parent 3b49ae0679
commit 9c84669749
No known key found for this signature in database
GPG key ID: 7395DCAE58289CA9

View file

@ -1,15 +1,48 @@
from datetime import datetime from datetime import datetime
from flask_wtf import Form from flask_wtf import Form
from wtforms import StringField, DateTimeField, validators, SubmitField from wtforms import StringField, Field, validators, SubmitField
import wtforms.widgets
class DateTimeInput(wtforms.widgets.Input):
input_type = 'datetime-local'
class EasyDateTimeField(Field):
'''
a "fork" of DateTimeField which uses HTML5 datetime-local
The format is not customizable, because it is imposed by the HTML5 specification
'''
widget = DateTimeInput()
def __init__(self, label=None, validators=None, **kwargs):
super(EasyDateTimeField, self).__init__(label, validators, **kwargs)
self.format = '%Y-%m-%dT%H:%M:%S'
def _value(self):
if self.raw_data:
return ' '.join(self.raw_data)
else:
return self.data and self.data.strftime(self.format) or ''
def process_formdata(self, valuelist):
if valuelist:
date_str = ' '.join(valuelist)
try:
self.data = datetime.strptime(date_str, self.format)
except ValueError:
self.data = None
raise ValueError(self.gettext('Not a valid datetime value <tt>{}</tt>').format(date_str))
class SingleAlarmForm(Form): class SingleAlarmForm(Form):
nick = StringField('Alarm nick', validators=[validators.required()], nick = StringField('Alarm nick', validators=[validators.required()],
description='A simple name to recognize this alarm') description='A simple name to recognize this alarm')
dt = DateTimeField('Date and time', validators=[validators.required()], dt = EasyDateTimeField('Date and time', validators=[validators.required()],
description='Date to ring on, expressed as ' description='Date to ring on, expressed as '
'YYYY-MM-DD HH:MM:SS') '2000-12-31T13:42:00')
submit = SubmitField('Submit') submit = SubmitField('Submit')
def populate_from_timespec(self, timespec): def populate_from_timespec(self, timespec):