summaryrefslogtreecommitdiff
path: root/addons/base_import_module/models/ir_module.py
diff options
context:
space:
mode:
authorFabien Meghazi <fme@openerp.com>2014-03-19 09:53:43 +0100
committerFabien Meghazi <fme@openerp.com>2014-03-19 09:53:43 +0100
commit40fdb08a7db13c52c49026f8425bc40dac5a7696 (patch)
treedeb6bae30ebd4e57c9f42e1fc8881617f704b4ae /addons/base_import_module/models/ir_module.py
parentedf0f26d5963a5a9736d9358bbf37b9fd7b9d5d7 (diff)
[WIP] base_import_module
bzr revid: fme@openerp.com-20140319085343-zkee3rmqc9dzpa7h
Diffstat (limited to 'addons/base_import_module/models/ir_module.py')
-rw-r--r--addons/base_import_module/models/ir_module.py49
1 files changed, 49 insertions, 0 deletions
diff --git a/addons/base_import_module/models/ir_module.py b/addons/base_import_module/models/ir_module.py
new file mode 100644
index 00000000000..be03067972b
--- /dev/null
+++ b/addons/base_import_module/models/ir_module.py
@@ -0,0 +1,49 @@
+import logging
+from os.path import join as opj
+
+import openerp
+from openerp.osv import osv, fields
+from openerp.tools import convert_file
+
+_logger = logging.getLogger(__name__)
+
+class view(osv.osv):
+ _inherit = "ir.module.module"
+ _columns = {
+ 'is_theme': fields.boolean('Theme'),
+ }
+ _defaults = {
+ 'is_theme': False,
+ }
+
+ def import_module(self, cr, uid, module, path, context=None):
+ known_mods = self.browse(cr, uid, self.search(cr, uid, []))
+ known_mods_names = dict([(m.name, m) for m in known_mods])
+
+ mod = known_mods_names.get(module)
+ terp = openerp.modules.load_information_from_description_file(module, mod_path=path)
+ values = self.get_values_from_terp(terp)
+
+ unmet_dependencies = set(terp['depends']).difference(known_mods_names.keys())
+ if unmet_dependencies:
+ raise Exception("Unmet module dependencies: %s" % ', '.join(unmet_dependencies))
+
+ if mod:
+ self.write(cr, uid, mod.id, values)
+ mode = 'update'
+ else:
+ assert terp.get('installable', True), "Module not installable"
+ self.create(cr, uid, dict(name=module, state='uninstalled', **values))
+ mode = 'init'
+
+ for kind in ['data', 'init_xml', 'update_xml']:
+ for filename in terp[kind]:
+ _logger.info("module %s: loading %s", module, filename)
+ noupdate = False
+ if filename.endswith('.csv') and kind in ('init', 'init_xml'):
+ noupdate = True
+ pathname = opj(path, filename)
+ idref = {}
+ convert_file(cr, module, filename, idref, mode=mode, noupdate=noupdate, kind=kind, pathname=pathname)
+
+ return True