diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2010-11-15 19:05:48 -0500 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2010-11-15 19:05:48 -0500 |
commit | 166a8a0b73ea6f62e95ac52759edf472f63637ce (patch) | |
tree | 3401b95e37a0dede02ef5e50cc6bcfbbc13ded2b /lib/sqlalchemy/ext/declarative.py | |
parent | 06bf218ed37ca780bc4de2ceb47769c84de70ba1 (diff) | |
download | sqlalchemy-166a8a0b73ea6f62e95ac52759edf472f63637ce.tar.gz |
[ticket:1893] implementation
Diffstat (limited to 'lib/sqlalchemy/ext/declarative.py')
-rwxr-xr-x | lib/sqlalchemy/ext/declarative.py | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/lib/sqlalchemy/ext/declarative.py b/lib/sqlalchemy/ext/declarative.py index dd2df63d3..53438dc55 100755 --- a/lib/sqlalchemy/ext/declarative.py +++ b/lib/sqlalchemy/ext/declarative.py @@ -924,7 +924,7 @@ Mapped instances then make usage of """ -from sqlalchemy.schema import Table, Column, MetaData +from sqlalchemy.schema import Table, Column, MetaData, _get_table_key from sqlalchemy.orm import synonym as _orm_synonym, mapper,\ comparable_property, class_mapper from sqlalchemy.orm.interfaces import MapperProperty @@ -1257,8 +1257,8 @@ 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) @@ -1273,7 +1273,16 @@ class _GetColumns(object): " directly to a Column)." % key) return getattr(self.cls, key) - +class _GetTable(object): + def __init__(self, key, metadata): + self.key = key + self.metadata = metadata + + def __getattr__(self, key): + return self.metadata.tables[ + _get_table_key(key, self.key) + ] + def _deferred_relationship(cls, prop): def resolve_arg(arg): import sqlalchemy @@ -1283,6 +1292,8 @@ def _deferred_relationship(cls, prop): return _GetColumns(cls._decl_class_registry[key]) elif key in cls.metadata.tables: return cls.metadata.tables[key] + elif key in cls.metadata._schemas: + return _GetTable(key, cls.metadata) else: return sqlalchemy.__dict__[key] |