Hi, I'm trying to call the base class attributes from a declared_attr definition.
Something like: class Edible(Base): __tablename__ = 'edible' brand = Column(String(20), primary_key=True) edible_type = Column(String(20), primary_key=True) __mapper_args__ = {'polymorphic_on': edible_type} def __repr__(self): return "<{}(brand={}, edible_type={})>".format( self.__class__.__name__, self.brand, self.edible_type) class IceCream(Edible): __tablename__ = 'icecream' brand = Column(String(20), ForeignKey(Edible.brand), primary_key=True) cooling_recipe = Column(Text) @declared_attr def __mapper_args__(cls): return { 'polymorphic_identity': 'icecream', 'inherit_condition': (super(IceCream, cls).edible_type == 'icecream'), 'inherit_foreign_keys': [super(IceCream, cls).edible_type]} but I'm getting nameerrors. Traceback (most recent call last): File "super.py", line 17, in <module> class IceCream(Edible): File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/ext/declarative.py", line 1165, in __init__ _as_declarative(cls, classname, cls.__dict__) File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/ext/declarative.py", line 924, in _as_declarative mapper_args = cls.__mapper_args__ File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/ext/declarative.py", line 1370, in __get__ return desc.fget(cls) File "super.py", line 25, in __mapper_args__ 'inherit_condition': (super(IceCream, cls).edible_type NameError: global name 'IceCream' is not defined Using super(cls, cls) or Edible instead of super(IceCream, cls) works. But that doesn't sound right, does it?? How do I do this properly? Full code attached. -- Fayaz Yusuf Khan Cloud developer and designer Dexetra SS, Kochi, India fayaz.yusuf.khan_AT_gmail_DOT_com fayaz_AT_dexetra_DOT_com +91-9746-830-823
from sqlalchemy import * from sqlalchemy.ext.declarative import declarative_base, declared_attr Base = declarative_base() class Edible(Base): __tablename__ = 'edible' brand = Column(String(20), primary_key=True) edible_type = Column(String(20), primary_key=True) __mapper_args__ = {'polymorphic_on': edible_type} def __repr__(self): return "<{}(brand={}, edible_type={})>".format( self.__class__.__name__, self.brand, self.edible_type) class IceCream(Edible): __tablename__ = 'icecream' brand = Column(String(20), ForeignKey(Edible.brand), primary_key=True) cooling_recipe = Column(Text) @declared_attr def __mapper_args__(cls): return { 'polymorphic_identity': 'icecream', 'inherit_condition': (super(IceCream, cls).edible_type == 'icecream'), 'inherit_foreign_keys': [super(IceCream, cls).edible_type]}
signature.asc
Description: This is a digitally signed message part.