diff options
author | Lysandros Nikolaou <lisandrosnik@gmail.com> | 2019-05-19 22:11:21 (GMT) |
---|---|---|
committer | Ćukasz Langa <lukasz@langa.pl> | 2019-05-19 22:11:20 (GMT) |
commit | d673810b9d9df6fbd29f5b7db3973d5adae10fd3 (patch) | |
tree | 0728ce5ebbc148751ee1e11dcfff333004bd246b | |
parent | 287b84de939db47aa8c6f30734ceb8aba9d1db29 (diff) | |
download | cpython-d673810b9d9df6fbd29f5b7db3973d5adae10fd3.zip cpython-d673810b9d9df6fbd29f5b7db3973d5adae10fd3.tar.gz cpython-d673810b9d9df6fbd29f5b7db3973d5adae10fd3.tar.bz2 |
bpo-35252: Remove FIXME from test_functools (GH-10551)
-rw-r--r-- | Lib/functools.py | 8 | ||||
-rw-r--r-- | Lib/test/test_functools.py | 11 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2019-04-02-19-23-12.bpo-35252.VooTVv.rst | 1 |
3 files changed, 11 insertions, 9 deletions
diff --git a/Lib/functools.py b/Lib/functools.py index 28d9f6f..c863341 100644 --- a/Lib/functools.py +++ b/Lib/functools.py @@ -861,9 +861,11 @@ def singledispatch(func): # only import typing if annotation parsing is necessary from typing import get_type_hints argname, cls = next(iter(get_type_hints(func).items())) - assert isinstance(cls, type), ( - f"Invalid annotation for {argname!r}. {cls!r} is not a class." - ) + if not isinstance(cls, type): + raise TypeError( + f"Invalid annotation for {argname!r}. " + f"{cls!r} is not a class." + ) registry[cls] = func if cache_token is None and hasattr(cls, '__abstractmethods__'): cache_token = get_cache_token() diff --git a/Lib/test/test_functools.py b/Lib/test/test_functools.py index 85c65d1..b89d779 100644 --- a/Lib/test/test_functools.py +++ b/Lib/test/test_functools.py @@ -2355,9 +2355,6 @@ class TestSingleDispatch(unittest.TestCase): )) self.assertTrue(str(exc.exception).endswith(msg_suffix)) - # FIXME: The following will only work after PEP 560 is implemented. - return - with self.assertRaises(TypeError) as exc: @i.register def _(arg: typing.Iterable[str]): @@ -2366,10 +2363,12 @@ class TestSingleDispatch(unittest.TestCase): # types from `typing`. Instead, annotate with regular types # or ABCs. return "I annotated with a generic collection" - self.assertTrue(str(exc.exception).startswith(msg_prefix + - "<function TestSingleDispatch.test_invalid_registrations.<locals>._" + self.assertTrue(str(exc.exception).startswith( + "Invalid annotation for 'arg'." + )) + self.assertTrue(str(exc.exception).endswith( + 'typing.Iterable[str] is not a class.' )) - self.assertTrue(str(exc.exception).endswith(msg_suffix)) def test_invalid_positional_argument(self): @functools.singledispatch diff --git a/Misc/NEWS.d/next/Library/2019-04-02-19-23-12.bpo-35252.VooTVv.rst b/Misc/NEWS.d/next/Library/2019-04-02-19-23-12.bpo-35252.VooTVv.rst new file mode 100644 index 0000000..c8f3e7d --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-04-02-19-23-12.bpo-35252.VooTVv.rst @@ -0,0 +1 @@ +Throw a TypeError instead of an AssertionError when using an invalid type annotation with singledispatch. |