summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/ext/declarative.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2010-11-20 15:30:12 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2010-11-20 15:30:12 -0500
commite187cc538d6fa9fe7fff8aa939dd787c07345f33 (patch)
treeeb3fbe19171ea9b7ce81fcdc52f9c50a9c2b0455 /lib/sqlalchemy/ext/declarative.py
parentccd4eeeb39b968641cdaee699ad2732ab903e793 (diff)
parent08e5c35c2dd6ee3344bfe9077c6036a182baf5c8 (diff)
downloadsqlalchemy-e187cc538d6fa9fe7fff8aa939dd787c07345f33.tar.gz
- merge metadata/schema/declarative branch, [ticket:1893]
Diffstat (limited to 'lib/sqlalchemy/ext/declarative.py')
-rwxr-xr-xlib/sqlalchemy/ext/declarative.py17
1 files changed, 14 insertions, 3 deletions
diff --git a/lib/sqlalchemy/ext/declarative.py b/lib/sqlalchemy/ext/declarative.py
index 8381e5ee1..40abfbb29 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
@@ -1261,8 +1261,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:
if not mapper.has_property(key):
@@ -1278,7 +1278,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
@@ -1288,6 +1297,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]