From 13c0c0e25674f8570ed358e1bce04ae9f8f1ca2e Mon Sep 17 00:00:00 2001 From: Emmanuel Garette Date: Wed, 20 Nov 2019 08:27:33 +0100 Subject: [PATCH] better error message --- tiramisu/error.py | 79 ++++++++++++++++++++++++++++++----------------- 1 file changed, 50 insertions(+), 29 deletions(-) diff --git a/tiramisu/error.py b/tiramisu/error.py index 9b8ef74..a030dc5 100644 --- a/tiramisu/error.py +++ b/tiramisu/error.py @@ -33,21 +33,19 @@ def display_list(lst, separator='and', add_quote=False): if add_quote and not ret.startswith('"'): ret = '"{}"'.format(ret) return ret - else: - lst.sort() - lst_ = [] - for l in lst[:-1]: - if not isinstance(l, str): - l = str(l) - if add_quote and not l.startswith('"'): - l = '"{}"'.format(l) - lst_.append(_(l)) - last = lst[-1] - if not isinstance(last, str): - last = str(_(last)) - if add_quote and not last.startswith('"'): - last = '"{}"'.format(last) - return ', '.join(lst_) + _(' {} ').format(separator) + '{}'.format(last) + lst_ = [] + for l in lst: + if not isinstance(l, str): + l = str(l) + lst_.append(_(l)) + lst__ = [] + for l in lst_: + if add_quote and not l.startswith('"'): + l = '"{}"'.format(l) + lst__.append(l) + lst__.sort() + last = lst__[-1] + return ', '.join(lst__[:-1]) + _(' {} ').format(separator) + '{}'.format(last) # Exceptions for an Option @@ -89,30 +87,40 @@ class PropertiesOptionError(AttributeError): properties = list(self._settings.calc_raises_properties(self._option_bag, apply_requires=False)) for property_ in self._settings.get_calculated_properties(self._option_bag): - properties.append(property_.help(self._option_bag)) + prop = property_.help(self._option_bag) + if prop is not None: + properties.append(prop) if not properties: # if proptype == ['mandatory'] properties = self.proptype only_one = len(properties) == 1 - msg = display_list(properties, add_quote=True) + properties_msg = display_list(properties, add_quote=True) if only_one: prop_msg = _('property') else: prop_msg = _('properties') - if self._orig_opt: - self.msg = str(_('cannot access to {0} "{1}" because "{2}" has {3} {4}' - '').format(self._opt_type, - self._orig_opt.impl_get_display_name(), - self._name, - prop_msg, - msg)) + if properties == ['frozen']: + if self._orig_opt: + msg = 'cannot modify the {0} "{1}" because "{2}" has {3} {4}' + else: + msg = 'cannot modify the {0} "{1}" because has {2} {3}' else: - self.msg = str(_('cannot access to {0} "{1}" because has {2} {3}' - '').format(self._opt_type, - self._name, - prop_msg, - msg)) + if self._orig_opt: + msg = 'cannot access to {0} "{1}" because "{2}" has {3} {4}' + else: + msg = 'cannot access to {0} "{1}" because has {2} {3}' + if self._orig_opt: + self.msg = _(msg).format(self._opt_type, + self._orig_opt.impl_get_display_name(), + self._name, + prop_msg, + properties_msg) + else: + self.msg = _(msg).format(self._opt_type, + self._name, + prop_msg, + properties_msg) del self._opt_type, self._name del self._settings, self._orig_opt return self.msg @@ -184,6 +192,19 @@ class _CommonError: class ValueWarning(_CommonError, UserWarning): tmpl = _('attention, "{0}" could be an invalid {1} for "{2}"') + def __init__(self, *args, **kwargs): + if len(args) == 1 and not kwargs: + self.msg = args[0] + pass + else: + super().__init__(*args, **kwargs) + self.msg = None + + def __str__(self): + if self.msg is None: + return super().__str__() + return self.msg + class ValueOptionError(_CommonError, ValueError): tmpl = _('"{0}" is an invalid {1} for "{2}"')