From 5cf34f6c42b6e39aa1e53394443efca3d7329e3b Mon Sep 17 00:00:00 2001 From: azjps 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