]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- merge metadata/schema/declarative branch, [ticket:1893]
authorMike Bayer <mike_mp@zzzcomputing.com>
Sat, 20 Nov 2010 20:30:12 +0000 (15:30 -0500)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sat, 20 Nov 2010 20:30:12 +0000 (15:30 -0500)
1  2 
lib/sqlalchemy/ext/declarative.py
lib/sqlalchemy/schema.py
test/ext/test_declarative.py

index 8381e5ee1a1d46c56b1fd262f1cabce0b7dcd0a6,1be614232042ae7f34e925e5510ab2987f8d1863..40abfbb29235ada7a3e3c4c05e6dd9579554490b
@@@ -1261,11 -1261,12 +1261,11 @@@ class DeclarativeMeta(type)
  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))
index 980025676b708f3a2d380fbbb2ee50c57e01e0bf,cb0cde4df2e091a8e954556ad90faeb104e0f869..50df8b9b6b0a06284be9a613f5fe8f61a1e13173
@@@ -373,21 -374,40 +374,21 @@@ class Table(SchemaItem, expression.Tabl
  
          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, 
@@@ -1917,9 -1939,11 +1918,10 @@@ class MetaData(SchemaItem)
            ``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(
Simple merge