mock.seal has infinite recursion with mutually recursive class references
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức phù hợp với người mới
- 38/100
Hướng nghiên cứu
Bắt đầu với unittest.mock.seal và create_autospec trong unittest/mock.py, sử dụng trình tái hiện Foo/Bar được cung cấp để lần theo đường đệ quy. Công việc được hoàn tất khi các tham chiếu lớp đệ quy lẫn nhau không còn gây ra đệ quy vô hạn hoặc RecursionError khi mock.seal(foo) chạy.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Bug report
This code seems to cause infinite recursion in unittest.mock.seal:
from unittest import mock
class Foo:
pass
class Bar:
foo = Foo
Foo.bar = Bar
foo = mock.create_autospec(Foo)
mock.seal(foo)
$ python3 foo.py
Traceback (most recent call last):
File "/tmp/tmp.yKOznvlUIG/foo.py", line 8, in <module>
mock.seal(foo)
File "/usr/lib/python3.9/unittest/mock.py", line 2874, in seal
seal(m)
File "/usr/lib/python3.9/unittest/mock.py", line 2874, in seal
seal(m)
File "/usr/lib/python3.9/unittest/mock.py", line 2874, in seal
seal(m)
[Previous line repeated 973 more times]
File "/usr/lib/python3.9/unittest/mock.py", line 2866, in seal
m = getattr(mock, attr)
File "/usr/lib/python3.9/unittest/mock.py", line 655, in __getattr__
result = create_autospec(
File "/usr/lib/python3.9/unittest/mock.py", line 2627, in create_autospec
mock = Klass(parent=_parent, _new_parent=_parent, _new_name=_new_name,
File "/usr/lib/python3.9/unittest/mock.py", line 2034, in __init__
_safe_super(MagicMixin, self).__init__(*args, **kw)
File "/usr/lib/python3.9/unittest/mock.py", line 1074, in __init__
_safe_super(CallableMixin, self).__init__(
File "/usr/lib/python3.9/unittest/mock.py", line 437, in __init__
self._mock_add_spec(spec, spec_set, _spec_as_instance, _eat_self)
File "/usr/lib/python3.9/unittest/mock.py", line 500, in _mock_add_spec
res = _get_signature_object(spec,
File "/usr/lib/python3.9/unittest/mock.py", line 107, in _get_signature_object
return func, inspect.signature(sig_func)
File "/usr/lib/python3.9/inspect.py", line 3113, in signature
return Signature.from_callable(obj, follow_wrapped=follow_wrapped)
File "/usr/lib/python3.9/inspect.py", line 2862, in from_callable
return _signature_from_callable(obj, sigcls=cls,
File "/usr/lib/python3.9/inspect.py", line 2333, in _signature_from_callable
wrapped_sig = _get_signature_of(obj.func)
File "/usr/lib/python3.9/inspect.py", line 2329, in _signature_from_callable
return _signature_from_builtin(sigcls, obj,
File "/usr/lib/python3.9/inspect.py", line 2149, in _signature_from_builtin
return _signature_fromstr(cls, func, s, skip_bound_arg)
File "/usr/lib/python3.9/inspect.py", line 2009, in _signature_fromstr
_signature_strip_non_python_syntax(s)
File "/usr/lib/python3.9/inspect.py", line 1962, in _signature_strip_non_python_syntax
for t in token_stream:
File "/usr/lib/python3.9/tokenize.py", line 525, in _tokenize
pseudomatch = _compile(PseudoToken).match(line, pos)
File "/usr/lib/python3.9/tokenize.py", line 99, in _compile
return re.compile(expr, re.UNICODE)
File "/usr/lib/python3.9/re.py", line 252, in compile
return _compile(pattern, flags)
File "/usr/lib/python3.9/re.py", line 292, in _compile
flags = flags.value
File "/usr/lib/python3.9/types.py", line 178, in __get__
return self.fget(instance)
RecursionError: maximum recursion depth exceeded
Your environment
- CPython versions tested on: 3.9.9
- Operating system and architecture: Debian testing, amd64
- Ngôn ngữ chính
- Python
- Star
- 77.2k
- Fork
- 36k
- Merge trung bình
- 1 ngày 9 giờ
- Pull request đã merge (30 ngày)
- 558
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của python/cpython
-
docs pending
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
-
stdlib type-feature
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
-
stdlib type-feature
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
-
build type-bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
-
stdlib topic-email type-feature
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
Tất cả issue của python/cpython
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 65/100
qgis/QGIS-Documentation#11275 ·
-
bug priority:normal ready-for-dev
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
OpenHands/extensions#626 · 1 bình luận ·
-
Change observation tooltip text Đang mở
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 90/100
CSCfi/sd-search-api#39 ·
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 90/100
-
please add to porn list Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
StevenBlack/hosts#3255 ·