From f6bdd0c17ecd605c6bfd655c9010978a997d95cc Mon Sep 17 00:00:00 2001 From: Emmanuel Garette Date: Thu, 15 Nov 2018 18:35:14 +0100 Subject: [PATCH] symplify tiramisu/option/option.py --- tiramisu/option/booloption.py | 8 +- tiramisu/option/broadcastoption.py | 8 +- tiramisu/option/dateoption.py | 8 +- tiramisu/option/domainnameoption.py | 8 +- tiramisu/option/floatoption.py | 8 +- tiramisu/option/intoption.py | 8 +- tiramisu/option/ipoption.py | 8 +- tiramisu/option/netmaskoption.py | 6 +- tiramisu/option/option.py | 135 ++++++++++++++-------------- tiramisu/option/passwordoption.py | 8 +- tiramisu/option/portoption.py | 9 +- tiramisu/option/stroption.py | 8 +- tiramisu/option/urloption.py | 12 +-- 13 files changed, 115 insertions(+), 119 deletions(-) diff --git a/tiramisu/option/booloption.py b/tiramisu/option/booloption.py index 6f78743..bed2803 100644 --- a/tiramisu/option/booloption.py +++ b/tiramisu/option/booloption.py @@ -19,7 +19,7 @@ # the whole pypy projet is under MIT licence # ____________________________________________________________ -from ..setting import undefined +from ..setting import undefined, Undefined, OptionBag from ..i18n import _ from .option import Option @@ -30,8 +30,8 @@ class BoolOption(Option): _display_name = _('boolean') def _validate(self, - value, - *args, - **kwargs): + value: bool, + option_bag: OptionBag, + current_opt: Option=Undefined) -> None: if not isinstance(value, bool): raise ValueError() diff --git a/tiramisu/option/broadcastoption.py b/tiramisu/option/broadcastoption.py index a708717..98d4aae 100644 --- a/tiramisu/option/broadcastoption.py +++ b/tiramisu/option/broadcastoption.py @@ -21,7 +21,7 @@ from IPy import IP from ..error import ConfigError -from ..setting import undefined +from ..setting import undefined, Undefined, OptionBag from ..i18n import _ from .option import Option @@ -31,9 +31,9 @@ class BroadcastOption(Option): _display_name = _('broadcast address') def _validate(self, - value, - *args, - **kwargs): + value: str, + option_bag: OptionBag, + current_opt: Option=Undefined) -> None: if not isinstance(value, str): raise ValueError(_('invalid string')) if value.count('.') != 3: diff --git a/tiramisu/option/dateoption.py b/tiramisu/option/dateoption.py index 56f3e76..d7a0f63 100644 --- a/tiramisu/option/dateoption.py +++ b/tiramisu/option/dateoption.py @@ -20,7 +20,7 @@ # ____________________________________________________________ from datetime import datetime -from ..setting import undefined +from ..setting import undefined, Undefined, OptionBag from ..i18n import _ from .option import Option @@ -30,9 +30,9 @@ class DateOption(Option): _display_name = _('date') def _validate(self, - value, - *args, - **kwargs): + value: str, + option_bag: OptionBag, + current_opt: Option=Undefined) -> None: if not isinstance(value, str): raise ValueError(_('invalid string')) try: diff --git a/tiramisu/option/domainnameoption.py b/tiramisu/option/domainnameoption.py index 1d9e3ea..8854a46 100644 --- a/tiramisu/option/domainnameoption.py +++ b/tiramisu/option/domainnameoption.py @@ -21,7 +21,7 @@ import re from IPy import IP -from ..setting import undefined +from ..setting import undefined, Undefined, OptionBag from ..i18n import _ from .option import Option @@ -98,9 +98,9 @@ class DomainnameOption(Option): return 63 def _validate(self, - value, - *args, - **kwargs): + value: str, + option_bag: OptionBag, + current_opt: Option=Undefined) -> None: def _valid_length(val): if len(val) < 1: raise ValueError(_("invalid length (min 1)")) diff --git a/tiramisu/option/floatoption.py b/tiramisu/option/floatoption.py index 5b2268a..b9767b3 100644 --- a/tiramisu/option/floatoption.py +++ b/tiramisu/option/floatoption.py @@ -19,7 +19,7 @@ # the whole pypy projet is under MIT licence # ____________________________________________________________ -from ..setting import undefined +from ..setting import undefined, Undefined, OptionBag from ..i18n import _ from .option import Option @@ -30,8 +30,8 @@ class FloatOption(Option): _display_name = _('float') def _validate(self, - value, - *args, - **kwargs): + value: float, + option_bag: OptionBag, + current_opt: Option=Undefined) -> None: if not isinstance(value, float): raise ValueError() diff --git a/tiramisu/option/intoption.py b/tiramisu/option/intoption.py index 98d8072..9e9ab77 100644 --- a/tiramisu/option/intoption.py +++ b/tiramisu/option/intoption.py @@ -19,7 +19,7 @@ # the whole pypy projet is under MIT licence # ____________________________________________________________ -from ..setting import undefined +from ..setting import undefined, Undefined, OptionBag from ..i18n import _ from .option import Option @@ -44,9 +44,9 @@ class IntOption(Option): def _validate(self, - value, - *args, - **kwargs): + value: int, + option_bag: OptionBag, + current_opt: Option=Undefined) -> None: if not isinstance(value, int): raise ValueError() min_number = self.impl_get_extra('min_number') diff --git a/tiramisu/option/ipoption.py b/tiramisu/option/ipoption.py index f3f5cb5..3eab8a8 100644 --- a/tiramisu/option/ipoption.py +++ b/tiramisu/option/ipoption.py @@ -21,7 +21,7 @@ from IPy import IP from ..error import ConfigError -from ..setting import undefined +from ..setting import undefined, Undefined, OptionBag from ..i18n import _ from .option import Option @@ -63,9 +63,9 @@ class IPOption(Option): extra=extra) def _validate(self, - value, - *args, - **kwargs): + value: str, + option_bag: OptionBag, + current_opt: Option=Undefined) -> None: # sometimes an ip term starts with a zero # but this does not fit in some case, for example bind does not like it if not isinstance(value, str): diff --git a/tiramisu/option/netmaskoption.py b/tiramisu/option/netmaskoption.py index e8acd58..80a2a5d 100644 --- a/tiramisu/option/netmaskoption.py +++ b/tiramisu/option/netmaskoption.py @@ -21,7 +21,7 @@ from IPy import IP from ..error import ConfigError -from ..setting import undefined +from ..setting import undefined, OptionBag, Undefined from ..i18n import _ from .option import Option @@ -33,8 +33,8 @@ class NetmaskOption(Option): def _validate(self, value: str, - *args, - **kwargs) -> None: + option_bag: OptionBag, + current_opt: Option=Undefined) -> None: if not isinstance(value, str): raise ValueError(_('invalid string')) if value.count('.') != 3: diff --git a/tiramisu/option/option.py b/tiramisu/option/option.py index 4583789..b10f39d 100644 --- a/tiramisu/option/option.py +++ b/tiramisu/option/option.py @@ -21,11 +21,11 @@ # ____________________________________________________________ import warnings import weakref -from typing import Any, List, Callable, Optional +from typing import Any, List, Callable, Optional, Dict, Union, Tuple from .baseoption import BaseOption, submulti, STATIC_TUPLE from ..i18n import _ -from ..setting import log, undefined, OptionBag +from ..setting import log, undefined, OptionBag, Undefined from ..autolib import carry_out_calculation from ..error import (ConfigError, ValueWarning, PropertiesOptionError, ValueOptionError, display_list) @@ -58,22 +58,21 @@ class Option(BaseOption): ) _empty = '' def __init__(self, - name, - doc, - default=undefined, - default_multi=None, - requires=None, - multi=False, - unique=undefined, - callback=None, - callback_params=None, - validator=None, - validator_params=None, - properties=None, - warnings_only=False, - extra=None, - allow_empty_list=undefined): - + name: str, + doc: str, + default: Any=undefined, + default_multi: Any=None, + requires: List[Dict]=None, + multi: bool=False, + unique: bool=undefined, + callback: Optional[Callable]=None, + callback_params: Optional[Params]=None, + validator: Optional[Callable]=None, + validator_params: Optional[Params]=None, + properties: Optional[List[str]]=None, + warnings_only: bool=False, + extra: Optional[Dict]=None, + allow_empty_list: bool=undefined) -> None: _setattr = object.__setattr__ if not multi and default_multi is not None: raise ValueError(_("default_multi is set whereas multi is False" @@ -165,22 +164,22 @@ class Option(BaseOption): #__________________________________________________________________________ # option's information - def impl_is_multi(self): + def impl_is_multi(self) -> bool: return getattr(self, '_multi', 1) != 1 - def impl_is_submulti(self): + def impl_is_submulti(self) -> bool: return getattr(self, '_multi', 1) == 2 - def impl_is_unique(self): + def impl_is_unique(self) -> bool: return getattr(self, '_unique', False) - def impl_allow_empty_list(self): + def impl_allow_empty_list(self) -> Union[Undefined, bool]: return getattr(self, '_allow_empty_list', undefined) - def impl_is_dynsymlinkoption(self): + def impl_is_dynsymlinkoption(self) -> bool: return False - def impl_getdefault(self): + def impl_getdefault(self) -> Any: "accessing the default value" is_multi = self.impl_is_multi() default = getattr(self, '_default', undefined) @@ -194,7 +193,7 @@ class Option(BaseOption): default = list(default) return default - def impl_getdefault_multi(self): + def impl_getdefault_multi(self) -> Any: "accessing the default value for a multi" if self.impl_is_submulti(): default_value = [] @@ -203,7 +202,7 @@ class Option(BaseOption): return getattr(self, '_default_multi', default_value) def impl_get_extra(self, - key): + key: str) -> Any: extra = getattr(self, '_extra', {}) if isinstance(extra, tuple): if key in extra[0]: @@ -215,7 +214,7 @@ class Option(BaseOption): #__________________________________________________________________________ # validator - def impl_get_validator(self): + def impl_get_validator(self) -> Tuple[Callable, Params]: val = getattr(self, '_val_call', (None,))[0] if val is None: ret_val = (None, None) @@ -226,9 +225,9 @@ class Option(BaseOption): return ret_val def impl_validate(self, - value, - option_bag, - check_error=True): + value: Any, + option_bag: OptionBag, + check_error: bool=True) -> None: """ """ config_bag = option_bag.config_bag @@ -353,12 +352,8 @@ class Option(BaseOption): '{0}'.format(err)) def _validate_calculator(self, - callback, - callback_params): - """callback_params: - * None - * {'': ((option, permissive),), 'ip': ((None,), (option, permissive)) - """ + callback: Callable, + callback_params: Optional[Params]=None) -> None: if callback is None: return default_multi = getattr(self, '_default_multi', None) @@ -370,14 +365,15 @@ class Option(BaseOption): 'is calculated').format(self.impl_getname())) def _second_level_validation(self, - value, - warnings_only): + value: Any, + warnings_only: bool) -> None: pass #__________________________________________________________________________ # master/slaves - def impl_is_master_slaves(self, type_='both'): + def impl_is_master_slaves(self, + type_: str='both') -> bool: master_slaves = self.impl_get_master_slaves() if master_slaves is not None: if type_ == 'both': @@ -397,9 +393,9 @@ class Option(BaseOption): # consistencies def impl_add_consistency(self, - func, + func: str, *other_opts, - **params): + **params) -> None: """Add consistency means that value will be validate with other_opts option's values. @@ -453,9 +449,9 @@ class Option(BaseOption): opt._add_dependency(self) def _add_consistency(self, - func, - all_cons_opts, - params): + func: str, + all_cons_opts: List[BaseOption], + params: Dict) -> None: cons = (-1, func, all_cons_opts, params) consistencies = getattr(self, '_consistencies', None) if consistencies is None: @@ -466,17 +462,17 @@ class Option(BaseOption): def get_consistencies(self): return getattr(self, '_consistencies', STATIC_TUPLE) - def has_consistencies(self, context): + def has_consistencies(self, context) -> bool: descr = context.cfgimpl_get_description() if getattr(descr, '_cache_consistencies', None) is None: return False return self in descr._cache_consistencies def valid_consistency(self, - option_bag, - value, - check_error, - option_warnings_only): + option_bag: OptionBag, + value: Any, + check_error: bool, + option_warnings_only: bool) -> None: if option_bag.config_bag is not undefined: descr = option_bag.config_bag.context.cfgimpl_get_description() # no consistency found at all @@ -529,9 +525,9 @@ class Option(BaseOption): option_bag.fromconsistency = [] def _valid_consistencies(self, - other_opts, - init=True, - func=None): + other_opts: List[BaseOption], + init: bool=True, + func: Optional[str]=None) -> None: if self.issubdyn(): dynod = self.getsubdyn() else: @@ -561,10 +557,9 @@ class Option(BaseOption): if is_multi != opt.impl_is_multi(): raise ConfigError(_('every options in consistency must be ' 'multi or none')) - if init: - # FIXME - if func != 'not_equal': - opt._has_dependency = True + # FIXME + if init and func != 'not_equal': + opt._has_dependency = True def launch_consistency(self, current_opt: BaseOption, @@ -574,7 +569,7 @@ class Option(BaseOption): value: Any, opts: List[BaseOption], warnings_only: bool, - transitive: bool): + transitive: bool) -> None: """Launch consistency now """ all_cons_vals = [] @@ -642,11 +637,11 @@ class Option(BaseOption): raise err def get_consistency_value(self, - option_bag, - current_option, - cons_id, - value, - func): + option_bag: OptionBag, + current_option: BaseOption, + cons_id: int, + value: Any, + func: str) -> Any: if option_bag.ori_option == current_option: # orig_option is current option # we have already value, so use it @@ -682,11 +677,11 @@ class Option(BaseOption): return current_value def _cons_not_equal(self, - current_opt, - opts, - vals, - warnings_only, - context): + current_opt: BaseOption, + opts: List[BaseOption], + vals: List[Any], + warnings_only: bool, + context) -> None: equal = [] is_current = False for idx_inf, val_inf in enumerate(vals): @@ -726,9 +721,9 @@ class RegexpOption(Option): __slots__ = tuple() def _validate(self, - value, - *args, - **kwargs): + value: Any, + option_bag: OptionBag, + current_opt: BaseOption=Undefined) -> None: if not isinstance(value, str): raise ValueError(_('invalid string')) match = self._regexp.search(value) diff --git a/tiramisu/option/passwordoption.py b/tiramisu/option/passwordoption.py index c225666..bab8225 100644 --- a/tiramisu/option/passwordoption.py +++ b/tiramisu/option/passwordoption.py @@ -19,7 +19,7 @@ # the whole pypy projet is under MIT licence # ____________________________________________________________ -from ..setting import undefined +from ..setting import undefined, Undefined, OptionBag from ..i18n import _ from .option import Option @@ -30,8 +30,8 @@ class PasswordOption(Option): _display_name = _('password') def _validate(self, - value, - *args, - **kwargs): + value: str, + option_bag: OptionBag, + current_opt: Option=Undefined) -> None: if not isinstance(value, str): raise ValueError(_('invalid string')) diff --git a/tiramisu/option/portoption.py b/tiramisu/option/portoption.py index 137f398..5a39861 100644 --- a/tiramisu/option/portoption.py +++ b/tiramisu/option/portoption.py @@ -20,8 +20,9 @@ # ____________________________________________________________ import re import sys +from typing import Union -from ..setting import undefined +from ..setting import undefined, Undefined, OptionBag from ..i18n import _ from .option import Option @@ -97,9 +98,9 @@ class PortOption(Option): extra=extra) def _validate(self, - value, - *args, - **kwargs): + value: Union[int,str], + option_bag: OptionBag, + current_opt: Option=Undefined) -> None: if isinstance(value, int): value = str(value) if not isinstance(value, str): diff --git a/tiramisu/option/stroption.py b/tiramisu/option/stroption.py index 0589baa..a0f9022 100644 --- a/tiramisu/option/stroption.py +++ b/tiramisu/option/stroption.py @@ -20,7 +20,7 @@ # ____________________________________________________________ import sys -from ..setting import undefined +from ..setting import undefined, Undefined, OptionBag from ..i18n import _ from .option import Option @@ -31,9 +31,9 @@ class StrOption(Option): _display_name = _('string') def _validate(self, - value, - *args, - **kwargs): + value: str, + option_bag: OptionBag, + current_opt: Option=Undefined) -> None: if not isinstance(value, str): raise ValueError() diff --git a/tiramisu/option/urloption.py b/tiramisu/option/urloption.py index 7489975..4188a0f 100644 --- a/tiramisu/option/urloption.py +++ b/tiramisu/option/urloption.py @@ -20,7 +20,7 @@ # ____________________________________________________________ import re -from ..setting import undefined +from ..setting import undefined, Undefined, OptionBag from ..i18n import _ from .option import Option from .domainnameoption import DomainnameOption @@ -33,9 +33,9 @@ class URLOption(DomainnameOption): _display_name = _('URL') def _validate(self, - value, - *args, - **kwargs): + value: str, + option_bag: OptionBag, + current_opt: Option=Undefined) -> None: if not isinstance(value, str): raise ValueError(_('invalid string')) match = self.proto_re.search(value) @@ -62,8 +62,8 @@ class URLOption(DomainnameOption): '65536')) # validate domainname super(URLOption, self)._validate(domain, - *args, - **kwargs) + option_bag, + current_opt) super(URLOption, self)._second_level_validation(domain, False) # validate file if files is not None and files != '' and not self.path_re.search(files):