On Aug 9, 3:38 pm, Michael Bayer <[email protected]> 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 [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.