diff options
| author | Christophe Simonis <chs@odoo.com> | 2015-06-18 15:35:04 +0530 |
|---|---|---|
| committer | David Monjoie <dmo@odoo.com> | 2015-08-27 10:01:00 +0200 |
| commit | d61bb94c0f8e8ba42e34dcf5b785a142b6f9d8d3 (patch) | |
| tree | 57a6ea5f4ea00c341a67202f54105b9460fc36de | |
| parent | b11f1ba70d647c65941559c9f0e2d5630d143ca6 (diff) | |
[IMP] base: improved import language wizard
- more user-friendly error
- proper file format check
| -rw-r--r-- | openerp/addons/base/module/wizard/base_import_language.py | 15 | ||||
| -rw-r--r-- | openerp/addons/base/module/wizard/base_import_language_view.xml | 3 | ||||
| -rw-r--r-- | openerp/tools/translate.py | 6 |
3 files changed, 17 insertions, 7 deletions
diff --git a/openerp/addons/base/module/wizard/base_import_language.py b/openerp/addons/base/module/wizard/base_import_language.py index f4108094207..0a5cc592651 100644 --- a/openerp/addons/base/module/wizard/base_import_language.py +++ b/openerp/addons/base/module/wizard/base_import_language.py @@ -1,11 +1,18 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. +import os import base64 +import logging from tempfile import TemporaryFile from openerp import tools from openerp.osv import osv, fields +from openerp.exceptions import UserError +from openerp.tools.translate import _ + +_logger = logging.getLogger(__name__) + class base_language_import(osv.osv_memory): """ Language Import """ @@ -16,6 +23,7 @@ class base_language_import(osv.osv_memory): 'name': fields.char('Language Name', required=True), 'code': fields.char('ISO Code', size=5, help="ISO Language and Country code, e.g. en_US", required=True), 'data': fields.binary('File', required=True), + 'filename': fields.char('File Name', required=True), 'overwrite': fields.boolean('Overwrite Existing Terms', help="If you enable this option, existing translations (including custom ones) " "will be overwritten and replaced by those in this file"), @@ -33,11 +41,12 @@ class base_language_import(osv.osv_memory): # now we determine the file format fileobj.seek(0) - first_line = fileobj.readline().strip().replace('"', '').replace(' ', '') - fileformat = first_line.endswith("type,name,res_id,src,value") and 'csv' or 'po' - fileobj.seek(0) + fileformat = os.path.splitext(this.filename)[-1][1:].lower() tools.trans_load_data(cr, fileobj, fileformat, this.code, lang_name=this.name, context=context) + except Exception, e: + _logger.exception('File unsuccessfully imported, due to format mismatch.') + raise UserError(_('File not imported due to format mismatch or a malformed file. (Valid formats are .csv, .po, .pot)\n\nTechnical Details:\n%s') % tools.ustr(e)) finally: fileobj.close() return True diff --git a/openerp/addons/base/module/wizard/base_import_language_view.xml b/openerp/addons/base/module/wizard/base_import_language_view.xml index b75ce6225b9..a29ac349675 100644 --- a/openerp/addons/base/module/wizard/base_import_language_view.xml +++ b/openerp/addons/base/module/wizard/base_import_language_view.xml @@ -10,7 +10,8 @@ <group> <field name="name" placeholder="e.g. English"/> <field name="code" string="Code" placeholder="e.g. en_US"/> - <field name="data"/> + <field name="data" filename="filename"/> + <field name="filename" invisible="1"/> <field name="overwrite"/> </group> <footer> diff --git a/openerp/tools/translate.py b/openerp/tools/translate.py index 72c2190fee3..8cebe086bda 100644 --- a/openerp/tools/translate.py +++ b/openerp/tools/translate.py @@ -1028,7 +1028,7 @@ def trans_load_data(cr, fileobj, fileformat, lang, lang_name=None, verbose=True, # and we try to find the corresponding # /path/to/xxx/i18n/xxx.pot file. # (Sometimes we have 'i18n_extra' instead of just 'i18n') - addons_module_i18n, _ = os.path.split(fileobj.name) + addons_module_i18n, _ignored = os.path.split(fileobj.name) addons_module, i18n_dir = os.path.split(addons_module_i18n) addons, module = os.path.split(addons_module) pot_handle = misc.file_open(os.path.join( @@ -1039,7 +1039,7 @@ def trans_load_data(cr, fileobj, fileformat, lang, lang_name=None, verbose=True, else: _logger.info('Bad file format: %s', fileformat) - raise Exception(_('Bad file format')) + raise Exception(_('Bad file format: %s') % fileformat) # Read the POT references, and keep them indexed by source string. class Target(object): @@ -1049,7 +1049,7 @@ def trans_load_data(cr, fileobj, fileformat, lang, lang_name=None, verbose=True, self.comments = None pot_targets = defaultdict(Target) - for type, name, res_id, src, _, comments in pot_reader: + for type, name, res_id, src, _ignored, comments in pot_reader: if type is not None: target = pot_targets[src] target.targets.add((type, name, res_id)) |
