diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index b993109d1..1cddf087e 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,30 +1,14 @@ ---- repos: - - repo: https://github.com/asottile/pyupgrade - rev: v3.13.0 + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.6.9 hooks: - - id: pyupgrade - args: ["--py39-plus"] - - repo: https://github.com/asottile/reorder_python_imports - rev: v3.11.0 - hooks: - - id: reorder-python-imports - args: ["--application-directories", "src"] - - repo: https://github.com/psf/black - rev: 23.9.1 - hooks: - - id: black - - repo: https://github.com/pycqa/flake8 - rev: 6.1.0 - hooks: - - id: flake8 - additional_dependencies: - - flake8-bugbear - - flake8-implicit-str-concat - - flake8-pyproject + - id: ruff + - id: ruff-format - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.4.0 + rev: v5.0.0 hooks: - - id: check-byte-order-marker + - id: check-merge-conflict + - id: debug-statements + - id: fix-byte-order-marker - id: trailing-whitespace - id: end-of-file-fixer diff --git a/pyproject.toml b/pyproject.toml index d73a19d87..3e9198dc6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -78,30 +78,22 @@ exclude_lines = [ "pass", ] -[tool.flake8] -# B = bugbear -# E = pycodestyle errors -# F = flake8 pyflakes -# W = pycodestyle warnings -# B9 = bugbear opinions -# ISC = implicit-str-concat -select = ["B", "E", "F", "W", "B9", "ISC"] -ignore = [ - # slice notation whitespace, invalid - "E203", - # line length, handled by bugbear B950 - "E501", - # bare except, handled by bugbear B001 - "E722", - # bin op line break, invalid - "W503", - # requires 'strict' argument for 'zip' - # that needs python >= 3.10 - "B905", -] -# up to 88 allowed by bugbear B950 -max-line-length = 80 -per-file-ignores = [ - # __init__ modules export names - "**/__init__.py: F401, F403", +[tool.ruff] +src = ["src"] +fix = true +show-fixes = true +output-format = "full" + +[tool.ruff.lint] +select = [ + "B", # flake8-bugbear + "E", # pycodestyle error + "F", # pyflakes + "I", # isort + "UP", # pyupgrade + "W", # pycodestyle warning ] + +[tool.ruff.lint.isort] +force-single-line = true +order-by-type = false diff --git a/src/wtforms/__init__.py b/src/wtforms/__init__.py index 604148502..b2a6a8beb 100644 --- a/src/wtforms/__init__.py +++ b/src/wtforms/__init__.py @@ -1,7 +1,77 @@ from wtforms import validators from wtforms import widgets -from wtforms.fields import * +from wtforms.fields.choices import RadioField +from wtforms.fields.choices import SelectField +from wtforms.fields.choices import SelectMultipleField +from wtforms.fields.core import Field +from wtforms.fields.core import Flags +from wtforms.fields.core import Label +from wtforms.fields.datetime import DateField +from wtforms.fields.datetime import DateTimeField +from wtforms.fields.datetime import DateTimeLocalField +from wtforms.fields.datetime import MonthField +from wtforms.fields.datetime import TimeField +from wtforms.fields.datetime import WeekField +from wtforms.fields.form import FormField +from wtforms.fields.list import FieldList +from wtforms.fields.numeric import DecimalField +from wtforms.fields.numeric import DecimalRangeField +from wtforms.fields.numeric import FloatField +from wtforms.fields.numeric import IntegerField +from wtforms.fields.numeric import IntegerRangeField +from wtforms.fields.simple import BooleanField +from wtforms.fields.simple import ColorField +from wtforms.fields.simple import EmailField +from wtforms.fields.simple import FileField +from wtforms.fields.simple import HiddenField +from wtforms.fields.simple import MultipleFileField +from wtforms.fields.simple import PasswordField +from wtforms.fields.simple import SearchField +from wtforms.fields.simple import StringField +from wtforms.fields.simple import SubmitField +from wtforms.fields.simple import TelField +from wtforms.fields.simple import TextAreaField +from wtforms.fields.simple import URLField from wtforms.form import Form from wtforms.validators import ValidationError __version__ = "3.1.2" + +__all__ = [ + "validators", + "widgets", + "Form", + "ValidationError", + "SelectField", + "SelectMultipleField", + "RadioField", + "Field", + "Flags", + "Label", + "DateTimeField", + "DateField", + "TimeField", + "MonthField", + "DateTimeLocalField", + "WeekField", + "FormField", + "FieldList", + "IntegerField", + "DecimalField", + "FloatField", + "IntegerRangeField", + "DecimalRangeField", + "BooleanField", + "TextAreaField", + "PasswordField", + "FileField", + "MultipleFileField", + "HiddenField", + "SearchField", + "SubmitField", + "StringField", + "TelField", + "URLField", + "EmailField", + "ColorField", +] diff --git a/src/wtforms/csrf/session.py b/src/wtforms/csrf/session.py index 62ba7638e..d7ddd5b95 100644 --- a/src/wtforms/csrf/session.py +++ b/src/wtforms/csrf/session.py @@ -12,6 +12,7 @@ validates with the hmac of the random value + expiration time, and the expiration time is not passed, the CSRF validation will pass. """ + import hmac import os from datetime import datetime diff --git a/src/wtforms/fields/__init__.py b/src/wtforms/fields/__init__.py index f72189c34..4d588a881 100644 --- a/src/wtforms/fields/__init__.py +++ b/src/wtforms/fields/__init__.py @@ -1,11 +1,69 @@ -from wtforms.fields.choices import * -from wtforms.fields.choices import SelectFieldBase +from wtforms.fields.choices import RadioField +from wtforms.fields.choices import SelectField +from wtforms.fields.choices import SelectMultipleField from wtforms.fields.core import Field from wtforms.fields.core import Flags from wtforms.fields.core import Label -from wtforms.fields.datetime import * -from wtforms.fields.form import * -from wtforms.fields.list import * -from wtforms.fields.numeric import * -from wtforms.fields.simple import * +from wtforms.fields.datetime import DateField +from wtforms.fields.datetime import DateTimeField +from wtforms.fields.datetime import DateTimeLocalField +from wtforms.fields.datetime import MonthField +from wtforms.fields.datetime import TimeField +from wtforms.fields.datetime import WeekField +from wtforms.fields.form import FormField +from wtforms.fields.list import FieldList +from wtforms.fields.numeric import DecimalField +from wtforms.fields.numeric import DecimalRangeField +from wtforms.fields.numeric import FloatField +from wtforms.fields.numeric import IntegerField +from wtforms.fields.numeric import IntegerRangeField +from wtforms.fields.simple import BooleanField +from wtforms.fields.simple import ColorField +from wtforms.fields.simple import EmailField +from wtforms.fields.simple import FileField +from wtforms.fields.simple import HiddenField +from wtforms.fields.simple import MultipleFileField +from wtforms.fields.simple import PasswordField +from wtforms.fields.simple import SearchField +from wtforms.fields.simple import StringField +from wtforms.fields.simple import SubmitField +from wtforms.fields.simple import TelField +from wtforms.fields.simple import TextAreaField +from wtforms.fields.simple import URLField from wtforms.utils import unset_value as _unset_value + +__all__ = [ + "Field", + "Flags", + "Label", + "SelectField", + "SelectMultipleField", + "RadioField", + "DateTimeField", + "DateField", + "TimeField", + "MonthField", + "DateTimeLocalField", + "WeekField", + "FormField", + "IntegerField", + "DecimalField", + "FloatField", + "IntegerRangeField", + "DecimalRangeField", + "BooleanField", + "TextAreaField", + "PasswordField", + "FileField", + "MultipleFileField", + "HiddenField", + "SearchField", + "SubmitField", + "StringField", + "TelField", + "URLField", + "EmailField", + "ColorField", + "FieldList", + "_unset_value", +] diff --git a/src/wtforms/fields/core.py b/src/wtforms/fields/core.py index 2aba50083..777365b36 100644 --- a/src/wtforms/fields/core.py +++ b/src/wtforms/fields/core.py @@ -181,14 +181,14 @@ def check_validators(cls, validators): for validator in validators: if not callable(validator): raise TypeError( - "{} is not a valid validator because it is not " - "callable".format(validator) + f"{validator} is not a valid validator because it is not " + "callable" ) if inspect.isclass(validator): raise TypeError( - "{} is not a valid validator because it is a class, " - "it should be an instance".format(validator) + f"{validator} is not a valid validator because it is a class, " + "it should be an instance" ) def gettext(self, string): @@ -399,8 +399,10 @@ def bind(self, form, name, prefix="", translations=None, **kwargs): return self.field_class(*self.args, **kw) def __repr__(self): - return "".format( - self.field_class.__name__, self.args, self.kwargs + return ( + "" ) @@ -425,7 +427,8 @@ def __repr__(self): for name in dir(self) if not name.startswith("_") ) - return "" % ", ".join(flags) + flags = ", ".join(flags) + return f"" class Label: diff --git a/src/wtforms/fields/form.py b/src/wtforms/fields/form.py index 83f5abeae..10fb30e70 100644 --- a/src/wtforms/fields/form.py +++ b/src/wtforms/fields/form.py @@ -1,6 +1,7 @@ +from wtforms.utils import unset_value + from .. import widgets from .core import Field -from wtforms.utils import unset_value __all__ = ("FormField",) diff --git a/src/wtforms/fields/list.py b/src/wtforms/fields/list.py index db52bc046..dabd8b404 100644 --- a/src/wtforms/fields/list.py +++ b/src/wtforms/fields/list.py @@ -1,9 +1,10 @@ import itertools +from wtforms.utils import unset_value + from .. import widgets from .core import Field from .core import UnboundField -from wtforms.utils import unset_value __all__ = ("FieldList",) diff --git a/src/wtforms/form.py b/src/wtforms/form.py index c6805c743..b462936b6 100644 --- a/src/wtforms/form.py +++ b/src/wtforms/form.py @@ -113,7 +113,7 @@ def process(self, formdata=None, obj=None, data=None, extra_filters=None, **kwar for name, field in self._fields.items(): field_extra_filters = filters.get(name, []) - inline_filter = getattr(self, "filter_%s" % name, None) + inline_filter = getattr(self, f"filter_{name}", None) if inline_filter is not None: field_extra_filters.append(inline_filter) diff --git a/src/wtforms/utils.py b/src/wtforms/utils.py index 4911afa7d..ff6597c5f 100644 --- a/src/wtforms/utils.py +++ b/src/wtforms/utils.py @@ -1,6 +1,5 @@ import re - # https://docs.python.org/3/library/datetime.html#technical-detail (see NOTE #9) _DATETIME_STRIP_ZERO_PADDING_FORMATS_RE = re.compile( "%-[" diff --git a/src/wtforms/widgets/__init__.py b/src/wtforms/widgets/__init__.py index c87f108dd..ad29ea56f 100644 --- a/src/wtforms/widgets/__init__.py +++ b/src/wtforms/widgets/__init__.py @@ -1,3 +1,57 @@ -from wtforms.widgets.core import * +from wtforms.widgets.core import CheckboxInput +from wtforms.widgets.core import ColorInput +from wtforms.widgets.core import DateInput +from wtforms.widgets.core import DateTimeInput +from wtforms.widgets.core import DateTimeLocalInput +from wtforms.widgets.core import EmailInput +from wtforms.widgets.core import FileInput +from wtforms.widgets.core import HiddenInput from wtforms.widgets.core import html_params from wtforms.widgets.core import Input +from wtforms.widgets.core import ListWidget +from wtforms.widgets.core import MonthInput +from wtforms.widgets.core import NumberInput +from wtforms.widgets.core import Option +from wtforms.widgets.core import PasswordInput +from wtforms.widgets.core import RadioInput +from wtforms.widgets.core import RangeInput +from wtforms.widgets.core import SearchInput +from wtforms.widgets.core import Select +from wtforms.widgets.core import SubmitInput +from wtforms.widgets.core import TableWidget +from wtforms.widgets.core import TelInput +from wtforms.widgets.core import TextArea +from wtforms.widgets.core import TextInput +from wtforms.widgets.core import TimeInput +from wtforms.widgets.core import URLInput +from wtforms.widgets.core import WeekInput + +__all__ = [ + "CheckboxInput", + "ColorInput", + "DateInput", + "DateTimeInput", + "DateTimeLocalInput", + "EmailInput", + "FileInput", + "HiddenInput", + "ListWidget", + "MonthInput", + "NumberInput", + "Option", + "PasswordInput", + "RadioInput", + "RangeInput", + "SearchInput", + "Select", + "SubmitInput", + "TableWidget", + "TextArea", + "TextInput", + "TelInput", + "TimeInput", + "URLInput", + "WeekInput", + "html_params", + "Input", +] diff --git a/src/wtforms/widgets/core.py b/src/wtforms/widgets/core.py index 62d86e94a..772cd8e86 100644 --- a/src/wtforms/widgets/core.py +++ b/src/wtforms/widgets/core.py @@ -111,7 +111,7 @@ def __call__(self, field, **kwargs): html.append(f"
  • {subfield.label} {subfield()}
  • ") else: html.append(f"
  • {subfield()} {subfield.label}
  • ") - html.append("" % self.html_tag) + html.append(f"") return Markup("".join(html)) @@ -134,15 +134,15 @@ def __call__(self, field, **kwargs): html = [] if self.with_table_tag: kwargs.setdefault("id", field.id) - html.append("" % html_params(**kwargs)) + table_params = html_params(**kwargs) + html.append(f"
    ") hidden = "" for subfield in field: if subfield.type in ("HiddenField", "CSRFTokenField"): hidden += str(subfield) else: html.append( - "" - % (str(subfield.label), hidden, str(subfield)) + f"" ) hidden = "" if self.with_table_tag: @@ -178,7 +178,8 @@ def __call__(self, field, **kwargs): for k in dir(flags): if k in self.validation_attrs and k not in kwargs: kwargs[k] = getattr(flags, k) - return Markup("" % self.html_params(name=field.name, **kwargs)) + input_params = self.html_params(name=field.name, **kwargs) + return Markup(f"") class TextInput(Input): @@ -321,9 +322,10 @@ def __call__(self, field, **kwargs): for k in dir(flags): if k in self.validation_attrs and k not in kwargs: kwargs[k] = getattr(flags, k) + textarea_params = html_params(name=field.name, **kwargs) + textarea_innerhtml = escape(field._value()) return Markup( - "" - % (html_params(name=field.name, **kwargs), escape(field._value())) + f"" ) @@ -356,10 +358,12 @@ def __call__(self, field, **kwargs): for k in dir(flags): if k in self.validation_attrs and k not in kwargs: kwargs[k] = getattr(flags, k) - html = [""] if field.has_groups(): for group, choices in field.iter_groups(): - html.append("" % html_params(label=group)) + optgroup_params = html_params(label=group) + html.append(f"") for choice in choices: if len(choice) == 4: val, label, selected, render_kw = choice diff --git a/tests/fields/test_boolean.py b/tests/fields/test_boolean.py index 85a933ec0..0c064dcad 100644 --- a/tests/fields/test_boolean.py +++ b/tests/fields/test_boolean.py @@ -1,5 +1,4 @@ from tests.common import DummyPostData - from wtforms.fields import BooleanField from wtforms.form import Form diff --git a/tests/fields/test_custom.py b/tests/fields/test_custom.py index f5bd7d429..17db4ad71 100644 --- a/tests/fields/test_custom.py +++ b/tests/fields/test_custom.py @@ -1,7 +1,7 @@ import pytest -from wtforms.fields import SelectFieldBase from wtforms.fields import StringField +from wtforms.fields.choices import SelectFieldBase from wtforms.form import Form diff --git a/tests/fields/test_date.py b/tests/fields/test_date.py index b1c7b93ba..31f914d59 100644 --- a/tests/fields/test_date.py +++ b/tests/fields/test_date.py @@ -1,7 +1,6 @@ from datetime import date from tests.common import DummyPostData - from wtforms.fields import DateField from wtforms.form import Form diff --git a/tests/fields/test_datetime.py b/tests/fields/test_datetime.py index aff253444..08a3f970b 100644 --- a/tests/fields/test_datetime.py +++ b/tests/fields/test_datetime.py @@ -1,7 +1,6 @@ from datetime import datetime from tests.common import DummyPostData - from wtforms.fields import DateTimeField from wtforms.form import Form diff --git a/tests/fields/test_datetimelocal.py b/tests/fields/test_datetimelocal.py index 9ca43c61f..4be529fcc 100644 --- a/tests/fields/test_datetimelocal.py +++ b/tests/fields/test_datetimelocal.py @@ -1,7 +1,6 @@ from datetime import datetime from tests.common import DummyPostData - from wtforms.fields import DateTimeLocalField from wtforms.form import Form diff --git a/tests/fields/test_decimal.py b/tests/fields/test_decimal.py index 393787745..f7d6e51ac 100644 --- a/tests/fields/test_decimal.py +++ b/tests/fields/test_decimal.py @@ -3,7 +3,6 @@ from decimal import ROUND_UP from tests.common import DummyPostData - from wtforms.fields import DecimalField from wtforms.form import Form diff --git a/tests/fields/test_field.py b/tests/fields/test_field.py index aea1b292c..5bf5b631b 100644 --- a/tests/fields/test_field.py +++ b/tests/fields/test_field.py @@ -1,7 +1,7 @@ import pytest from markupsafe import Markup -from tests.common import DummyPostData +from tests.common import DummyPostData from wtforms import meta from wtforms import validators from wtforms.fields import Field @@ -131,9 +131,9 @@ def test_check_validators(): with pytest.raises( TypeError, - match=r"{} is not a valid validator because " + match=rf"{v2} is not a valid validator because " "it is a class, it should be an " - "instance".format(v2), + "instance", ): Field(validators=[v2]) diff --git a/tests/fields/test_file.py b/tests/fields/test_file.py index d956484f9..34d900d39 100644 --- a/tests/fields/test_file.py +++ b/tests/fields/test_file.py @@ -1,5 +1,4 @@ from tests.common import DummyPostData - from wtforms.fields import FileField from wtforms.fields import MultipleFileField from wtforms.form import Form diff --git a/tests/fields/test_filters.py b/tests/fields/test_filters.py index 3f49a47c6..f88b2be8c 100644 --- a/tests/fields/test_filters.py +++ b/tests/fields/test_filters.py @@ -1,5 +1,4 @@ from tests.common import DummyPostData - from wtforms.fields import StringField from wtforms.form import Form diff --git a/tests/fields/test_flags.py b/tests/fields/test_flags.py index ebd02c38b..c89ea757c 100644 --- a/tests/fields/test_flags.py +++ b/tests/fields/test_flags.py @@ -36,6 +36,6 @@ def test_repr(flags): def test_underscore_property(flags): with pytest.raises(AttributeError): - flags._foo + flags._foo # noqa: B018 flags._foo = 42 assert flags._foo == 42 diff --git a/tests/fields/test_float.py b/tests/fields/test_float.py index b7d21fdc7..b6b7cc700 100644 --- a/tests/fields/test_float.py +++ b/tests/fields/test_float.py @@ -1,5 +1,4 @@ from tests.common import DummyPostData - from wtforms.fields import FloatField from wtforms.form import Form diff --git a/tests/fields/test_form.py b/tests/fields/test_form.py index 0559b150c..36d1076a3 100644 --- a/tests/fields/test_form.py +++ b/tests/fields/test_form.py @@ -1,6 +1,6 @@ import pytest -from tests.common import DummyPostData +from tests.common import DummyPostData from wtforms import validators from wtforms.fields import FormField from wtforms.fields import StringField diff --git a/tests/fields/test_html5.py b/tests/fields/test_html5.py index 93514b1ce..b39fb9e7e 100644 --- a/tests/fields/test_html5.py +++ b/tests/fields/test_html5.py @@ -3,7 +3,6 @@ from decimal import Decimal from tests.common import DummyPostData - from wtforms import validators from wtforms.fields import DateField from wtforms.fields import DateTimeField @@ -41,8 +40,8 @@ def _build_value(key, form_input, expected_html, data=unset_value): if data is unset_value: data = form_input if expected_html.startswith("type="): - expected_html = ''.format( - key, key, expected_html, form_input + expected_html = ( + f'' ) return { "key": key, diff --git a/tests/fields/test_integer.py b/tests/fields/test_integer.py index eb2b8f178..098dbcaad 100644 --- a/tests/fields/test_integer.py +++ b/tests/fields/test_integer.py @@ -1,5 +1,4 @@ from tests.common import DummyPostData - from wtforms.fields import IntegerField from wtforms.form import Form diff --git a/tests/fields/test_list.py b/tests/fields/test_list.py index e717d514b..9a4d19cbb 100644 --- a/tests/fields/test_list.py +++ b/tests/fields/test_list.py @@ -1,8 +1,8 @@ from collections import namedtuple import pytest -from tests.common import DummyPostData +from tests.common import DummyPostData from wtforms import validators from wtforms.fields import FieldList from wtforms.fields import FormField diff --git a/tests/fields/test_month.py b/tests/fields/test_month.py index c1d58054c..cb740cce6 100644 --- a/tests/fields/test_month.py +++ b/tests/fields/test_month.py @@ -1,7 +1,6 @@ from datetime import date from tests.common import DummyPostData - from wtforms.fields import MonthField from wtforms.form import Form diff --git a/tests/fields/test_radio.py b/tests/fields/test_radio.py index e8179721d..629ea4957 100644 --- a/tests/fields/test_radio.py +++ b/tests/fields/test_radio.py @@ -1,5 +1,4 @@ from tests.common import DummyPostData - from wtforms import validators from wtforms.fields import RadioField from wtforms.form import Form diff --git a/tests/fields/test_select.py b/tests/fields/test_select.py index aa5874af5..656bcb32a 100644 --- a/tests/fields/test_select.py +++ b/tests/fields/test_select.py @@ -1,6 +1,6 @@ import pytest -from tests.common import DummyPostData +from tests.common import DummyPostData from wtforms import validators from wtforms import widgets from wtforms.fields import SelectField diff --git a/tests/fields/test_selectmultiple.py b/tests/fields/test_selectmultiple.py index 81c0fe1fd..d7ba38fc1 100644 --- a/tests/fields/test_selectmultiple.py +++ b/tests/fields/test_selectmultiple.py @@ -1,6 +1,6 @@ import pytest -from tests.common import DummyPostData +from tests.common import DummyPostData from wtforms import validators from wtforms.fields import SelectField from wtforms.fields import SelectMultipleField diff --git a/tests/fields/test_string.py b/tests/fields/test_string.py index 34f0717c1..314011588 100644 --- a/tests/fields/test_string.py +++ b/tests/fields/test_string.py @@ -1,5 +1,4 @@ from tests.common import DummyPostData - from wtforms.fields import StringField from wtforms.form import Form diff --git a/tests/fields/test_time.py b/tests/fields/test_time.py index 08a2785ea..7c6ef702f 100644 --- a/tests/fields/test_time.py +++ b/tests/fields/test_time.py @@ -1,7 +1,6 @@ from datetime import datetime from tests.common import DummyPostData - from wtforms.fields import TimeField from wtforms.form import Form diff --git a/tests/fields/test_week.py b/tests/fields/test_week.py index 527263b90..24c8b65c5 100644 --- a/tests/fields/test_week.py +++ b/tests/fields/test_week.py @@ -1,7 +1,6 @@ from datetime import date from tests.common import DummyPostData - from wtforms.fields import WeekField from wtforms.form import Form diff --git a/tests/test_csrf.py b/tests/test_csrf.py index 35226f0fe..b1267e9c0 100644 --- a/tests/test_csrf.py +++ b/tests/test_csrf.py @@ -5,8 +5,8 @@ from functools import partial import pytest -from tests.common import DummyPostData +from tests.common import DummyPostData from wtforms.csrf.core import CSRF from wtforms.csrf.session import SessionCSRF from wtforms.fields import StringField diff --git a/tests/test_form.py b/tests/test_form.py index 08d5a3a39..e02e3e626 100644 --- a/tests/test_form.py +++ b/tests/test_form.py @@ -1,6 +1,6 @@ import pytest -from tests.common import DummyPostData +from tests.common import DummyPostData from wtforms.fields import IntegerField from wtforms.fields import StringField from wtforms.form import BaseForm @@ -46,7 +46,7 @@ def test_baseform_field_removal(): form = get_form() del form["test"] with pytest.raises(AttributeError): - form.test + form.test # noqa: B018 assert "test" not in form @@ -61,7 +61,7 @@ def test_baseform_field_adding(): assert isinstance(form["test"], IntegerField) assert len(list(form)) == 2 with pytest.raises(AttributeError): - form["test"].data + form["test"].data # noqa: B018 form.process(DummyPostData(test=["1"])) assert form["test"].data == 1 assert form["foo"].data is None @@ -106,7 +106,7 @@ class F(Form): assert F._unbound_fields == [("a", F.a), ("b", F.b)] del F.a with pytest.raises(AttributeError): - F.a + F.a # noqa: B018 F() assert F._unbound_fields == [("b", F.b)] F._m = StringField() @@ -293,7 +293,7 @@ class F(Form): def validate(self): super().validate() - self.errors + self.errors # noqa: B018 self.foo.errors.append("bar") return True diff --git a/tests/test_locale_babel.py b/tests/test_locale_babel.py index 1b1e57fd3..a8e752303 100644 --- a/tests/test_locale_babel.py +++ b/tests/test_locale_babel.py @@ -2,8 +2,8 @@ from decimal import ROUND_UP import pytest -from tests.common import DummyPostData +from tests.common import DummyPostData from wtforms import Form from wtforms.fields import DecimalField from wtforms.utils import unset_value diff --git a/tests/test_widgets.py b/tests/test_widgets.py index 0d3c0539d..1e2030eaa 100644 --- a/tests/test_widgets.py +++ b/tests/test_widgets.py @@ -80,7 +80,7 @@ def test_tablewidget(dummy_field_class): def test_input_type(): with pytest.raises(AttributeError): - Input().input_type + Input().input_type # noqa: B018 test_input = Input(input_type="test") assert test_input.input_type == "test" diff --git a/tests/validators/test_disabled.py b/tests/validators/test_disabled.py index 4ae8e4bf9..aab7389f8 100644 --- a/tests/validators/test_disabled.py +++ b/tests/validators/test_disabled.py @@ -1,5 +1,4 @@ from tests.common import DummyPostData - from wtforms import Form from wtforms import StringField from wtforms.validators import Disabled diff --git a/tests/validators/test_readonly.py b/tests/validators/test_readonly.py index b08327b12..de9183664 100644 --- a/tests/validators/test_readonly.py +++ b/tests/validators/test_readonly.py @@ -1,5 +1,4 @@ from tests.common import DummyPostData - from wtforms import Form from wtforms import StringField from wtforms.validators import readonly
    %s%s%s
    {subfield.label}{hidden}{subfield}