[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>
This commit is contained in:
Jason Van Malder
2019-12-16 12:26:22 +00:00
parent 640011cf71
commit 501ae8dad2
2 changed files with 36 additions and 11 deletions
+25 -10
View File
@@ -11341,16 +11341,6 @@ msgstr ""
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
@@ -11385,6 +11375,31 @@ msgid ""
" Useful to (hard) reset broken views or to read arch from file in dev-xml mode."
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"
@@ -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(