summaryrefslogtreecommitdiff
path: root/bin/addons/base/module/module.py
diff options
context:
space:
mode:
authorChristophe Simonis <chs@openerp.com>2010-05-31 11:42:39 +0200
committerChristophe Simonis <chs@openerp.com>2010-05-31 11:42:39 +0200
commit04a13826a0ecd4fb2a713c4b2050e5d4d4d4c507 (patch)
tree6fd9b023fb1d965824d1fc59f5d2d42cdec402eb /bin/addons/base/module/module.py
parentc11f53d6951e766890569e402ef18d18aaf50e50 (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.py27
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: