WTForms 3.1.2__tar.gz → 3.2.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {wtforms-3.1.2 → wtforms-3.2.1}/CHANGES.rst +36 -1
- {wtforms-3.1.2 → wtforms-3.2.1}/PKG-INFO +10 -10
- {wtforms-3.1.2 → wtforms-3.2.1}/README.rst +5 -5
- {wtforms-3.1.2 → wtforms-3.2.1}/docs/conf.py +3 -3
- {wtforms-3.1.2 → wtforms-3.2.1}/docs/contributing.rst +2 -2
- {wtforms-3.1.2 → wtforms-3.2.1}/docs/ext.rst +3 -3
- {wtforms-3.1.2 → wtforms-3.2.1}/docs/faq.rst +6 -6
- {wtforms-3.1.2 → wtforms-3.2.1}/docs/fields.rst +1 -1
- wtforms-3.2.1/docs/requirements.txt +5 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/docs/whats_new.rst +2 -2
- {wtforms-3.1.2 → wtforms-3.2.1}/pyproject.toml +21 -29
- wtforms-3.2.1/src/wtforms/__init__.py +79 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/csrf/session.py +1 -0
- wtforms-3.2.1/src/wtforms/fields/__init__.py +71 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/fields/core.py +10 -19
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/fields/datetime.py +2 -1
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/fields/form.py +2 -1
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/fields/list.py +2 -1
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/form.py +3 -2
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/ar/LC_MESSAGES/wtforms.mo +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/ar/LC_MESSAGES/wtforms.po +8 -8
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/bg/LC_MESSAGES/wtforms.mo +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/bg/LC_MESSAGES/wtforms.po +8 -8
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/ca/LC_MESSAGES/wtforms.mo +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/ca/LC_MESSAGES/wtforms.po +8 -8
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/cs_CZ/LC_MESSAGES/wtforms.mo +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/cs_CZ/LC_MESSAGES/wtforms.po +8 -8
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/cy/LC_MESSAGES/wtforms.mo +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/cy/LC_MESSAGES/wtforms.po +8 -8
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/de/LC_MESSAGES/wtforms.mo +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/de/LC_MESSAGES/wtforms.po +8 -8
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/de_CH/LC_MESSAGES/wtforms.mo +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/de_CH/LC_MESSAGES/wtforms.po +8 -8
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/el/LC_MESSAGES/wtforms.mo +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/el/LC_MESSAGES/wtforms.po +8 -8
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/en/LC_MESSAGES/wtforms.mo +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/es/LC_MESSAGES/wtforms.mo +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/es/LC_MESSAGES/wtforms.po +12 -12
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/et/LC_MESSAGES/wtforms.mo +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/et/LC_MESSAGES/wtforms.po +8 -8
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/fa/LC_MESSAGES/wtforms.mo +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/fa/LC_MESSAGES/wtforms.po +8 -8
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/fi/LC_MESSAGES/wtforms.mo +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/fi/LC_MESSAGES/wtforms.po +8 -8
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/fr/LC_MESSAGES/wtforms.mo +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/fr/LC_MESSAGES/wtforms.po +12 -12
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/he/LC_MESSAGES/wtforms.mo +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/he/LC_MESSAGES/wtforms.po +8 -8
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/hu/LC_MESSAGES/wtforms.mo +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/hu/LC_MESSAGES/wtforms.po +8 -8
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/it/LC_MESSAGES/wtforms.mo +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/it/LC_MESSAGES/wtforms.po +8 -8
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/ja/LC_MESSAGES/wtforms.mo +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/ja/LC_MESSAGES/wtforms.po +8 -8
- wtforms-3.2.1/src/wtforms/locale/kk/LC_MESSAGES/wtforms.mo +0 -0
- wtforms-3.2.1/src/wtforms/locale/kk/LC_MESSAGES/wtforms.po +187 -0
- wtforms-3.2.1/src/wtforms/locale/ko/LC_MESSAGES/wtforms.mo +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/ko/LC_MESSAGES/wtforms.po +24 -24
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/nb/LC_MESSAGES/wtforms.mo +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/nb/LC_MESSAGES/wtforms.po +8 -8
- wtforms-3.2.1/src/wtforms/locale/nl/LC_MESSAGES/wtforms.mo +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/nl/LC_MESSAGES/wtforms.po +20 -23
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/pl/LC_MESSAGES/wtforms.mo +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/pl/LC_MESSAGES/wtforms.po +8 -8
- wtforms-3.2.1/src/wtforms/locale/pt/LC_MESSAGES/wtforms.mo +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/pt/LC_MESSAGES/wtforms.po +26 -29
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/ro/LC_MESSAGES/wtforms.mo +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/ro/LC_MESSAGES/wtforms.po +14 -10
- wtforms-3.2.1/src/wtforms/locale/ru/LC_MESSAGES/wtforms.mo +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/ru/LC_MESSAGES/wtforms.po +18 -18
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/sk/LC_MESSAGES/wtforms.mo +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/sk/LC_MESSAGES/wtforms.po +13 -13
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/sv/LC_MESSAGES/wtforms.mo +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/sv/LC_MESSAGES/wtforms.po +12 -12
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/tr/LC_MESSAGES/wtforms.mo +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/tr/LC_MESSAGES/wtforms.po +12 -12
- wtforms-3.2.1/src/wtforms/locale/uk/LC_MESSAGES/wtforms.mo +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/uk/LC_MESSAGES/wtforms.po +38 -41
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/wtforms.pot +11 -11
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/zh/LC_MESSAGES/wtforms.mo +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/zh/LC_MESSAGES/wtforms.po +8 -8
- wtforms-3.2.1/src/wtforms/locale/zh_TW/LC_MESSAGES/wtforms.mo +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/zh_TW/LC_MESSAGES/wtforms.po +35 -38
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/utils.py +4 -2
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/validators.py +6 -4
- wtforms-3.2.1/src/wtforms/widgets/__init__.py +57 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/widgets/core.py +21 -35
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/fields/test_boolean.py +0 -1
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/fields/test_custom.py +1 -1
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/fields/test_date.py +0 -1
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/fields/test_datetime.py +9 -7
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/fields/test_datetimelocal.py +4 -2
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/fields/test_decimal.py +0 -1
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/fields/test_field.py +3 -3
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/fields/test_file.py +0 -1
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/fields/test_filters.py +0 -1
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/fields/test_flags.py +1 -1
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/fields/test_float.py +0 -1
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/fields/test_html5.py +2 -3
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/fields/test_integer.py +0 -1
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/fields/test_month.py +0 -1
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/fields/test_radio.py +0 -1
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/fields/test_selectmultiple.py +4 -2
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/fields/test_string.py +0 -1
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/fields/test_time.py +0 -1
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/fields/test_week.py +0 -1
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/test_form.py +6 -6
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/test_widgets.py +1 -1
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/validators/test_anyof.py +15 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/validators/test_disabled.py +0 -1
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/validators/test_noneof.py +15 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/validators/test_readonly.py +0 -1
- {wtforms-3.1.2 → wtforms-3.2.1}/tox.ini +2 -3
- wtforms-3.1.2/.hgignore +0 -1
- wtforms-3.1.2/docs/requirements.txt +0 -5
- wtforms-3.1.2/src/wtforms/__init__.py +0 -7
- wtforms-3.1.2/src/wtforms/fields/__init__.py +0 -11
- wtforms-3.1.2/src/wtforms/locale/ko/LC_MESSAGES/wtforms.mo +0 -0
- wtforms-3.1.2/src/wtforms/locale/nl/LC_MESSAGES/wtforms.mo +0 -0
- wtforms-3.1.2/src/wtforms/locale/pt/LC_MESSAGES/wtforms.mo +0 -0
- wtforms-3.1.2/src/wtforms/locale/ru/LC_MESSAGES/wtforms.mo +0 -0
- wtforms-3.1.2/src/wtforms/locale/uk/LC_MESSAGES/wtforms.mo +0 -0
- wtforms-3.1.2/src/wtforms/locale/zh_TW/LC_MESSAGES/wtforms.mo +0 -0
- wtforms-3.1.2/src/wtforms/widgets/__init__.py +0 -3
- {wtforms-3.1.2 → wtforms-3.2.1}/.gitignore +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/LICENSE.rst +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/docs/Makefile +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/docs/_static/logo_joined.svg +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/docs/_static/logo_split.svg +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/docs/_static/logo_square.svg +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/docs/changes.rst +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/docs/crash_course.rst +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/docs/csrf.rst +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/docs/forms.rst +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/docs/i18n.rst +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/docs/index.rst +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/docs/license.rst +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/docs/make.bat +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/docs/meta.rst +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/docs/specific_problems.rst +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/docs/validators.rst +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/docs/widgets.rst +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/hatch_build.py +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/csrf/__init__.py +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/csrf/core.py +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/fields/choices.py +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/fields/numeric.py +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/fields/simple.py +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/i18n.py +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/README.md +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/locale/en/LC_MESSAGES/wtforms.po +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/src/wtforms/meta.py +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/__init__.py +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/common.py +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/conftest.py +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/fields/__init__.py +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/fields/test_color.py +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/fields/test_defaults.py +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/fields/test_form.py +1 -1
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/fields/test_hidden.py +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/fields/test_label.py +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/fields/test_list.py +1 -1
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/fields/test_password.py +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/fields/test_select.py +1 -1
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/fields/test_submit.py +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/fields/test_textarea.py +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/test_csrf.py +1 -1
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/test_i18n.py +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/test_locale_babel.py +1 -1
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/test_webob.py +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/validators/__init__.py +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/validators/test_data_required.py +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/validators/test_email.py +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/validators/test_equal_to.py +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/validators/test_input_required.py +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/validators/test_ipaddress.py +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/validators/test_lazy_proxy.py +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/validators/test_length.py +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/validators/test_mac_address.py +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/validators/test_number_range.py +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/validators/test_optional.py +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/validators/test_regexp.py +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/validators/test_url.py +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/validators/test_uuid.py +0 -0
- {wtforms-3.1.2 → wtforms-3.2.1}/tests/validators/test_validators.py +0 -0
|
@@ -1,5 +1,41 @@
|
|
|
1
1
|
.. currentmodule:: wtforms
|
|
2
2
|
|
|
3
|
+
Version 3.2.1
|
|
4
|
+
-------------
|
|
5
|
+
|
|
6
|
+
Released 2024-10-21
|
|
7
|
+
|
|
8
|
+
- Fix :class:`~fields.SelectMultipleBase` import. :issue:`861` :pr:`862`
|
|
9
|
+
|
|
10
|
+
Version 3.2.0
|
|
11
|
+
-------------
|
|
12
|
+
|
|
13
|
+
Released 2024-10-20
|
|
14
|
+
|
|
15
|
+
- Translations update: korean, chinese (traditional), portugese, russian,
|
|
16
|
+
dutch, kazakh, swedish, turkish, slovak, ukranian, spanish, french.
|
|
17
|
+
- Move the repository to the pallets-eco organization. :pr:`854`
|
|
18
|
+
- Stop supporting Python 3.9 and start supporting Python 3.13 :pr:`855`
|
|
19
|
+
- Removed `required` flag support from :class:`~fields.HiddenWidget`,
|
|
20
|
+
:class:`~fields.RangeWidget` and :class:`~fields.SelectWidget` to
|
|
21
|
+
conform to W3C :pr:`810`
|
|
22
|
+
- :class:`~wtforms.validators.NoneOf` and :class:`~wtforms.validators.AnyOf`
|
|
23
|
+
can validate multiple valued fields like :class:`~fields.SelectMultipleField`
|
|
24
|
+
:pr:`538` :pr:`807`
|
|
25
|
+
- Use GHA and pre-commit workflows inspired from Flask. :pr:`856` :pr:`860`
|
|
26
|
+
- ⚠️Breaking change⚠️: Some deprecated code was removed (:pr:`859`):
|
|
27
|
+
|
|
28
|
+
- :class:`~wtforms.Flags` can no longer be tuples. :issue:`467`
|
|
29
|
+
- `iter_choices` needs a tuple of 4 items :issue:`816`
|
|
30
|
+
|
|
31
|
+
- ⚠️Breaking change⚠️: The key for form errors moved from :data:`None` to
|
|
32
|
+
empty string `""`. :issue:`829` :pr:`858`
|
|
33
|
+
|
|
34
|
+
.. note::
|
|
35
|
+
If you need to keep the old behavior you can set the ``_form_error_key``
|
|
36
|
+
parameter of your form to :data:`None`.
|
|
37
|
+
|
|
38
|
+
|
|
3
39
|
Version 3.1.2
|
|
4
40
|
-------------
|
|
5
41
|
|
|
@@ -22,7 +58,6 @@ Released 2023-11-01
|
|
|
22
58
|
- Restored support for 3-items tuple return value from `iter_choices`
|
|
23
59
|
:pr:`816`
|
|
24
60
|
|
|
25
|
-
|
|
26
61
|
Version 3.1.0
|
|
27
62
|
-------------
|
|
28
63
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.3
|
|
2
2
|
Name: WTForms
|
|
3
|
-
Version: 3.1
|
|
3
|
+
Version: 3.2.1
|
|
4
4
|
Summary: Form validation and rendering for Python web development.
|
|
5
5
|
Project-URL: Documentation, https://wtforms.readthedocs.io
|
|
6
6
|
Project-URL: Changes, https://wtforms.readthedocs.io/changes
|
|
7
|
-
Project-URL: Source Code, https://github.com/
|
|
8
|
-
Project-URL: Issue Tracker, https://github.com/
|
|
7
|
+
Project-URL: Source Code, https://github.com/pallets-eco/wtforms/
|
|
8
|
+
Project-URL: Issue Tracker, https://github.com/pallets-eco/wtforms/issues
|
|
9
9
|
Project-URL: Chat, https://discord.gg/pallets
|
|
10
10
|
Maintainer: WTForms
|
|
11
11
|
License: Copyright 2008 WTForms
|
|
@@ -44,7 +44,7 @@ Classifier: License :: OSI Approved :: BSD License
|
|
|
44
44
|
Classifier: Operating System :: OS Independent
|
|
45
45
|
Classifier: Programming Language :: Python
|
|
46
46
|
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
|
|
47
|
-
Requires-Python: >=3.
|
|
47
|
+
Requires-Python: >=3.9
|
|
48
48
|
Requires-Dist: markupsafe
|
|
49
49
|
Provides-Extra: email
|
|
50
50
|
Requires-Dist: email-validator; extra == 'email'
|
|
@@ -100,9 +100,9 @@ with frameworks even better.
|
|
|
100
100
|
|
|
101
101
|
.. _Flask-WTF: https://flask-wtf.readthedocs.io/
|
|
102
102
|
.. _WTForms-Alchemy: https://wtforms-alchemy.readthedocs.io/
|
|
103
|
-
.. _WTForms-SQLAlchemy: https://github.com/
|
|
104
|
-
.. _WTForms-AppEngine: https://github.com/
|
|
105
|
-
.. _WTForms-Django: https://github.com/
|
|
103
|
+
.. _WTForms-SQLAlchemy: https://github.com/pallets-eco/wtforms-sqlalchemy
|
|
104
|
+
.. _WTForms-AppEngine: https://github.com/pallets-eco/wtforms-appengine
|
|
105
|
+
.. _WTForms-Django: https://github.com/pallets-eco/wtforms-django
|
|
106
106
|
.. _WTForms-Bootstrap5: https://github.com/LaunchPlatform/wtforms-bootstrap5
|
|
107
107
|
.. _Starlette-WTF: https://github.com/muicss/starlette-wtf
|
|
108
108
|
.. _Bootstrap-Flask: https://github.com/helloflask/bootstrap-flask
|
|
@@ -113,7 +113,7 @@ Links
|
|
|
113
113
|
|
|
114
114
|
- Documentation: https://wtforms.readthedocs.io/
|
|
115
115
|
- Releases: https://pypi.org/project/WTForms/
|
|
116
|
-
- Code: https://github.com/
|
|
117
|
-
- Issue tracker: https://github.com/
|
|
116
|
+
- Code: https://github.com/pallets-eco/wtforms
|
|
117
|
+
- Issue tracker: https://github.com/pallets-eco/wtforms/issues
|
|
118
118
|
- Discord Chat: https://discord.gg/F65P7Z9
|
|
119
119
|
- Translation: https://hosted.weblate.org/projects/wtforms/wtforms/
|
|
@@ -48,9 +48,9 @@ with frameworks even better.
|
|
|
48
48
|
|
|
49
49
|
.. _Flask-WTF: https://flask-wtf.readthedocs.io/
|
|
50
50
|
.. _WTForms-Alchemy: https://wtforms-alchemy.readthedocs.io/
|
|
51
|
-
.. _WTForms-SQLAlchemy: https://github.com/
|
|
52
|
-
.. _WTForms-AppEngine: https://github.com/
|
|
53
|
-
.. _WTForms-Django: https://github.com/
|
|
51
|
+
.. _WTForms-SQLAlchemy: https://github.com/pallets-eco/wtforms-sqlalchemy
|
|
52
|
+
.. _WTForms-AppEngine: https://github.com/pallets-eco/wtforms-appengine
|
|
53
|
+
.. _WTForms-Django: https://github.com/pallets-eco/wtforms-django
|
|
54
54
|
.. _WTForms-Bootstrap5: https://github.com/LaunchPlatform/wtforms-bootstrap5
|
|
55
55
|
.. _Starlette-WTF: https://github.com/muicss/starlette-wtf
|
|
56
56
|
.. _Bootstrap-Flask: https://github.com/helloflask/bootstrap-flask
|
|
@@ -61,7 +61,7 @@ Links
|
|
|
61
61
|
|
|
62
62
|
- Documentation: https://wtforms.readthedocs.io/
|
|
63
63
|
- Releases: https://pypi.org/project/WTForms/
|
|
64
|
-
- Code: https://github.com/
|
|
65
|
-
- Issue tracker: https://github.com/
|
|
64
|
+
- Code: https://github.com/pallets-eco/wtforms
|
|
65
|
+
- Issue tracker: https://github.com/pallets-eco/wtforms/issues
|
|
66
66
|
- Discord Chat: https://discord.gg/F65P7Z9
|
|
67
67
|
- Translation: https://hosted.weblate.org/projects/wtforms/wtforms/
|
|
@@ -22,7 +22,7 @@ extensions = [
|
|
|
22
22
|
intersphinx_mapping = {
|
|
23
23
|
"python": ("https://docs.python.org/3/", None),
|
|
24
24
|
}
|
|
25
|
-
issues_github_path = "
|
|
25
|
+
issues_github_path = "pallets-eco/wtforms"
|
|
26
26
|
|
|
27
27
|
# HTML -----------------------------------------------------------------
|
|
28
28
|
|
|
@@ -30,12 +30,12 @@ html_theme = "werkzeug"
|
|
|
30
30
|
html_context = {
|
|
31
31
|
"project_links": [
|
|
32
32
|
ProjectLink("PyPI Releases", "https://pypi.org/project/WTForms/"),
|
|
33
|
-
ProjectLink("Source Code", "https://github.com/
|
|
33
|
+
ProjectLink("Source Code", "https://github.com/pallets-eco/wtforms/"),
|
|
34
34
|
ProjectLink(
|
|
35
35
|
"Discord Chat",
|
|
36
36
|
"https://discord.gg/F65P7Z9",
|
|
37
37
|
),
|
|
38
|
-
ProjectLink("Issue Tracker", "https://github.com/
|
|
38
|
+
ProjectLink("Issue Tracker", "https://github.com/pallets-eco/wtforms/issues/"),
|
|
39
39
|
]
|
|
40
40
|
}
|
|
41
41
|
html_sidebars = {
|
|
@@ -12,7 +12,7 @@ How to Contribute
|
|
|
12
12
|
WTForms is now on `GitHub`_, so all contributions should be either associated
|
|
13
13
|
with a pull request or with a ticket & patch.
|
|
14
14
|
|
|
15
|
-
.. _GitHub: https://github.com/
|
|
15
|
+
.. _GitHub: https://github.com/pallets-eco/wtforms
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
Contribution Guidelines
|
|
@@ -38,7 +38,7 @@ Code submitted should:
|
|
|
38
38
|
advantage of `Github Actions`_ for running tests on all supported Python
|
|
39
39
|
versions.
|
|
40
40
|
|
|
41
|
-
.. _Github Actions: https://github.com/
|
|
41
|
+
.. _Github Actions: https://github.com/pallets-eco/wtforms/actions
|
|
42
42
|
.. _PEP8: https://www.python.org/dev/peps/pep-0008/
|
|
43
43
|
|
|
44
44
|
|
|
@@ -5,8 +5,8 @@ Extensions
|
|
|
5
5
|
|
|
6
6
|
All WTForms extensions were removed in WTForms 3.0.
|
|
7
7
|
|
|
8
|
-
* ``wtforms.ext.appengine`` was extracted to `WTForms-Appengine <https://github.com/
|
|
8
|
+
* ``wtforms.ext.appengine`` was extracted to `WTForms-Appengine <https://github.com/pallets-eco/wtforms-appengine>`_
|
|
9
9
|
* ``wtforms.ext.csrf`` was integrated into WTForms core. See :doc:`CSRF Docs <csrf>`
|
|
10
|
-
* ``wtforms.ext.django`` was extracted to `WTForms-Django <https://github.com/
|
|
10
|
+
* ``wtforms.ext.django`` was extracted to `WTForms-Django <https://github.com/pallets-eco/wtforms-django>`_
|
|
11
11
|
* ``wtforms.ext.i18n`` was integrated into WTForms core. See :doc:`i18n`
|
|
12
|
-
* ``wtforms.ext.sqlalchemy`` was extracted to `WTForms-SQLAlchemy <https://github.com/
|
|
12
|
+
* ``wtforms.ext.sqlalchemy`` was extracted to `WTForms-SQLAlchemy <https://github.com/pallets-eco/wtforms-sqlalchemy>`_
|
|
@@ -37,10 +37,10 @@ but if it's not listed, it doesn't mean it won't work.
|
|
|
37
37
|
Special support is there for `SQLAlchemy`_, `Google App Engine`_, and `Django`_
|
|
38
38
|
collections via companion packages.
|
|
39
39
|
|
|
40
|
-
.. _SQLAlchemy: https://github.com/
|
|
41
|
-
.. _Google App Engine: https://github.com/
|
|
42
|
-
.. _WTForms-Django: https://github.com/
|
|
43
|
-
.. _Django: https://github.com/
|
|
40
|
+
.. _SQLAlchemy: https://github.com/pallets-eco/wtforms-sqlalchemy
|
|
41
|
+
.. _Google App Engine: https://github.com/pallets-eco/wtforms-appengine
|
|
42
|
+
.. _WTForms-Django: https://github.com/pallets-eco/wtforms-django
|
|
43
|
+
.. _Django: https://github.com/pallets-eco/wtforms-django
|
|
44
44
|
|
|
45
45
|
Does WTForms support unicode?
|
|
46
46
|
-----------------------------
|
|
@@ -57,7 +57,7 @@ you should have no unicode issues.
|
|
|
57
57
|
What versions of Python are supported?
|
|
58
58
|
--------------------------------------
|
|
59
59
|
|
|
60
|
-
WTForms supports Python 3.
|
|
60
|
+
WTForms supports Python 3.9+
|
|
61
61
|
|
|
62
62
|
|
|
63
63
|
How can I contribute to WTForms?
|
|
@@ -67,7 +67,7 @@ WTForms is not that scary. Really. We try to keep it as succinct and readable as
|
|
|
67
67
|
possible. For bugs and feature requests, you can file a
|
|
68
68
|
ticket on the `project page`_.
|
|
69
69
|
|
|
70
|
-
.. _project page: https://github.com/
|
|
70
|
+
.. _project page: https://github.com/pallets-eco/wtforms
|
|
71
71
|
|
|
72
72
|
|
|
73
73
|
How do I mark in a template when a field is required?
|
|
@@ -258,7 +258,7 @@ refer to a single input from the form.
|
|
|
258
258
|
|
|
259
259
|
.. autoclass:: IntegerRangeField(default field arguments)
|
|
260
260
|
|
|
261
|
-
.. autoclass:: MonthField(default field arguments, format='%Y
|
|
261
|
+
.. autoclass:: MonthField(default field arguments, format='%Y-%m')
|
|
262
262
|
|
|
263
263
|
.. autoclass:: RadioField(default field arguments, choices=[], coerce=str)
|
|
264
264
|
|
|
@@ -68,8 +68,8 @@ the new API's unless it needs to work across both WTForms 1.x and 2.x
|
|
|
68
68
|
|
|
69
69
|
.. _WTForms-Alchemy: https://pypi.org/project/WTForms-Alchemy/
|
|
70
70
|
.. _WTForms-Alchemy-docs: https://wtforms-alchemy.readthedocs.io/
|
|
71
|
-
.. _WTForms-Appengine: https://github.com/
|
|
72
|
-
.. _WTForms-Django: https://github.com/
|
|
71
|
+
.. _WTForms-Appengine: https://github.com/pallets-eco/wtforms-appengine
|
|
72
|
+
.. _WTForms-Django: https://github.com/pallets-eco/wtforms-django
|
|
73
73
|
|
|
74
74
|
|
|
75
75
|
Low-level Changes
|
|
@@ -13,7 +13,7 @@ classifiers = [
|
|
|
13
13
|
"Programming Language :: Python",
|
|
14
14
|
"Topic :: Internet :: WWW/HTTP :: Dynamic Content",
|
|
15
15
|
]
|
|
16
|
-
requires-python = ">=3.
|
|
16
|
+
requires-python = ">=3.9"
|
|
17
17
|
dependencies = [
|
|
18
18
|
"MarkupSafe",
|
|
19
19
|
]
|
|
@@ -22,8 +22,8 @@ dynamic = ["version"]
|
|
|
22
22
|
[project.urls]
|
|
23
23
|
Documentation = "https://wtforms.readthedocs.io"
|
|
24
24
|
Changes = "https://wtforms.readthedocs.io/changes"
|
|
25
|
-
"Source Code" = "https://github.com/
|
|
26
|
-
"Issue Tracker" = "https://github.com/
|
|
25
|
+
"Source Code" = "https://github.com/pallets-eco/wtforms/"
|
|
26
|
+
"Issue Tracker" = "https://github.com/pallets-eco/wtforms/issues"
|
|
27
27
|
Chat = "https://discord.gg/pallets"
|
|
28
28
|
|
|
29
29
|
[project.optional-dependencies]
|
|
@@ -78,30 +78,22 @@ exclude_lines = [
|
|
|
78
78
|
"pass",
|
|
79
79
|
]
|
|
80
80
|
|
|
81
|
-
[tool.
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
select = [
|
|
89
|
-
|
|
90
|
-
#
|
|
91
|
-
"
|
|
92
|
-
#
|
|
93
|
-
"
|
|
94
|
-
#
|
|
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
|
|
107
95
|
]
|
|
96
|
+
|
|
97
|
+
[tool.ruff.lint.isort]
|
|
98
|
+
force-single-line = true
|
|
99
|
+
order-by-type = false
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
from wtforms import validators
|
|
2
|
+
from wtforms import widgets
|
|
3
|
+
from wtforms.fields.choices import RadioField
|
|
4
|
+
from wtforms.fields.choices import SelectField
|
|
5
|
+
from wtforms.fields.choices import SelectFieldBase
|
|
6
|
+
from wtforms.fields.choices import SelectMultipleField
|
|
7
|
+
from wtforms.fields.core import Field
|
|
8
|
+
from wtforms.fields.core import Flags
|
|
9
|
+
from wtforms.fields.core import Label
|
|
10
|
+
from wtforms.fields.datetime import DateField
|
|
11
|
+
from wtforms.fields.datetime import DateTimeField
|
|
12
|
+
from wtforms.fields.datetime import DateTimeLocalField
|
|
13
|
+
from wtforms.fields.datetime import MonthField
|
|
14
|
+
from wtforms.fields.datetime import TimeField
|
|
15
|
+
from wtforms.fields.datetime import WeekField
|
|
16
|
+
from wtforms.fields.form import FormField
|
|
17
|
+
from wtforms.fields.list import FieldList
|
|
18
|
+
from wtforms.fields.numeric import DecimalField
|
|
19
|
+
from wtforms.fields.numeric import DecimalRangeField
|
|
20
|
+
from wtforms.fields.numeric import FloatField
|
|
21
|
+
from wtforms.fields.numeric import IntegerField
|
|
22
|
+
from wtforms.fields.numeric import IntegerRangeField
|
|
23
|
+
from wtforms.fields.simple import BooleanField
|
|
24
|
+
from wtforms.fields.simple import ColorField
|
|
25
|
+
from wtforms.fields.simple import EmailField
|
|
26
|
+
from wtforms.fields.simple import FileField
|
|
27
|
+
from wtforms.fields.simple import HiddenField
|
|
28
|
+
from wtforms.fields.simple import MultipleFileField
|
|
29
|
+
from wtforms.fields.simple import PasswordField
|
|
30
|
+
from wtforms.fields.simple import SearchField
|
|
31
|
+
from wtforms.fields.simple import StringField
|
|
32
|
+
from wtforms.fields.simple import SubmitField
|
|
33
|
+
from wtforms.fields.simple import TelField
|
|
34
|
+
from wtforms.fields.simple import TextAreaField
|
|
35
|
+
from wtforms.fields.simple import URLField
|
|
36
|
+
from wtforms.form import Form
|
|
37
|
+
from wtforms.validators import ValidationError
|
|
38
|
+
|
|
39
|
+
__version__ = "3.2.1"
|
|
40
|
+
|
|
41
|
+
__all__ = [
|
|
42
|
+
"validators",
|
|
43
|
+
"widgets",
|
|
44
|
+
"Form",
|
|
45
|
+
"ValidationError",
|
|
46
|
+
"SelectField",
|
|
47
|
+
"SelectMultipleField",
|
|
48
|
+
"SelectFieldBase",
|
|
49
|
+
"RadioField",
|
|
50
|
+
"Field",
|
|
51
|
+
"Flags",
|
|
52
|
+
"Label",
|
|
53
|
+
"DateTimeField",
|
|
54
|
+
"DateField",
|
|
55
|
+
"TimeField",
|
|
56
|
+
"MonthField",
|
|
57
|
+
"DateTimeLocalField",
|
|
58
|
+
"WeekField",
|
|
59
|
+
"FormField",
|
|
60
|
+
"FieldList",
|
|
61
|
+
"IntegerField",
|
|
62
|
+
"DecimalField",
|
|
63
|
+
"FloatField",
|
|
64
|
+
"IntegerRangeField",
|
|
65
|
+
"DecimalRangeField",
|
|
66
|
+
"BooleanField",
|
|
67
|
+
"TextAreaField",
|
|
68
|
+
"PasswordField",
|
|
69
|
+
"FileField",
|
|
70
|
+
"MultipleFileField",
|
|
71
|
+
"HiddenField",
|
|
72
|
+
"SearchField",
|
|
73
|
+
"SubmitField",
|
|
74
|
+
"StringField",
|
|
75
|
+
"TelField",
|
|
76
|
+
"URLField",
|
|
77
|
+
"EmailField",
|
|
78
|
+
"ColorField",
|
|
79
|
+
]
|
|
@@ -12,6 +12,7 @@ for extra security) is used as the value of the csrf_token. If this token
|
|
|
12
12
|
validates with the hmac of the random value + expiration time, and the
|
|
13
13
|
expiration time is not passed, the CSRF validation will pass.
|
|
14
14
|
"""
|
|
15
|
+
|
|
15
16
|
import hmac
|
|
16
17
|
import os
|
|
17
18
|
from datetime import datetime
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
from wtforms.fields.choices import RadioField
|
|
2
|
+
from wtforms.fields.choices import SelectField
|
|
3
|
+
from wtforms.fields.choices import SelectFieldBase
|
|
4
|
+
from wtforms.fields.choices import SelectMultipleField
|
|
5
|
+
from wtforms.fields.core import Field
|
|
6
|
+
from wtforms.fields.core import Flags
|
|
7
|
+
from wtforms.fields.core import Label
|
|
8
|
+
from wtforms.fields.datetime import DateField
|
|
9
|
+
from wtforms.fields.datetime import DateTimeField
|
|
10
|
+
from wtforms.fields.datetime import DateTimeLocalField
|
|
11
|
+
from wtforms.fields.datetime import MonthField
|
|
12
|
+
from wtforms.fields.datetime import TimeField
|
|
13
|
+
from wtforms.fields.datetime import WeekField
|
|
14
|
+
from wtforms.fields.form import FormField
|
|
15
|
+
from wtforms.fields.list import FieldList
|
|
16
|
+
from wtforms.fields.numeric import DecimalField
|
|
17
|
+
from wtforms.fields.numeric import DecimalRangeField
|
|
18
|
+
from wtforms.fields.numeric import FloatField
|
|
19
|
+
from wtforms.fields.numeric import IntegerField
|
|
20
|
+
from wtforms.fields.numeric import IntegerRangeField
|
|
21
|
+
from wtforms.fields.simple import BooleanField
|
|
22
|
+
from wtforms.fields.simple import ColorField
|
|
23
|
+
from wtforms.fields.simple import EmailField
|
|
24
|
+
from wtforms.fields.simple import FileField
|
|
25
|
+
from wtforms.fields.simple import HiddenField
|
|
26
|
+
from wtforms.fields.simple import MultipleFileField
|
|
27
|
+
from wtforms.fields.simple import PasswordField
|
|
28
|
+
from wtforms.fields.simple import SearchField
|
|
29
|
+
from wtforms.fields.simple import StringField
|
|
30
|
+
from wtforms.fields.simple import SubmitField
|
|
31
|
+
from wtforms.fields.simple import TelField
|
|
32
|
+
from wtforms.fields.simple import TextAreaField
|
|
33
|
+
from wtforms.fields.simple import URLField
|
|
34
|
+
from wtforms.utils import unset_value as _unset_value
|
|
35
|
+
|
|
36
|
+
__all__ = [
|
|
37
|
+
"Field",
|
|
38
|
+
"Flags",
|
|
39
|
+
"Label",
|
|
40
|
+
"SelectField",
|
|
41
|
+
"SelectMultipleField",
|
|
42
|
+
"SelectFieldBase",
|
|
43
|
+
"RadioField",
|
|
44
|
+
"DateTimeField",
|
|
45
|
+
"DateField",
|
|
46
|
+
"TimeField",
|
|
47
|
+
"MonthField",
|
|
48
|
+
"DateTimeLocalField",
|
|
49
|
+
"WeekField",
|
|
50
|
+
"FormField",
|
|
51
|
+
"IntegerField",
|
|
52
|
+
"DecimalField",
|
|
53
|
+
"FloatField",
|
|
54
|
+
"IntegerRangeField",
|
|
55
|
+
"DecimalRangeField",
|
|
56
|
+
"BooleanField",
|
|
57
|
+
"TextAreaField",
|
|
58
|
+
"PasswordField",
|
|
59
|
+
"FileField",
|
|
60
|
+
"MultipleFileField",
|
|
61
|
+
"HiddenField",
|
|
62
|
+
"SearchField",
|
|
63
|
+
"SubmitField",
|
|
64
|
+
"StringField",
|
|
65
|
+
"TelField",
|
|
66
|
+
"URLField",
|
|
67
|
+
"EmailField",
|
|
68
|
+
"ColorField",
|
|
69
|
+
"FieldList",
|
|
70
|
+
"_unset_value",
|
|
71
|
+
]
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import inspect
|
|
2
2
|
import itertools
|
|
3
|
-
import warnings
|
|
4
3
|
|
|
5
4
|
from markupsafe import escape
|
|
6
5
|
from markupsafe import Markup
|
|
@@ -131,17 +130,6 @@ class Field:
|
|
|
131
130
|
for v in itertools.chain(self.validators, [self.widget]):
|
|
132
131
|
flags = getattr(v, "field_flags", {})
|
|
133
132
|
|
|
134
|
-
# check for legacy format, remove eventually
|
|
135
|
-
if isinstance(flags, tuple): # pragma: no cover
|
|
136
|
-
warnings.warn(
|
|
137
|
-
"Flags should be stored in dicts and not in tuples. "
|
|
138
|
-
"The next version of WTForms will abandon support "
|
|
139
|
-
"for flags in tuples.",
|
|
140
|
-
DeprecationWarning,
|
|
141
|
-
stacklevel=2,
|
|
142
|
-
)
|
|
143
|
-
flags = {flag_name: True for flag_name in flags}
|
|
144
|
-
|
|
145
133
|
for k, v in flags.items():
|
|
146
134
|
setattr(self.flags, k, v)
|
|
147
135
|
|
|
@@ -181,14 +169,14 @@ class Field:
|
|
|
181
169
|
for validator in validators:
|
|
182
170
|
if not callable(validator):
|
|
183
171
|
raise TypeError(
|
|
184
|
-
"{} is not a valid validator because it is not "
|
|
185
|
-
"callable"
|
|
172
|
+
f"{validator} is not a valid validator because it is not "
|
|
173
|
+
"callable"
|
|
186
174
|
)
|
|
187
175
|
|
|
188
176
|
if inspect.isclass(validator):
|
|
189
177
|
raise TypeError(
|
|
190
|
-
"{} is not a valid validator because it is a class, "
|
|
191
|
-
"it should be an instance"
|
|
178
|
+
f"{validator} is not a valid validator because it is a class, "
|
|
179
|
+
"it should be an instance"
|
|
192
180
|
)
|
|
193
181
|
|
|
194
182
|
def gettext(self, string):
|
|
@@ -399,8 +387,10 @@ class UnboundField:
|
|
|
399
387
|
return self.field_class(*self.args, **kw)
|
|
400
388
|
|
|
401
389
|
def __repr__(self):
|
|
402
|
-
return
|
|
403
|
-
|
|
390
|
+
return (
|
|
391
|
+
"<UnboundField("
|
|
392
|
+
f"{self.field_class.__name__}, {self.args!r}, {self.kwargs!r}"
|
|
393
|
+
")>"
|
|
404
394
|
)
|
|
405
395
|
|
|
406
396
|
|
|
@@ -425,7 +415,8 @@ class Flags:
|
|
|
425
415
|
for name in dir(self)
|
|
426
416
|
if not name.startswith("_")
|
|
427
417
|
)
|
|
428
|
-
|
|
418
|
+
flags = ", ".join(flags)
|
|
419
|
+
return f"<wtforms.fields.Flags: {{{flags}}}>"
|
|
429
420
|
|
|
430
421
|
|
|
431
422
|
class Label:
|
|
@@ -34,7 +34,8 @@ class DateTimeField(Field):
|
|
|
34
34
|
def _value(self):
|
|
35
35
|
if self.raw_data:
|
|
36
36
|
return " ".join(self.raw_data)
|
|
37
|
-
|
|
37
|
+
format = self.format[0]
|
|
38
|
+
return self.data and self.data.strftime(format) or ""
|
|
38
39
|
|
|
39
40
|
def process_formdata(self, valuelist):
|
|
40
41
|
if not valuelist:
|
|
@@ -30,6 +30,7 @@ class BaseForm:
|
|
|
30
30
|
prefix += "-"
|
|
31
31
|
|
|
32
32
|
self.meta = meta
|
|
33
|
+
self._form_error_key = ""
|
|
33
34
|
self._prefix = prefix
|
|
34
35
|
self._fields = OrderedDict()
|
|
35
36
|
|
|
@@ -113,7 +114,7 @@ class BaseForm:
|
|
|
113
114
|
for name, field in self._fields.items():
|
|
114
115
|
field_extra_filters = filters.get(name, [])
|
|
115
116
|
|
|
116
|
-
inline_filter = getattr(self, "filter_
|
|
117
|
+
inline_filter = getattr(self, f"filter_{name}", None)
|
|
117
118
|
if inline_filter is not None:
|
|
118
119
|
field_extra_filters.append(inline_filter)
|
|
119
120
|
|
|
@@ -155,7 +156,7 @@ class BaseForm:
|
|
|
155
156
|
def errors(self):
|
|
156
157
|
errors = {name: f.errors for name, f in self._fields.items() if f.errors}
|
|
157
158
|
if self.form_errors:
|
|
158
|
-
errors[
|
|
159
|
+
errors[self._form_error_key] = self.form_errors
|
|
159
160
|
return errors
|
|
160
161
|
|
|
161
162
|
|
|
Binary file
|
|
@@ -7,7 +7,7 @@ msgid ""
|
|
|
7
7
|
msgstr ""
|
|
8
8
|
"Project-Id-Version: WTForms 2.0dev\n"
|
|
9
9
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
|
10
|
-
"POT-Creation-Date:
|
|
10
|
+
"POT-Creation-Date: 2024-01-11 08:20+0100\n"
|
|
11
11
|
"PO-Revision-Date: 2015-04-08 20:59+0100\n"
|
|
12
12
|
"Last-Translator: Jalal Maqdisi <jalal.maqdisi@gmail.com>\n"
|
|
13
13
|
"Language-Team: ar <LL@li.org>\n"
|
|
@@ -123,11 +123,11 @@ msgstr "قيمة غير صالحة، يجب أن تكون اي من: %(values)s.
|
|
|
123
123
|
#: src/wtforms/validators.py:698
|
|
124
124
|
#, fuzzy
|
|
125
125
|
#| msgid "This field is required."
|
|
126
|
-
msgid "This field cannot be edited"
|
|
126
|
+
msgid "This field cannot be edited."
|
|
127
127
|
msgstr "هذا الحقل مطلوب."
|
|
128
128
|
|
|
129
129
|
#: src/wtforms/validators.py:714
|
|
130
|
-
msgid "This field is disabled and cannot have a value"
|
|
130
|
+
msgid "This field is disabled and cannot have a value."
|
|
131
131
|
msgstr ""
|
|
132
132
|
|
|
133
133
|
#: src/wtforms/csrf/core.py:96
|
|
@@ -146,23 +146,23 @@ msgstr "CSRF قد فشل."
|
|
|
146
146
|
msgid "CSRF token expired."
|
|
147
147
|
msgstr "انتهت صلاحية رمز CSRF."
|
|
148
148
|
|
|
149
|
-
#: src/wtforms/fields/choices.py:
|
|
149
|
+
#: src/wtforms/fields/choices.py:142
|
|
150
150
|
msgid "Invalid Choice: could not coerce."
|
|
151
151
|
msgstr "اختيار غير صالح: لا يمكن الاجبار."
|
|
152
152
|
|
|
153
|
-
#: src/wtforms/fields/choices.py:
|
|
153
|
+
#: src/wtforms/fields/choices.py:149 src/wtforms/fields/choices.py:203
|
|
154
154
|
msgid "Choices cannot be None."
|
|
155
155
|
msgstr ""
|
|
156
156
|
|
|
157
|
-
#: src/wtforms/fields/choices.py:
|
|
157
|
+
#: src/wtforms/fields/choices.py:155
|
|
158
158
|
msgid "Not a valid choice."
|
|
159
159
|
msgstr "اختيار غير صحيح."
|
|
160
160
|
|
|
161
|
-
#: src/wtforms/fields/choices.py:
|
|
161
|
+
#: src/wtforms/fields/choices.py:193
|
|
162
162
|
msgid "Invalid choice(s): one or more data inputs could not be coerced."
|
|
163
163
|
msgstr "اختيارات غير صالحة: واحدة او اكثر من الادخالات لا يمكن اجبارها."
|
|
164
164
|
|
|
165
|
-
#: src/wtforms/fields/choices.py:
|
|
165
|
+
#: src/wtforms/fields/choices.py:214
|
|
166
166
|
#, fuzzy, python-format
|
|
167
167
|
#| msgid "'%(value)s' is not a valid choice for this field."
|
|
168
168
|
msgid "'%(value)s' is not a valid choice for this field."
|
|
Binary file
|