109 lines
4.3 KiB
Python
109 lines
4.3 KiB
Python
#This file is part of Tryton. The COPYRIGHT file at the top level of
|
|
#this repository contains the full copyright notices and license terms.
|
|
from trytond.transaction import Transaction
|
|
|
|
|
|
class WarningErrorMixin(object):
|
|
|
|
def raise_user_error(self, error, error_args=None,
|
|
error_description='', error_description_args=None,
|
|
raise_exception=True):
|
|
'''
|
|
Raise an exception that will be displayed as an error message
|
|
in the client.
|
|
|
|
:param error: the key of the dictionary _error_messages used
|
|
for error message
|
|
:param error_args: the arguments that will be used
|
|
for "%"-based substitution
|
|
:param error_description: the key of the dictionary
|
|
_error_messages used for error description
|
|
:param error_description_args: the arguments that will be used
|
|
for "%"-based substitution
|
|
:param raise_exception: if set to False return the error string
|
|
(or tuple if error_description is not empty) instead of raising an
|
|
exception.
|
|
'''
|
|
translation_obj = self.pool.get('ir.translation')
|
|
|
|
error = self._error_messages.get(error, error)
|
|
|
|
language = Transaction().context.get('language') or 'en_US'
|
|
res = translation_obj._get_source(self._name, 'error', language, error)
|
|
if not res:
|
|
res = translation_obj._get_source(error, 'error', language)
|
|
if not res:
|
|
res = translation_obj._get_source(error, 'error', 'en_US')
|
|
|
|
if res:
|
|
error = res
|
|
|
|
if error_args:
|
|
try:
|
|
error = error % error_args
|
|
except TypeError:
|
|
pass
|
|
|
|
if error_description:
|
|
error_description = self._error_messages.get(error_description,
|
|
error_description)
|
|
|
|
res = translation_obj._get_source(self._name, 'error', language,
|
|
error_description)
|
|
if not res:
|
|
res = translation_obj._get_source(error_description, 'error',
|
|
language)
|
|
if not res:
|
|
res = translation_obj._get_source(error_description, 'error',
|
|
'en_US')
|
|
|
|
if res:
|
|
error_description = res
|
|
|
|
if error_description_args:
|
|
try:
|
|
error_description = error_description % \
|
|
error_description_args
|
|
except TypeError:
|
|
pass
|
|
if raise_exception:
|
|
raise Exception('UserError', error, error_description)
|
|
else:
|
|
return (error, error_description)
|
|
if raise_exception:
|
|
raise Exception('UserError', error)
|
|
else:
|
|
return error
|
|
|
|
def raise_user_warning(self, warning_name, warning,
|
|
warning_args=None, warning_description='',
|
|
warning_description_args=None):
|
|
'''
|
|
Raise an exception that will be displayed as a warning message
|
|
in the client, if the user has not yet bypassed it.
|
|
|
|
:param warning_name: the unique warning name
|
|
:param warning: the key of the dictionary _error_messages used
|
|
for warning message
|
|
:param warning_args: the arguments that will be used for
|
|
"%"-based substitution
|
|
:param warning_description: the key of the dictionary
|
|
_error_messages used for warning description
|
|
:param warning_description_args: the arguments that will be used
|
|
for "%"-based substitution
|
|
'''
|
|
warning_obj = self.pool.get('res.user.warning')
|
|
if warning_obj.check(warning_name):
|
|
if warning_description:
|
|
warning, warning_description = self.raise_user_error(warning,
|
|
error_args=warning_args,
|
|
error_description=warning_description,
|
|
error_description_args=warning_description_args,
|
|
raise_exception=False)
|
|
raise Exception('UserWarning', warning_name, warning,
|
|
warning_description)
|
|
else:
|
|
warning = self.raise_user_error(warning,
|
|
error_args=warning_args, raise_exception=False)
|
|
raise Exception('UserWarning', warning_name, warning)
|