class _GetColumns(object):
def __init__(self, cls):
self.cls = cls
- def __getattr__(self, key):
+ def __getattr__(self, key):
mapper = class_mapper(self.cls, compile=False)
if mapper:
- prop = mapper.get_property(key, raiseerr=False)
- if prop is None:
+ if not mapper.has_property(key):
raise exceptions.InvalidRequestError(
"Class %r does not have a mapped column named %r"
% (self.cls, key))
constraint._set_parent(self)
- def append_ddl_listener(self, event, listener):
+ def append_ddl_listener(self, event_name, listener):
"""Append a DDL event listener to this ``Table``.
-
- The ``listener`` callable will be triggered when this ``Table`` is
- created or dropped, either directly before or after the DDL is issued
- to the database. The listener may modify the Table, but may not abort
- the event itself.
- :param event:
- One of ``Table.ddl_events``; e.g. 'before-create', 'after-create',
- 'before-drop' or 'after-drop'.
-
- :param listener:
- A callable, invoked with three positional arguments:
-
- :event:
- The event currently being handled
-
- :target:
- The ``Table`` object being created or dropped
-
- :bind:
- The ``Connection`` bueing used for DDL execution.
-
- Listeners are added to the Table's ``ddl_listeners`` attribute.
+ Deprecated. See :class:`.DDLEvents`.
"""
-
- if event not in self.ddl_events:
- raise LookupError(event)
- self.ddl_listeners[event].append(listener)
+
+ def adapt_listener(target, connection, **kw):
+ listener(event_name, target, connection, **kw)
+
+ event.listen(adapt_listener,
+ "on_" + event_name.replace('-', '_'), self)
def _set_parent(self, metadata):
- metadata.tables[_get_table_key(self.name, self.schema)] = self
+ metadata._add_table(self.name, self.schema, self)
self.metadata = metadata
def get_children(self, column_collections=True,
``MetaData``.
"""
- self.tables = {}
+ self.tables = util.frozendict()
+ self._schemas = set()
self.bind = bind
self.metadata = self
- self.ddl_listeners = util.defaultdict(list)
if reflect:
if not bind:
raise exc.ArgumentError(