diff --git a/openerp/modules/__init__.py b/openerp/modules/__init__.py index 9a8987279c9..ac5d8e1f544 100644 --- a/openerp/modules/__init__.py +++ b/openerp/modules/__init__.py @@ -447,11 +447,26 @@ def upgrade_graph(graph, cr, module_list, force=None): return result -def init_module_objects(cr, module_name, obj_list): - logger.notifyChannel('init', netsvc.LOG_INFO, 'module %s: creating or updating database tables' % module_name) +def init_module_models(cr, module_name, obj_list): + """ Initialize a list of models. + + Call _auto_init and init on each model to create or update the + database tables supporting the models. + + TODO better explanation of _auto_init and init. + + """ + + logger.notifyChannel('init', netsvc.LOG_INFO, + 'module %s: creating or updating database tables' % module_name) + # TODO _auto_init doesn't seem to return anything + # so this todo list would be useless. todo = [] for obj in obj_list: try: + # TODO the module in the context doesn't seem usefull: + # it is available (at least) in the class' _module attribute. + # (So module_name would be useless too.) result = obj._auto_init(cr, {'module': module_name}) except Exception, e: raise @@ -761,9 +776,9 @@ def load_module_graph(cr, graph, status=None, perform_checks=True, skip_modules= logger.notifyChannel('init', netsvc.LOG_INFO, 'module %s: loading objects' % package.name) migrations.migrate_module(package, 'pre') register_class(package.name) - modules = pool.instanciate(package.name, cr) + models = pool.instanciate(package.name, cr) if hasattr(package, 'init') or hasattr(package, 'update') or package.state in ('to install', 'to upgrade'): - init_module_objects(cr, package.name, modules) + init_module_models(cr, package.name, models) cr.commit() for package in graph: diff --git a/openerp/osv/osv.py b/openerp/osv/osv.py index 07b3869a332..c7cc4de5128 100644 --- a/openerp/osv/osv.py +++ b/openerp/osv/osv.py @@ -23,6 +23,8 @@ # OSV: Objects Services # +import sys +import inspect import orm import openerp.netsvc as netsvc import openerp.pooler as pooler @@ -246,10 +248,14 @@ class osv_pool(object): #TODO: pass a list of modules to load def instanciate(self, module, cr): + """ Instanciate all the classes of a given module for a particular db.""" + res = [] - class_list = module_class_list.get(module, []) - for klass in class_list: + + # instanciate classes registered through their constructor + for klass in module_class_list.get(module, []): res.append(klass.createInstance(self, module, cr)) + return res class osv_base(object):