diff options
| author | Jason Van Malder <jvm@odoo.com> | 2019-12-10 13:40:28 +0000 |
|---|---|---|
| committer | Jason Van Malder <jvm@odoo.com> | 2019-12-16 12:26:22 +0000 |
| commit | 501ae8dad2e9c9ac7db518b0ee1b39b2db57a75a (patch) | |
| tree | 4b68138ebca0222d1029eb94440f61f3aee44e8a /odoo/addons/base/wizard/base_import_language.py | |
| parent | 640011cf71d707e2b1e55bb8cb71d0bfe9de1a1d (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>
Diffstat (limited to 'odoo/addons/base/wizard/base_import_language.py')
| -rw-r--r-- | odoo/addons/base/wizard/base_import_language.py | 12 |
1 files changed, 11 insertions, 1 deletions
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( |
