Karthikeyan Singaravelan <[email protected]> added the comment:
I created PR to ensure the __code__ object is checked to be a CodeType and
converted the report to a unittest. I also found a similar function
_is_async_func [0] which also seems to perform similar check but is used only
in create_autospec. creating an autospec function out of MagicMock with a
function spec is not possible so though the change could be made it's not
testable. Also changing _is_async_func to _is_async_obj in create_autospec
shows no test case failure. Can this be removed to use only _is_async_obj? Is
there a difference in their usage due to isawaitable check present in
_is_async_obj that needs a test?
# create_autospec with MagicMock(spec=lambda x: x)
$ cpython git:(bpo37251) ./python.exe
Python 3.9.0a0 (heads/master:7a68f8c28b, Jun 15 2019, 21:00:05)
[Clang 7.0.2 (clang-700.1.81)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from unittest.mock import *
>>> create_autospec(MagicMock())
<MagicMock spec='MagicMock' id='4370353280'>
>>> create_autospec(MagicMock(spec=lambda x: x))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File
"/Users/karthikeyansingaravelan/stuff/python/cpython/Lib/unittest/mock.py",
line 2547, in create_autospec
mock = Klass(parent=_parent, _new_parent=_parent, _new_name=_new_name,
File
"/Users/karthikeyansingaravelan/stuff/python/cpython/Lib/unittest/mock.py",
line 2066, in __init__
super().__init__(*args, **kwargs)
File
"/Users/karthikeyansingaravelan/stuff/python/cpython/Lib/unittest/mock.py",
line 1996, in __init__
_safe_super(AsyncMagicMixin, self).__init__(*args, **kw)
File
"/Users/karthikeyansingaravelan/stuff/python/cpython/Lib/unittest/mock.py",
line 1007, in __init__
_safe_super(CallableMixin, self).__init__(
File
"/Users/karthikeyansingaravelan/stuff/python/cpython/Lib/unittest/mock.py",
line 442, in __init__
self._mock_add_spec(spec, spec_set, _spec_as_instance, _eat_self)
File
"/Users/karthikeyansingaravelan/stuff/python/cpython/Lib/unittest/mock.py",
line 503, in _mock_add_spec
res = _get_signature_object(spec,
File
"/Users/karthikeyansingaravelan/stuff/python/cpython/Lib/unittest/mock.py",
line 99, in _get_signature_object
return func, inspect.signature(sig_func)
File "/Users/karthikeyansingaravelan/stuff/python/cpython/Lib/inspect.py",
line 3093, in signature
return Signature.from_callable(obj, follow_wrapped=follow_wrapped)
File "/Users/karthikeyansingaravelan/stuff/python/cpython/Lib/inspect.py",
line 2842, in from_callable
return _signature_from_callable(obj, sigcls=cls,
File "/Users/karthikeyansingaravelan/stuff/python/cpython/Lib/inspect.py",
line 2292, in _signature_from_callable
return _signature_from_function(sigcls, obj,
File "/Users/karthikeyansingaravelan/stuff/python/cpython/Lib/inspect.py",
line 2175, in _signature_from_function
parameters.append(Parameter(name, annotation=annotation,
File "/Users/karthikeyansingaravelan/stuff/python/cpython/Lib/inspect.py",
line 2495, in __init__
raise TypeError(msg)
TypeError: name must be a str, not a MagicMock
[0]
https://github.com/python/cpython/blob/3a1d50e7e573efb577714146bed5c03b9c95f466/Lib/unittest/mock.py#L55
----------
versions: +Python 3.9
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue37251>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com