Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

field.process_formdata should still be called if formdata is empty #280

Merged
merged 1 commit into from Jul 15, 2016
Merged

field.process_formdata should still be called if formdata is empty #280

merged 1 commit into from Jul 15, 2016

Conversation

davidism
Copy link
Member

Some fields will set a default value if their key is not in formdata. However, process_formdata is only called if formdata is truthy. This can cause unexpected field data if formdata is empty versus if it just didn't contain the field.

class F(Form):
    name = StringField()

f = F(MultiDict())
print(f.name.data)  # None

f = F(MultiDict({'language': 'Python'}))
print(f.name.data)  # ''

This patch explicitly checks if formdata is None and adds a test for this case.

@davidism davidism merged commit cbf70af into wtforms:master Jul 15, 2016
@davidism davidism deleted the process_empty_formdata branch July 15, 2016 16:33
ewdurbin added a commit to pypi/warehouse that referenced this pull request Jun 13, 2018
wtforms/wtforms#280 did away with the behavior that was exposing the `None` in this scenario
ewdurbin pushed a commit to pypi/warehouse that referenced this pull request Jun 13, 2018
* Update wtforms from 2.1 to 2.2.1

* fix for wtforms==2.2.1

wtforms/wtforms#280 did away with the behavior that was exposing the `None` in this scenario
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this pull request Nov 12, 2018
Version 2.2.1
-------------

Released on June 7th, 2018

-   :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.
    (`#291`_, `#401`_)

.. _#291: wtforms/wtforms#291
.. _#401: wtforms/wtforms#401


Version 2.2
-----------

Released on June 2nd, 2018

-   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``. (`#248`_)
-   The :class:`~validators.UUID` validator uses the :class:`uuid.UUID`
    class instead of a regex. (`#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. (`#286`_)
-   Fields call :meth:`~fields.Field.process_formdata` even if the raw
    data is empty. (`#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. (`#281`_)
-   :class:`~fields.SelectField` choices can contain HTML (MarkupSafe
    ``Markup`` object or equivalent API) and will be rendered properly.
    (`#302`_)
-   :class:`~fields.TimeField` and
    :class:`html5.TimeField <fields.html5.TimeField>` were added.
    (`#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. (`#294`_)
-   Widgets render the ``required`` attribute when using a validator
    that provides the ``'required'`` flag, such as
    :class:`~validators.DataRequired`. (`#361`_)
-   Fix a compatibility issue with SQLAlchemy 2.1 that caused
    :class:`~ext.sqlalchemy.fields.QuerySelectField` to fail with
    ``ValueError: too many values to unpack``. (`#391`_)

.. _#248: wtforms/wtforms#248
.. _#251: wtforms/wtforms#251
.. _#254: wtforms/wtforms#254
.. _#280: wtforms/wtforms#280
.. _#281: wtforms/wtforms#281
.. _#286: wtforms/wtforms#286
.. _#294: wtforms/wtforms#294
.. _#302: wtforms/wtforms#302
.. _#361: wtforms/wtforms#361
.. _#391: wtforms/wtforms#391
@ftm ftm mentioned this pull request May 5, 2019
@hyperknot
Copy link

Is there no case when the block of code would handle an exception? I mean it was moved out of a try-except block, and for example if formdata.getlist(self.name) produces an exception it is now not handled.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants