Changelog
### 3.1.1
```
-------------
Released 2023-11-01
- Display :class:`~wtforms.Flags` values in their repr. :pr:`808`
- :class:`~fields.SelectField` and :class:`~fields.SelectMultipleField`
``choices`` can be `None` if `validate_choice` is `False` :pr:`809`
- Documentation improvements :pr:`812` :pr:`815` :pr:`817`
- Unit tests improvements :pr:`813`
- Python 3.12 support :pr:`818`
- Restored support for 3-items tuple return value from `iter_choices`
:pr:`816`
```
### 3.1.0
```
-------------
Released 2023-10-10
- Documentation improvements :pr:`726` :pr:`733` :pr:`749`
:pr:`767` :pr:`788` :pr:`789` :pr:`793`
- Translation improvements :pr:`732` :pr:`734` :pr:`754`
- Implement :class:`~fields.ColorField` :pr:`755`
- Delayed import of ``email_validator``. :issue:`727`
- ``<option>`` attributes can be passed by the :class:`~fields.SelectField`
``choices`` parameter :issue:`692` :pr:`739`.
⚠️breaking change⚠️: `iter_choices` now returns a tuple of 4 items
- Use the standard datetime formats by default for
:class:`~fields.DateTimeLocalField` :pr:`761`
- Python 3.11 support :pr:`763`
- Added shorter format to :class:`~fields.DateTimeLocalField`
defaults :pr:`761`
- Stop support for python 3.7 :pr:`794`
- Added shorter format to :class:`~fields.WeekField`
defaults :pr:`765`
- Move to pyproject.toml :pr:`796`
- URL validator takes a ``allow_ip`` parameter :pr:`800`
- Implement :class:`~validators.ReadOnly` and
:class:`~validators.Disabled` `:pr:`788`
```
### 3.0.1
```
-------------
Released 2021-12-23
- Fixed :class:`~fields.DateTimeField` and other similar fields can
handle multiple formats. :issue:`720` :pr:`721`
- Stop support for python 3.6 :pr:`722`
```
### 3.0.0
```
-------------
Released 2021-11-07
- Fixed :class:`~fields.RadioField` validators. :issue:`477` :pr:`615`
- :meth:`~fields.FormField.populate_obj` always calls :func:`setattr`
:pr:`675`
- WTForms has a new logo. :issue:`569` :pr:`689`
- Fixed :class:`~fields.RadioField` `render_kw` rendering. :issue:`490`
:pr:`628` :pr:`688`
- Support for optgroups in :class:`~fields.SelectField` and
:class:`~fields.SelectMultipleField`. :issue:`656` :pr:`667`
- Minor documentation fix. :issue:`701`
- Custom separators for :class:`~fields.FieldList`. :issue:`681` :pr:`694`
- :class:`~fields.DateTimeField`, :class:`~fields.DateField` and
:class:`~fields.TimeField` support time formats that removes leading
zeros. :pr:`703`
- Refactoring: split `fields/core.py` and `fields/simple.py` :pr:`710`
```
### 3.0.0a1
```
---------------
Released 2020-11-23
- Drop support for Python < 3.6. :pr:`554`
- :class:`~fields.StringField` sets ``data`` to ``None`` when form
data is empty and an initial value was not provided. Although it
previously set an empty string, ``None`` is consistent with the
behavior of other fields. :pr:`355`
- Specified version of Babel required for setup to avoid errors.
:pr:`430`
- Replaced use of ``getattr``/``setattr`` with regular variable
access. :issue:`482`
- :class:`ValueError` raised by a validator are handled like regular
exceptions. Validators need to raise
:class:`~validators.ValidationError` or
:class:`~validators.StopValidation` to make a validation fail.
:issue:`445`
- :class:`~fields.SelectField`, :class:`~fields.SelectMultipleField` and
:class:`~fields.RadioField` *choices* parameter can be a callable.
:pr:`608`
- Choices shortcut for :class:`~fields.core.SelectMultipleField`.
:issue:`603` :pr:`605`
- Forms can have form-level errors. :issue:`55` :pr:`595`
- Implemented :class:`~wtforms.fields.core.MonthField`. :pr:`530` :pr:`593`
- Filters can be inline. :meth:`form.BaseForm.process` takes a
*extra_filters* parameter. :issue:`128` :pr:`592`
- Fields can be passed the ``name`` argument to use a HTML name
different than their Python name. :issue:`205`, :pr:`601`
- Render attribute names like ``for_`` and ``class_`` are normalized
consistently so later values override those specified earlier.
:issue:`449`, :pr:`596`
- Flags should now be stored in dicts and can take non-boolean values.
A ``DeprecationWarning`` is issued when tuples are used. :issue:`406` :pr:`467`
- Widgets are HTML5 by default. :issue:`594` :pr:`614`
- Fixed a bug when the :class:`~wtforms.fields.core.SelectField` choices
are list of strings. :pr:`598`
- Error messages standardization. :issue:`613` :pr:`620` :pr:`626` :pr:`627`
- :class:`~wtforms.fields.core.SelectMultipleField` `validate_choice`
bugfix. :issue:`606` :pr:`642`
- Fixed SelectMultipleField validation when using choices list shortcut.
:issue:`612` :pr:`661`
- Removed :meth:`form._get_translations`. Use
:meth:`Meta.get_translations <wtforms.meta.DefaultMeta.get_translations>` instead.
```
### 2.3.3
```
-------------
Released 2020-07-30
- This release includes the translation files that were missing in the
```
### 2.3.2
```
-------------
Released 2020-07-29
- Fixed a bug with :class:`~fields.SelectField` choices shortcut at
form submission. :pr:`598, 639`
```
### 2.3.1
```
-------------
Released 2020-04-22
- All modules in ``wtforms.ext`` show a deprecation warning on import.
They will be removed in version 3.0.
- Fixed a bug when :class:`~fields.SelectField` choices is ``None``.
:issue:`572, 585`
- Restored ``HTMLString`` and ``escape_html`` as aliases for
MarkupSafe functions. Their use shows a ``DeprecationWarning``.
:issue:`581`, :pr:`583`
- ``Form.validate`` takes an ``extra_validators`` parameter, mapping
field names to lists of extra validator functions. This matches
``BaseForm.validate``. :pr:`584`
- Update locale catalogs.
```
### 2.3.0
```
-------------
Released 2020-04-21
- Drop support for Python 2.6, 3.3, and 3.4.
- :class:`~fields.SelectField` uses ``list()`` to construct a new list
of choices. :pr:`475`
- Permitted underscores in ``HostnameValidation``. :pr:`463`
- :class:`~validators.URL` validator now allows query parameters in
the URL. :issue:`523`, :pr:`524`
- Updated ``false_values`` param in ``BooleanField`` docs.
:issue:`483`, :pr:`485`
- Fixed broken format string in Arabic translation :pr:`471`
- Updated French and Japanese translations. :pr:`506, 514`
- Updated Ukrainian translation. :pr:`433`
- ``FieldList`` error list keeps entries in order for easier
identification of which fields had errors. :issue:`257`, :pr:`407`
- :class:`~validators.Length` gives a more helpful error message when
``min`` and ``max`` are the same value. :pr:`266`
- :class:`~fields.SelectField` no longer coerces ``None`` to
``"None"`` allowing use of ``"None"`` as an option. :issue:`289`,
:pr:`288`
- The :class:`~widgets.TextArea` widget prepends a ``\r\n`` newline
when rendering to account for browsers stripping an initial line for
display. This does not affect the value. :issue:`238`, :pr:`395`
- HTML5 :class:`~fields.html5.IntegerField` and
:class:`~fields.html5.RangeInput` don't render the ``step="1"``
attribute by default. :pr:`343`
- ``aria_`` args are rendered the same way as ``data_`` args, by
converting underscores to hyphens. ``aria_describedby="name-help"``
becomes ``aria-describedby="name-help"``. :issue:`239`, :pr:`389`
- Added a ``check_validators`` method to :class:`~fields.Field` which
checks if the given validators are both callable, and not classes.
:pr:`298, 410`
- ``form.errors`` is not cached and will update if an error is
appended to a field after access. :pr:`568`
- :class:`~wtforms.validators.NumberRange` correctly handle NaN
values. :issue:`505`, :pr:`548`
- :class:`~fields.IntegerField` checks input type when processing
data. :pr:`451`
- Added a parameter to :class:`~fields.SelectField` to skip choice
validation. :issue:`434`, :pr:`493`
- Choices which name and data are the same do not need to use tuples.
:pr:`526`
- Added more documentation on HTML5 fields. :pr:`326, 409`
- HTML is escaped using MarkupSafe instead of the previous internal
implementation. :func:`~widgets.core.escape_html` is removed,
replaced by :func:`markupsafe.escape`.
:class:`~widgets.core.HTMLString` is removed, replaced by
:class:`markupsafe.Markup`. :pr:`400`
- Fixed broken IPv6 validator, validation now uses the ``ipaddress``
package. :issue:`385`, :pr:`403`
- :class:`~fields.core.Label` text is escaped before rendering.
:issue:`315`, :pr:`375`
- Email validation is now handled by an optional library,
``email_validator``. :pr:`429`
```
### 2.2.1
```
-------------
Released 2018-06-07
- :class:`~fields.StringField` only sets ``data = ''`` when form data
is empty and an initial value was not provided. This fixes an issue
where the default value wasn't rendered with the initial form.
:issue:`291, 401`, :pr:`355`
```
### 2.2
```
-----------
Released 2018-06-02
- Merged new and updated translations from the community.
- Passing ``data_`` args to render a field converts all the
underscores to hyphens when rendering the HTML attribute, not just
the first one. ``data_foo_bar`` becomes ``data-foo-bar``. :pr:`248`
- The :class:`~validators.UUID` validator uses the :class:`uuid.UUID`
class instead of a regex. :pr:`251`
- :class:`~fields.SelectField` copies the list of ``choices`` passed
to it so modifying an instance's choices will not modify the global
form definition. :pr:`286`
- Fields call :meth:`~fields.Field.process_formdata` even if the raw
data is empty. :pr:`280`
- Added a :class:`~fields.MultipleFileField` to handle a multi-file
input. :class:`~fields.FileField` continues to handle only one
value. The underlying :class:`~widgets.FileInput` widget gained a
``multiple`` argument. :pr:`281`
- :class:`~fields.SelectField` choices can contain HTML (MarkupSafe
``Markup`` object or equivalent API) and will be rendered properly.
:pr:`302`
- ``fields.TimeField`` and ``html5.TimeField`` were added. :pr:`254`
- Improved :class:`~validators.Email`. Note that it is still
unreasonable to validate all emails with a regex and you should
prefer validating by actually sending an email. :pr:`294`
- Widgets render the ``required`` attribute when using a validator
that provides the ``'required'`` flag, such as
:class:`~validators.DataRequired`. :pr:`361`
- Fix a compatibility issue with SQLAlchemy 1.2 that caused
:class:`~ext.sqlalchemy.fields.QuerySelectField` to fail with
``ValueError: too many values to unpack``. :pr:`391`
```
Links
- PyPI: https://pypi.org/project/wtforms
- Changelog: https://data.safetycli.com/changelogs/wtforms/
This PR updates WTForms from 2.1 to 3.1.1.
Changelog
### 3.1.1 ``` ------------- Released 2023-11-01 - Display :class:`~wtforms.Flags` values in their repr. :pr:`808` - :class:`~fields.SelectField` and :class:`~fields.SelectMultipleField` ``choices`` can be `None` if `validate_choice` is `False` :pr:`809` - Documentation improvements :pr:`812` :pr:`815` :pr:`817` - Unit tests improvements :pr:`813` - Python 3.12 support :pr:`818` - Restored support for 3-items tuple return value from `iter_choices` :pr:`816` ``` ### 3.1.0 ``` ------------- Released 2023-10-10 - Documentation improvements :pr:`726` :pr:`733` :pr:`749` :pr:`767` :pr:`788` :pr:`789` :pr:`793` - Translation improvements :pr:`732` :pr:`734` :pr:`754` - Implement :class:`~fields.ColorField` :pr:`755` - Delayed import of ``email_validator``. :issue:`727` - ``<option>`` attributes can be passed by the :class:`~fields.SelectField` ``choices`` parameter :issue:`692` :pr:`739`. ⚠️breaking change⚠️: `iter_choices` now returns a tuple of 4 items - Use the standard datetime formats by default for :class:`~fields.DateTimeLocalField` :pr:`761` - Python 3.11 support :pr:`763` - Added shorter format to :class:`~fields.DateTimeLocalField` defaults :pr:`761` - Stop support for python 3.7 :pr:`794` - Added shorter format to :class:`~fields.WeekField` defaults :pr:`765` - Move to pyproject.toml :pr:`796` - URL validator takes a ``allow_ip`` parameter :pr:`800` - Implement :class:`~validators.ReadOnly` and :class:`~validators.Disabled` `:pr:`788` ``` ### 3.0.1 ``` ------------- Released 2021-12-23 - Fixed :class:`~fields.DateTimeField` and other similar fields can handle multiple formats. :issue:`720` :pr:`721` - Stop support for python 3.6 :pr:`722` ``` ### 3.0.0 ``` ------------- Released 2021-11-07 - Fixed :class:`~fields.RadioField` validators. :issue:`477` :pr:`615` - :meth:`~fields.FormField.populate_obj` always calls :func:`setattr` :pr:`675` - WTForms has a new logo. :issue:`569` :pr:`689` - Fixed :class:`~fields.RadioField` `render_kw` rendering. :issue:`490` :pr:`628` :pr:`688` - Support for optgroups in :class:`~fields.SelectField` and :class:`~fields.SelectMultipleField`. :issue:`656` :pr:`667` - Minor documentation fix. :issue:`701` - Custom separators for :class:`~fields.FieldList`. :issue:`681` :pr:`694` - :class:`~fields.DateTimeField`, :class:`~fields.DateField` and :class:`~fields.TimeField` support time formats that removes leading zeros. :pr:`703` - Refactoring: split `fields/core.py` and `fields/simple.py` :pr:`710` ``` ### 3.0.0a1 ``` --------------- Released 2020-11-23 - Drop support for Python < 3.6. :pr:`554` - :class:`~fields.StringField` sets ``data`` to ``None`` when form data is empty and an initial value was not provided. Although it previously set an empty string, ``None`` is consistent with the behavior of other fields. :pr:`355` - Specified version of Babel required for setup to avoid errors. :pr:`430` - Replaced use of ``getattr``/``setattr`` with regular variable access. :issue:`482` - :class:`ValueError` raised by a validator are handled like regular exceptions. Validators need to raise :class:`~validators.ValidationError` or :class:`~validators.StopValidation` to make a validation fail. :issue:`445` - :class:`~fields.SelectField`, :class:`~fields.SelectMultipleField` and :class:`~fields.RadioField` *choices* parameter can be a callable. :pr:`608` - Choices shortcut for :class:`~fields.core.SelectMultipleField`. :issue:`603` :pr:`605` - Forms can have form-level errors. :issue:`55` :pr:`595` - Implemented :class:`~wtforms.fields.core.MonthField`. :pr:`530` :pr:`593` - Filters can be inline. :meth:`form.BaseForm.process` takes a *extra_filters* parameter. :issue:`128` :pr:`592` - Fields can be passed the ``name`` argument to use a HTML name different than their Python name. :issue:`205`, :pr:`601` - Render attribute names like ``for_`` and ``class_`` are normalized consistently so later values override those specified earlier. :issue:`449`, :pr:`596` - Flags should now be stored in dicts and can take non-boolean values. A ``DeprecationWarning`` is issued when tuples are used. :issue:`406` :pr:`467` - Widgets are HTML5 by default. :issue:`594` :pr:`614` - Fixed a bug when the :class:`~wtforms.fields.core.SelectField` choices are list of strings. :pr:`598` - Error messages standardization. :issue:`613` :pr:`620` :pr:`626` :pr:`627` - :class:`~wtforms.fields.core.SelectMultipleField` `validate_choice` bugfix. :issue:`606` :pr:`642` - Fixed SelectMultipleField validation when using choices list shortcut. :issue:`612` :pr:`661` - Removed :meth:`form._get_translations`. Use :meth:`Meta.get_translations <wtforms.meta.DefaultMeta.get_translations>` instead. ``` ### 2.3.3 ``` ------------- Released 2020-07-30 - This release includes the translation files that were missing in the ``` ### 2.3.2 ``` ------------- Released 2020-07-29 - Fixed a bug with :class:`~fields.SelectField` choices shortcut at form submission. :pr:`598, 639` ``` ### 2.3.1 ``` ------------- Released 2020-04-22 - All modules in ``wtforms.ext`` show a deprecation warning on import. They will be removed in version 3.0. - Fixed a bug when :class:`~fields.SelectField` choices is ``None``. :issue:`572, 585` - Restored ``HTMLString`` and ``escape_html`` as aliases for MarkupSafe functions. Their use shows a ``DeprecationWarning``. :issue:`581`, :pr:`583` - ``Form.validate`` takes an ``extra_validators`` parameter, mapping field names to lists of extra validator functions. This matches ``BaseForm.validate``. :pr:`584` - Update locale catalogs. ``` ### 2.3.0 ``` ------------- Released 2020-04-21 - Drop support for Python 2.6, 3.3, and 3.4. - :class:`~fields.SelectField` uses ``list()`` to construct a new list of choices. :pr:`475` - Permitted underscores in ``HostnameValidation``. :pr:`463` - :class:`~validators.URL` validator now allows query parameters in the URL. :issue:`523`, :pr:`524` - Updated ``false_values`` param in ``BooleanField`` docs. :issue:`483`, :pr:`485` - Fixed broken format string in Arabic translation :pr:`471` - Updated French and Japanese translations. :pr:`506, 514` - Updated Ukrainian translation. :pr:`433` - ``FieldList`` error list keeps entries in order for easier identification of which fields had errors. :issue:`257`, :pr:`407` - :class:`~validators.Length` gives a more helpful error message when ``min`` and ``max`` are the same value. :pr:`266` - :class:`~fields.SelectField` no longer coerces ``None`` to ``"None"`` allowing use of ``"None"`` as an option. :issue:`289`, :pr:`288` - The :class:`~widgets.TextArea` widget prepends a ``\r\n`` newline when rendering to account for browsers stripping an initial line for display. This does not affect the value. :issue:`238`, :pr:`395` - HTML5 :class:`~fields.html5.IntegerField` and :class:`~fields.html5.RangeInput` don't render the ``step="1"`` attribute by default. :pr:`343` - ``aria_`` args are rendered the same way as ``data_`` args, by converting underscores to hyphens. ``aria_describedby="name-help"`` becomes ``aria-describedby="name-help"``. :issue:`239`, :pr:`389` - Added a ``check_validators`` method to :class:`~fields.Field` which checks if the given validators are both callable, and not classes. :pr:`298, 410` - ``form.errors`` is not cached and will update if an error is appended to a field after access. :pr:`568` - :class:`~wtforms.validators.NumberRange` correctly handle NaN values. :issue:`505`, :pr:`548` - :class:`~fields.IntegerField` checks input type when processing data. :pr:`451` - Added a parameter to :class:`~fields.SelectField` to skip choice validation. :issue:`434`, :pr:`493` - Choices which name and data are the same do not need to use tuples. :pr:`526` - Added more documentation on HTML5 fields. :pr:`326, 409` - HTML is escaped using MarkupSafe instead of the previous internal implementation. :func:`~widgets.core.escape_html` is removed, replaced by :func:`markupsafe.escape`. :class:`~widgets.core.HTMLString` is removed, replaced by :class:`markupsafe.Markup`. :pr:`400` - Fixed broken IPv6 validator, validation now uses the ``ipaddress`` package. :issue:`385`, :pr:`403` - :class:`~fields.core.Label` text is escaped before rendering. :issue:`315`, :pr:`375` - Email validation is now handled by an optional library, ``email_validator``. :pr:`429` ``` ### 2.2.1 ``` ------------- Released 2018-06-07 - :class:`~fields.StringField` only sets ``data = ''`` when form data is empty and an initial value was not provided. This fixes an issue where the default value wasn't rendered with the initial form. :issue:`291, 401`, :pr:`355` ``` ### 2.2 ``` ----------- Released 2018-06-02 - Merged new and updated translations from the community. - Passing ``data_`` args to render a field converts all the underscores to hyphens when rendering the HTML attribute, not just the first one. ``data_foo_bar`` becomes ``data-foo-bar``. :pr:`248` - The :class:`~validators.UUID` validator uses the :class:`uuid.UUID` class instead of a regex. :pr:`251` - :class:`~fields.SelectField` copies the list of ``choices`` passed to it so modifying an instance's choices will not modify the global form definition. :pr:`286` - Fields call :meth:`~fields.Field.process_formdata` even if the raw data is empty. :pr:`280` - Added a :class:`~fields.MultipleFileField` to handle a multi-file input. :class:`~fields.FileField` continues to handle only one value. The underlying :class:`~widgets.FileInput` widget gained a ``multiple`` argument. :pr:`281` - :class:`~fields.SelectField` choices can contain HTML (MarkupSafe ``Markup`` object or equivalent API) and will be rendered properly. :pr:`302` - ``fields.TimeField`` and ``html5.TimeField`` were added. :pr:`254` - Improved :class:`~validators.Email`. Note that it is still unreasonable to validate all emails with a regex and you should prefer validating by actually sending an email. :pr:`294` - Widgets render the ``required`` attribute when using a validator that provides the ``'required'`` flag, such as :class:`~validators.DataRequired`. :pr:`361` - Fix a compatibility issue with SQLAlchemy 1.2 that caused :class:`~ext.sqlalchemy.fields.QuerySelectField` to fail with ``ValueError: too many values to unpack``. :pr:`391` ```Links
- PyPI: https://pypi.org/project/wtforms - Changelog: https://data.safetycli.com/changelogs/wtforms/