From 40ce32d9fa58a60d26a4d0df547b8deb709c330d Mon Sep 17 00:00:00 2001 From: Glandos Date: Sun, 23 Jan 2022 19:43:32 +0100 Subject: [PATCH] Support WTForms 3 (#916) * Support WTForms 3 * default value to None for WTForm backward compatibility * switch back to empty string as default WTForm backward compatibility needs that * format --- ihatemoney/api/common.py | 2 +- ihatemoney/forms.py | 21 ++++++++++++++++++--- setup.cfg | 2 +- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/ihatemoney/api/common.py b/ihatemoney/api/common.py index 44727f5a..caf8148b 100644 --- a/ihatemoney/api/common.py +++ b/ihatemoney/api/common.py @@ -3,7 +3,7 @@ from functools import wraps from flask import current_app, request from flask_restful import Resource, abort from werkzeug.security import check_password_hash -from wtforms.fields.core import BooleanField +from wtforms.fields import BooleanField from ihatemoney.currency_convertor import CurrencyConverter from ihatemoney.emails import send_creation_email diff --git a/ihatemoney/forms.py b/ihatemoney/forms.py index fe966778..0e99f534 100644 --- a/ihatemoney/forms.py +++ b/ihatemoney/forms.py @@ -9,9 +9,23 @@ from flask_wtf.file import FileAllowed, FileField, FileRequired from flask_wtf.form import FlaskForm from markupsafe import Markup from werkzeug.security import check_password_hash, generate_password_hash -from wtforms.fields.core import Label, SelectField, SelectMultipleField -from wtforms.fields.html5 import DateField, DecimalField, URLField -from wtforms.fields.simple import BooleanField, PasswordField, StringField, SubmitField +from wtforms.fields import ( + BooleanField, + DateField, + DecimalField, + Label, + PasswordField, + SelectField, + SelectMultipleField, + StringField, + SubmitField, +) + +try: + # Compat for WTForms <= 2.3.3 + from wtforms.fields.html5 import URLField +except ModuleNotFoundError: + from wtforms.fields import URLField from wtforms.validators import ( URL, DataRequired, @@ -312,6 +326,7 @@ class BillForm(FlaskForm): original_currency = SelectField(_("Currency"), validators=[DataRequired()]) external_link = URLField( _("External link"), + default="", validators=[Optional(), URL()], description=_("A link to an external document, related to this bill"), ) diff --git a/setup.cfg b/setup.cfg index 5cedf791..ded7642a 100644 --- a/setup.cfg +++ b/setup.cfg @@ -35,7 +35,7 @@ install_requires = Flask-SQLAlchemy>=2.4,<3 Flask-Talisman>=0.8,<1 Flask-WTF>=0.14.3,<2 - WTForms>=2.3.1,<2.4 + WTForms>=2.3.1,<3.1 Flask>=2,<3 itsdangerous>=2,<3 Jinja2>=3,<4