using inspect.unwrap on `maurix.types.Obj` places the object into a state where serializing raises a RecursionError
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 45/100
Piste de recherche
Commencez dans mautrix/types/util/obj.py, en particulier avec getattr et serialize(), et reproduisez l’exemple inspect.unwrap(mautrix.types.Obj()) de l’issue. Vérifiez que les noms dunder ou sunder manquants ne sont pas créés dynamiquement, tandis que les attributs normaux manquants conservent leur comportement existant. Le travail est terminé lorsque l’exemple ne laisse plus l’objet sérialisable récursivement et lève uniquement l’erreur unwrap attendue.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
>>> import mautrix.types
>>> import inspect
>>> inspect.unwrap(mautrix.types.Obj())
Traceback (most recent call last):
File "<python-input-2>", line 1, in <module>
inspect.unwrap(mautrix.types.Obj())
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/home/lily/.pyenv/versions/3.13.2/lib/python3.13/inspect.py", line 791, in unwrap
raise ValueError('wrapper loop when unwrapping {!r}'.format(f))
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
File "/home/lily/Documents/matrix-codecrimes/.venv/lib/python3.13/site-packages/mautrix/types/util/obj.py", line 36, in __repr__
return repr(self.serialize())
~~~~~~~~~~~~~~^^
File "/home/lily/Documents/matrix-codecrimes/.venv/lib/python3.13/site-packages/mautrix/types/util/obj.py", line 62, in serialize
k: v.serialize() if isinstance(v, Serializable) else v
~~~~~~~~~~~^^
File "/home/lily/Documents/matrix-codecrimes/.venv/lib/python3.13/site-packages/mautrix/types/util/obj.py", line 62, in serialize
k: v.serialize() if isinstance(v, Serializable) else v
~~~~~~~~~~~^^
File "/home/lily/Documents/matrix-codecrimes/.venv/lib/python3.13/site-packages/mautrix/types/util/obj.py", line 62, in serialize
k: v.serialize() if isinstance(v, Serializable) else v
~~~~~~~~~~~^^
[Previous line repeated 986 more times]
RecursionError: maximum recursion depth exceeded
this appears to be caused because inspect.wrapper attempts to access .__wrapped__ which causes the __getattr__ to create it, which is bad.
maybe it would be a good idea not to create __dunder__ and _sunder_ names? so something like:
def __getattr__(self, name):
if name.startswith("_") and name.endswith("_"):
raise AttributeError(name)
...
just to prevent brainfarts: this wont prevent access to defined dunders since __getattr__ is only called when the name cannot be found through other means.
- Langage dominant
- Python
- Étoiles
- 249
- Forks
- 84
- Métriques de merge des PR
- Aucune PR mergée en 30 j
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 mautrix/python
-
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 30/100
-
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 25/100
-
Difficulté 4/5 3-5 jours Accessibilité débutants 30/100
-
Difficulté 4/5 3-5 jours Accessibilité débutants 35/100
-
Difficulté 4/5 3-5 jours Accessibilité débutants 38/100
Toutes les issues de mautrix/python
Issues similaires
-
triage/confirmed
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
agentscope-ai/agentscope#2775 ·
-
comp/desktop P3 type/bug
Difficulté 1/5 Moins d'une heure Accessibilité débutants 92/100
NousResearch/hermes-agent#118866 ·
-
bug
Difficulté 1/5 Moins d'une heure Accessibilité débutants 90/100
apache/cloudstack#14222 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100