From 84d80bab56d02c8d7f6effcbce8bb342f6202338 Mon Sep 17 00:00:00 2001 From: agudermann <47318461+ArneGudermann@users.noreply.github.com> Date: Thu, 19 Dec 2024 09:28:54 +0100 Subject: [PATCH] fix: `SelectBone.singleValueFromClient` doesn't accept `Enum` (backport #1320) (#1351) Fix for : #1348 --------- Co-authored-by: Jan Max Meyer --- CHANGELOG.md | 8 ++++++++ src/viur/core/bones/select.py | 14 +++++++++++--- src/viur/core/version.py | 2 +- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 78baf7428..aa5cce3cc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,14 @@ This file documents any relevant changes done to ViUR-core since version 3. +## [3.6.30] + +- fix: `SelectBone.singleValueFromClient` doesn't accept `Enum` (#1320, #1351) + +## [3.6.29] + +- fix: Don't create a CSP nonce if unsafe-inline is enabled (#1347) + ## [3.6.28] - fix: Hotfix for refactored `getSkel()` ported down from 3.7 source (#1341) diff --git a/src/viur/core/bones/select.py b/src/viur/core/bones/select.py index dacc67a7d..c696270ff 100644 --- a/src/viur/core/bones/select.py +++ b/src/viur/core/bones/select.py @@ -126,15 +126,23 @@ def singleValueSerialize(self, val, skel: 'SkeletonInstance', name: str, parentI return val def singleValueFromClient(self, value, skel, bone_name, client_data): - if not str(value): + if isinstance(self._values, enum.EnumMeta) and isinstance(value, self._values): + return value, None + + value = str(value) + if not value: return self.getEmptyValue(), [ReadFromClientError(ReadFromClientErrorSeverity.Empty, "No value selected")] + for key in self.values.keys(): - if str(key) == str(value): + if str(key) == value: if isinstance(self._values, enum.EnumMeta): return self._values(key), None + return key, None + return self.getEmptyValue(), [ - ReadFromClientError(ReadFromClientErrorSeverity.Invalid, "Invalid value selected")] + ReadFromClientError(ReadFromClientErrorSeverity.Invalid, "Invalid value selected") + ] def structure(self) -> dict: return super().structure() | { diff --git a/src/viur/core/version.py b/src/viur/core/version.py index 2a7cc59b1..3c3242920 100644 --- a/src/viur/core/version.py +++ b/src/viur/core/version.py @@ -3,7 +3,7 @@ # This will mark it as a pre-release as well on PyPI. # See CONTRIBUTING.md for further information. -__version__ = "3.6.28" +__version__ = "3.6.30" assert __version__.count(".") >= 2 and "".join(__version__.split(".", 3)[:3]).isdigit(), \ "Semantic __version__ expected!"