dest_dict, obj, None)
def cascade_iterator(self, type_, state, dict_, visited_states, halt_on=None):
- if not type_ in self.cascade:
- return
+ #assert type_ in self.cascade
# only actively lazy load on the 'delete' cascade
if type_ != 'delete' or self.passive_deletes:
# grab the cascades before adding the item to the deleted list
# so that autoflush does not delete the item
+ # the strong reference to the instance itself is significant here
cascade_states = list(_cascade_state_iterator('delete', state))
self._deleted[state] = state.obj()
from sqlalchemy.util import topological
from sqlalchemy.orm import attributes, interfaces
from sqlalchemy.orm import util as mapperutil
-from sqlalchemy.orm.util import _state_mapper
session = util.importlater("sqlalchemy.orm", "session")
class UOWEventHandler(interfaces.AttributeExtension):
sess = session._state_session(state)
if sess:
- prop = _state_mapper(state)._props[self.key]
+ prop = state.manager.mapper._props[self.key]
item_state = attributes.instance_state(item)
if prop.cascade.save_update and \
(prop.cascade_backrefs or self.key == initiator.key) and \
def remove(self, state, item, initiator):
sess = session._state_session(state)
if sess:
- prop = _state_mapper(state)._props[self.key]
+ prop = state.manager.mapper._props[self.key]
# expunge pending orphans
item_state = attributes.instance_state(item)
if prop.cascade.delete_orphan and \
sess = session._state_session(state)
if sess:
- prop = _state_mapper(state)._props[self.key]
+ prop = state.manager.mapper._props[self.key]
if newvalue is not None:
newvalue_state = attributes.instance_state(newvalue)
if prop.cascade.save_update and \
return False
if state not in self.states:
- mapper = _state_mapper(state)
+ mapper = state.manager.mapper
if mapper not in self.mappers:
mapper._per_mapper_flush_actions(self)