Minor performance improvements for state getattribute and setattr (#4543)

This commit is contained in:
benedikt-bartscher 2024-12-21 01:27:07 +01:00 committed by GitHub
parent 28568fd12f
commit c310c020bb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1240,13 +1240,16 @@ class BaseState(Base, ABC, extra=pydantic.Extra.allow):
if not super().__getattribute__("__dict__"): if not super().__getattribute__("__dict__"):
return super().__getattribute__(name) return super().__getattribute__(name)
inherited_vars = { # Fast path for dunder
**super().__getattribute__("inherited_vars"), if name.startswith("__"):
**super().__getattribute__("inherited_backend_vars"), return super().__getattribute__(name)
}
# For now, handle router_data updates as a special case. # For now, handle router_data updates as a special case.
if name in inherited_vars or name == constants.ROUTER_DATA: if (
name == constants.ROUTER_DATA
or name in super().__getattribute__("inherited_vars")
or name in super().__getattribute__("inherited_backend_vars")
):
parent_state = super().__getattribute__("parent_state") parent_state = super().__getattribute__("parent_state")
if parent_state is not None: if parent_state is not None:
return getattr(parent_state, name) return getattr(parent_state, name)
@ -1301,8 +1304,7 @@ class BaseState(Base, ABC, extra=pydantic.Extra.allow):
value = value.__wrapped__ value = value.__wrapped__
# Set the var on the parent state. # Set the var on the parent state.
inherited_vars = {**self.inherited_vars, **self.inherited_backend_vars} if name in self.inherited_vars or name in self.inherited_backend_vars:
if name in inherited_vars:
setattr(self.parent_state, name, value) setattr(self.parent_state, name, value)
return return