61 lines
1.6 KiB
Diff
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
|
|
|