return Mapper(class_, table, *args, **params)
def synonym(name):
- return SynonymProperty(name)
+ """set up 'name' as a synonym to another MapperProperty."""
+ return properties.SynonymProperty(name)
def clear_mappers():
"""remove all mappers that have been created thus far. when new mappers are
import sets, random
from interfaces import *
-
+
+class SynonymProperty(MapperProperty):
+ def __init__(self, name):
+ self.name = name
+ def setup(self, querycontext, **kwargs):
+ pass
+ def execute(self, selectcontext, instance, row, identitykey, isnew):
+ pass
+ def do_init(self):
+ class SynonymProp(object):
+ def __set__(s, obj, value):
+ setattr(obj, self.name, value)
+ self.set(None, obj, value)
+ def __delete__(s, obj):
+ delattr(obj, self.name)
+ def __get__(s, obj, owner):
+ if obj is None:
+ return s
+ return getattr(obj, self.name)
+ setattr(self.parent.class_, self.key, SynonymProp())
+
class ColumnProperty(StrategizedProperty):
"""describes an object attribute that corresponds to a table column."""
def __init__(self, *columns, **kwargs):
seen.add(mapper_)
if mapper_.props.has_key(key):
prop = mapper_.props[key]
+ if isinstance(prop, properties.SynonymProperty):
+ prop = mapper_.props[prop.name]
if isinstance(prop, properties.PropertyLoader):
keys.insert(0, prop.key)
return prop
'foo' : users.c.user_name,
})
+ def testsynonym(self):
+ sess = create_session()
+ mapper(User, users, properties = dict(
+ addresses = relation(mapper(Address, addresses), lazy = True),
+ uname = synonym('user_name'),
+ adlist = synonym('addresses')
+ ))
+
+ u = sess.query(User).get_by(uname='jack')
+ self.assert_result(u.adlist, Address, *(user_address_result[0]['addresses'][1]))
+
def testeageroptions(self):
"""tests that a lazy relation can be upgraded to an eager relation via the options method"""
sess = create_session()