diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/sqlalchemy/orm/attributes.py | 6 | ||||
| -rw-r--r-- | lib/sqlalchemy/orm/interfaces.py | 3 |
2 files changed, 9 insertions, 0 deletions
diff --git a/lib/sqlalchemy/orm/attributes.py b/lib/sqlalchemy/orm/attributes.py index 2b2760208..5c242aa7e 100644 --- a/lib/sqlalchemy/orm/attributes.py +++ b/lib/sqlalchemy/orm/attributes.py @@ -1269,6 +1269,9 @@ class ClassManager(dict): def setup_instance(self, instance, state=None): setattr(instance, self.STATE_ATTR, state or self.instance_state_factory(instance, self)) + + def teardown_instance(self, instance): + delattr(instance, self.STATE_ATTR) def _new_state_if_none(self, instance): """Install a default InstanceState if none is present. @@ -1381,6 +1384,9 @@ class _ClassInstrumentationAdapter(ClassManager): state.dict = self._adapted.get_instance_dict(self.class_, instance) return state + def teardown_instance(self, instance): + self._adapted.remove_state(self.class_, instance) + def state_of(self, instance): if hasattr(self._adapted, 'state_of'): return self._adapted.state_of(self.class_, instance) diff --git a/lib/sqlalchemy/orm/interfaces.py b/lib/sqlalchemy/orm/interfaces.py index 25664f258..b210e577f 100644 --- a/lib/sqlalchemy/orm/interfaces.py +++ b/lib/sqlalchemy/orm/interfaces.py @@ -889,5 +889,8 @@ class InstrumentationManager(object): def install_state(self, class_, instance, state): setattr(instance, '_default_state', state) + def remove_state(self, class_, instance): + delattr(instance, '_default_state', state) + def state_getter(self, class_): return lambda instance: getattr(instance, '_default_state') |
