summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authormike bayer <mike_mp@zzzcomputing.com>2019-05-17 17:06:02 +0000
committerGerrit Code Review <gerrit@bbpush.zzzcomputing.com>2019-05-17 17:06:02 +0000
commit000c0281d92432ada3e8fceff56a8406a5a093b1 (patch)
tree6d2c2750197c82d18e06413670c4dddf5616c5ba /lib
parentef618f041998c2bb463a3476a51b45b74715a5eb (diff)
parent5039c6f01d0bd1f58f950e80cddf7472444a70a4 (diff)
downloadsqlalchemy-000c0281d92432ada3e8fceff56a8406a5a093b1.tar.gz
Merge "Mutex the declarative scan/map process against configure_mappers()"
Diffstat (limited to 'lib')
-rw-r--r--lib/sqlalchemy/ext/declarative/base.py18
1 files changed, 12 insertions, 6 deletions
diff --git a/lib/sqlalchemy/ext/declarative/base.py b/lib/sqlalchemy/ext/declarative/base.py
index 62db282d1..622a83736 100644
--- a/lib/sqlalchemy/ext/declarative/base.py
+++ b/lib/sqlalchemy/ext/declarative/base.py
@@ -17,6 +17,7 @@ from ... import util
from ...orm import class_mapper
from ...orm import exc as orm_exc
from ...orm import mapper
+from ...orm import mapperlib
from ...orm import synonym
from ...orm.attributes import QueryableAttribute
from ...orm.base import _is_mapped_class
@@ -155,6 +156,7 @@ class _MapperConfig(object):
cfg_cls = _DeferredMapperConfig
else:
cfg_cls = _MapperConfig
+
cfg_cls(cls_, classname, dict_)
def __init__(self, cls_, classname, dict_):
@@ -177,17 +179,21 @@ class _MapperConfig(object):
self._scan_attributes()
- clsregistry.add_class(self.classname, self.cls)
+ mapperlib._CONFIGURE_MUTEX.acquire()
+ try:
+ clsregistry.add_class(self.classname, self.cls)
- self._extract_mappable_attributes()
+ self._extract_mappable_attributes()
- self._extract_declared_columns()
+ self._extract_declared_columns()
- self._setup_table()
+ self._setup_table()
- self._setup_inheritance()
+ self._setup_inheritance()
- self._early_mapping()
+ self._early_mapping()
+ finally:
+ mapperlib._CONFIGURE_MUTEX.release()
def _early_mapping(self):
self.map()