summaryrefslogtreecommitdiff
path: root/bin/addons/base/module
diff options
context:
space:
mode:
authorChristophe Simonis <chs@openerp.com>2010-12-03 17:22:50 +0100
committerChristophe Simonis <chs@openerp.com>2010-12-03 17:22:50 +0100
commit5cd8b368b2b7c9f951d421f67fc3e84481ea61fb (patch)
treee3d948f69f307e8bbd5bdf44226ccaf55ec4e501 /bin/addons/base/module
parent62182bdb31b725bacb8999b8cc15240f3c7dc454 (diff)
[FIX] base: check external dependencies at module update
bzr revid: chs@openerp.com-20101203162250-y78gbf05yrcxm3nt
Diffstat (limited to 'bin/addons/base/module')
-rw-r--r--bin/addons/base/module/module.py31
1 files changed, 18 insertions, 13 deletions
diff --git a/bin/addons/base/module/module.py b/bin/addons/base/module/module.py
index b3724f1e26d..1bdf2a7aebb 100644
--- a/bin/addons/base/module/module.py
+++ b/bin/addons/base/module/module.py
@@ -70,14 +70,15 @@ class module(osv.osv):
_description = "Module"
__logger = logging.getLogger('base.' + _name)
- def get_module_info(self, name):
+ @classmethod
+ def get_module_info(cls, name):
info = {}
try:
info = addons.load_information_from_description_file(name)
if 'version' in info:
info['version'] = release.major_version + '.' + info['version']
except Exception:
- self.__logger.debug('Error when trying to fetch informations for '
+ cls.__logger.debug('Error when trying to fetch informations for '
'module %s', name, exc_info=True)
return info
@@ -242,6 +243,19 @@ class module(osv.osv):
if tools.find_in_path(binary) is None:
raise Exception('Unable to find %r in path' % (binary,))
+ @classmethod
+ def check_external_dependencies(cls, module_name, newstate='to install'):
+ terp = cls.get_module_info(module_name)
+ try:
+ cls._check_external_dependencies(terp)
+ except Exception, e:
+ if newstate == 'to install':
+ msg = _('Unable to install module "%s" because an external dependency is not met: %s')
+ elif newstate == 'to upgrade':
+ msg = _('Unable to upgrade module "%s" because an external dependency is not met: %s')
+ else:
+ msg = _('Unable to process module "%s" because an external dependency is not met: %s')
+ raise orm.except_orm(_('Error'), msg % (module_name, e.args[0]))
def state_update(self, cr, uid, ids, newstate, states_to_update, context=None, level=100):
if level<1:
@@ -259,17 +273,7 @@ class module(osv.osv):
od = self.browse(cr, uid, ids2)[0]
mdemo = od.demo or mdemo
- terp = self.get_module_info(module.name)
- try:
- self._check_external_dependencies(terp)
- except Exception, e:
- if newstate == 'to install':
- msg = _('Unable to install module "%s" because an external dependency is not met: %s')
- elif newstate == 'to upgrade':
- msg = _('Unable to upgrade module "%s" because an external dependency is not met: %s')
- else:
- msg = _('Unable to process module "%s" because an external dependency is not met: %s')
- raise orm.except_orm(_('Error'), msg % (module.name, e.args[0]))
+ self.check_external_dependencies(module.name, newstate)
if not module.dependencies_id:
mdemo = module.demo
if module.state in states_to_update:
@@ -316,6 +320,7 @@ class module(osv.osv):
if mod.state not in ('installed','to upgrade'):
raise orm.except_orm(_('Error'),
_("Can not upgrade module '%s'. It is not installed.") % (mod.name,))
+ self.check_external_dependencies(mod.name, 'to upgrade')
iids = depobj.search(cr, uid, [('name', '=', mod.name)], context=context)
for dep in depobj.browse(cr, uid, iids, context=context):
if dep.module_id.state=='installed' and dep.module_id not in todo: