diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2019-07-10 16:12:48 -0400 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2019-07-11 00:19:34 -0400 |
commit | 2cc7308c96f5598ba0aea9a240b9a52629042d07 (patch) | |
tree | dcef3a5e5831ad20f012c1ab31469f5d0cd91c4e /lib/sqlalchemy/sql | |
parent | 3238d953b42f67761dc3019bd27f2960ae2e525f (diff) | |
download | sqlalchemy-2cc7308c96f5598ba0aea9a240b9a52629042d07.tar.gz |
Add performance improvement for Enum w/ Python 2 enum library
Adjusted the initialization for :class:`.Enum` to minimize how often it
invokes the ``.__members__`` attribute of a given PEP-435 enumeration
object, to suit the case where this attribute is expensive to invoke, as is
the case for some popular third party enumeration libraries.
Fixes: #4758
Change-Id: Iffeb854c67393bdcb288944fc357a074e20e1325
Diffstat (limited to 'lib/sqlalchemy/sql')
-rw-r--r-- | lib/sqlalchemy/sql/sqltypes.py | 8 |
1 files changed, 3 insertions, 5 deletions
diff --git a/lib/sqlalchemy/sql/sqltypes.py b/lib/sqlalchemy/sql/sqltypes.py index 6a520a2d5..af19cb05d 100644 --- a/lib/sqlalchemy/sql/sqltypes.py +++ b/lib/sqlalchemy/sql/sqltypes.py @@ -1424,14 +1424,12 @@ class Enum(Emulated, String, SchemaType): if len(enums) == 1 and hasattr(enums[0], "__members__"): self.enum_class = enums[0] + members = self.enum_class.__members__ if self.values_callable: values = self.values_callable(self.enum_class) else: - values = list(self.enum_class.__members__) - objects = [ - self.enum_class.__members__[k] - for k in self.enum_class.__members__ - ] + values = list(members) + objects = [members[k] for k in members] return values, objects else: self.enum_class = None |