From b73625ce5fda478ea3ec038e44095fe3488aa3f7 Mon Sep 17 00:00:00 2001 From: Omer Akram Date: Mon, 20 Jul 2020 03:36:08 +0500 Subject: [PATCH 1/2] fix 1322 --- autobahn/wamp/protocol.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/autobahn/wamp/protocol.py b/autobahn/wamp/protocol.py index 2035d0c1c..93efb5510 100644 --- a/autobahn/wamp/protocol.py +++ b/autobahn/wamp/protocol.py @@ -502,10 +502,14 @@ async def _type_check(*args, **kwargs): response = [] for name, kind in func.__annotations__.items(): if name in arguments: + # if a "type" has __origin__ attribute it is a + # parameterized generic if getattr(kind, "__origin__", None) == Union: + acceptable_types = [arg.__name__ for arg in kind.__args__] if not isinstance(arguments[name], kind.__args__): response.append( - "'{}' required={} got={}".format(name, kind.__name__, type(arguments[name]).__name__)) + "'{}' acceptable types={} got={}".format(name, acceptable_types, + type(arguments[name]).__name__)) elif not isinstance(arguments[name], kind): response.append( "'{}' required={} got={}".format(name, kind.__name__, type(arguments[name]).__name__)) From 8e013e8465d1c9a19243aa00eb1671e3773a8de2 Mon Sep 17 00:00:00 2001 From: Omer Akram Date: Mon, 20 Jul 2020 04:14:17 +0500 Subject: [PATCH 2/2] better wording --- autobahn/wamp/protocol.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/autobahn/wamp/protocol.py b/autobahn/wamp/protocol.py index 93efb5510..ca055c433 100644 --- a/autobahn/wamp/protocol.py +++ b/autobahn/wamp/protocol.py @@ -505,14 +505,14 @@ async def _type_check(*args, **kwargs): # if a "type" has __origin__ attribute it is a # parameterized generic if getattr(kind, "__origin__", None) == Union: - acceptable_types = [arg.__name__ for arg in kind.__args__] + expected_types = [arg.__name__ for arg in kind.__args__] if not isinstance(arguments[name], kind.__args__): response.append( - "'{}' acceptable types={} got={}".format(name, acceptable_types, - type(arguments[name]).__name__)) + "'{}' expected types={} got={}".format(name, expected_types, + type(arguments[name]).__name__)) elif not isinstance(arguments[name], kind): response.append( - "'{}' required={} got={}".format(name, kind.__name__, type(arguments[name]).__name__)) + "'{}' expected type={} got={}".format(name, kind.__name__, type(arguments[name]).__name__)) if response: raise TypeCheckError(', '.join(response)) return await txaio.as_future(func, *args, **kwargs)