Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions stubs/WTForms/wtforms/csrf/core.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ from typing import Any
from typing_extensions import Self

from wtforms.fields import HiddenField
from wtforms.fields.core import UnboundField, _Filter, _FormT, _Validator, _Widget
from wtforms.fields.core import UnboundField, _Filter, _FormT, _Text, _Validator, _Widget
from wtforms.form import BaseForm
from wtforms.meta import DefaultMeta, _SupportsGettextAndNgettext

Expand All @@ -15,10 +15,10 @@ class CSRFTokenField(HiddenField):
csrf_impl: CSRF
def __init__(
self,
label: str | None = None,
label: _Text | None = None,
validators: tuple[_Validator[_FormT, Self], ...] | list[Any] | None = None,
filters: Sequence[_Filter] = (),
description: str = "",
description: _Text = "",
id: str | None = None,
default: str | Callable[[], str] | None = None,
widget: _Widget[Self] | None = None,
Expand Down
50 changes: 25 additions & 25 deletions stubs/WTForms/wtforms/fields/choices.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ from typing import Any, Literal, NamedTuple, TypeAlias, TypeVar, overload
from typing_extensions import Self, deprecated

from wtforms.datalist import DataList
from wtforms.fields.core import Field, _Filter, _FormT, _Validator, _Widget
from wtforms.fields.core import Field, _Filter, _FormT, _Text, _Validator, _Widget
from wtforms.form import BaseForm
from wtforms.meta import DefaultMeta, _SupportsGettextAndNgettext

Expand Down Expand Up @@ -60,15 +60,15 @@ class SelectFieldBase(Field):
option_widget: _Widget[_Option]
def __init__(
self,
label: str | None = None,
label: _Text | None = None,
validators: tuple[_Validator[_FormT, Self], ...] | list[Any] | None = None,
option_widget: _Widget[_Option] | None = None,
*,
filters: Sequence[_Filter] = (),
description: str = "",
description: _Text = "",
id: str | None = None,
default: object | None = None,
invalid_value_message: str | None = None,
invalid_value_message: _Text | None = None,
widget: _Widget[Self] | None = None,
render_kw: dict[str, Any] | None = None,
name: str | None = None,
Expand All @@ -91,23 +91,23 @@ class SelectFieldBase(Field):
class SelectField(SelectFieldBase):
coerce: Callable[[Any], Any]
validate_choice: bool
invalid_choice_message: str
invalid_choice_message: _Text

@overload
@deprecated("Starting with WTForms 3.4 only SelectChoice will be supported as choices inputs")
def __init__(
self,
label: str | None,
label: _Text | None,
validators: tuple[_Validator[_FormT, Self], ...] | list[Any] | None,
coerce: Callable[[Any], Any],
choices: _LegacyChoices | _LegacyChoicesCallback,
validate_choice: bool = True,
invalid_value_message: str | None = None,
invalid_choice_message: str | None = None,
invalid_value_message: _Text | None = None,
invalid_choice_message: _Text | None = None,
*,
option_widget: _Widget[_Option] | None = None,
filters: Sequence[_Filter] = (),
description: str = "",
description: _Text = "",
id: str | None = None,
default: object | None = None,
widget: _Widget[Self] | None = None,
Expand All @@ -123,17 +123,17 @@ class SelectField(SelectFieldBase):
@deprecated("Starting with WTForms 3.4 only SelectChoice will be supported as choices inputs")
def __init__(
self,
label: str | None = None,
label: _Text | None = None,
validators: tuple[_Validator[_FormT, Self], ...] | list[Any] | None = None,
coerce: Callable[[Any], Any] = ...,
*,
choices: _LegacyChoices | _LegacyChoicesCallback,
validate_choice: bool = True,
invalid_value_message: str | None = None,
invalid_choice_message: str | None = None,
invalid_value_message: _Text | None = None,
invalid_choice_message: _Text | None = None,
option_widget: _Widget[_Option] | None = None,
filters: Sequence[_Filter] = (),
description: str = "",
description: _Text = "",
id: str | None = None,
default: object | None = None,
widget: _Widget[Self] | None = None,
Expand All @@ -148,17 +148,17 @@ class SelectField(SelectFieldBase):
@overload
def __init__(
self,
label: str | None = None,
label: _Text | None = None,
validators: tuple[_Validator[_FormT, Self], ...] | list[Any] | None = None,
coerce: Callable[[Any], Any] = ...,
choices: Iterable[SelectChoice] | _SelectChoicesCallback[Self] | None = None,
validate_choice: bool = True,
invalid_value_message: str | None = None,
invalid_choice_message: str | None = None,
invalid_value_message: _Text | None = None,
invalid_choice_message: _Text | None = None,
*,
option_widget: _Widget[_Option] | None = None,
filters: Sequence[_Filter] = (),
description: str = "",
description: _Text = "",
id: str | None = None,
default: object | None = None,
widget: _Widget[Self] | None = None,
Expand Down Expand Up @@ -187,17 +187,17 @@ class RadioField(SelectField):
@deprecated("Starting with WTForms 3.4 only SelectChoice will be supported as choices inputs")
def __init__(
self,
label: str | None = None,
label: _Text | None = None,
validators: tuple[_Validator[_FormT, Self], ...] | list[Any] | None = None,
*,
option_widget: _Widget[_Option] | None = None,
coerce: Callable[[Any], Any] = ...,
choices: _LegacyChoices | _LegacyChoicesCallback | None = None,
validate_choice: bool = True,
invalid_value_message: str | None = None,
invalid_choice_message: str | None = None,
invalid_value_message: _Text | None = None,
invalid_choice_message: _Text | None = None,
filters: Sequence[_Filter] = (),
description: str = "",
description: _Text = "",
id: str | None = None,
default: object | None = None,
widget: _Widget[Self] | None = None,
Expand All @@ -212,17 +212,17 @@ class RadioField(SelectField):
@overload
def __init__(
self,
label: str | None = None,
label: _Text | None = None,
validators: tuple[_Validator[_FormT, Self], ...] | list[Any] | None = None,
*,
option_widget: _Widget[_Option] | None = None,
coerce: Callable[[Any], Any] = ...,
choices: Iterable[SelectChoice] | _SelectChoicesCallback[Self] | None = None,
validate_choice: bool = True,
invalid_value_message: str | None = None,
invalid_choice_message: str | None = None,
invalid_value_message: _Text | None = None,
invalid_choice_message: _Text | None = None,
filters: Sequence[_Filter] = (),
description: str = "",
description: _Text = "",
id: str | None = None,
default: object | None = None,
widget: _Widget[Self] | None = None,
Expand Down
26 changes: 18 additions & 8 deletions stubs/WTForms/wtforms/fields/core.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,16 @@ class _Validator(Protocol[_FormT_contra, _FieldT_contra]):
class _Widget(Protocol[_FieldT_contra]):
def __call__(self, field: _FieldT_contra, **kwargs: Any) -> Markup: ...

# A deferred translation such as flask_babel's LazyString: labels and
# descriptions render it through markupsafe.escape(), and some validators
# %-format their message before raising.
@type_check_only
class _LazyString(Protocol):
def __html__(self) -> str: ...
def __mod__(self, value: Any, /) -> str: ...

_Text: TypeAlias = str | _LazyString

class Field:
errors: Sequence[str]
process_errors: Sequence[str]
Expand All @@ -38,7 +48,7 @@ class Field:
do_not_call_in_templates: bool
meta: DefaultMeta
default: Any | None
description: str
description: _Text
render_kw: dict[str, Any]
filters: Sequence[_Filter]
flags: Flags
Expand All @@ -47,25 +57,25 @@ class Field:
id: str
type: str
label: Label
invalid_value_message: str | None
invalid_value_message: _Text | None
# technically this can return UnboundField, but that is not allowed
# by type checkers, so we use a descriptor hack to get around this
# limitation instead
def __new__(cls, *args: Any, **kwargs: Any) -> Self: ...
def __init__(
self,
label: str | None = None,
label: _Text | None = None,
# for tuple we can be a bit more type safe and only accept validators
# that would work on this or a less specific field, but in general it
# would be too annoying to restrict to Sequence[_Validator], since mypy
# will infer a list of mixed validators as list[object], since that is
# the common base class between all validators
validators: tuple[_Validator[_FormT, Self], ...] | list[Any] | None = None,
filters: Sequence[_Filter] = (),
description: str = "",
description: _Text = "",
id: str | None = None,
default: object | None = None,
invalid_value_message: str | None = None,
invalid_value_message: _Text | None = None,
widget: _Widget[Self] | None = None,
render_kw: dict[str, Any] | None = None,
name: str | None = None,
Expand Down Expand Up @@ -141,7 +151,7 @@ class Flags:

class Label:
field_id: str
text: str
def __init__(self, field_id: str, text: str) -> None: ...
text: _Text
def __init__(self, field_id: str, text: _Text) -> None: ...
def __html__(self) -> str: ...
def __call__(self, text: str | None = None, **kwargs: Any) -> Markup: ...
def __call__(self, text: _Text | None = None, **kwargs: Any) -> Markup: ...
38 changes: 19 additions & 19 deletions stubs/WTForms/wtforms/fields/datetime.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ from typing import Any
from typing_extensions import Self, deprecated

from wtforms.datalist import DataList
from wtforms.fields.core import Field, _Filter, _FormT, _Validator, _Widget
from wtforms.fields.core import Field, _Filter, _FormT, _Text, _Validator, _Widget
from wtforms.form import BaseForm
from wtforms.meta import DefaultMeta, _SupportsGettextAndNgettext

Expand All @@ -18,13 +18,13 @@ class DateTimeField(Field):
default: datetime | Callable[[], datetime] | None
def __init__(
self,
label: str | None = None,
label: _Text | None = None,
validators: tuple[_Validator[_FormT, Self], ...] | list[Any] | None = None,
format: str | list[str] = "%Y-%m-%d %H:%M:%S",
invalid_value_message: str | None = None,
invalid_value_message: _Text | None = None,
*,
filters: Sequence[_Filter] = (),
description: str = "",
description: _Text = "",
id: str | None = None,
default: datetime | Callable[[], datetime] | None = None,
widget: _Widget[Self] | None = None,
Expand All @@ -42,13 +42,13 @@ class DateField(DateTimeField):
default: date | Callable[[], date] | None # type: ignore[assignment]
def __init__(
self,
label: str | None = None,
label: _Text | None = None,
validators: tuple[_Validator[_FormT, Self], ...] | list[Any] | None = None,
format: str | list[str] = "%Y-%m-%d",
invalid_value_message: str | None = None,
invalid_value_message: _Text | None = None,
*,
filters: Sequence[_Filter] = (),
description: str = "",
description: _Text = "",
id: str | None = None,
default: date | Callable[[], date] | None = None,
widget: _Widget[Self] | None = None,
Expand All @@ -66,13 +66,13 @@ class TimeField(DateTimeField):
default: time | Callable[[], time] | None # type: ignore[assignment]
def __init__(
self,
label: str | None = None,
label: _Text | None = None,
validators: tuple[_Validator[_FormT, Self], ...] | list[Any] | None = None,
format: str | list[str] = "%H:%M",
invalid_value_message: str | None = None,
invalid_value_message: _Text | None = None,
*,
filters: Sequence[_Filter] = (),
description: str = "",
description: _Text = "",
id: str | None = None,
default: time | Callable[[], time] | None = None,
widget: _Widget[Self] | None = None,
Expand All @@ -88,15 +88,15 @@ class TimeField(DateTimeField):
class MonthField(DateField):
def __init__(
self,
label: str | None = None,
label: _Text | None = None,
validators: tuple[_Validator[_FormT, Self], ...] | list[Any] | None = None,
format: str | list[str] = "%Y-%m",
*,
filters: Sequence[_Filter] = (),
description: str = "",
description: _Text = "",
id: str | None = None,
default: time | Callable[[], time] | None = None,
invalid_value_message: str | None = None,
invalid_value_message: _Text | None = None,
widget: _Widget[Self] | None = None,
render_kw: dict[str, Any] | None = None,
name: str | None = None,
Expand All @@ -110,13 +110,13 @@ class MonthField(DateField):
class WeekField(DateField):
def __init__(
self,
label: str | None = None,
label: _Text | None = None,
validators: tuple[_Validator[_FormT, Self], ...] | list[Any] | None = None,
format: str | list[str] = "%Y-W%W", # only difference is the default value
invalid_value_message: str | None = None,
invalid_value_message: _Text | None = None,
*,
filters: Sequence[_Filter] = (),
description: str = "",
description: _Text = "",
id: str | None = None,
default: time | Callable[[], time] | None = None,
widget: _Widget[Self] | None = None,
Expand All @@ -132,14 +132,14 @@ class WeekField(DateField):
class DateTimeLocalField(DateTimeField):
def __init__(
self,
label: str | None = None,
label: _Text | None = None,
validators: tuple[_Validator[_FormT, Self], ...] | list[Any] | None = None,
format: str | list[str] = ...,
invalid_value_message: str | None = None,
invalid_value_message: _Text | None = None,
*,
tz: tzinfo | Callable[[], tzinfo | None] | None = None,
filters: Sequence[_Filter] = (),
description: str = "",
description: _Text = "",
id: str | None = None,
default: time | Callable[[], time] | None = None,
widget: _Widget[Self] | None = None,
Expand Down
8 changes: 4 additions & 4 deletions stubs/WTForms/wtforms/fields/form.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ from collections.abc import Iterator
from typing import Any, Generic, TypeVar

from wtforms.datalist import DataList
from wtforms.fields.core import Field, _Widget
from wtforms.fields.core import Field, _Text, _Widget
from wtforms.form import BaseForm, _FormErrors
from wtforms.meta import DefaultMeta, _SupportsGettextAndNgettext

Expand All @@ -17,14 +17,14 @@ class FormField(Field, Generic[_BoundFormT]):
def __init__(
self: FormField[_BoundFormT], # pyright: ignore[reportInvalidTypeVarUse] #11780
form_class: type[_BoundFormT],
label: str | None = None,
label: _Text | None = None,
validators: None = None,
separator: str = "-",
*,
description: str = "",
description: _Text = "",
id: str | None = None,
default: object | None = None,
invalid_value_message: str | None = None,
invalid_value_message: _Text | None = None,
widget: _Widget[FormField[_BoundFormT]] | None = None,
render_kw: dict[str, Any] | None = None,
name: str | None = None,
Expand Down
Loading
Loading