On Aug 9, 3:38 pm, Michael Bayer <mike...@zzzcomputing.com> wrote: > its pulling off the "types.Enum" callable from self.__class__ (which actually > seems unnecessary here, self.impl should be fine), then calling that with the > given arguments. So it should be setting up the native_enum=False part at > least. The length attribute though would need to be set on impl. > There's no reason we can't make "length" an actual argument of Enum, though, > just to help with this kind of thing (I'm assuming that you're planning on > adding additional elements to the enum in the future and you don't want to > have to alter the column, correct ?).
Correct. About the self.length thing, I simply misread __getattr__ on TypeDecorator as __setattr__. I've included my test below just for completness' sake to show that everything works as expected. from sqlalchemy import create_engine, Column, types from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import scoped_session, sessionmaker engine = create_engine('sqlite:///:memory:', echo=True) Base = declarative_base(bind=engine) Session = scoped_session(sessionmaker(bind=engine)) class StringEnum(types.TypeDecorator): impl = types.Enum def __init__(self, *args, **kwargs): super(StringEnum, self).__init__(*args, native_enum=False, **kwargs) self.impl.length = 255 class Item(Base): __tablename__ = 'items' name = Column(types.String, primary_key=True) option = Column(StringEnum(('foo', 'bar')), nullable=True) Base.metadata.create_all() -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalch...@googlegroups.com. To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.