diff options
Diffstat (limited to 'addons/base_import_module/controllers')
| -rw-r--r-- | addons/base_import_module/controllers/main.py | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/addons/base_import_module/controllers/main.py b/addons/base_import_module/controllers/main.py index 6ddd0158b4d..45ce1e57480 100644 --- a/addons/base_import_module/controllers/main.py +++ b/addons/base_import_module/controllers/main.py @@ -10,10 +10,16 @@ MAX_FILE_SIZE = 100 * 1024 * 1024 # in megabytes class ImportModule(Controller): - @route('/base_import_module/upload', type='http', auth='none') + @route('/base_import_module/check', type='http', auth='user', methods=['GET']) + def check(self): + assert request.db # TODO: custom ensure_db? + assert request.uid == openerp.SUPERUSER_ID # TODO: check admin group + return 'ok' + + @route('/base_import_module/upload', type='http', auth='user', methods=['POST']) def upload(self, mod_file=None, **kw): assert request.db # TODO: custom ensure_db? - request.uid = openerp.SUPERUSER_ID # TODO: proper security + assert request.uid == openerp.SUPERUSER_ID # TODO: check admin group imm = request.registry['ir.module.module'] @@ -22,6 +28,8 @@ class ImportModule(Controller): if not zipfile.is_zipfile(mod_file): raise Exception("Not a zipfile.") + success = [] + errors = dict() with zipfile.ZipFile(mod_file, "r") as z: for zf in z.filelist: if zf.file_size > MAX_FILE_SIZE: @@ -31,8 +39,14 @@ class ImportModule(Controller): 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' - + try: + # assert mod_name.startswith('theme_') + path = opj(module_dir, mod_name) + imm.import_module(request.cr, request.uid, mod_name, path, context=request.context) + success.append(mod_name) + except Exception, e: + errors[mod_name] = str(e) + r = ["Successfully imported module %r" % mod for mod in success] + for mod, error in errors.items(): + r.append("Error while importing module %r: %r" % (mod, error)) + return '\n'.join(r) |
