Hacktoberfest 2026: die Issues, die Maintainer für den Oktober markiert haben – offen und einsteigerfreundlich. Hacktoberfest-Issues durchsuchen

using inspect.unwrap on `maurix.types.Obj` places the object into a state where serializing raises a RecursionError

Offen
#176 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

@Deln0r arbeitet bereits daran.

Seit 13.5.2026.

  • #185 von @Deln0r — offen

Bewertung

Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Anfängerfreundlichkeit
45/100
Issue-Typ
Bug
Klarheit
Größtenteils klar
Aktivitätsstatus
Veraltet
Tech-Stack
python
Bereich
backend

Rechercherichtung

Beginne in mautrix/types/util/obj.py, insbesondere bei getattr und serialize(), und reproduziere das inspect.unwrap(mautrix.types.Obj())-Beispiel aus dem Issue. Überprüfe, dass fehlende Dunder- oder Sunder-Namen nicht dynamisch erstellt werden, während normale fehlende Attribute ihr bisheriges Verhalten beibehalten. Erledigt ist die Aufgabe, wenn das Beispiel das Objekt nicht mehr rekursiv serialisierbar lässt und nur den erwarteten Unwrap-Fehler auslöst.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

bug
>>> 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.

Vorherrschende Sprache
Python
Sterne
250
Forks
85
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus mautrix/python

Alle Issues in mautrix/python

Ähnliche Issues

Weitere Issues zu Python

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.