python-traitlets/backport-fix-assigning-string-value-to-Set.patch
2024-05-11 17:27:53 +08:00

61 lines
1.6 KiB
Diff

From 5cf34f6c42b6e39aa1e53394443efca3d7329e3b Mon Sep 17 00:00:00 2001
From: azjps <azhu@tower-research.com>
Date: Fri, 19 Apr 2024 23:07:41 +1200
Subject: [PATCH] Fix assigning string value to Set (#903)
url:https://github.com/ipython/traitlets/pull/903/commits/4143e7eb0c3e474fe3cb031666b4620cf1e0d832
---
tests/test_traitlets.py | 18 ++++++++++++++++++
traitlets/traitlets.py | 7 +------
2 files changed, 19 insertions(+), 6 deletions(-)
diff --git a/tests/test_traitlets.py b/tests/test_traitlets.py
index dfcf3f0..f9f623b 100644
--- a/tests/test_traitlets.py
+++ b/tests/test_traitlets.py
@@ -1658,6 +1658,24 @@ class TestList(TraitTestBase):
return value
+class SetTrait(HasTraits):
+ value = Set(Unicode())
+
+
+class TestSet(TraitTestBase):
+ obj = SetTrait()
+
+ _default_value: t.Set[str] = set()
+ _good_values = [{"a", "b"}, "ab"]
+ _bad_values = [1]
+
+ def coerce(self, value):
+ if isinstance(value, str):
+ # compatibility handling: convert string to set containing string
+ value = {value}
+ return value
+
+
class Foo:
pass
diff --git a/traitlets/traitlets.py b/traitlets/traitlets.py
index 1d1675a..ecd0d7c 100644
--- a/traitlets/traitlets.py
+++ b/traitlets/traitlets.py
@@ -3698,12 +3698,7 @@ class Set(Container[t.Set[t.Any]]):
def set(self, obj: t.Any, value: t.Any) -> None:
if isinstance(value, str):
- return super().set(
- obj,
- set(
- value,
- ),
- )
+ return super().set(obj, {value})
else:
return super().set(obj, value)
--
2.27.0