On Aug 9, 2010, at 10:32 AM, Nikolaj wrote: > It makes sense to subclass the type directly if I'm not messing with > result or bind values. This works: > > class StringEnum(types.Enum): > def __init__(self, *args, **kwargs): > super(StringEnum, self).__init__(*args, native_enum=False, > **kwargs) > self.length = 255 > > I'm still curious why the TypeDecorator I pasted previously doesn't > work though. The superconstructor does the self.impl = > self.__class__.impl(...) anyway so I figured this was the better > approach than calling self.impl = Enum(...).
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 ?). > > On Aug 9, 2:56 pm, Michael Bayer <mike...@zzzcomputing.com> wrote: >> TypeDecorator doesn't affect the decorated type via subclassing, it affects >> it via the "impl" attribute, hence "decorates". So you say self.impl = >> Enum(...). You don't need to use TypeDecorator here if all you want to >> do is create an Enum with default arguments, just subclass Enum directly. >> >> On Aug 9, 2010, at 8:24 AM, Nikolaj wrote: >> >>> I'm on MySQL and trying to create a type that stores enums as >>> VARCHAR(255). However, the following code still issues an ENUM() DDL. >>> What am I doing wrong here? >> >>> class StringEnum(types.TypeDecorator): >>> impl = types.Enum >> >>> def __init__(self, *args, **kwargs): >>> super(StringEnum, self).__init__(*args, native_enum=False, >>> **kwargs) >>> self.length = 255 >> >>> -- >>> 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 >>> athttp://groups.google.com/group/sqlalchemy?hl=en. > > -- > 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. > -- 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.