On Jul 24, 2010, at 5:40 PM, Nikolaj wrote:

> I'm having trouble inheriting a synonym property from a mixin class.
> It obviously works if the call to synonym() is on the child class and
> just the get/set methods are left on the mixin. Here is an example:
> 
> 
> from sqlalchemy import create_engine, Column, ForeignKey
> from sqlalchemy.ext.declarative import declarative_base
> from sqlalchemy.orm import scoped_session, sessionmaker, synonym
> from sqlalchemy.types import Integer, String
> 
> engine = create_engine('sqlite:///:memory:', echo=True)
> Base = declarative_base(bind=engine)
> Session = scoped_session(sessionmaker(bind=engine))
> 
> class WithAge(object):
>    _age =  Column('age', Integer)
> 
>    def _get_age(self):
>        return self._age or -1
> 
>    def _set_age(self, age):
>        self._age = age
> 
>    # Doesn't work
>    age = synonym('_age', descriptor=property(_get_age, _set_age))
> 
> class Person(Base, WithAge):
>    __tablename__ = 'people'
> 
>    name = Column(String, primary_key=True)
> 
>    # Works
>    #age = synonym('_age', descriptor=property(WithAge._get_age,
> WithAge._set_age))
> 
> p = Person()
> print p.age # <sqlalchemy.orm.properties.SynonymProperty object
> at ...>

you have to use a @classproperty for synonym on a mixin, and that feature is 
only in 0.6.   Check the docs on the site for details under 
"declarative...mixin classes".

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to