summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorColin Watson <cjwatson@debian.org>2024-04-30 17:00:15 +0100
committerColin Watson <cjwatson@debian.org>2024-04-30 17:01:14 +0100
commit70f338a1bfde1ae105581636523dad6bd6dbb8fe (patch)
tree71f89de6e883686c319ac15e33df851428568855
parent260d9ad75cfab52cbcfc70c4f432e9086da5a271 (diff)
parent92bbfffdf8b81b738adcd16fee7fd05f239cfedd (diff)
Update upstream source from tag 'upstream/3.1.2'
Update to upstream version '3.1.2' with Debian dir 3cf9daaf33a19a2273b886172f80ef96b2b02e27
-rw-r--r--CHANGES.rst8
-rw-r--r--debian/changelog7
-rw-r--r--debian/control1
-rw-r--r--pyproject.toml3
-rw-r--r--src/wtforms/__init__.py2
-rw-r--r--src/wtforms/fields/choices.py15
-rw-r--r--src/wtforms/locale/sv/LC_MESSAGES/wtforms.po25
-rw-r--r--src/wtforms/locale/tr/LC_MESSAGES/wtforms.po61
-rw-r--r--tests/fields/test_selectmultiple.py13
9 files changed, 80 insertions, 55 deletions
diff --git a/CHANGES.rst b/CHANGES.rst
index 186501b..75661e6 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -1,5 +1,13 @@
.. currentmodule:: wtforms
+Version 3.1.2
+-------------
+
+Released 2024-01-06
+
+- Fix :class:`~fields.SelectMultipleField` value coercion on validation.
+ :issue:`822` :pr:`823`
+
Version 3.1.1
-------------
diff --git a/debian/changelog b/debian/changelog
index a437a8c..ac92417 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
+wtforms (3.1.2-1) UNRELEASED; urgency=medium
+
+ * Team upload.
+ * New upstream release.
+
+ -- Colin Watson <cjwatson@debian.org> Tue, 30 Apr 2024 17:01:03 +0100
+
wtforms (3.1.1-1) unstable; urgency=medium
* Team upload.
diff --git a/debian/control b/debian/control
index 5da2b70..87be546 100644
--- a/debian/control
+++ b/debian/control
@@ -16,6 +16,7 @@ Build-Depends:
python3-hatchling,
python3-pallets-sphinx-themes <!nodoc>,
python3-pytest <!nocheck>,
+ python3-setuptools,
python3-sphinx <!nodoc>,
python3-sphinx-issues <!nodoc>,
python3-sphinxcontrib-log-cabinet <!nodoc>,
diff --git a/pyproject.toml b/pyproject.toml
index cc76d67..10f0b52 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -54,7 +54,8 @@ artifacts = ["src/wtforms/locale/**/*.mo"]
[tool.hatch.build.hooks.custom]
dependencies = [
- "Babel>=2.6.0"
+ "Babel>=2.6.0",
+ "setuptools; python_version>='3.12'",
]
[tool.pytest.ini_options]
diff --git a/src/wtforms/__init__.py b/src/wtforms/__init__.py
index 9af9f29..6041485 100644
--- a/src/wtforms/__init__.py
+++ b/src/wtforms/__init__.py
@@ -4,4 +4,4 @@ from wtforms.fields import *
from wtforms.form import Form
from wtforms.validators import ValidationError
-__version__ = "3.1.1"
+__version__ = "3.1.2"
diff --git a/src/wtforms/fields/choices.py b/src/wtforms/fields/choices.py
index 2b1fd2e..62ed497 100644
--- a/src/wtforms/fields/choices.py
+++ b/src/wtforms/fields/choices.py
@@ -121,8 +121,9 @@ 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, self.coerce(value) == self.data, render_kw)
+ yield (value, label, selected, render_kw)
def process_data(self, value):
try:
@@ -173,9 +174,9 @@ class SelectMultipleField(SelectField):
else:
_choices = zip(choices, choices)
- for value, label, *args in _choices:
+ for value, label, *other_args in _choices:
selected = self.data is not None and self.coerce(value) in self.data
- render_kw = args[0] if len(args) else {}
+ render_kw = other_args[0] if len(other_args) else {}
yield (value, label, selected, render_kw)
def process_data(self, value):
@@ -201,9 +202,11 @@ class SelectMultipleField(SelectField):
if self.choices is None:
raise TypeError(self.gettext("Choices cannot be None."))
- 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]
+ 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
+ ]
raise ValidationError(
self.ngettext(
"'%(value)s' is not a valid choice for this field.",
diff --git a/src/wtforms/locale/sv/LC_MESSAGES/wtforms.po b/src/wtforms/locale/sv/LC_MESSAGES/wtforms.po
index d1c9a4a..d31bf0d 100644
--- a/src/wtforms/locale/sv/LC_MESSAGES/wtforms.po
+++ b/src/wtforms/locale/sv/LC_MESSAGES/wtforms.po
@@ -6,10 +6,10 @@
msgid ""
msgstr ""
"Project-Id-Version: WTForms 2.0dev\n"
-"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"Report-Msgid-Bugs-To: eloi.rivard@nubla.fr\n"
"POT-Creation-Date: 2023-10-05 13:42+0200\n"
-"PO-Revision-Date: 2023-08-22 10:53+0000\n"
-"Last-Translator: Luna Jernberg <droidbittin@gmail.com>\n"
+"PO-Revision-Date: 2023-11-25 05:13+0000\n"
+"Last-Translator: bittin1ddc447d824349b2 <bittin@reimu.nl>\n"
"Language-Team: Swedish <https://hosted.weblate.org/projects/wtforms/wtforms/"
"sv/>\n"
"Language: sv\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.0-dev\n"
+"X-Generator: Weblate 5.2.1-rc\n"
"Generated-By: Babel 2.8.0\n"
#: src/wtforms/validators.py:86
@@ -110,14 +110,12 @@ msgid "Invalid value, can't be any of: %(values)s."
msgstr "Felaktigt värde, får inte vara något av: %(values)s."
#: src/wtforms/validators.py:698
-#, fuzzy
-#| msgid "This field is required."
msgid "This field cannot be edited"
-msgstr "Det här fältet är obligatoriskt."
+msgstr "Detta fält kan inte redigeras"
#: src/wtforms/validators.py:714
msgid "This field is disabled and cannot have a value"
-msgstr ""
+msgstr "Det här fältet är inaktiverat och kan inte ha ett värde"
#: src/wtforms/csrf/core.py:96
msgid "Invalid CSRF Token."
@@ -152,12 +150,11 @@ msgid "Invalid choice(s): one or more data inputs could not be coerced."
msgstr "Felaktigt val; ett eller flera inputfält kunde inte coerca:s"
#: src/wtforms/fields/choices.py:204
-#, fuzzy, python-format
-#| msgid "'%(value)s' is not a valid choice for this field."
+#, python-format
msgid "'%(value)s' is not a valid choice for this field."
msgid_plural "'%(value)s' are not valid choices for this field."
-msgstr[0] "'%(value)s' är inte ett giltigt värde för det här fältet"
-msgstr[1] "'%(value)s' är inte ett giltigt värde för det här fältet"
+msgstr[0] "'%(value)s' är inte ett giltigt val för detta fält."
+msgstr[1] "'%(value)s' är inte giltiga val för detta fält."
#: src/wtforms/fields/datetime.py:51
msgid "Not a valid datetime value."
@@ -172,10 +169,8 @@ msgid "Not a valid time value."
msgstr "Inte ett giltigt tidsvärde."
#: src/wtforms/fields/datetime.py:148
-#, fuzzy
-#| msgid "Not a valid date value."
msgid "Not a valid week value."
-msgstr "Inte ett giltigt datum"
+msgstr "Inte ett giltigt veckovärde."
#: src/wtforms/fields/numeric.py:82 src/wtforms/fields/numeric.py:92
msgid "Not a valid integer value."
diff --git a/src/wtforms/locale/tr/LC_MESSAGES/wtforms.po b/src/wtforms/locale/tr/LC_MESSAGES/wtforms.po
index ae95292..29091a3 100644
--- a/src/wtforms/locale/tr/LC_MESSAGES/wtforms.po
+++ b/src/wtforms/locale/tr/LC_MESSAGES/wtforms.po
@@ -6,16 +6,18 @@
msgid ""
msgstr ""
"Project-Id-Version: WTForms 1.0.4\n"
-"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"Report-Msgid-Bugs-To: eloi.rivard@nubla.fr\n"
"POT-Creation-Date: 2023-10-05 13:42+0200\n"
-"PO-Revision-Date: 2017-05-28 02:23+0300\n"
-"Last-Translator: Melih Uçar <melihucar@gmail.com>\n"
-"Language-Team: tr <melihcar@gmail.com>\n"
+"PO-Revision-Date: 2023-11-05 19:46+0000\n"
+"Last-Translator: Oğuz Ersen <oguz@ersen.moe>\n"
+"Language-Team: Turkish <https://hosted.weblate.org/projects/wtforms/wtforms/"
+"tr/>\n"
"Language: tr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 5.2-dev\n"
"Generated-By: Babel 2.8.0\n"
#: src/wtforms/validators.py:86
@@ -46,8 +48,8 @@ msgstr[1] "Alan %(max)d karakterden uzun olamaz."
#, python-format
msgid "Field must be exactly %(max)d character long."
msgid_plural "Field must be exactly %(max)d characters long."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Alan tam olarak %(max)d karakter uzunluğunda olmalı."
+msgstr[1] "Alan tam olarak %(max)d karakter uzunluğunda olmalı."
#: src/wtforms/validators.py:163
#, python-format
@@ -108,81 +110,76 @@ msgid "Invalid value, can't be any of: %(values)s."
msgstr "Geçersiz değer, değerlerden biri olamaz: %(values)s."
#: src/wtforms/validators.py:698
-#, fuzzy
-#| msgid "This field is required."
msgid "This field cannot be edited"
-msgstr "Bu alan zorunludur."
+msgstr "Bu alan düzenlenemez"
#: src/wtforms/validators.py:714
msgid "This field is disabled and cannot have a value"
-msgstr ""
+msgstr "Bu alan devre dışıdır ve bir değere sahip olamaz"
#: src/wtforms/csrf/core.py:96
msgid "Invalid CSRF Token."
-msgstr "Geçersiz CSRF Anahtarı"
+msgstr "Geçersiz CSRF Anahtarı."
#: src/wtforms/csrf/session.py:63
msgid "CSRF token missing."
-msgstr "CSRF anahtarı gerekli"
+msgstr "CSRF anahtarı gerekli."
#: src/wtforms/csrf/session.py:71
msgid "CSRF failed."
-msgstr "CSRF hatalı"
+msgstr "CSRF hatalı."
#: src/wtforms/csrf/session.py:76
msgid "CSRF token expired."
-msgstr "CSRF anahtarının süresi doldu"
+msgstr "CSRF anahtarının süresi doldu."
#: src/wtforms/fields/choices.py:135
msgid "Invalid Choice: could not coerce."
-msgstr "Geçersiz seçim: tip uyuşmazlığı"
+msgstr "Geçersiz seçim: tip uyuşmazlığı."
#: src/wtforms/fields/choices.py:139 src/wtforms/fields/choices.py:192
msgid "Choices cannot be None."
-msgstr ""
+msgstr "Seçimler Hiçbiri olamaz."
#: src/wtforms/fields/choices.py:148
msgid "Not a valid choice."
-msgstr "Geçerli bir seçenek değil"
+msgstr "Geçerli bir seçenek değil."
#: src/wtforms/fields/choices.py:185
msgid "Invalid choice(s): one or more data inputs could not be coerced."
-msgstr "Geçersiz seçenek: bir yada daha fazla tip uyuşmazlığı"
+msgstr "Geçersiz seçenek: bir yada daha fazla tip uyuşmazlığı."
#: src/wtforms/fields/choices.py:204
-#, fuzzy, python-format
-#| msgid "'%(value)s' is not a valid choice for this field."
+#, python-format
msgid "'%(value)s' is not a valid choice for this field."
msgid_plural "'%(value)s' are not valid choices for this field."
-msgstr[0] "'%(value)s' bu alan için geçerli değil"
-msgstr[1] "'%(value)s' bu alan için geçerli değil"
+msgstr[0] "'%(value)s' bu alan için geçerli bir seçim değil."
+msgstr[1] "'%(value)s' bu alan için geçerli bir seçim değil."
#: src/wtforms/fields/datetime.py:51
msgid "Not a valid datetime value."
-msgstr "Geçerli bir zaman değil"
+msgstr "Geçerli bir tarih-saat değeri değil."
#: src/wtforms/fields/datetime.py:77
msgid "Not a valid date value."
-msgstr "Geçerli bir tarih değil"
+msgstr "Geçerli bir tarih değeri değil."
#: src/wtforms/fields/datetime.py:103
msgid "Not a valid time value."
-msgstr ""
+msgstr "Geçerli bir zaman değeri değil."
#: src/wtforms/fields/datetime.py:148
-#, fuzzy
-#| msgid "Not a valid date value."
msgid "Not a valid week value."
-msgstr "Geçerli bir tarih değil"
+msgstr "Geçerli bir hafta değeri değil."
#: src/wtforms/fields/numeric.py:82 src/wtforms/fields/numeric.py:92
msgid "Not a valid integer value."
-msgstr "Geçerli bir sayı değeri değil"
+msgstr "Geçerli bir tam sayı değeri değil."
#: src/wtforms/fields/numeric.py:168
msgid "Not a valid decimal value."
-msgstr "Geçerli bir ondalık sayı değil"
+msgstr "Geçerli bir ondalık sayı değeri değil."
#: src/wtforms/fields/numeric.py:197
msgid "Not a valid float value."
-msgstr "Geçerli bir ondalık sayı değil"
+msgstr "Geçerli bir ondalık sayı değeri değil."
diff --git a/tests/fields/test_selectmultiple.py b/tests/fields/test_selectmultiple.py
index 5fd2a99..127fe45 100644
--- a/tests/fields/test_selectmultiple.py
+++ b/tests/fields/test_selectmultiple.py
@@ -190,3 +190,16 @@ def test_optgroup_option_render_kw():
assert list(form.a.iter_choices()) == [
("a", "Foo", True, {"title": "foobar", "data-foo": "bar"})
]
+
+
+def test_can_supply_coercable_values_as_options():
+ F = make_form(
+ a=SelectMultipleField(
+ choices=[("1", "One"), ("2", "Two")],
+ coerce=int,
+ )
+ )
+ post_data = DummyPostData(a=["1", "2"])
+ form = F(post_data)
+ assert form.validate()
+ assert form.a.data == [1, 2]