diff options
Diffstat (limited to 'lib/sqlalchemy')
-rw-r--r-- | lib/sqlalchemy/engine/strategies.py | 6 | ||||
-rw-r--r-- | lib/sqlalchemy/engine/threadlocal.py | 4 | ||||
-rw-r--r-- | lib/sqlalchemy/event.py | 12 | ||||
-rw-r--r-- | lib/sqlalchemy/events.py | 16 | ||||
-rw-r--r-- | lib/sqlalchemy/interfaces.py | 49 | ||||
-rw-r--r-- | lib/sqlalchemy/orm/attributes.py | 6 | ||||
-rw-r--r-- | lib/sqlalchemy/orm/deprecated_interfaces.py | 40 | ||||
-rw-r--r-- | lib/sqlalchemy/orm/events.py | 42 | ||||
-rw-r--r-- | lib/sqlalchemy/orm/mapper.py | 6 | ||||
-rw-r--r-- | lib/sqlalchemy/pool.py | 2 | ||||
-rw-r--r-- | lib/sqlalchemy/schema.py | 24 |
11 files changed, 102 insertions, 105 deletions
diff --git a/lib/sqlalchemy/engine/strategies.py b/lib/sqlalchemy/engine/strategies.py index 8de29271b..5a81bd5f2 100644 --- a/lib/sqlalchemy/engine/strategies.py +++ b/lib/sqlalchemy/engine/strategies.py @@ -137,13 +137,13 @@ class DefaultEngineStrategy(EngineStrategy): return do_on_connect(conn) - event.listen(on_connect, 'on_first_connect', pool) - event.listen(on_connect, 'on_connect', pool) + event.listen(pool, 'on_first_connect', on_connect) + event.listen(pool, 'on_connect', on_connect) def first_connect(dbapi_connection, connection_record): c = base.Connection(engine, connection=dbapi_connection) dialect.initialize(c) - event.listen(first_connect, 'on_first_connect', pool) + event.listen(pool, 'on_first_connect', first_connect) return engine diff --git a/lib/sqlalchemy/engine/threadlocal.py b/lib/sqlalchemy/engine/threadlocal.py index 9635cce17..b6fa14af7 100644 --- a/lib/sqlalchemy/engine/threadlocal.py +++ b/lib/sqlalchemy/engine/threadlocal.py @@ -29,12 +29,12 @@ class TLConnection(base.Connection): class TLEvents(events.EngineEvents): @classmethod - def listen(cls, fn, identifier, target): + def listen(cls, target, identifier, fn): if target.TLConnection is TLConnection: target.TLConnection = base._listener_connection_cls( TLConnection, target.dispatch) - events.EngineEvents.listen(fn, identifier, target) + events.EngineEvents.listen(target, identifier, fn) class TLEngine(base.Engine): """An Engine that includes support for thread-local managed transactions.""" diff --git a/lib/sqlalchemy/event.py b/lib/sqlalchemy/event.py index 359a4c017..2df42d64d 100644 --- a/lib/sqlalchemy/event.py +++ b/lib/sqlalchemy/event.py @@ -5,7 +5,7 @@ from sqlalchemy import util, exc CANCEL = util.symbol('CANCEL') NO_RETVAL = util.symbol('NO_RETVAL') -def listen(fn, identifier, target, *args, **kw): +def listen(target, identifier, fn, *args, **kw): """Register a listener function for the given target. """ @@ -13,12 +13,12 @@ def listen(fn, identifier, target, *args, **kw): for evt_cls in _registrars[identifier]: tgt = evt_cls.accept_with(target) if tgt is not None: - tgt.dispatch.listen(fn, identifier, tgt, *args, **kw) + tgt.dispatch.listen(tgt, identifier, fn, *args, **kw) return raise exc.InvalidRequestError("No such event %s for target %s" % (identifier,target)) -def remove(fn, identifier, target): +def remove(target, identifier, fn): """Remove an event listener. Note that some event removals, particularly for those event dispatchers @@ -28,7 +28,7 @@ def remove(fn, identifier, target): """ for evt_cls in _registrars[identifier]: for tgt in evt_cls.accept_with(target): - tgt.dispatch.remove(fn, identifier, tgt, *args, **kw) + tgt.dispatch.remove(identifier, tgt, fn, *args, **kw) return _registrars = util.defaultdict(list) @@ -116,11 +116,11 @@ class Events(object): return None @classmethod - def listen(cls, fn, identifier, target, propagate=False): + def listen(cls, target, identifier, fn, propagate=False): getattr(target.dispatch, identifier).append(fn, target, propagate) @classmethod - def remove(cls, fn, identifier, target): + def remove(cls, target, identifier, fn): getattr(target.dispatch, identifier).remove(fn, target) @classmethod diff --git a/lib/sqlalchemy/events.py b/lib/sqlalchemy/events.py index a1313de63..3d9eb4d3b 100644 --- a/lib/sqlalchemy/events.py +++ b/lib/sqlalchemy/events.py @@ -21,7 +21,7 @@ class DDLEvents(event.Events): connection.execute("ALTER TABLE %s SET name=foo_%s" % (target.name, target.name)) - event.listen(on_after_create, "on_after_create", some_table) + event.listen(some_table, "on_after_create", on_after_create) DDL events integrate closely with the :class:`.DDL` class and the :class:`.DDLElement` hierarchy @@ -30,9 +30,9 @@ class DDLEvents(event.Events): from sqlalchemy import DDL event.listen( - DDL("ALTER TABLE %(table)s SET name=foo_%(table)s"), + some_table, "on_after_create", - some_table + DDL("ALTER TABLE %(table)s SET name=foo_%(table)s") ) The methods here define the name of an event as well @@ -126,7 +126,7 @@ class PoolEvents(event.Events): def my_on_checkout(dbapi_conn, connection_rec, connection_proxy): "handle an on checkout event" - events.listen(my_on_checkout, 'on_checkout', Pool) + events.listen(Pool, 'on_checkout', my_on_checkout) In addition to accepting the :class:`.Pool` class and :class:`.Pool` instances, :class:`.PoolEvents` also accepts :class:`.Engine` objects and @@ -137,7 +137,7 @@ class PoolEvents(event.Events): engine = create_engine("postgresql://scott:tiger@localhost/test") # will associate with engine.pool - events.listen(my_on_checkout, 'on_checkout', engine) + events.listen(engine, 'on_checkout', my_on_checkout) """ @@ -227,7 +227,7 @@ class EngineEvents(event.Events): log.info("Received statement: %s" % clauseelement) engine = create_engine('postgresql://scott:tiger@localhost/test') - event.listen(on_before_execute, "on_before_execute", engine) + event.listen(engine, "on_before_execute", on_before_execute) Some events allow modifiers to the listen() function. @@ -241,7 +241,7 @@ class EngineEvents(event.Events): """ @classmethod - def listen(cls, fn, identifier, target, retval=False): + def listen(cls, target, identifier, fn, retval=False): from sqlalchemy.engine.base import Connection, \ _listener_connection_cls if target.Connection is Connection: @@ -271,7 +271,7 @@ class EngineEvents(event.Events): "'on_before_cursor_execute' engine " "event listeners accept the 'retval=True' " "argument.") - event.Events.listen(fn, identifier, target) + event.Events.listen(target, identifier, fn) def on_before_execute(self, conn, clauseelement, multiparams, params): """Intercept high level execute() events.""" diff --git a/lib/sqlalchemy/interfaces.py b/lib/sqlalchemy/interfaces.py index a4398ecf5..26910a5e6 100644 --- a/lib/sqlalchemy/interfaces.py +++ b/lib/sqlalchemy/interfaces.py @@ -78,13 +78,13 @@ class PoolListener(object): listener = util.as_interface(listener, methods=('connect', 'first_connect', 'checkout', 'checkin')) if hasattr(listener, 'connect'): - event.listen(listener.connect, 'on_connect', self) + event.listen(self, 'on_connect', listener.connect) if hasattr(listener, 'first_connect'): - event.listen(listener.first_connect, 'on_first_connect', self) + event.listen(self, 'on_first_connect', listener.first_connect) if hasattr(listener, 'checkout'): - event.listen(listener.checkout, 'on_checkout', self) + event.listen(self, 'on_checkout', listener.checkout) if hasattr(listener, 'checkin'): - event.listen(listener.checkin, 'on_checkin', self) + event.listen(self, 'on_checkin', listener.checkin) def connect(self, dbapi_con, con_record): @@ -187,7 +187,7 @@ class ConnectionProxy(object): clauseelement, *multiparams, **params) - event.listen(adapt_execute, 'on_before_execute', self) + event.listen(self, 'on_before_execute', adapt_execute) def adapt_cursor_execute(conn, cursor, statement, parameters,context, executemany, ): @@ -209,8 +209,7 @@ class ConnectionProxy(object): executemany, ) - event.listen(adapt_cursor_execute, 'on_before_cursor_execute', - self) + event.listen(self, 'on_before_cursor_execute', adapt_cursor_execute) def do_nothing_callback(*arg, **kw): pass @@ -222,24 +221,24 @@ class ConnectionProxy(object): return util.update_wrapper(go, fn) - event.listen(adapt_listener(listener.begin), 'on_begin', self) - event.listen(adapt_listener(listener.rollback), 'on_rollback', - self) - event.listen(adapt_listener(listener.commit), 'on_commit', self) - event.listen(adapt_listener(listener.savepoint), 'on_savepoint' - , self) - event.listen(adapt_listener(listener.rollback_savepoint), - 'on_rollback_savepoint', self) - event.listen(adapt_listener(listener.release_savepoint), - 'on_release_savepoint', self) - event.listen(adapt_listener(listener.begin_twophase), - 'on_begin_twophase', self) - event.listen(adapt_listener(listener.prepare_twophase), - 'on_prepare_twophase', self) - event.listen(adapt_listener(listener.rollback_twophase), - 'on_rollback_twophase', self) - event.listen(adapt_listener(listener.commit_twophase), - 'on_commit_twophase', self) + event.listen(self, 'on_begin', adapt_listener(listener.begin)) + event.listen(self, 'on_rollback', + adapt_listener(listener.rollback)) + event.listen(self, 'on_commit', adapt_listener(listener.commit)) + event.listen(self, 'on_savepoint', + adapt_listener(listener.savepoint)) + event.listen(self, 'on_rollback_savepoint', + adapt_listener(listener.rollback_savepoint)) + event.listen(self, 'on_release_savepoint', + adapt_listener(listener.release_savepoint)) + event.listen(self, 'on_begin_twophase', + adapt_listener(listener.begin_twophase)) + event.listen(self, 'on_prepare_twophase', + adapt_listener(listener.prepare_twophase)) + event.listen(self, 'on_rollback_twophase', + adapt_listener(listener.rollback_twophase)) + event.listen(self, 'on_commit_twophase', + adapt_listener(listener.commit_twophase)) def execute(self, conn, execute, clauseelement, *multiparams, **params): diff --git a/lib/sqlalchemy/orm/attributes.py b/lib/sqlalchemy/orm/attributes.py index d80a7fe5a..232f0737c 100644 --- a/lib/sqlalchemy/orm/attributes.py +++ b/lib/sqlalchemy/orm/attributes.py @@ -846,11 +846,11 @@ def backref_listeners(attribute, key, uselist): passive=PASSIVE_NO_FETCH) if uselist: - event.listen(append, "on_append", attribute, retval=False, raw=True) + event.listen(attribute, "on_append", append, retval=False, raw=True) else: - event.listen(set_, "on_set", attribute, retval=False, raw=True) + event.listen(attribute, "on_set", set_, retval=False, raw=True) # TODO: need coverage in test/orm/ of remove event - event.listen(remove, "on_remove", attribute, retval=False, raw=True) + event.listen(attribute, "on_remove", remove, retval=False, raw=True) class History(tuple): """A 3-tuple of added, unchanged and deleted values, diff --git a/lib/sqlalchemy/orm/deprecated_interfaces.py b/lib/sqlalchemy/orm/deprecated_interfaces.py index 52193b149..8ec5c8042 100644 --- a/lib/sqlalchemy/orm/deprecated_interfaces.py +++ b/lib/sqlalchemy/orm/deprecated_interfaces.py @@ -86,8 +86,8 @@ class MapperExtension(object): def reconstruct(instance): ls_meth(self, instance) return reconstruct - event.listen(go(ls_meth), 'on_load', - self.class_manager, raw=False, propagate=True) + event.listen(self.class_manager, 'on_load', + go(ls_meth), raw=False, propagate=True) elif meth == 'init_instance': def go(ls_meth): def init_instance(instance, args, kwargs): @@ -95,8 +95,8 @@ class MapperExtension(object): self.class_manager.original_init, instance, args, kwargs) return init_instance - event.listen(go(ls_meth), 'on_init', - self.class_manager, raw=False, propagate=True) + event.listen(self.class_manager, 'on_init', + go(ls_meth), raw=False, propagate=True) elif meth == 'init_failed': def go(ls_meth): def init_failed(instance, args, kwargs): @@ -105,10 +105,10 @@ class MapperExtension(object): instance, args, kwargs) return init_failed - event.listen(go(ls_meth), 'on_init_failure', - self.class_manager, raw=False, propagate=True) + event.listen(self.class_manager, 'on_init_failure', + go(ls_meth), raw=False, propagate=True) else: - event.listen(ls_meth, "on_%s" % meth, self, + event.listen(self, "on_%s" % meth, ls_meth, raw=False, retval=True, propagate=True) @@ -395,16 +395,16 @@ class SessionExtension(object): @classmethod def _adapt_listener(cls, self, listener): - event.listen(listener.before_commit, 'on_before_commit', self) - event.listen(listener.after_commit, 'on_after_commit', self) - event.listen(listener.after_rollback, 'on_after_rollback', self) - event.listen(listener.before_flush, 'on_before_flush', self) - event.listen(listener.after_flush, 'on_after_flush', self) - event.listen(listener.after_flush_postexec, 'on_after_flush_postexec', self) - event.listen(listener.after_begin, 'on_after_begin', self) - event.listen(listener.after_attach, 'on_after_attach', self) - event.listen(listener.after_bulk_update, 'on_after_bulk_update', self) - event.listen(listener.after_bulk_delete, 'on_after_bulk_delete', self) + event.listen(self, 'on_before_commit', listener.before_commit) + event.listen(self, 'on_after_commit', listener.after_commit) + event.listen(self, 'on_after_rollback', listener.after_rollback) + event.listen(self, 'on_before_flush', listener.before_flush) + event.listen(self, 'on_after_flush', listener.after_flush) + event.listen(self, 'on_after_flush_postexec', listener.after_flush_postexec) + event.listen(self, 'on_after_begin', listener.after_begin) + event.listen(self, 'on_after_attach', listener.after_attach) + event.listen(self, 'on_after_bulk_update', listener.after_bulk_update) + event.listen(self, 'on_after_bulk_delete', listener.after_bulk_delete) def before_commit(self, session): """Execute right before commit is called. @@ -534,13 +534,13 @@ class AttributeExtension(object): @classmethod def _adapt_listener(cls, self, listener): - event.listen(listener.append, 'on_append', self, + event.listen(self, 'on_append', listener.append, active_history=listener.active_history, raw=True, retval=True) - event.listen(listener.remove, 'on_remove', self, + event.listen(self, 'on_remove', listener.remove, active_history=listener.active_history, raw=True, retval=True) - event.listen(listener.set, 'on_set', self, + event.listen(self, 'on_set', listener.set, active_history=listener.active_history, raw=True, retval=True) diff --git a/lib/sqlalchemy/orm/events.py b/lib/sqlalchemy/orm/events.py index b610408b7..718a18606 100644 --- a/lib/sqlalchemy/orm/events.py +++ b/lib/sqlalchemy/orm/events.py @@ -26,11 +26,11 @@ class InstrumentationEvents(event.Events): return None @classmethod - def listen(cls, fn, identifier, target, propagate=False): - event.Events.listen(fn, identifier, target, propagate=propagate) + def listen(cls, target, identifier, fn, propagate=False): + event.Events.listen(target, identifier, fn, propagate=propagate) @classmethod - def remove(cls, fn, identifier, target): + def remove(cls, identifier, target, fn): raise NotImplementedError("Removal of instrumentation events not yet implemented") def on_class_instrument(self, cls): @@ -81,20 +81,20 @@ class InstanceEvents(event.Events): return None @classmethod - def listen(cls, fn, identifier, target, raw=False, propagate=False): + def listen(cls, target, identifier, fn, raw=False, propagate=False): if not raw: orig_fn = fn def wrap(state, *arg, **kw): return orig_fn(state.obj(), *arg, **kw) fn = wrap - event.Events.listen(fn, identifier, target, propagate=propagate) + event.Events.listen(target, identifier, fn, propagate=propagate) if propagate: for mgr in target.subclass_managers(True): - event.Events.listen(fn, identifier, mgr, True) + event.Events.listen(mgr, identifier, fn, True) @classmethod - def remove(cls, fn, identifier, target): + def remove(cls, identifier, target, fn): raise NotImplementedError("Removal of instance events not yet implemented") def on_init(self, target, args, kwargs): @@ -154,7 +154,7 @@ class MapperEvents(event.Events): # associate the listener function with SomeMappedClass, # to execute during the "on_before_insert" hook - event.listen(my_before_insert_listener, 'on_before_insert', SomeMappedClass) + event.listen(SomeMappedClass, 'on_before_insert', my_before_insert_listener) Available targets include mapped classes, instances of :class:`.Mapper` (i.e. returned by :func:`.mapper`, @@ -168,7 +168,7 @@ class MapperEvents(event.Events): log.debug("Instance %s being inserted" % target) # attach to all mappers - event.listen(some_listener, 'on_before_insert', mapper) + event.listen(mapper, 'on_before_insert', some_listener) Mapper events provide hooks into critical sections of the mapper, including those related to object instrumentation, @@ -223,7 +223,7 @@ class MapperEvents(event.Events): return target @classmethod - def listen(cls, fn, identifier, target, + def listen(cls, target, identifier, fn, raw=False, retval=False, propagate=False): from sqlalchemy.orm.interfaces import EXT_CONTINUE @@ -249,9 +249,9 @@ class MapperEvents(event.Events): if propagate: for mapper in target.self_and_descendants: - event.Events.listen(fn, identifier, mapper, propagate=True) + event.Events.listen(mapper, identifier, fn, propagate=True) else: - event.Events.listen(fn, identifier, target) + event.Events.listen(target, identifier, fn) def on_instrument_class(self, mapper, class_): """Receive a class when the mapper is first constructed, and has @@ -623,7 +623,7 @@ class MapperEvents(event.Events): """ @classmethod - def remove(cls, fn, identifier, target): + def remove(cls, identifier, target, fn): raise NotImplementedError("Removal of mapper events not yet implemented") class SessionEvents(event.Events): @@ -639,7 +639,7 @@ class SessionEvents(event.Events): Session = sessionmaker() - event.listen(my_before_commit, "on_before_commit", Session) + event.listen(Session, "on_before_commit", my_before_commit) The :func:`~.event.listen` function will accept :class:`.Session` objects as well as the return result @@ -673,7 +673,7 @@ class SessionEvents(event.Events): return None @classmethod - def remove(cls, fn, identifier, target): + def remove(cls, identifier, target, fn): raise NotImplementedError("Removal of session events not yet implemented") def on_before_commit(self, session): @@ -762,7 +762,7 @@ class AttributeEvents(event.Events): def my_append_listener(target, value, initiator): print "received append event for target: %s" % target - event.listen(my_append_listener, 'on_append', MyClass.collection) + event.listen(MyClass.collection, 'on_append', my_append_listener) Listeners have the option to return a possibly modified version of the value, when the ``retval=True`` flag is passed @@ -775,7 +775,7 @@ class AttributeEvents(event.Events): # setup listener on UserContact.phone attribute, instructing # it to use the return value - listen(validate_phone, 'on_set', UserContact.phone, retval=True) + listen(UserContact.phone, 'on_set', validate_phone, retval=True) A validation function like the above can also raise an exception such as :class:`ValueError` to halt the operation. @@ -807,7 +807,7 @@ class AttributeEvents(event.Events): """ @classmethod - def listen(cls, fn, identifier, target, active_history=False, + def listen(cls, target, identifier, fn, active_history=False, raw=False, retval=False, propagate=False): if active_history: @@ -828,7 +828,7 @@ class AttributeEvents(event.Events): return orig_fn(target, value, *arg) fn = wrap - event.Events.listen(fn, identifier, target, propagate) + event.Events.listen(target, identifier, fn, propagate) if propagate: from sqlalchemy.orm.instrumentation import manager_of_class @@ -836,10 +836,10 @@ class AttributeEvents(event.Events): manager = manager_of_class(target.class_) for mgr in manager.subclass_managers(True): - event.Events.listen(fn, identifier, mgr[target.key], True) + event.Events.listen(mgr[target.key], identifier, fn, True) @classmethod - def remove(cls, fn, identifier, target): + def remove(cls, identifier, target, fn): raise NotImplementedError("Removal of attribute events not yet implemented") def on_append(self, target, value, initiator): diff --git a/lib/sqlalchemy/orm/mapper.py b/lib/sqlalchemy/orm/mapper.py index 13caf1db3..1a0f3ad2f 100644 --- a/lib/sqlalchemy/orm/mapper.py +++ b/lib/sqlalchemy/orm/mapper.py @@ -400,14 +400,14 @@ class Mapper(object): if manager.info.get(_INSTRUMENTOR, False): return - event.listen(_event_on_init, 'on_init', manager, raw=True) - event.listen(_event_on_resurrect, 'on_resurrect', manager, raw=True) + event.listen(manager, 'on_init', _event_on_init, raw=True) + event.listen(manager, 'on_resurrect', _event_on_resurrect, raw=True) for key, method in util.iterate_attributes(self.class_): if isinstance(method, types.FunctionType): if hasattr(method, '__sa_reconstructor__'): self._reconstructor = method - event.listen(_event_on_load, 'on_load', manager, raw=True) + event.listen(manager, 'on_load', _event_on_load, raw=True) elif hasattr(method, '__sa_validators__'): for name in method.__sa_validators__: self._validators[name] = method diff --git a/lib/sqlalchemy/pool.py b/lib/sqlalchemy/pool.py index 122b42a1b..387ef830d 100644 --- a/lib/sqlalchemy/pool.py +++ b/lib/sqlalchemy/pool.py @@ -136,7 +136,7 @@ class Pool(log.Identified): self.dispatch.update(_dispatch, only_propagate=False) if events: for fn, target in events: - event.listen(fn, target, self) + event.listen(self, target, fn) if listeners: util.warn_deprecated( "The 'listeners' argument to Pool (and " diff --git a/lib/sqlalchemy/schema.py b/lib/sqlalchemy/schema.py index ff953cef7..6d6a4485d 100644 --- a/lib/sqlalchemy/schema.py +++ b/lib/sqlalchemy/schema.py @@ -383,8 +383,7 @@ class Table(SchemaItem, expression.TableClause): def adapt_listener(target, connection, **kw): listener(event_name, target, connection, **kw) - event.listen(adapt_listener, - "on_" + event_name.replace('-', '_'), self) + event.listen(self, "on_" + event_name.replace('-', '_'), adapt_listener) def _set_parent(self, metadata): metadata._add_table(self.name, self.schema, self) @@ -1750,8 +1749,8 @@ class ForeignKeyConstraint(Constraint): return table in set(kw['tables']) and \ bind.dialect.supports_alter - event.listen(AddConstraint(self, on=supports_alter), "on_after_create", table.metadata) - event.listen(DropConstraint(self, on=supports_alter), "on_before_drop", table.metadata) + event.listen(table.metadata, "on_after_create", AddConstraint(self, on=supports_alter)) + event.listen(table.metadata, "on_before_drop", DropConstraint(self, on=supports_alter)) def copy(self, **kw): @@ -2082,8 +2081,7 @@ class MetaData(SchemaItem): def adapt_listener(target, connection, **kw): listener(event, target, connection, **kw) - event.listen(adapt_listener, - "on_" + event_name.replace('-', '_'), self) + event.listen(self, "on_" + event_name.replace('-', '_'), adapt_listener) def create_all(self, bind=None, tables=None, checkfirst=True): """Create all tables stored in this metadata. @@ -2216,9 +2214,9 @@ class DDLElement(expression.Executable, expression.ClauseElement): itself an event receiving callable:: event.listen( - AddConstraint(constraint).execute_if(dialect='postgresql'), + users, 'on_after_create', - users + AddConstraint(constraint).execute_if(dialect='postgresql') ) See also: @@ -2307,7 +2305,7 @@ class DDLElement(expression.Executable, expression.ClauseElement): target, connection, **kw): return connection.execute(self.against(target)) - event.listen(call_event, "on_" + event_name.replace('-', '_'), target) + event.listen(target, "on_" + event_name.replace('-', '_'), call_event) @expression._generative def against(self, target): @@ -2323,9 +2321,9 @@ class DDLElement(expression.Executable, expression.ClauseElement): Used to provide a wrapper for event listening:: event.listen( - DDL("my_ddl").execute_if(dialect='postgresql'), + metadata, 'on_before_create', - metadata + DDL("my_ddl").execute_if(dialect='postgresql') ) :param dialect: May be a string, tuple or a callable @@ -2444,10 +2442,10 @@ class DDL(DDLElement): from sqlalchemy import event, DDL tbl = Table('users', metadata, Column('uid', Integer)) - event.listen(DDL('DROP TRIGGER users_trigger'), 'on_before_create', tbl) + event.listen(tbl, 'on_before_create', DDL('DROP TRIGGER users_trigger')) spow = DDL('ALTER TABLE %(table)s SET secretpowers TRUE') - event.listen(spow.execute_if(dialect='somedb'), 'on_after_create', tbl) + event.listen(tbl, 'on_after_create', spow.execute_if(dialect='somedb')) drop_spow = DDL('ALTER TABLE users SET secretpowers FALSE') connection.execute(drop_spow) |