MySQL's "native" type for ENUM is itself an ENUM, so needs to have this new parameter propagated when it is told to create a "native" implementation for a generic ENUM:
diff --git a/lib/sqlalchemy/dialects/mysql/enumerated.py b/lib/sqlalchemy/dialects/mysql/enumerated.py index e67177b2f..836f14017 100644 --- a/lib/sqlalchemy/dialects/mysql/enumerated.py +++ b/lib/sqlalchemy/dialects/mysql/enumerated.py @@ -114,7 +114,6 @@ class ENUM(sqltypes.NativeForEmulated, sqltypes.Enum, _EnumeratedValues): literals for you. This is a transitional option. """ - kw.pop('strict', None) self._enum_init(enums, kw) _StringType.__init__(self, length=self.length, **kw) @@ -126,6 +125,7 @@ class ENUM(sqltypes.NativeForEmulated, sqltypes.Enum, _EnumeratedValues): """ kw.setdefault("validate_strings", impl.validate_strings) + kw.setdefault("values_callable", impl.values_callable) return cls(**kw) def _setup_for_values(self, values, objects, kw): On Tue, Dec 26, 2017 at 8:07 PM, Jon Snyder <snyder....@gmail.com> wrote: > Thank you very much. > > You can see the changes I've tried here. When I test them out, I use the > script in this gist. When I put a breakpoint into Enum._enum_init, I see > the correct values being populated from my function. But I'm clearly missing > a step here. > > Jon > > On Tue, Dec 26, 2017 at 1:38 PM, Mike Bayer <mike...@zzzcomputing.com> > wrote: >> >> On Tue, Dec 26, 2017 at 12:49 PM, Jon Snyder <snyder....@gmail.com> wrote: >> > I've started on this, by adding a new kwarg to Enum that allows passing >> > a >> > function which returns the list of values. What I'm running into - and >> > this >> > is just not having a good understanding of the internals - is that by >> > the >> > time adapt_emulated_to_native() is called, the original kwargs seem to >> > be >> > lost, and the new Enum that is created doesn't know anything about the >> > one >> > defined in the Column. It feels like it's being generated some other >> > way, >> > perhaps through some kind of reflection based on the definition in the >> > db >> > itself. Any pointers on the best way to tackle this? >> >> the adapt() method is probably looking for a mapping of instance >> variable names to keyword arguments, e.g. if your keyword argument is >> called "convert_fn", then you would have a data-member ".convert_fn" >> that it looks for. >> >> None of this is required, and it all can be overridden, but if you can >> show me an example of the type and the path to create the stack trace >> I can answer more fully. >> >> >> >> > >> > Thanks >> > >> > On Mon, Dec 4, 2017 at 1:56 PM, Mike Bayer <mike...@zzzcomputing.com> >> > wrote: >> >> >> >> On Mon, Dec 4, 2017 at 12:35 PM, Jon Snyder <snyder....@gmail.com> >> >> wrote: >> >> > Hi, >> >> > >> >> > The documentation and code is quite clear that it's the name, not the >> >> > value, >> >> > of a PEP-435 compliant enum that is persisted to the database. >> >> > >> >> > My use case is that existing enums already in the db are using >> >> > strings >> >> > that >> >> > are not valid python names (they contain spaces). >> >> > >> >> > How would the community here feel about an option to the Enum >> >> > initializer >> >> > that would allow using the .value of the enum for its persisted >> >> > value? >> >> >> >> Ongoing discussion of this feature can be found at: >> >> >> >> https://bitbucket.org/zzzeek/sqlalchemy/issues/3906 >> >> >> >> the reservation with persistence of "value" is that the datatype of >> >> the values of an Enum, while they may be strings, can be any datatype >> >> at all including integers or custom objects, whereas the keys are >> >> always strings. The means of deriving the Enum value as a string >> >> should be pluggable (e.g. pass a function). >> >> >> >> >> >> > >> >> > Thank you >> >> > >> >> > -- >> >> > SQLAlchemy - >> >> > The Python SQL Toolkit and Object Relational Mapper >> >> > >> >> > http://www.sqlalchemy.org/ >> >> > >> >> > To post example code, please provide an MCVE: Minimal, Complete, and >> >> > Verifiable Example. See http://stackoverflow.com/help/mcve for a full >> >> > description. >> >> > --- >> >> > You received this message because you are subscribed to the Google >> >> > Groups >> >> > "sqlalchemy" group. >> >> > To unsubscribe from this group and stop receiving emails from it, >> >> > send >> >> > an >> >> > email to sqlalchemy+unsubscr...@googlegroups.com. >> >> > To post to this group, send email to sqlalchemy@googlegroups.com. >> >> > Visit this group at https://groups.google.com/group/sqlalchemy. >> >> > For more options, visit https://groups.google.com/d/optout. >> >> >> >> -- >> >> SQLAlchemy - >> >> The Python SQL Toolkit and Object Relational Mapper >> >> >> >> http://www.sqlalchemy.org/ >> >> >> >> To post example code, please provide an MCVE: Minimal, Complete, and >> >> Verifiable Example. See http://stackoverflow.com/help/mcve for a full >> >> description. >> >> --- >> >> You received this message because you are subscribed to a topic in the >> >> Google Groups "sqlalchemy" group. >> >> To unsubscribe from this topic, visit >> >> https://groups.google.com/d/topic/sqlalchemy/_dgcR9lqY94/unsubscribe. >> >> To unsubscribe from this group and all its topics, send an email to >> >> sqlalchemy+unsubscr...@googlegroups.com. >> >> To post to this group, send email to sqlalchemy@googlegroups.com. >> >> Visit this group at https://groups.google.com/group/sqlalchemy. >> >> For more options, visit https://groups.google.com/d/optout. >> > >> > >> > -- >> > SQLAlchemy - >> > The Python SQL Toolkit and Object Relational Mapper >> > >> > http://www.sqlalchemy.org/ >> > >> > To post example code, please provide an MCVE: Minimal, Complete, and >> > Verifiable Example. See http://stackoverflow.com/help/mcve for a full >> > description. >> > --- >> > You received this message because you are subscribed to the Google >> > Groups >> > "sqlalchemy" group. >> > To unsubscribe from this group and stop receiving emails from it, send >> > an >> > email to sqlalchemy+unsubscr...@googlegroups.com. >> > To post to this group, send email to sqlalchemy@googlegroups.com. >> > Visit this group at https://groups.google.com/group/sqlalchemy. >> > For more options, visit https://groups.google.com/d/optout. >> >> -- >> SQLAlchemy - >> The Python SQL Toolkit and Object Relational Mapper >> >> http://www.sqlalchemy.org/ >> >> To post example code, please provide an MCVE: Minimal, Complete, and >> Verifiable Example. See http://stackoverflow.com/help/mcve for a full >> description. >> --- >> You received this message because you are subscribed to a topic in the >> Google Groups "sqlalchemy" group. >> To unsubscribe from this topic, visit >> https://groups.google.com/d/topic/sqlalchemy/_dgcR9lqY94/unsubscribe. >> To unsubscribe from this group and all its topics, send an email to >> sqlalchemy+unsubscr...@googlegroups.com. >> To post to this group, send email to sqlalchemy@googlegroups.com. >> Visit this group at https://groups.google.com/group/sqlalchemy. >> For more options, visit https://groups.google.com/d/optout. > > > -- > SQLAlchemy - > The Python SQL Toolkit and Object Relational Mapper > > http://www.sqlalchemy.org/ > > To post example code, please provide an MCVE: Minimal, Complete, and > Verifiable Example. See http://stackoverflow.com/help/mcve for a full > description. > --- > You received this message because you are subscribed to the Google Groups > "sqlalchemy" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to sqlalchemy+unsubscr...@googlegroups.com. > To post to this group, send email to sqlalchemy@googlegroups.com. > Visit this group at https://groups.google.com/group/sqlalchemy. > For more options, visit https://groups.google.com/d/optout. -- SQLAlchemy - The Python SQL Toolkit and Object Relational Mapper http://www.sqlalchemy.org/ To post example code, please provide an MCVE: Minimal, Complete, and Verifiable Example. See http://stackoverflow.com/help/mcve for a full description. --- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sqlalchemy+unsubscr...@googlegroups.com. To post to this group, send email to sqlalchemy@googlegroups.com. Visit this group at https://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.