From f33713231e794888b9f2a62256418a22682eceb6 Mon Sep 17 00:00:00 2001 From: Emmanuel Garette Date: Fri, 7 Feb 2025 07:46:53 +0100 Subject: [PATCH] feat: better error messages --- tiramisu/autolib.py | 6 ++++-- tiramisu/error.py | 13 +++++++++++-- tiramisu/option/urloption.py | 12 ++++++++++-- 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/tiramisu/autolib.py b/tiramisu/autolib.py index baae827..5496880 100644 --- a/tiramisu/autolib.py +++ b/tiramisu/autolib.py @@ -22,7 +22,7 @@ from typing import Any, Optional, Union, Callable, Dict, List from itertools import chain import weakref -from .error import PropertiesOptionError, ConfigError, LeadershipError, ValueWarning, CancelParam +from .error import PropertiesOptionError, ConfigError, LeadershipError, ValueWarning, CancelParam, display_list from .i18n import _ from .setting import undefined, ConfigBag from .function import FUNCTION_WAITING_FOR_DICT, FUNCTION_WAITING_FOR_ERROR @@ -682,7 +682,9 @@ def manager_callback( child_path = name if param.optional: raise CancelParam(callbk_option.impl_getpath(), child_path) - msg = _('cannot calculate arguments for "{0}", cannot find dynamic variable "{1}"').format(subconfig.path, child_path) + + identifiers = display_list(doption.get_identifiers(parent), add_quote=True) + msg = _('cannot calculate arguments for "{0}", cannot find dynamic variable "{1}" with identifier "{2}", list of valid identifiers: {3}').format(subconfig.path, doption.impl_getpath(), identifier, identifiers) raise ConfigError(msg) from err new_parents.append( parent.get_child( diff --git a/tiramisu/error.py b/tiramisu/error.py index ac29ee9..799c65e 100644 --- a/tiramisu/error.py +++ b/tiramisu/error.py @@ -220,9 +220,9 @@ class ValueOptionError(_CommonError, ValueError): def __init__(self, **kwargs): if ValueOptionError.tmpl is None: if kwargs.get('index') is None: - ValueOptionError.tmpl = _('"{0}" is an invalid {1} for "{2}"') + self.tmpl = _('"{0}" is an invalid {1} for "{2}"') else: - ValueOptionError.tmpl = _('"{0}" is an invalid {1} for "{2}" at index "{3}"') + self.tmpl = _('"{0}" is an invalid {1} for "{2}" at index "{3}"') super().__init__(**kwargs) @@ -240,3 +240,12 @@ class CancelParam(Exception): super().__init__() self.origin_path = origin_path self.current_path = current_path + + def __ne__(self, value): + return value is None or value == "" + + def __eq__(self, value): + return value is None or value == "" + + def __bool__(self): + return False diff --git a/tiramisu/option/urloption.py b/tiramisu/option/urloption.py index 1677dbd..ca111cb 100644 --- a/tiramisu/option/urloption.py +++ b/tiramisu/option/urloption.py @@ -110,10 +110,18 @@ class URLOption(StrOption): domain, port, files = self._get_domain_port_files(value) # validate port portoption = self.impl_get_extra("_port") - portoption.validate(port) + try: + portoption.validate(port) + except ValueError as err: + msg = _('the port "{0}" is invalid: {1}').format(domain, err) + raise ValueError(msg) from err # validate domainname domainnameoption = self.impl_get_extra("_domainname") - domainnameoption.validate(domain) + try: + domainnameoption.validate(domain) + except ValueError as err: + msg = _('the domain "{0}" is invalid: {1}').format(domain, err) + raise ValueError(msg) from err # validate files if files is not None and files != "" and not self.path_re.search(files): raise ValueError(_("must ends with a valid resource name"))