[MERGE] loading/post_load hook: the code is consolidated in one place.

The post-load hook is called whenever a module is loaded, be it via the --load
option or via regular module installation. This is mostly for backward compatibility:
we might require an explicit --load for such server-wide modules.

bzr revid: vmt@openerp.com-20120209154800-2t11mtpf33r1bcig
This commit is contained in:
Vo Minh Thu
2012-02-09 16:48:00 +01:00
5 changed files with 27 additions and 31 deletions
+1 -5
View File
@@ -241,11 +241,7 @@ if __name__ == "__main__":
for m in openerp.conf.server_wide_modules:
try:
__import__('openerp.addons.' + m)
# Call any post_load hook.
info = openerp.modules.module.load_information_from_description_file(m)
if info['post_load']:
getattr(sys.modules[m], info['post_load'])()
openerp.modules.module.load_openerp_module(m)
except Exception:
msg = ''
if m == 'web':
+1 -1
View File
@@ -36,7 +36,7 @@ from openerp.modules.module import \
load_information_from_description_file, \
get_module_resource, zip_directory, \
get_module_path, initialize_sys_path, \
register_module_classes, init_module_models
load_openerp_module, init_module_models
from openerp.modules.loading import load_modules
+3 -2
View File
@@ -58,7 +58,7 @@ from openerp.modules.module import \
load_information_from_description_file, \
get_module_resource, zip_directory, \
get_module_path, initialize_sys_path, \
register_module_classes, init_module_models
load_openerp_module, init_module_models
_logger = logging.getLogger(__name__)
@@ -162,7 +162,8 @@ def load_module_graph(cr, graph, status=None, perform_checks=True, skip_modules=
_logger.info('module %s: loading objects', package.name)
migrations.migrate_module(package, 'pre')
register_module_classes(package.name)
load_openerp_module(package.name)
models = pool.load(cr, package)
loaded_modules.append(package.name)
if hasattr(package, 'init') or hasattr(package, 'update') or package.state in ('to install', 'to upgrade'):
+21 -18
View File
@@ -389,40 +389,43 @@ def init_module_models(cr, module_name, obj_list):
t[1](cr, *t[2])
cr.commit()
def register_module_classes(m):
""" Register module named m, if not already registered.
def load_openerp_module(module_name):
""" Load an OpenERP module, if not already loaded.
This loads the module and register all of its models, thanks to either
the MetaModel metaclass, or the explicit instantiation of the model.
This is also used to load server-wide module (i.e. it is also used
when there is no model to register).
"""
def log(e):
mt = isinstance(e, zipimport.ZipImportError) and 'zip ' or ''
msg = "Couldn't load %smodule %s" % (mt, m)
_logger.critical(msg)
_logger.critical(e)
global loaded
if m in loaded:
if module_name in loaded:
return
_logger.info('module %s: registering objects', m)
mod_path = get_module_path(m)
initialize_sys_path()
try:
mod_path = get_module_path(module_name)
zip_mod_path = mod_path + '.zip'
if not os.path.isfile(zip_mod_path):
__import__('openerp.addons.' + m)
__import__('openerp.addons.' + module_name)
else:
zimp = zipimport.zipimporter(zip_mod_path)
zimp.load_module(m)
zimp.load_module(module_name)
# Call the module's post-load hook. This can done before any model or
# data has been initialized. This is ok as the post-load hook is for
# server-wide (instead of registry-specific) functionalities.
info = load_information_from_description_file(module_name)
if info['post_load']:
getattr(sys.modules['openerp.addons.' + module_name], info['post_load'])()
except Exception, e:
log(e)
mt = isinstance(e, zipimport.ZipImportError) and 'zip ' or ''
msg = "Couldn't load %smodule %s" % (mt, module_name)
_logger.critical(msg)
_logger.critical(e)
raise
else:
loaded.append(m)
loaded.append(module_name)
def get_modules():
"""Returns the list of module names
+1 -5
View File
@@ -464,11 +464,7 @@ def on_starting(server):
openerp.modules.loading.open_openerp_namespace()
for m in openerp.conf.server_wide_modules:
try:
__import__(m)
# Call any post_load hook.
info = openerp.modules.module.load_information_from_description_file(m)
if info['post_load']:
getattr(sys.modules[m], info['post_load'])()
openerp.modules.module.load_openerp_module(m)
except Exception:
msg = ''
if m == 'web':