summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/sql
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2019-07-10 16:12:48 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2019-07-11 00:19:34 -0400
commit2cc7308c96f5598ba0aea9a240b9a52629042d07 (patch)
treedcef3a5e5831ad20f012c1ab31469f5d0cd91c4e /lib/sqlalchemy/sql
parent3238d953b42f67761dc3019bd27f2960ae2e525f (diff)
downloadsqlalchemy-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.py8
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