summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/orm/attributes.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2015-02-18 16:08:19 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2015-02-18 16:08:19 -0500
commit3209a73b92e17dd351a50c41352791baeefcd846 (patch)
tree2598487e5032baa9847fa11fbe9b34ee64596f7e /lib/sqlalchemy/orm/attributes.py
parent3eff76c4b0c234717e6d8a157ef6883b72694927 (diff)
downloadsqlalchemy-3209a73b92e17dd351a50c41352791baeefcd846.tar.gz
- Mapped state internals have been reworked to allow for a 50% reduction
in callcounts specific to the "expiration" of objects, as in the "auto expire" feature of :meth:`.Session.commit` and for :meth:`.Session.expire_all`, as well as in the "cleanup" step which occurs when object states are garbage collected. fixes #3307
Diffstat (limited to 'lib/sqlalchemy/orm/attributes.py')
-rw-r--r--lib/sqlalchemy/orm/attributes.py21
1 files changed, 3 insertions, 18 deletions
diff --git a/lib/sqlalchemy/orm/attributes.py b/lib/sqlalchemy/orm/attributes.py
index e9c8c511a..a5af4e8ba 100644
--- a/lib/sqlalchemy/orm/attributes.py
+++ b/lib/sqlalchemy/orm/attributes.py
@@ -527,23 +527,6 @@ class AttributeImpl(object):
state.parents[id_] = False
- def set_callable(self, state, callable_):
- """Set a callable function for this attribute on the given object.
-
- This callable will be executed when the attribute is next
- accessed, and is assumed to construct part of the instances
- previously stored state. When its value or values are loaded,
- they will be established as part of the instance's *committed
- state*. While *trackparent* information will be assembled for
- these instances, attribute-level event handlers will not be
- fired.
-
- The callable overrides the class level callable set in the
- ``InstrumentedAttribute`` constructor.
-
- """
- state.callables[self.key] = callable_
-
def get_history(self, state, dict_, passive=PASSIVE_OFF):
raise NotImplementedError()
@@ -586,7 +569,9 @@ class AttributeImpl(object):
if not passive & CALLABLES_OK:
return PASSIVE_NO_RESULT
- if key in state.callables:
+ if key in state.expired_attributes:
+ value = state._load_expired(state, passive)
+ elif key in state.callables:
callable_ = state.callables[key]
value = callable_(state, passive)
elif self.callable_: