diff options
| author | Fabien Meghazi <fme@openerp.com> | 2014-03-19 09:53:43 +0100 |
|---|---|---|
| committer | Fabien Meghazi <fme@openerp.com> | 2014-03-19 09:53:43 +0100 |
| commit | 40fdb08a7db13c52c49026f8425bc40dac5a7696 (patch) | |
| tree | deb6bae30ebd4e57c9f42e1fc8881617f704b4ae /addons/base_import_module/controllers | |
| parent | edf0f26d5963a5a9736d9358bbf37b9fd7b9d5d7 (diff) | |
[WIP] base_import_module
bzr revid: fme@openerp.com-20140319085343-zkee3rmqc9dzpa7h
Diffstat (limited to 'addons/base_import_module/controllers')
| -rw-r--r-- | addons/base_import_module/controllers/__init__.py | 1 | ||||
| -rw-r--r-- | addons/base_import_module/controllers/main.py | 38 |
2 files changed, 39 insertions, 0 deletions
diff --git a/addons/base_import_module/controllers/__init__.py b/addons/base_import_module/controllers/__init__.py new file mode 100644 index 00000000000..8ee9bae18d9 --- /dev/null +++ b/addons/base_import_module/controllers/__init__.py @@ -0,0 +1 @@ +import main diff --git a/addons/base_import_module/controllers/main.py b/addons/base_import_module/controllers/main.py new file mode 100644 index 00000000000..6ddd0158b4d --- /dev/null +++ b/addons/base_import_module/controllers/main.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +import os +import zipfile +from os.path import join as opj + +import openerp +from openerp.http import Controller, route, request + +MAX_FILE_SIZE = 100 * 1024 * 1024 # in megabytes + +class ImportModule(Controller): + + @route('/base_import_module/upload', type='http', auth='none') + def upload(self, mod_file=None, **kw): + assert request.db # TODO: custom ensure_db? + request.uid = openerp.SUPERUSER_ID # TODO: proper security + + imm = request.registry['ir.module.module'] + + if not mod_file: + raise Exception("No file sent.") + if not zipfile.is_zipfile(mod_file): + raise Exception("Not a zipfile.") + + with zipfile.ZipFile(mod_file, "r") as z: + for zf in z.filelist: + if zf.file_size > MAX_FILE_SIZE: + raise Exception("File %r exceed maximum allowed file size" % zf.filename) + + with openerp.tools.osutil.tempdir() as module_dir: + z.extractall(module_dir) + dirs = [d for d in os.listdir(module_dir) if os.path.isdir(opj(module_dir, d))] + for mod_name in dirs: + # assert mod_name.startswith('theme_') + path = opj(module_dir, mod_name) + imm.import_module(request.cr, request.uid, mod_name, path, context=request.context) + return 'ok' + |
