Skip to content

Commit e73f930

Browse files
authored
Merge pull request #856 from azmeuk/flask-precommit
use pre-commit configuration from Flask
2 parents f4903ad + 32372b2 commit e73f930

40 files changed

+265
-115
lines changed

.pre-commit-config.yaml

+8-24
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,14 @@
1-
---
21
repos:
3-
- repo: https://github.com/asottile/pyupgrade
4-
rev: v3.13.0
2+
- repo: https://github.com/astral-sh/ruff-pre-commit
3+
rev: v0.6.9
54
hooks:
6-
- id: pyupgrade
7-
args: ["--py39-plus"]
8-
- repo: https://github.com/asottile/reorder_python_imports
9-
rev: v3.11.0
10-
hooks:
11-
- id: reorder-python-imports
12-
args: ["--application-directories", "src"]
13-
- repo: https://github.com/psf/black
14-
rev: 23.9.1
15-
hooks:
16-
- id: black
17-
- repo: https://github.com/pycqa/flake8
18-
rev: 6.1.0
19-
hooks:
20-
- id: flake8
21-
additional_dependencies:
22-
- flake8-bugbear
23-
- flake8-implicit-str-concat
24-
- flake8-pyproject
5+
- id: ruff
6+
- id: ruff-format
257
- repo: https://github.com/pre-commit/pre-commit-hooks
26-
rev: v4.4.0
8+
rev: v5.0.0
279
hooks:
28-
- id: check-byte-order-marker
10+
- id: check-merge-conflict
11+
- id: debug-statements
12+
- id: fix-byte-order-marker
2913
- id: trailing-whitespace
3014
- id: end-of-file-fixer

pyproject.toml

+18-26
Original file line numberDiff line numberDiff line change
@@ -78,30 +78,22 @@ exclude_lines = [
7878
"pass",
7979
]
8080

81-
[tool.flake8]
82-
# B = bugbear
83-
# E = pycodestyle errors
84-
# F = flake8 pyflakes
85-
# W = pycodestyle warnings
86-
# B9 = bugbear opinions
87-
# ISC = implicit-str-concat
88-
select = ["B", "E", "F", "W", "B9", "ISC"]
89-
ignore = [
90-
# slice notation whitespace, invalid
91-
"E203",
92-
# line length, handled by bugbear B950
93-
"E501",
94-
# bare except, handled by bugbear B001
95-
"E722",
96-
# bin op line break, invalid
97-
"W503",
98-
# requires 'strict' argument for 'zip'
99-
# that needs python >= 3.10
100-
"B905",
101-
]
102-
# up to 88 allowed by bugbear B950
103-
max-line-length = 80
104-
per-file-ignores = [
105-
# __init__ modules export names
106-
"**/__init__.py: F401, F403",
81+
[tool.ruff]
82+
src = ["src"]
83+
fix = true
84+
show-fixes = true
85+
output-format = "full"
86+
87+
[tool.ruff.lint]
88+
select = [
89+
"B", # flake8-bugbear
90+
"E", # pycodestyle error
91+
"F", # pyflakes
92+
"I", # isort
93+
"UP", # pyupgrade
94+
"W", # pycodestyle warning
10795
]
96+
97+
[tool.ruff.lint.isort]
98+
force-single-line = true
99+
order-by-type = false

src/wtforms/__init__.py

+71-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,77 @@
11
from wtforms import validators
22
from wtforms import widgets
3-
from wtforms.fields import *
3+
from wtforms.fields.choices import RadioField
4+
from wtforms.fields.choices import SelectField
5+
from wtforms.fields.choices import SelectMultipleField
6+
from wtforms.fields.core import Field
7+
from wtforms.fields.core import Flags
8+
from wtforms.fields.core import Label
9+
from wtforms.fields.datetime import DateField
10+
from wtforms.fields.datetime import DateTimeField
11+
from wtforms.fields.datetime import DateTimeLocalField
12+
from wtforms.fields.datetime import MonthField
13+
from wtforms.fields.datetime import TimeField
14+
from wtforms.fields.datetime import WeekField
15+
from wtforms.fields.form import FormField
16+
from wtforms.fields.list import FieldList
17+
from wtforms.fields.numeric import DecimalField
18+
from wtforms.fields.numeric import DecimalRangeField
19+
from wtforms.fields.numeric import FloatField
20+
from wtforms.fields.numeric import IntegerField
21+
from wtforms.fields.numeric import IntegerRangeField
22+
from wtforms.fields.simple import BooleanField
23+
from wtforms.fields.simple import ColorField
24+
from wtforms.fields.simple import EmailField
25+
from wtforms.fields.simple import FileField
26+
from wtforms.fields.simple import HiddenField
27+
from wtforms.fields.simple import MultipleFileField
28+
from wtforms.fields.simple import PasswordField
29+
from wtforms.fields.simple import SearchField
30+
from wtforms.fields.simple import StringField
31+
from wtforms.fields.simple import SubmitField
32+
from wtforms.fields.simple import TelField
33+
from wtforms.fields.simple import TextAreaField
34+
from wtforms.fields.simple import URLField
435
from wtforms.form import Form
536
from wtforms.validators import ValidationError
637

738
__version__ = "3.1.2"
39+
40+
__all__ = [
41+
"validators",
42+
"widgets",
43+
"Form",
44+
"ValidationError",
45+
"SelectField",
46+
"SelectMultipleField",
47+
"RadioField",
48+
"Field",
49+
"Flags",
50+
"Label",
51+
"DateTimeField",
52+
"DateField",
53+
"TimeField",
54+
"MonthField",
55+
"DateTimeLocalField",
56+
"WeekField",
57+
"FormField",
58+
"FieldList",
59+
"IntegerField",
60+
"DecimalField",
61+
"FloatField",
62+
"IntegerRangeField",
63+
"DecimalRangeField",
64+
"BooleanField",
65+
"TextAreaField",
66+
"PasswordField",
67+
"FileField",
68+
"MultipleFileField",
69+
"HiddenField",
70+
"SearchField",
71+
"SubmitField",
72+
"StringField",
73+
"TelField",
74+
"URLField",
75+
"EmailField",
76+
"ColorField",
77+
]

src/wtforms/csrf/session.py

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
validates with the hmac of the random value + expiration time, and the
1313
expiration time is not passed, the CSRF validation will pass.
1414
"""
15+
1516
import hmac
1617
import os
1718
from datetime import datetime

src/wtforms/fields/__init__.py

+65-7
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,69 @@
1-
from wtforms.fields.choices import *
2-
from wtforms.fields.choices import SelectFieldBase
1+
from wtforms.fields.choices import RadioField
2+
from wtforms.fields.choices import SelectField
3+
from wtforms.fields.choices import SelectMultipleField
34
from wtforms.fields.core import Field
45
from wtforms.fields.core import Flags
56
from wtforms.fields.core import Label
6-
from wtforms.fields.datetime import *
7-
from wtforms.fields.form import *
8-
from wtforms.fields.list import *
9-
from wtforms.fields.numeric import *
10-
from wtforms.fields.simple import *
7+
from wtforms.fields.datetime import DateField
8+
from wtforms.fields.datetime import DateTimeField
9+
from wtforms.fields.datetime import DateTimeLocalField
10+
from wtforms.fields.datetime import MonthField
11+
from wtforms.fields.datetime import TimeField
12+
from wtforms.fields.datetime import WeekField
13+
from wtforms.fields.form import FormField
14+
from wtforms.fields.list import FieldList
15+
from wtforms.fields.numeric import DecimalField
16+
from wtforms.fields.numeric import DecimalRangeField
17+
from wtforms.fields.numeric import FloatField
18+
from wtforms.fields.numeric import IntegerField
19+
from wtforms.fields.numeric import IntegerRangeField
20+
from wtforms.fields.simple import BooleanField
21+
from wtforms.fields.simple import ColorField
22+
from wtforms.fields.simple import EmailField
23+
from wtforms.fields.simple import FileField
24+
from wtforms.fields.simple import HiddenField
25+
from wtforms.fields.simple import MultipleFileField
26+
from wtforms.fields.simple import PasswordField
27+
from wtforms.fields.simple import SearchField
28+
from wtforms.fields.simple import StringField
29+
from wtforms.fields.simple import SubmitField
30+
from wtforms.fields.simple import TelField
31+
from wtforms.fields.simple import TextAreaField
32+
from wtforms.fields.simple import URLField
1133
from wtforms.utils import unset_value as _unset_value
34+
35+
__all__ = [
36+
"Field",
37+
"Flags",
38+
"Label",
39+
"SelectField",
40+
"SelectMultipleField",
41+
"RadioField",
42+
"DateTimeField",
43+
"DateField",
44+
"TimeField",
45+
"MonthField",
46+
"DateTimeLocalField",
47+
"WeekField",
48+
"FormField",
49+
"IntegerField",
50+
"DecimalField",
51+
"FloatField",
52+
"IntegerRangeField",
53+
"DecimalRangeField",
54+
"BooleanField",
55+
"TextAreaField",
56+
"PasswordField",
57+
"FileField",
58+
"MultipleFileField",
59+
"HiddenField",
60+
"SearchField",
61+
"SubmitField",
62+
"StringField",
63+
"TelField",
64+
"URLField",
65+
"EmailField",
66+
"ColorField",
67+
"FieldList",
68+
"_unset_value",
69+
]

src/wtforms/fields/core.py

+10-7
Original file line numberDiff line numberDiff line change
@@ -181,14 +181,14 @@ def check_validators(cls, validators):
181181
for validator in validators:
182182
if not callable(validator):
183183
raise TypeError(
184-
"{} is not a valid validator because it is not "
185-
"callable".format(validator)
184+
f"{validator} is not a valid validator because it is not "
185+
"callable"
186186
)
187187

188188
if inspect.isclass(validator):
189189
raise TypeError(
190-
"{} is not a valid validator because it is a class, "
191-
"it should be an instance".format(validator)
190+
f"{validator} is not a valid validator because it is a class, "
191+
"it should be an instance"
192192
)
193193

194194
def gettext(self, string):
@@ -399,8 +399,10 @@ def bind(self, form, name, prefix="", translations=None, **kwargs):
399399
return self.field_class(*self.args, **kw)
400400

401401
def __repr__(self):
402-
return "<UnboundField({}, {!r}, {!r})>".format(
403-
self.field_class.__name__, self.args, self.kwargs
402+
return (
403+
"<UnboundField("
404+
f"{self.field_class.__name__}, {self.args!r}, {self.kwargs!r}"
405+
")>"
404406
)
405407

406408

@@ -425,7 +427,8 @@ def __repr__(self):
425427
for name in dir(self)
426428
if not name.startswith("_")
427429
)
428-
return "<wtforms.fields.Flags: {%s}>" % ", ".join(flags)
430+
flags = ", ".join(flags)
431+
return f"<wtforms.fields.Flags: {{{flags}}}>"
429432

430433

431434
class Label:

src/wtforms/fields/form.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1+
from wtforms.utils import unset_value
2+
13
from .. import widgets
24
from .core import Field
3-
from wtforms.utils import unset_value
45

56
__all__ = ("FormField",)
67

src/wtforms/fields/list.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import itertools
22

3+
from wtforms.utils import unset_value
4+
35
from .. import widgets
46
from .core import Field
57
from .core import UnboundField
6-
from wtforms.utils import unset_value
78

89
__all__ = ("FieldList",)
910

src/wtforms/form.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ def process(self, formdata=None, obj=None, data=None, extra_filters=None, **kwar
113113
for name, field in self._fields.items():
114114
field_extra_filters = filters.get(name, [])
115115

116-
inline_filter = getattr(self, "filter_%s" % name, None)
116+
inline_filter = getattr(self, f"filter_{name}", None)
117117
if inline_filter is not None:
118118
field_extra_filters.append(inline_filter)
119119

src/wtforms/utils.py

-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import re
22

3-
43
# https://docs.python.org/3/library/datetime.html#technical-detail (see NOTE #9)
54
_DATETIME_STRIP_ZERO_PADDING_FORMATS_RE = re.compile(
65
"%-["

src/wtforms/widgets/__init__.py

+55-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,57 @@
1-
from wtforms.widgets.core import *
1+
from wtforms.widgets.core import CheckboxInput
2+
from wtforms.widgets.core import ColorInput
3+
from wtforms.widgets.core import DateInput
4+
from wtforms.widgets.core import DateTimeInput
5+
from wtforms.widgets.core import DateTimeLocalInput
6+
from wtforms.widgets.core import EmailInput
7+
from wtforms.widgets.core import FileInput
8+
from wtforms.widgets.core import HiddenInput
29
from wtforms.widgets.core import html_params
310
from wtforms.widgets.core import Input
11+
from wtforms.widgets.core import ListWidget
12+
from wtforms.widgets.core import MonthInput
13+
from wtforms.widgets.core import NumberInput
14+
from wtforms.widgets.core import Option
15+
from wtforms.widgets.core import PasswordInput
16+
from wtforms.widgets.core import RadioInput
17+
from wtforms.widgets.core import RangeInput
18+
from wtforms.widgets.core import SearchInput
19+
from wtforms.widgets.core import Select
20+
from wtforms.widgets.core import SubmitInput
21+
from wtforms.widgets.core import TableWidget
22+
from wtforms.widgets.core import TelInput
23+
from wtforms.widgets.core import TextArea
24+
from wtforms.widgets.core import TextInput
25+
from wtforms.widgets.core import TimeInput
26+
from wtforms.widgets.core import URLInput
27+
from wtforms.widgets.core import WeekInput
28+
29+
__all__ = [
30+
"CheckboxInput",
31+
"ColorInput",
32+
"DateInput",
33+
"DateTimeInput",
34+
"DateTimeLocalInput",
35+
"EmailInput",
36+
"FileInput",
37+
"HiddenInput",
38+
"ListWidget",
39+
"MonthInput",
40+
"NumberInput",
41+
"Option",
42+
"PasswordInput",
43+
"RadioInput",
44+
"RangeInput",
45+
"SearchInput",
46+
"Select",
47+
"SubmitInput",
48+
"TableWidget",
49+
"TextArea",
50+
"TextInput",
51+
"TelInput",
52+
"TimeInput",
53+
"URLInput",
54+
"WeekInput",
55+
"html_params",
56+
"Input",
57+
]

0 commit comments

Comments
 (0)