diff options
author | Federico Caselli <cfederico87@gmail.com> | 2020-03-07 19:17:07 +0100 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2020-03-07 17:50:45 -0500 |
commit | eda6dbbf387def2063d1b6719b64b20f9e7f2ab4 (patch) | |
tree | 4af5f41edfac169b0fdc6d6cab0fce4e8bf776cf /lib/sqlalchemy/orm/unitofwork.py | |
parent | 851fb8f5a661c66ee76308181118369c8c4df9e0 (diff) | |
download | sqlalchemy-eda6dbbf387def2063d1b6719b64b20f9e7f2ab4.tar.gz |
Simplified module pre-loading strategy and made it linter friendly
Introduced a modules registry to register modules that should be lazily loaded
in the package init. This ensures that they are in the system module cache,
avoiding potential thread safety issues as when importing them directly
in the function that uses them. The module registry is used to obtain
these modules directly, ensuring that the all the lazily loaded modules
are resolved at the proper time
This replaces dependency_for decorator and the dependencies decorator logic,
removing the need to pass the resolved modules as arguments of the
decodated functions and removes possible errors caused by linters.
Fixes: #4689
Fixes: #4656
Change-Id: I2e291eba4297867fc0ddb5d875b9f7af34751d01
Diffstat (limited to 'lib/sqlalchemy/orm/unitofwork.py')
-rw-r--r-- | lib/sqlalchemy/orm/unitofwork.py | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/lib/sqlalchemy/orm/unitofwork.py b/lib/sqlalchemy/orm/unitofwork.py index 24e6fe205..5a3f99e70 100644 --- a/lib/sqlalchemy/orm/unitofwork.py +++ b/lib/sqlalchemy/orm/unitofwork.py @@ -15,7 +15,6 @@ organizes them in order of dependency, and executes. from . import attributes from . import exc as orm_exc -from . import persistence from . import util as orm_util from .. import event from .. import util @@ -568,7 +567,9 @@ class PostUpdateAll(PostSortRec): self.mapper = mapper self.isdelete = isdelete + @util.preload_module("sqlalchemy.orm.persistence") def execute(self, uow): + persistence = util.preloaded.orm_persistence states, cols = uow.post_update_states[self.mapper] states = [s for s in states if uow.states[s][0] == self.isdelete] @@ -582,8 +583,9 @@ class SaveUpdateAll(PostSortRec): self.mapper = mapper assert mapper is mapper.base_mapper + @util.preload_module("sqlalchemy.orm.persistence") def execute(self, uow): - persistence.save_obj( + util.preloaded.orm_persistence.save_obj( self.mapper, uow.states_for_mapper_hierarchy(self.mapper, False, False), uow, @@ -617,8 +619,9 @@ class DeleteAll(PostSortRec): self.mapper = mapper assert mapper is mapper.base_mapper + @util.preload_module("sqlalchemy.orm.persistence") def execute(self, uow): - persistence.delete_obj( + util.preloaded.orm_persistence.delete_obj( self.mapper, uow.states_for_mapper_hierarchy(self.mapper, True, False), uow, @@ -687,7 +690,9 @@ class SaveUpdateState(PostSortRec): self.state = state self.mapper = state.mapper.base_mapper + @util.preload_module("sqlalchemy.orm.persistence") def execute_aggregate(self, uow, recs): + persistence = util.preloaded.orm_persistence cls_ = self.__class__ mapper = self.mapper our_recs = [ @@ -712,7 +717,9 @@ class DeleteState(PostSortRec): self.state = state self.mapper = state.mapper.base_mapper + @util.preload_module("sqlalchemy.orm.persistence") def execute_aggregate(self, uow, recs): + persistence = util.preloaded.orm_persistence cls_ = self.__class__ mapper = self.mapper our_recs = [ |