pallets-eco/wtforms

Feature request: parsing DateTimeField input with a function

Closed this issue · 1 comments

Currently, the DateTimeField takes a format parameter:

DateTimeField("datetime", format='%Y-%m-%d %H:%M:%S')

It would be great to add an optional parse parameter, which would take a function converting a string into a datetime object. This would make the field more extendible. Examples:

DateTimeField("datetime", parse=datetime.datetime.fromisoformat)
DateTimeField("datetime", parse=lambda x: datetime.datetime.fromtimestamp(int(x))

This option would be mutually exclusive with the format parameter.

Idem for TimeField and DateField.

Let me know if I can create a PR for this.

azmeuk commented

Hi. You can actually already do this with filters:

>>> import wtforms
>>> import datetime
>>> class Form(wtforms.Form):
...     dt = wtforms.DateTimeField(filters=[datetime.datetime.fromisoformat])
>>> f = Form(dt='2023-07-21T18:11:32.295417')
>>> f.dt.data
datetime.datetime(2023, 7, 21, 18, 11, 32, 295417)
>>> class Form(wtforms.Form):
...     dt = wtforms.DateTimeField(filters=[datetime.datetime.fromtimestamp])
>>> f = Form(dt=1689955998.857561)
>>> f.dt.data
datetime.datetime(2023, 7, 21, 18, 13, 18, 857561)

Related to #793