[IMP] module.loading: attempt to load each module atomically within load_module_graph (untested, work-in-progress)
bzr revid: odo@openerp.com-20110711124958-p91752exwv21sdf8
This commit is contained in:
parent
f51a5e1498
commit
cc7fae257f
|
@ -88,14 +88,14 @@ def load_module_graph(cr, graph, status=None, perform_checks=True, skip_modules=
|
||||||
if new_query:
|
if new_query:
|
||||||
cr.execute(new_query)
|
cr.execute(new_query)
|
||||||
|
|
||||||
def load_init_xml(cr, m, idref, mode):
|
def load_init_xml(cr, module_name, idref, mode):
|
||||||
_load_data(cr, m, idref, mode, 'init_xml')
|
_load_data(cr, module_name, idref, mode, 'init_xml')
|
||||||
|
|
||||||
def load_update_xml(cr, m, idref, mode):
|
def load_update_xml(cr, module_name, idref, mode):
|
||||||
_load_data(cr, m, idref, mode, 'update_xml')
|
_load_data(cr, module_name, idref, mode, 'update_xml')
|
||||||
|
|
||||||
def load_demo_xml(cr, m, idref, mode):
|
def load_demo_xml(cr, module_name, idref, mode):
|
||||||
_load_data(cr, m, idref, mode, 'demo_xml')
|
_load_data(cr, module_name, idref, mode, 'demo_xml')
|
||||||
|
|
||||||
def load_data(cr, module_name, idref, mode):
|
def load_data(cr, module_name, idref, mode):
|
||||||
_load_data(cr, module_name, idref, mode, 'data')
|
_load_data(cr, module_name, idref, mode, 'data')
|
||||||
|
@ -156,34 +156,29 @@ def load_module_graph(cr, graph, status=None, perform_checks=True, skip_modules=
|
||||||
pool = pooler.get_pool(cr.dbname)
|
pool = pooler.get_pool(cr.dbname)
|
||||||
migrations = openerp.modules.migration.MigrationManager(cr, graph)
|
migrations = openerp.modules.migration.MigrationManager(cr, graph)
|
||||||
logger.notifyChannel('init', netsvc.LOG_DEBUG, 'loading %d packages..' % len(graph))
|
logger.notifyChannel('init', netsvc.LOG_DEBUG, 'loading %d packages..' % len(graph))
|
||||||
|
modobj = pool.get('ir.module.module')
|
||||||
|
|
||||||
# register, instanciate and initialize models for each modules
|
# register, instantiate and initialize models for each modules
|
||||||
for package in graph:
|
for package in graph:
|
||||||
if skip_modules and package.name in skip_modules:
|
module_name = package.name
|
||||||
|
module_id = package.id
|
||||||
|
|
||||||
|
if skip_modules and module_name in skip_modules:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
logger.notifyChannel('init', netsvc.LOG_INFO, 'module %s: loading objects' % package.name)
|
logger.notifyChannel('init', netsvc.LOG_INFO, 'module %s: loading objects' % package.name)
|
||||||
migrations.migrate_module(package, 'pre')
|
migrations.migrate_module(package, 'pre')
|
||||||
register_module_classes(package.name)
|
register_module_classes(package.name)
|
||||||
models = 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'):
|
if hasattr(package, 'init') or hasattr(package, 'update') or package.state in ('to install', 'to upgrade'):
|
||||||
init_module_models(cr, package.name, models)
|
init_module_models(cr, package.name, models)
|
||||||
cr.commit()
|
|
||||||
|
|
||||||
# load data for each modules
|
status['progress'] = float(statusi) / len(graph)
|
||||||
modobj = pool.get('ir.module.module')
|
|
||||||
for package in graph:
|
|
||||||
status['progress'] = (float(statusi)+0.1) / len(graph)
|
|
||||||
m = package.name
|
|
||||||
mid = package.id
|
|
||||||
|
|
||||||
if skip_modules and m in skip_modules:
|
|
||||||
continue
|
|
||||||
|
|
||||||
if perform_checks:
|
if perform_checks:
|
||||||
modobj.check(cr, 1, [mid])
|
modobj.check(cr, 1, [module_id])
|
||||||
|
|
||||||
idref = {}
|
idref = {}
|
||||||
status['progress'] = (float(statusi)+0.4) / len(graph)
|
|
||||||
|
|
||||||
mode = 'update'
|
mode = 'update'
|
||||||
if hasattr(package, 'init') or package.state == 'to install':
|
if hasattr(package, 'init') or package.state == 'to install':
|
||||||
|
@ -192,21 +187,21 @@ def load_module_graph(cr, graph, status=None, perform_checks=True, skip_modules=
|
||||||
if hasattr(package, 'init') or hasattr(package, 'update') or package.state in ('to install', 'to upgrade'):
|
if hasattr(package, 'init') or hasattr(package, 'update') or package.state in ('to install', 'to upgrade'):
|
||||||
if package.state=='to upgrade':
|
if package.state=='to upgrade':
|
||||||
# upgrading the module information
|
# upgrading the module information
|
||||||
modobj.write(cr, 1, [mid], modobj.get_values_from_terp(package.data))
|
modobj.write(cr, 1, [module_id], modobj.get_values_from_terp(package.data))
|
||||||
load_init_xml(cr, m, idref, mode)
|
load_init_xml(cr, module_name, idref, mode)
|
||||||
load_update_xml(cr, m, idref, mode)
|
load_update_xml(cr, module_name, idref, mode)
|
||||||
load_data(cr, m, idref, mode)
|
load_data(cr, module_name, idref, mode)
|
||||||
if hasattr(package, 'demo') or (package.dbdemo and package.state != 'installed'):
|
if hasattr(package, 'demo') or (package.dbdemo and package.state != 'installed'):
|
||||||
status['progress'] = (float(statusi)+0.75) / len(graph)
|
status['progress'] = (float(statusi)+0.75) / len(graph)
|
||||||
load_demo_xml(cr, m, idref, mode)
|
load_demo_xml(cr, module_name, idref, mode)
|
||||||
load_demo(cr, m, idref, mode)
|
load_demo(cr, module_name, idref, mode)
|
||||||
cr.execute('update ir_module_module set demo=%s where id=%s', (True, mid))
|
cr.execute('update ir_module_module set demo=%s where id=%s', (True, module_id))
|
||||||
|
|
||||||
# launch tests only in demo mode, as most tests will depend
|
# launch tests only in demo mode, as most tests will depend
|
||||||
# on demo data. Other tests can be added into the regular
|
# on demo data. Other tests can be added into the regular
|
||||||
# 'data' section, but should probably not alter the data,
|
# 'data' section, but should probably not alter the data,
|
||||||
# as there is no rollback.
|
# as there is no rollback.
|
||||||
load_test(cr, m, idref, mode)
|
load_test(cr, module_name, idref, mode)
|
||||||
|
|
||||||
processed_modules.append(package.name)
|
processed_modules.append(package.name)
|
||||||
|
|
||||||
|
@ -214,17 +209,16 @@ def load_module_graph(cr, graph, status=None, perform_checks=True, skip_modules=
|
||||||
|
|
||||||
ver = release.major_version + '.' + package.data['version']
|
ver = release.major_version + '.' + package.data['version']
|
||||||
# Set new modules and dependencies
|
# Set new modules and dependencies
|
||||||
modobj.write(cr, 1, [mid], {'state': 'installed', 'latest_version': ver})
|
modobj.write(cr, 1, [module_id], {'state': 'installed', 'latest_version': ver})
|
||||||
cr.commit()
|
|
||||||
# Update translations for all installed languages
|
# Update translations for all installed languages
|
||||||
modobj.update_translations(cr, 1, [mid], None)
|
modobj.update_translations(cr, 1, [module_id], None)
|
||||||
cr.commit()
|
|
||||||
|
|
||||||
package.state = 'installed'
|
package.state = 'installed'
|
||||||
for kind in ('init', 'demo', 'update'):
|
for kind in ('init', 'demo', 'update'):
|
||||||
if hasattr(package, kind):
|
if hasattr(package, kind):
|
||||||
delattr(package, kind)
|
delattr(package, kind)
|
||||||
|
|
||||||
|
cr.commit()
|
||||||
statusi += 1
|
statusi += 1
|
||||||
|
|
||||||
cr.commit()
|
cr.commit()
|
||||||
|
|
Loading…
Reference in New Issue