diff options
| author | Christophe Simonis <chs@openerp.com> | 2010-05-31 11:42:39 +0200 |
|---|---|---|
| committer | Christophe Simonis <chs@openerp.com> | 2010-05-31 11:42:39 +0200 |
| commit | 04a13826a0ecd4fb2a713c4b2050e5d4d4d4c507 (patch) | |
| tree | 6fd9b023fb1d965824d1fc59f5d2d42cdec402eb /bin/addons/base/module/module.py | |
| parent | c11f53d6951e766890569e402ef18d18aaf50e50 (diff) | |
[IMP] allow to specify external dependencies into __openerp__.py file
bzr revid: chs@openerp.com-20100531094239-ci0wprefy9xy41nj
Diffstat (limited to 'bin/addons/base/module/module.py')
| -rw-r--r-- | bin/addons/base/module/module.py | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/bin/addons/base/module/module.py b/bin/addons/base/module/module.py index 1f5f2393c19..2372a09405f 100644 --- a/bin/addons/base/module/module.py +++ b/bin/addons/base/module/module.py @@ -23,6 +23,7 @@ import tarfile import re import urllib import os +import imp import tools from osv import fields, osv, orm import zipfile @@ -191,6 +192,27 @@ class module(osv.osv): return super(module, self).unlink(cr, uid, ids, context=context) + @staticmethod + def _check_external_dependencies(terp): + depends = terp.get('external_dependencies') + if not depends: + return + for pydep in depends.get('python', []): + parts = pydep.split('.') + parts.reverse() + path = None + while parts: + part = parts.pop() + try: + f, path, descr = imp.find_module(part, path and [path] or None) + except ImportError: + raise ImportError('No module named %s' % (pydep,)) + + for binary in depends.get('bin', []): + if tools.find_in_path(binary) is None: + raise Exception('Unable to find %r in path' % (binary,)) + + def state_update(self, cr, uid, ids, newstate, states_to_update, context={}, level=100): if level<1: raise orm.except_orm(_('Error'), _('Recursion error in modules dependencies !')) @@ -206,6 +228,11 @@ class module(osv.osv): else: 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: + raise orm.except_orm(_('Error'), _('Unable %s the module "%s" because an external dependencie is not met: %s' % (newstate, module.name, e.args[0]))) if not module.dependencies_id: mdemo = module.demo if module.state in states_to_update: |
