safer option.type() (ref #4)

This commit is contained in:
Emmanuel Garette 2019-03-06 21:50:28 +01:00
parent cc44cabf56
commit 2a6df8c8d8
19 changed files with 22 additions and 1 deletions

View File

@ -148,7 +148,7 @@ class _TiramisuOptionOptionDescription(CommonTiramisuOption):
return self._option_bag.option return self._option_bag.option
def type(self): def type(self):
return self._option_bag.option.get_display_type() return self._option_bag.option.get_type()
def isleadership(self): def isleadership(self):
"""Test if option is a leader or a follower""" """Test if option is a leader or a follower"""

View File

@ -27,6 +27,7 @@ from .option import Option
class BoolOption(Option): class BoolOption(Option):
"represents a choice between ``True`` and ``False``" "represents a choice between ``True`` and ``False``"
__slots__ = tuple() __slots__ = tuple()
_type = 'boolean'
_display_name = _('boolean') _display_name = _('boolean')
def _validate(self, def _validate(self,

View File

@ -28,6 +28,7 @@ from .option import Option
class BroadcastOption(Option): class BroadcastOption(Option):
__slots__ = tuple() __slots__ = tuple()
_type = 'broadcast_address'
_display_name = _('broadcast address') _display_name = _('broadcast address')
def _validate(self, def _validate(self,

View File

@ -33,6 +33,7 @@ class ChoiceOption(Option):
The option can also have the value ``None`` The option can also have the value ``None``
""" """
__slots__ = tuple() __slots__ = tuple()
_type = 'choice'
_display_name = _('choice') _display_name = _('choice')
def __init__(self, def __init__(self,

View File

@ -27,6 +27,7 @@ from .option import Option
class DateOption(Option): class DateOption(Option):
__slots__ = tuple() __slots__ = tuple()
_type = 'date'
_display_name = _('date') _display_name = _('date')
def _validate(self, def _validate(self,

View File

@ -35,6 +35,7 @@ class DomainnameOption(StrOption):
fqdn: with tld, not supported yet fqdn: with tld, not supported yet
""" """
__slots__ = tuple() __slots__ = tuple()
_type = 'domainname'
_display_name = _('domain name') _display_name = _('domain name')
def __init__(self, def __init__(self,

View File

@ -28,4 +28,5 @@ class EmailOption(RegexpOption):
__slots__ = tuple() __slots__ = tuple()
#https://www.w3.org/TR/html-markup/input.email.html#input.email.attrs.value.single. #https://www.w3.org/TR/html-markup/input.email.html#input.email.attrs.value.single.
_regexp = re.compile(r"^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$") _regexp = re.compile(r"^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$")
_type = 'email'
_display_name = _('email address') _display_name = _('email address')

View File

@ -27,4 +27,5 @@ from .stroption import RegexpOption
class FilenameOption(RegexpOption): class FilenameOption(RegexpOption):
__slots__ = tuple() __slots__ = tuple()
_regexp = re.compile(r"^[a-zA-Z0-9\-\._~/+]+$") _regexp = re.compile(r"^[a-zA-Z0-9\-\._~/+]+$")
_type = 'filename'
_display_name = _('file name') _display_name = _('file name')

View File

@ -27,6 +27,7 @@ from .option import Option
class FloatOption(Option): class FloatOption(Option):
"represents a choice of a floating point number" "represents a choice of a floating point number"
__slots__ = tuple() __slots__ = tuple()
_type = 'float'
_display_name = _('float') _display_name = _('float')
def _validate(self, def _validate(self,

View File

@ -27,6 +27,7 @@ from .option import Option
class IntOption(Option): class IntOption(Option):
"represents a choice of an integer" "represents a choice of an integer"
__slots__ = tuple() __slots__ = tuple()
_type = 'integer'
_display_name = _('integer') _display_name = _('integer')
def __init__(self, def __init__(self,

View File

@ -32,6 +32,7 @@ from .networkoption import NetworkOption
class IPOption(StrOption): class IPOption(StrOption):
"represents the choice of an ip" "represents the choice of an ip"
__slots__ = tuple() __slots__ = tuple()
_type = 'ip'
_display_name = _('IP') _display_name = _('IP')
def __init__(self, def __init__(self,

View File

@ -31,6 +31,7 @@ from .stroption import StrOption
class NetmaskOption(StrOption): class NetmaskOption(StrOption):
"represents the choice of a netmask" "represents the choice of a netmask"
__slots__ = tuple() __slots__ = tuple()
_type = 'netmask'
_display_name = _('netmask address') _display_name = _('netmask address')
def _validate(self, def _validate(self,

View File

@ -28,6 +28,7 @@ from .option import Option
class NetworkOption(Option): class NetworkOption(Option):
"represents the choice of a network" "represents the choice of a network"
__slots__ = tuple() __slots__ = tuple()
_type = 'network'
_display_name = _('network address') _display_name = _('network address')
def __init__(self, def __init__(self,

View File

@ -179,6 +179,10 @@ class Option(BaseOption):
def impl_is_dynsymlinkoption(self) -> bool: def impl_is_dynsymlinkoption(self) -> bool:
return False return False
def get_type(self) -> str:
# _display_name for compatibility with older version than 3.0rc3
return getattr(self, '_type', self._display_name)
def get_display_type(self) -> str: def get_display_type(self) -> str:
return self._display_name return self._display_name

View File

@ -28,6 +28,7 @@ from .stroption import StrOption
class PasswordOption(StrOption): class PasswordOption(StrOption):
"represents the choice of a password" "represents the choice of a password"
__slots__ = tuple() __slots__ = tuple()
_type = 'password'
_display_name = _('password') _display_name = _('password')
def _validate(self, def _validate(self,

View File

@ -40,6 +40,7 @@ class PortOption(StrOption):
""" """
__slots__ = tuple() __slots__ = tuple()
port_re = re.compile(r"^[0-9]*$") port_re = re.compile(r"^[0-9]*$")
_type = 'port'
_display_name = _('port') _display_name = _('port')
def __init__(self, def __init__(self,

View File

@ -29,6 +29,7 @@ from .option import Option
class StrOption(Option): class StrOption(Option):
"represents the choice of a string" "represents the choice of a string"
__slots__ = tuple() __slots__ = tuple()
_type = 'string'
_display_name = _('string') _display_name = _('string')
def _validate(self, def _validate(self,

View File

@ -30,6 +30,7 @@ class URLOption(DomainnameOption):
__slots__ = tuple() __slots__ = tuple()
proto_re = re.compile(r'(http|https)://') proto_re = re.compile(r'(http|https)://')
path_re = re.compile(r"^[A-Za-z0-9\-\._~:/\?#\[\]@!%\$&\'\(\)\*\+,;=]+$") path_re = re.compile(r"^[A-Za-z0-9\-\._~:/\?#\[\]@!%\$&\'\(\)\*\+,;=]+$")
_type = 'url'
_display_name = _('URL') _display_name = _('URL')
def _validate(self, def _validate(self,

View File

@ -28,4 +28,5 @@ class UsernameOption(RegexpOption):
__slots__ = tuple() __slots__ = tuple()
#regexp build with 'man 8 adduser' informations #regexp build with 'man 8 adduser' informations
_regexp = re.compile(r"^[a-z_][a-z0-9_-]{0,30}[$a-z0-9_-]{0,1}$") _regexp = re.compile(r"^[a-z_][a-z0-9_-]{0,30}[$a-z0-9_-]{0,1}$")
_type = 'username'
_display_name = _('username') _display_name = _('username')