From 071a1830985834efc113f63fa8740c7306e0cae3 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sun, 13 Jul 2014 18:55:18 -0400 Subject: - Fixed bug in :class:`.Enum` and other :class:`.SchemaType` subclasses where direct association of the type with a :class:`.MetaData` would lead to a hang when events (like create events) were emitted on the :class:`.MetaData`. fixes #3124 --- lib/sqlalchemy/sql/sqltypes.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'lib/sqlalchemy/sql') diff --git a/lib/sqlalchemy/sql/sqltypes.py b/lib/sqlalchemy/sql/sqltypes.py index 671ea1b70..b4d2d2390 100644 --- a/lib/sqlalchemy/sql/sqltypes.py +++ b/lib/sqlalchemy/sql/sqltypes.py @@ -918,6 +918,7 @@ class SchemaType(SchemaEventTarget): self.schema = schema self.metadata = metadata self.inherit_schema = inherit_schema + if self.metadata: event.listen( self.metadata, @@ -967,13 +968,16 @@ class SchemaType(SchemaEventTarget): def adapt(self, impltype, **kw): schema = kw.pop('schema', self.schema) - metadata = kw.pop('metadata', self.metadata) + + # don't associate with MetaData as the hosting type + # is already associated with it, avoid creating event + # listeners + metadata = kw.pop('metadata', None) return impltype(name=self.name, schema=schema, metadata=metadata, inherit_schema=self.inherit_schema, - **kw - ) + **kw) @property def bind(self): @@ -1136,7 +1140,7 @@ class Enum(String, SchemaType): def adapt(self, impltype, **kw): schema = kw.pop('schema', self.schema) - metadata = kw.pop('metadata', self.metadata) + metadata = kw.pop('metadata', None) if issubclass(impltype, Enum): return impltype(name=self.name, schema=schema, @@ -1145,8 +1149,7 @@ class Enum(String, SchemaType): native_enum=self.native_enum, inherit_schema=self.inherit_schema, *self.enums, - **kw - ) + **kw) else: return super(Enum, self).adapt(impltype, **kw) -- cgit v1.2.1