Re: [Sqlalchemy-tickets] [sqlalchemy] #1128: before_flush() sucks
Brought to you by:
zzzeek
From: sqlalchemy <mi...@zz...> - 2008-08-07 21:56:28
|
#1128: before_flush() sucks --------------------------------+------------------------------------------- Reporter: zzzeek | Owner: zzzeek Type: defect | Status: new Priority: high | Milestone: 0.5.0 Component: orm | Severity: minor - half an hour Resolution: | Keywords: Status_field: awaiting triage | --------------------------------+------------------------------------------- Old description: > 1. needs a simple "reentrant" blocker so that autoflush on lazyload is > blocked throughout the execution of `session.flush()` > 2. the reentrant blocker should raise an error for an explicit userland > call to `session.flush()`. > 3. the "new", "dirty" and "deleted" lists need to be (re-)calculated > '''after''' the `before_flush()` method executes, geez... i.e. > > {{{ > dirty = self._dirty_states > > # ... (check for nothing dirty) ... > > # now we're flushing > flush_context = UOWTransaction(self) > > if self.extension is not None: > self.extension.before_flush(self, flush_context, objects) > > # recalculate ! > dirty = self._dirty_states > > # *now* get these > deleted = set(self._deleted) > new = set(self._new) > > dirty = set(dirty).difference(deleted) > }}} New description: 1. needs a simple "reentrant" blocker so that autoflush on lazyload is blocked throughout the execution of `session.flush()` 2. the reentrant blocker should raise an error for an explicit userland call to `session.flush()`. 3. the "new", "dirty" and "deleted" lists need to be (re-)calculated '''after''' the `before_flush()` method executes, geez... i.e. {{{ dirty = self._dirty_states # ... (check for nothing dirty) ... # now we're flushing flush_context = UOWTransaction(self) if self.extension is not None: self.extension.before_flush(self, flush_context, objects) # recalculate ! dirty = self._dirty_states # *now* get these deleted = set(self._deleted) new = set(self._new) dirty = set(dirty).difference(deleted) }}} -- Ticket URL: <http://www.sqlalchemy.org/trac/ticket/1128#comment:1> sqlalchemy <http://www.sqlalchemy.org/> The Database Toolkit for Python |