Skip to content

Commit 25a2a73

Browse files
authored
fix: fix safe_issubclass for NewType (#678)
1 parent 021654f commit 25a2a73

File tree

2 files changed

+15
-4
lines changed

2 files changed

+15
-4
lines changed

src/magicgui/_util.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,8 @@ def _safe_isinstance_tuple(obj: object, superclass: object) -> bool:
187187

188188
def safe_issubclass(obj: object, superclass: object) -> bool:
189189
"""Safely check if obj is a subclass of superclass."""
190+
if obj is superclass:
191+
return True
190192
if isinstance(superclass, tuple):
191193
return any(safe_issubclass(obj, s) for s in superclass)
192194
obj_origin = get_origin(obj)

tests/test_util.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,16 @@ def test_tuple_check(self):
7676
assert not safe_issubclass(typing.Tuple[int, int], typing.Tuple[int, int, int])
7777

7878
def test_subclass_future(self):
79-
assert safe_issubclass(Future[typing.List[int]], Future[list[int]])
80-
assert safe_issubclass(Future[typing.List[int]], Future[list])
81-
assert safe_issubclass(Future[list[int]], Future[typing.List[int]])
82-
assert not safe_issubclass(Future[list[int]], Future[typing.List[str]])
79+
assert safe_issubclass(Future[list[int]], Future[list[int]])
80+
assert safe_issubclass(Future[list[int]], Future[list])
81+
assert safe_issubclass(Future[list[int]], Future[list[int]])
82+
assert not safe_issubclass(Future[list[int]], Future[list[str]])
83+
84+
def test_subclass_new_type(self):
85+
new_int = typing.NewType("new_int", int)
86+
87+
assert safe_issubclass(new_int, new_int)
88+
assert safe_issubclass(list[new_int], typing.List[new_int])
89+
assert safe_issubclass(typing.List[new_int], list[new_int])
90+
assert safe_issubclass(list[new_int], typing.Sequence[new_int])
91+
assert safe_issubclass(list[new_int], list[new_int])

0 commit comments

Comments
 (0)