import logging
from wtforms.fields import StringField
from wtforms import Field
import wtforms.widgets
from datetime import datetime
log = logging.getLogger(__name__)
[docs]class AutocompleteTextInput(wtforms.widgets.Input):
def __init__(self, datalist=None):
super().__init__("text")
self.datalist = datalist
def __call__(self, field, **kwargs):
# every second can be specified
if self.datalist is not None:
return super(AutocompleteTextInput, self).__call__(
field, list=self.datalist, autocomplete="autocomplete", **kwargs
)
return super(AutocompleteTextInput, self).__call__(field, **kwargs)
[docs]class AutocompleteStringField(StringField):
def __init__(self, datalist, *args, **kwargs):
super().__init__(*args, **kwargs)
self.widget = AutocompleteTextInput(datalist)
[docs]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.
This field does not ensure that browser actually supports datetime-local
input type, nor does it provide polyfills.
"""
widget = DateTimeInput()
formats = ("%Y-%m-%dT%H:%M:%S", "%Y-%m-%dT%H:%M")
def __init__(self, label=None, validators=None, **kwargs):
super(EasyDateTimeField, self).__init__(label, validators, **kwargs)
def _value(self):
if self.raw_data:
return " ".join(self.raw_data)
return self.data and self.data.strftime(self.formats[0]) or ""