diff options
Diffstat (limited to 'lib/sqlalchemy/ext/declarative/base.py')
-rw-r--r-- | lib/sqlalchemy/ext/declarative/base.py | 112 |
1 files changed, 55 insertions, 57 deletions
diff --git a/lib/sqlalchemy/ext/declarative/base.py b/lib/sqlalchemy/ext/declarative/base.py index 41190e407..94baeeb51 100644 --- a/lib/sqlalchemy/ext/declarative/base.py +++ b/lib/sqlalchemy/ext/declarative/base.py @@ -20,6 +20,7 @@ from . import clsregistry import collections import weakref + def _declared_mapping_info(cls): # deferred mapping if _DeferredMapperConfig.has_cls(cls): @@ -59,8 +60,7 @@ def _as_declarative(cls, classname, dict_): cls.__declare_first__() if '__abstract__' in base.__dict__ and base.__abstract__: if (base is cls or - (base in cls.__bases__ and not _is_declarative_inherits) - ): + (base in cls.__bases__ and not _is_declarative_inherits)): return class_mapped = _declared_mapping_info(base) is not None @@ -68,9 +68,9 @@ def _as_declarative(cls, classname, dict_): for name, obj in vars(base).items(): if name == '__mapper_args__': if not mapper_args_fn and ( - not class_mapped or - isinstance(obj, declarative_props) - ): + not class_mapped or + isinstance(obj, declarative_props) + ): # don't even invoke __mapper_args__ until # after we've determined everything about the # mapped table. @@ -80,29 +80,29 @@ def _as_declarative(cls, classname, dict_): mapper_args_fn = lambda: dict(cls.__mapper_args__) elif name == '__tablename__': if not tablename and ( - not class_mapped or - isinstance(obj, declarative_props) - ): + not class_mapped or + isinstance(obj, declarative_props) + ): tablename = cls.__tablename__ elif name == '__table_args__': if not table_args and ( - not class_mapped or - isinstance(obj, declarative_props) - ): + not class_mapped or + isinstance(obj, declarative_props) + ): table_args = cls.__table_args__ if not isinstance(table_args, (tuple, dict, type(None))): raise exc.ArgumentError( - "__table_args__ value must be a tuple, " - "dict, or None") + "__table_args__ value must be a tuple, " + "dict, or None") if base is not cls: inherited_table_args = True elif class_mapped: if isinstance(obj, declarative_props): util.warn("Regular (i.e. not __special__) " - "attribute '%s.%s' uses @declared_attr, " - "but owning class %s is mapped - " - "not applying to subclass %s." - % (base.__name__, name, base, cls)) + "attribute '%s.%s' uses @declared_attr, " + "but owning class %s is mapped - " + "not applying to subclass %s." + % (base.__name__, name, base, cls)) continue elif base is not cls: # we're a mixin. @@ -114,18 +114,18 @@ def _as_declarative(cls, classname, dict_): continue if obj.foreign_keys: raise exc.InvalidRequestError( - "Columns with foreign keys to other columns " - "must be declared as @declared_attr callables " - "on declarative mixin classes. ") + "Columns with foreign keys to other columns " + "must be declared as @declared_attr callables " + "on declarative mixin classes. ") if name not in dict_ and not ( '__table__' in dict_ and (obj.name or name) in dict_['__table__'].c - ) and name not in potential_columns: + ) and name not in potential_columns: potential_columns[name] = \ - column_copies[obj] = \ - obj.copy() + column_copies[obj] = \ + obj.copy() column_copies[obj]._creation_order = \ - obj._creation_order + obj._creation_order elif isinstance(obj, MapperProperty): raise exc.InvalidRequestError( "Mapper properties (i.e. deferred," @@ -134,9 +134,9 @@ def _as_declarative(cls, classname, dict_): "on declarative mixin classes.") elif isinstance(obj, declarative_props): dict_[name] = ret = \ - column_copies[obj] = getattr(cls, name) + column_copies[obj] = getattr(cls, name) if isinstance(ret, (Column, MapperProperty)) and \ - ret.doc is None: + ret.doc is None: ret.doc = obj.__doc__ # apply inherited columns as we should @@ -167,9 +167,8 @@ def _as_declarative(cls, classname, dict_): value = synonym(value.key) setattr(cls, k, value) - if (isinstance(value, tuple) and len(value) == 1 and - isinstance(value[0], (Column, MapperProperty))): + isinstance(value[0], (Column, MapperProperty))): util.warn("Ignoring declarative-like tuple value of attribute " "%s: possibly a copy-and-paste error with a comma " "left at the end of the line?" % k) @@ -198,7 +197,7 @@ def _as_declarative(cls, classname, dict_): if isinstance(c, (ColumnProperty, CompositeProperty)): for col in c.columns: if isinstance(col, Column) and \ - col.table is None: + col.table is None: _undefer_column_name(key, col) if not isinstance(c, CompositeProperty): name_to_prop_key[col.name].add(key) @@ -280,7 +279,7 @@ def _as_declarative(cls, classname, dict_): "Class %r does not have a __table__ or __tablename__ " "specified and does not inherit from an existing " "table-mapped class." % cls - ) + ) elif inherits: inherited_mapper = _declared_mapping_info(inherits) inherited_table = inherited_mapper.local_table @@ -293,14 +292,14 @@ def _as_declarative(cls, classname, dict_): raise exc.ArgumentError( "Can't place __table_args__ on an inherited class " "with no table." - ) + ) # add any columns declared here to the inherited table. for c in declared_columns: if c.primary_key: raise exc.ArgumentError( "Can't place primary key columns on an inherited " "class with no table." - ) + ) if c.name in inherited_table.c: if inherited_table.c[c.name] is c: continue @@ -311,7 +310,7 @@ def _as_declarative(cls, classname, dict_): ) inherited_table.append_column(c) if inherited_mapped_table is not None and \ - inherited_mapped_table is not inherited_table: + inherited_mapped_table is not inherited_table: inherited_mapped_table._refresh_for_new_column(c) defer_map = hasattr(cls, '_sa_decl_prepare') @@ -320,12 +319,12 @@ def _as_declarative(cls, classname, dict_): else: cfg_cls = _MapperConfig mt = cfg_cls(mapper_cls, - cls, table, - inherits, - declared_columns, - column_copies, - our_stuff, - mapper_args_fn) + cls, table, + inherits, + declared_columns, + column_copies, + our_stuff, + mapper_args_fn) if not defer_map: mt.map() @@ -335,12 +334,12 @@ class _MapperConfig(object): mapped_table = None def __init__(self, mapper_cls, - cls, - table, - inherits, - declared_columns, - column_copies, - properties, mapper_args_fn): + cls, + table, + inherits, + declared_columns, + column_copies, + properties, mapper_args_fn): self.mapper_cls = mapper_cls self.cls = cls self.local_table = table @@ -350,7 +349,6 @@ class _MapperConfig(object): self.declared_columns = declared_columns self.column_copies = column_copies - def _prepare_mapper_arguments(self): properties = self.properties if self.mapper_args_fn: @@ -384,7 +382,7 @@ class _MapperConfig(object): set([c.key for c in inherited_table.c if c not in inherited_mapper._columntoproperty]) exclude_properties.difference_update( - [c.key for c in self.declared_columns]) + [c.key for c in self.declared_columns]) # look through columns in the current mapper that # are keyed to a propname different than the colname @@ -413,6 +411,7 @@ class _MapperConfig(object): **mapper_args ) + class _DeferredMapperConfig(_MapperConfig): _configs = util.OrderedDict() @@ -433,32 +432,31 @@ class _DeferredMapperConfig(_MapperConfig): def has_cls(cls, class_): # 2.6 fails on weakref if class_ is an old style class return isinstance(class_, type) and \ - weakref.ref(class_) in cls._configs + weakref.ref(class_) in cls._configs @classmethod def config_for_cls(cls, class_): return cls._configs[weakref.ref(class_)] - @classmethod def classes_for_base(cls, base_cls, sort=True): classes_for_base = [m for m in cls._configs.values() - if issubclass(m.cls, base_cls)] + if issubclass(m.cls, base_cls)] if not sort: return classes_for_base all_m_by_cls = dict( - (m.cls, m) - for m in classes_for_base - ) + (m.cls, m) + for m in classes_for_base + ) tuples = [] for m_cls in all_m_by_cls: tuples.extend( - (all_m_by_cls[base_cls], all_m_by_cls[m_cls]) - for base_cls in m_cls.__bases__ - if base_cls in all_m_by_cls - ) + (all_m_by_cls[base_cls], all_m_by_cls[m_cls]) + for base_cls in m_cls.__bases__ + if base_cls in all_m_by_cls + ) return list( topological.sort( tuples, |