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.