mock.seal has infinite recursion with mutually recursive class references
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Accessibilité débutants
- 38/100
Piste de recherche
Commencez par unittest.mock.seal et create_autospec dans unittest/mock.py, en utilisant le reproducteur Foo/Bar fourni pour suivre le chemin récursif. Le travail est terminé lorsque les références de classes mutuellement récursives ne provoquent plus de récursion infinie ni de RecursionError lors de l’exécution de mock.seal(foo).
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
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
- Langage dominant
- Python
- Étoiles
- 77.2k
- Forks
- 36k
- Merge moyen
- 1 j 9 h
- PR mergées (30 j)
- 558
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de python/cpython
-
docs pending
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
-
stdlib type-feature
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
-
stdlib type-feature
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
-
build type-bug
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
-
stdlib topic-email type-feature
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
Toutes les issues de python/cpython
Issues similaires
-
area/auth bug comp/agent P3 platform/discord type/security
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
NousResearch/hermes-agent#117848 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 74/100
bancolombia/sentinel#23 ·
-
test md OuverteCI
Difficulté 2/5 1-3 heures Accessibilité débutants 74/100
-
integration:quickjs org:external priority:backlog topic:code-interpreter topic:middleware type:feature
Difficulté 2/5 1-3 heures Accessibilité débutants 74/100
langchain-ai/deepagents#6450 ·
-
bug client
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100