Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 11 additions & 1 deletion backend/record.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,17 @@ def _get_sigfig_formatted_value(self, attr):
return v

def __getattr__(self, attr):
v = self._payload.get(attr)
# Guard against recursion when the instance has no _payload yet — e.g.
# during unpickling, when pickle probes getattr(obj, "__setstate__")
# before __dict__ is restored. Reading via __dict__ (not self._payload)
# avoids re-entering __getattr__, and dunder lookups raise cleanly so
# pickle falls back to its default state restore.
if attr.startswith("__") and attr.endswith("__"):
raise AttributeError(attr)
payload = self.__dict__.get("_payload")
if payload is None:
raise AttributeError(attr)
v = payload.get(attr)
if v is None and self.defaults:
v = self.defaults.get(attr)
return v
Expand Down
Loading