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.

Reply via email to