Skip to content

Commit 2cf83ed

Browse files
authored
fix: Fix checking sublcasses of Future (#665)
* fix: Fix checking sublcasses of Future * skip test on python 3.8 * add negative test
1 parent 9776992 commit 2cf83ed

2 files changed

Lines changed: 13 additions & 4 deletions

File tree

src/magicgui/_util.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -210,10 +210,11 @@ def safe_issubclass(obj: object, superclass: object) -> bool:
210210
if obj_origin is tuple and obj_args:
211211
return _safe_isinstance_tuple(obj, superclass)
212212

213-
return (
214-
issubclass(obj_origin, superclass_origin) and # type: ignore
215-
(obj_args == superclass_args or not superclass_args)
216-
)
213+
if not superclass_args:
214+
return True
215+
if len(obj_args) != len(superclass_args):
216+
return False
217+
return all(safe_issubclass(o, s) for o, s in zip(obj_args, superclass_args))
217218

218219
except Exception:
219220
return False

tests/test_util.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import sys
22
import typing
33
from collections.abc import Mapping, Sequence
4+
from concurrent.futures import Future
45

56
import pytest
67

@@ -78,3 +79,10 @@ def test_tuple_check(self):
7879
assert safe_issubclass(typing.Tuple[int, int], typing.Tuple[int, ...])
7980
assert not safe_issubclass(typing.Tuple[int, int], typing.Tuple[int, str])
8081
assert not safe_issubclass(typing.Tuple[int, int], typing.Tuple[int, int, int])
82+
83+
@pytest.mark.skipif(sys.version_info < (3, 9), reason="Future[] is supported in 3.9+")
84+
def test_subclass_future(self):
85+
assert safe_issubclass(Future[typing.List[int]], Future[list[int]])
86+
assert safe_issubclass(Future[typing.List[int]], Future[list])
87+
assert safe_issubclass(Future[list[int]], Future[typing.List[int]])
88+
assert not safe_issubclass(Future[list[int]], Future[typing.List[str]])

0 commit comments

Comments
 (0)