summaryrefslogtreecommitdiff
path: root/bin/addons/base/module/wizard/base_module_scan.py
diff options
context:
space:
mode:
authorNumerigraphe - Lionel Sausin <ls@numerigraphe.fr>2010-11-12 15:10:41 +0100
committerNumerigraphe - Lionel Sausin <ls@numerigraphe.fr>2010-11-12 15:10:41 +0100
commit182cf2b196da0d1f55ddfdcff62058b423e1bbc0 (patch)
tree779b50e2e54b1624ba669b4a3f56bb6407c08d49 /bin/addons/base/module/wizard/base_module_scan.py
parente013734045bbaae906748a8026455bac6786568e (diff)
parentcc0d270bab0d0b7862430c3e527f7edc02d1d587 (diff)
[MERGE] sync with the trunk
bzr revid: ls@numerigraphe.fr-20101112141041-19kpvr7pzxqankqo
Diffstat (limited to 'bin/addons/base/module/wizard/base_module_scan.py')
-rw-r--r--bin/addons/base/module/wizard/base_module_scan.py73
1 files changed, 73 insertions, 0 deletions
diff --git a/bin/addons/base/module/wizard/base_module_scan.py b/bin/addons/base/module/wizard/base_module_scan.py
new file mode 100644
index 00000000000..d47e091955f
--- /dev/null
+++ b/bin/addons/base/module/wizard/base_module_scan.py
@@ -0,0 +1,73 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+import os
+import glob
+import imp
+
+import tools
+
+import zipfile
+from osv import osv
+
+class base_module_scan(osv.osv_memory):
+ """ scan module """
+
+ _name = "base.module.scan"
+ _description = "scan module"
+
+ def watch_dir(self, cr, uid, ids, context):
+ mod_obj = self.pool.get('ir.module.module')
+ all_mods = mod_obj.read(cr, uid, mod_obj.search(cr, uid, []), ['name', 'state'])
+ known_modules = [x['name'] for x in all_mods]
+ ls_ad = glob.glob(os.path.join(tools.config['addons_path'], '*', '__terp__.py'))
+ modules = [module_name_re.match(name).group(1) for name in ls_ad]
+ for fname in os.listdir(tools.config['addons_path']):
+ if zipfile.is_zipfile(fname):
+ modules.append( fname.split('.')[0])
+ for module in modules:
+ if module in known_modules:
+ continue
+ terp = mod_obj.get_module_info(module)
+ if not terp.get('installable', True):
+ continue
+
+ # XXX check if this code is correct...
+ fm = imp.find_module(module)
+ try:
+ imp.load_module(module, *fm)
+ finally:
+ if fm[0]:
+ fm[0].close()
+
+ values = mod_obj.get_values_from_terp(terp)
+ mod_id = mod_obj.create(cr, uid, dict(name=module, state='uninstalled', **values))
+ dependencies = terp.get('depends', [])
+ for d in dependencies:
+ cr.execute('insert into ir_module_module_dependency (module_id,name) values (%s, %s)', (mod_id, d))
+ for module in known_modules:
+ terp = mod_obj.get_module_info(module)
+ if terp.get('installable', True):
+ for mod in all_mods:
+ if mod['name'] == module and mod['state'] == 'uninstallable':
+ mod_obj.write(cr, uid, [mod['id']], {'state': 'uninstalled'})
+ return {}
+
+base_module_scan() \ No newline at end of file