From 2cc7308c96f5598ba0aea9a240b9a52629042d07 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Wed, 10 Jul 2019 16:12:48 -0400 Subject: 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 --- lib/sqlalchemy/sql/sqltypes.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) (limited to 'lib/sqlalchemy/sql') 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 -- cgit v1.2.1