summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLysandros Nikolaou <lisandrosnik@gmail.com>2019-05-19 22:11:21 (GMT)
committerƁukasz Langa <lukasz@langa.pl>2019-05-19 22:11:20 (GMT)
commitd673810b9d9df6fbd29f5b7db3973d5adae10fd3 (patch)
tree0728ce5ebbc148751ee1e11dcfff333004bd246b
parent287b84de939db47aa8c6f30734ceb8aba9d1db29 (diff)
downloadcpython-d673810b9d9df6fbd29f5b7db3973d5adae10fd3.zip
cpython-d673810b9d9df6fbd29f5b7db3973d5adae10fd3.tar.gz
cpython-d673810b9d9df6fbd29f5b7db3973d5adae10fd3.tar.bz2
bpo-35252: Remove FIXME from test_functools (GH-10551)
-rw-r--r--Lib/functools.py8
-rw-r--r--Lib/test/test_functools.py11
-rw-r--r--Misc/NEWS.d/next/Library/2019-04-02-19-23-12.bpo-35252.VooTVv.rst1
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.