This commit is contained in:
2025-05-22 20:25:38 +02:00
parent 09f6750c2b
commit ce03fbf12f
529 changed files with 3353 additions and 3312 deletions

View File

@@ -1,71 +1,11 @@
from wtforms.fields.choices import RadioField
from wtforms.fields.choices import SelectField
from wtforms.fields.choices import *
from wtforms.fields.choices import SelectFieldBase
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.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.utils import unset_value as _unset_value
__all__ = [
"Field",
"Flags",
"Label",
"SelectField",
"SelectMultipleField",
"SelectFieldBase",
"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",
]

View File

@@ -121,9 +121,8 @@ class SelectField(SelectFieldBase):
_choices = zip(choices, choices)
for value, label, *other_args in _choices:
selected = self.coerce(value) == self.data
render_kw = other_args[0] if len(other_args) else {}
yield (value, label, selected, render_kw)
yield (value, label, self.coerce(value) == self.data, render_kw)
def process_data(self, value):
try:
@@ -174,9 +173,9 @@ class SelectMultipleField(SelectField):
else:
_choices = zip(choices, choices)
for value, label, *other_args in _choices:
for value, label, *args in _choices:
selected = self.data is not None and self.coerce(value) in self.data
render_kw = other_args[0] if len(other_args) else {}
render_kw = args[0] if len(args) else {}
yield (value, label, selected, render_kw)
def process_data(self, value):
@@ -202,11 +201,9 @@ class SelectMultipleField(SelectField):
if self.choices is None:
raise TypeError(self.gettext("Choices cannot be None."))
acceptable = [self.coerce(choice[0]) for choice in self.iter_choices()]
if any(data not in acceptable for data in self.data):
unacceptable = [
str(data) for data in set(self.data) if data not in acceptable
]
acceptable = {c[0] for c in self.iter_choices()}
if any(d not in acceptable for d in self.data):
unacceptable = [str(d) for d in set(self.data) - acceptable]
raise ValidationError(
self.ngettext(
"'%(value)s' is not a valid choice for this field.",

View File

@@ -1,5 +1,6 @@
import inspect
import itertools
import warnings
from markupsafe import escape
from markupsafe import Markup
@@ -130,6 +131,17 @@ class Field:
for v in itertools.chain(self.validators, [self.widget]):
flags = getattr(v, "field_flags", {})
# check for legacy format, remove eventually
if isinstance(flags, tuple): # pragma: no cover
warnings.warn(
"Flags should be stored in dicts and not in tuples. "
"The next version of WTForms will abandon support "
"for flags in tuples.",
DeprecationWarning,
stacklevel=2,
)
flags = {flag_name: True for flag_name in flags}
for k, v in flags.items():
setattr(self.flags, k, v)
@@ -169,14 +181,14 @@ class Field:
for validator in validators:
if not callable(validator):
raise TypeError(
f"{validator} is not a valid validator because it is not "
"callable"
"{} is not a valid validator because it is not "
"callable".format(validator)
)
if inspect.isclass(validator):
raise TypeError(
f"{validator} is not a valid validator because it is a class, "
"it should be an instance"
"{} is not a valid validator because it is a class, "
"it should be an instance".format(validator)
)
def gettext(self, string):
@@ -387,10 +399,8 @@ class UnboundField:
return self.field_class(*self.args, **kw)
def __repr__(self):
return (
"<UnboundField("
f"{self.field_class.__name__}, {self.args!r}, {self.kwargs!r}"
")>"
return "<UnboundField({}, {!r}, {!r})>".format(
self.field_class.__name__, self.args, self.kwargs
)
@@ -415,8 +425,7 @@ class Flags:
for name in dir(self)
if not name.startswith("_")
)
flags = ", ".join(flags)
return f"<wtforms.fields.Flags: {{{flags}}}>"
return "<wtforms.fields.Flags: {%s}>" % ", ".join(flags)
class Label:

View File

@@ -34,8 +34,7 @@ class DateTimeField(Field):
def _value(self):
if self.raw_data:
return " ".join(self.raw_data)
format = self.format[0]
return self.data and self.data.strftime(format) or ""
return self.data and self.data.strftime(self.format[0]) or ""
def process_formdata(self, valuelist):
if not valuelist:

View File

@@ -1,7 +1,6 @@
from wtforms.utils import unset_value
from .. import widgets
from .core import Field
from wtforms.utils import unset_value
__all__ = ("FormField",)

View File

@@ -1,10 +1,9 @@
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",)