plugable: Lock API on finalization rather than on initialization

https://fedorahosted.org/freeipa/ticket/3090

Reviewed-By: Martin Babinsky <mbabinsk@redhat.com>
This commit is contained in:
Jan Cholasta 2015-06-15 11:50:15 +00:00
parent 860088208b
commit b1fc875c3a

View File

@ -433,8 +433,6 @@ class API(ReadOnly):
self.modules = modules self.modules = modules
self.__done = set() self.__done = set()
self.env = Env() self.env = Env()
if not is_production_mode(self):
lock(self)
def __len__(self): def __len__(self):
""" """
@ -501,14 +499,14 @@ class API(ReadOnly):
self.__doing('bootstrap') self.__doing('bootstrap')
self.env._bootstrap(**overrides) self.env._bootstrap(**overrides)
self.env._finalize_core(**dict(DEFAULT_CONFIG)) self.env._finalize_core(**dict(DEFAULT_CONFIG))
object.__setattr__(self, 'log_mgr', log_mgr) self.log_mgr = log_mgr
log = log_mgr.root_logger log = log_mgr.root_logger
object.__setattr__(self, 'log', log) self.log = log
# Add the argument parser # Add the argument parser
if not parser: if not parser:
parser = self.build_global_parser() parser = self.build_global_parser()
object.__setattr__(self, 'parser', parser) self.parser = parser
# If logging has already been configured somewhere else (like in the # If logging has already been configured somewhere else (like in the
# installer), don't add handlers or change levels: # installer), don't add handlers or change levels:
@ -796,7 +794,7 @@ class API(ReadOnly):
if not production_mode: if not production_mode:
assert not hasattr(self, name) assert not hasattr(self, name)
object.__setattr__(self, name, NameSpace(members)) setattr(self, name, NameSpace(members))
for klass, instance in plugins.iteritems(): for klass, instance in plugins.iteritems():
if not production_mode: if not production_mode:
@ -806,10 +804,11 @@ class API(ReadOnly):
if not production_mode: if not production_mode:
assert islocked(instance) assert islocked(instance)
object.__setattr__(self, '_API__finalized', True) self.__finalized = True
object.__setattr__(self, 'plugins', self.plugins = tuple((k, tuple(v)) for k, v in plugin_info.iteritems())
tuple((k, tuple(v)) for k, v in plugin_info.iteritems())
) if not production_mode:
lock(self)
class IPAHelpFormatter(optparse.IndentedHelpFormatter): class IPAHelpFormatter(optparse.IndentedHelpFormatter):