summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sqlalchemy')
-rw-r--r--lib/sqlalchemy/engine/strategies.py6
-rw-r--r--lib/sqlalchemy/engine/threadlocal.py4
-rw-r--r--lib/sqlalchemy/event.py12
-rw-r--r--lib/sqlalchemy/events.py16
-rw-r--r--lib/sqlalchemy/interfaces.py49
-rw-r--r--lib/sqlalchemy/orm/attributes.py6
-rw-r--r--lib/sqlalchemy/orm/deprecated_interfaces.py40
-rw-r--r--lib/sqlalchemy/orm/events.py42
-rw-r--r--lib/sqlalchemy/orm/mapper.py6
-rw-r--r--lib/sqlalchemy/pool.py2
-rw-r--r--lib/sqlalchemy/schema.py24
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)