summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/orm/instrumentation.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2010-12-21 21:37:52 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2010-12-21 21:37:52 -0500
commitb79a5e7640fc1c8ca7acce5bfd2509ddf0102080 (patch)
tree4fce95f955d2f1ca15ded2c3030e78b79e82cb68 /lib/sqlalchemy/orm/instrumentation.py
parentdff4e0591eee3def7c4c38666c8fc581c327aa87 (diff)
downloadsqlalchemy-b79a5e7640fc1c8ca7acce5bfd2509ddf0102080.tar.gz
- another heap of inlinings and now I really have to be done with this
Diffstat (limited to 'lib/sqlalchemy/orm/instrumentation.py')
-rw-r--r--lib/sqlalchemy/orm/instrumentation.py16
1 files changed, 9 insertions, 7 deletions
diff --git a/lib/sqlalchemy/orm/instrumentation.py b/lib/sqlalchemy/orm/instrumentation.py
index dba3a6830..9876dde3f 100644
--- a/lib/sqlalchemy/orm/instrumentation.py
+++ b/lib/sqlalchemy/orm/instrumentation.py
@@ -166,11 +166,13 @@ class ClassManager(dict):
self.uninstall_member('__init__')
self.new_init = None
- def _create_instance_state(self, instance):
+ @util.memoized_property
+ def _state_constructor(self):
+ self.dispatch.on_first_init(self, self.class_)
if self.mutable_attributes:
- return state.MutableAttrInstanceState(instance, self)
+ return state.MutableAttrInstanceState
else:
- return state.InstanceState(instance, self)
+ return state.InstanceState
def manage(self):
"""Mark this instance as the manager for its class."""
@@ -290,12 +292,12 @@ class ClassManager(dict):
def new_instance(self, state=None):
instance = self.class_.__new__(self.class_)
setattr(instance, self.STATE_ATTR,
- state or self._create_instance_state(instance))
+ state or self._state_constructor(instance, self))
return instance
def setup_instance(self, instance, state=None):
setattr(instance, self.STATE_ATTR,
- state or self._create_instance_state(instance))
+ state or self._state_constructor(instance, self))
def teardown_instance(self, instance):
delattr(instance, self.STATE_ATTR)
@@ -318,7 +320,7 @@ class ClassManager(dict):
return self._subclass_manager(instance.__class__).\
_new_state_if_none(instance)
else:
- state = self._create_instance_state(instance)
+ state = self._state_constructor(instance, self)
setattr(instance, self.STATE_ATTR, state)
return state
@@ -421,7 +423,7 @@ class _ClassInstrumentationAdapter(ClassManager):
self._adapted.initialize_instance_dict(self.class_, instance)
if state is None:
- state = self._create_instance_state(instance)
+ state = self._state_constructor(instance, self)
# the given instance is assumed to have no state
self._adapted.install_state(self.class_, instance, state)