[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:
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user