diff options
author | Colin Watson <cjwatson@debian.org> | 2024-04-30 17:00:15 +0100 |
---|---|---|
committer | Colin Watson <cjwatson@debian.org> | 2024-04-30 17:01:14 +0100 |
commit | 70f338a1bfde1ae105581636523dad6bd6dbb8fe (patch) | |
tree | 71f89de6e883686c319ac15e33df851428568855 | |
parent | 260d9ad75cfab52cbcfc70c4f432e9086da5a271 (diff) | |
parent | 92bbfffdf8b81b738adcd16fee7fd05f239cfedd (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.rst | 8 | ||||
-rw-r--r-- | debian/changelog | 7 | ||||
-rw-r--r-- | debian/control | 1 | ||||
-rw-r--r-- | pyproject.toml | 3 | ||||
-rw-r--r-- | src/wtforms/__init__.py | 2 | ||||
-rw-r--r-- | src/wtforms/fields/choices.py | 15 | ||||
-rw-r--r-- | src/wtforms/locale/sv/LC_MESSAGES/wtforms.po | 25 | ||||
-rw-r--r-- | src/wtforms/locale/tr/LC_MESSAGES/wtforms.po | 61 | ||||
-rw-r--r-- | tests/fields/test_selectmultiple.py | 13 |
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] |