summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Van Malder <jvm@odoo.com>2019-12-10 13:40:28 +0000
committerJason Van Malder <jvm@odoo.com>2019-12-16 12:26:22 +0000
commit501ae8dad2e9c9ac7db518b0ee1b39b2db57a75a (patch)
tree4b68138ebca0222d1029eb94440f61f3aee44e8a
parent640011cf71d707e2b1e55bb8cb71d0bfe9de1a1d (diff)
[FIX] odoo: fix translation import onconflict
Issue - Export all english translation - Import the file and override existing terms Cause When importing, we try to insert the translation if it doesn't exists. If it exists, we do an update via a "onconflict" rule. This update can be done only one time but in the values to import there are things like: ``` ( 'Account', # translation 8, # numbers of duplicate ['account', 'account', 'account', 'account', # modules 'account', 'account_ponto', 'account_yodlee', 'payment'] ) ``` Solution It will not be fixed in stable to avoid performances issues. Instead, we will display a clearer error message. As it's a `psycopg2.ProgrammingError`, the cursor is aborted and we can no longer use it to retrieve translations. This is why I use a save point. OPW-2150610 closes odoo/odoo#41934 X-original-commit: e108770d55b42a1793085a169145492b39d0a15c Signed-off-by: Jason Van Malder <jvm-odoo@users.noreply.github.com>
-rw-r--r--odoo/addons/base/i18n/base.pot35
-rw-r--r--odoo/addons/base/wizard/base_import_language.py12
2 files changed, 36 insertions, 11 deletions
diff --git a/odoo/addons/base/i18n/base.pot b/odoo/addons/base/i18n/base.pot
index 84c5f806b7f..3afe8711235 100644
--- a/odoo/addons/base/i18n/base.pot
+++ b/odoo/addons/base/i18n/base.pot
@@ -11342,16 +11342,6 @@ msgid "File"
msgstr ""
#. module: base
-#: code:addons/base/wizard/base_import_language.py:0
-#, python-format
-msgid ""
-"File %r not imported due to format mismatch or a malformed file. (Valid formats are .csv, .po, .pot)\n"
-"\n"
-"Technical Details:\n"
-"%s"
-msgstr ""
-
-#. module: base
#: code:addons/base/models/ir_ui_view.py:0
#, python-format
msgid "File Arch"
@@ -11386,6 +11376,31 @@ msgid ""
msgstr ""
#. module: base
+#: code:addons/base/wizard/base_import_language.py:0
+#, python-format
+msgid "File %r not imported due to a malformed file.\n"
+"\n"
+"This issue can be caused by duplicates entries who are referring to the same field. Please check the content of the file you are trying to import.\n"
+"\n"
+"Technical Details:\n"
+"%s"
+msgstr ""
+
+#. module: base
+#: code:addons/base/wizard/base_import_language.py:0
+#, python-format
+msgid "File %r not imported due to format mismatch or a malformed file. (Valid formats are .csv, .po, .pot)\n"
+"\n"
+"Technical Details:\n"
+"%s"
+msgstr ""
+
+#. module: base
+#: model:ir.model.fields,field_description:base.field_ir_attachment__datas_fname
+msgid "Filename"
+msgstr ""
+
+#. module: base
#: model:ir.model.fields,field_description:base.field_ir_actions_act_window__filter
msgid "Filter"
msgstr ""
diff --git a/odoo/addons/base/wizard/base_import_language.py b/odoo/addons/base/wizard/base_import_language.py
index d85fad07610..be2da88318b 100644
--- a/odoo/addons/base/wizard/base_import_language.py
+++ b/odoo/addons/base/wizard/base_import_language.py
@@ -5,8 +5,10 @@ import base64
import logging
import os
from tempfile import TemporaryFile
+from psycopg2 import ProgrammingError
+from contextlib import closing
-from odoo import api, fields, models, tools, _
+from odoo import api, fields, models, tools, sql_db, _
from odoo.exceptions import UserError
_logger = logging.getLogger(__name__)
@@ -44,6 +46,14 @@ class BaseLanguageImport(models.TransientModel):
tools.trans_load_data(
this._cr, buf, fileformat, this.code, overwrite=self.overwrite
)
+ except ProgrammingError as e:
+ _logger.exception('File unsuccessfully imported, due to a malformed file.')
+
+ with closing(sql_db.db_connect(self._cr.dbname).cursor()) as cr:
+ raise UserError(_('File %r not imported due to a malformed file.\n\n'
+ 'This issue can be caused by duplicates entries who are referring to the same field. '
+ 'Please check the content of the file you are trying to import.\n\n'
+ 'Technical Details:\n%s') % tools.ustr(e))
except Exception as e:
_logger.exception('File unsuccessfully imported, due to format mismatch.')
raise UserError(