add structural_commandline plugin
This commit is contained in:
parent
a97ca626c7
commit
3a7b3f7b07
9 changed files with 142 additions and 5 deletions
|
@ -347,7 +347,7 @@ suffix:
|
||||||
YAML().load(obj['options']),
|
YAML().load(obj['options']),
|
||||||
)
|
)
|
||||||
|
|
||||||
tiram_obj = convert.save('a')
|
tiram_obj = convert.save(None)
|
||||||
optiondescription = {}
|
optiondescription = {}
|
||||||
exec(tiram_obj, {}, optiondescription) # pylint: disable=W0122
|
exec(tiram_obj, {}, optiondescription) # pylint: disable=W0122
|
||||||
return _RougailConfig(backward_compatibility, optiondescription["option_0"])
|
return _RougailConfig(backward_compatibility, optiondescription["option_0"])
|
||||||
|
|
|
@ -52,15 +52,15 @@ def convert_boolean(value: str) -> bool:
|
||||||
|
|
||||||
|
|
||||||
CONVERT_OPTION = {
|
CONVERT_OPTION = {
|
||||||
"string": dict(opttype="StrOption", example="xxx"),
|
"string": dict(opttype="StrOption", example="example"),
|
||||||
"number": dict(opttype="IntOption", func=int, example=42),
|
"number": dict(opttype="IntOption", func=int, example=42),
|
||||||
"float": dict(opttype="FloatOption", func=float, example=1.42),
|
"float": dict(opttype="FloatOption", func=float, example=1.42),
|
||||||
"boolean": dict(opttype="BoolOption", func=convert_boolean),
|
"boolean": dict(opttype="BoolOption", func=convert_boolean),
|
||||||
"secret": dict(opttype="PasswordOption", example="xxx"),
|
"secret": dict(opttype="PasswordOption", example="secrets"),
|
||||||
"mail": dict(opttype="EmailOption", example="user@example.net"),
|
"mail": dict(opttype="EmailOption", example="user@example.net"),
|
||||||
"unix_filename": dict(opttype="FilenameOption", example="/tmp/myfile.txt"),
|
"unix_filename": dict(opttype="FilenameOption", example="/tmp/myfile.txt"),
|
||||||
"date": dict(opttype="DateOption", example="2000-01-01"),
|
"date": dict(opttype="DateOption", example="2000-01-01"),
|
||||||
"unix_user": dict(opttype="UsernameOption", example="xxx"),
|
"unix_user": dict(opttype="UsernameOption", example="username"),
|
||||||
"ip": dict(opttype="IPOption", initkwargs={"allow_reserved": True}, example="1.1.1.1"),
|
"ip": dict(opttype="IPOption", initkwargs={"allow_reserved": True}, example="1.1.1.1"),
|
||||||
"cidr": dict(opttype="IPOption", initkwargs={"cidr": True}, example="1.1.1.0/24"),
|
"cidr": dict(opttype="IPOption", initkwargs={"cidr": True}, example="1.1.1.0/24"),
|
||||||
"netmask": dict(opttype="NetmaskOption", example="255.255.255.0"),
|
"netmask": dict(opttype="NetmaskOption", example="255.255.255.0"),
|
||||||
|
@ -90,7 +90,7 @@ CONVERT_OPTION = {
|
||||||
opttype="PermissionsOption", initkwargs={"warnings_only": True}, func=int,
|
opttype="PermissionsOption", initkwargs={"warnings_only": True}, func=int,
|
||||||
example="644"
|
example="644"
|
||||||
),
|
),
|
||||||
"choice": dict(opttype="ChoiceOption", example="xxx"),
|
"choice": dict(opttype="ChoiceOption", example="a_choice"),
|
||||||
#
|
#
|
||||||
"symlink": dict(opttype="SymLinkOption"),
|
"symlink": dict(opttype="SymLinkOption"),
|
||||||
}
|
}
|
||||||
|
|
53
src/rougail/structural_commandline/annotator.py
Normal file
53
src/rougail/structural_commandline/annotator.py
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
"""Annotate to add specify attribute for tiramisu-cmdline
|
||||||
|
|
||||||
|
Silique (https://www.silique.fr)
|
||||||
|
Copyright (C) 2024
|
||||||
|
|
||||||
|
distribued with GPL-2 or later license
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
"""
|
||||||
|
from rougail.annotator.variable import Walk
|
||||||
|
|
||||||
|
class Annotator(Walk):
|
||||||
|
"""Annotate value"""
|
||||||
|
level = 5
|
||||||
|
|
||||||
|
def __init__(self, objectspace, *args) -> None:
|
||||||
|
if not objectspace.paths:
|
||||||
|
return
|
||||||
|
self.objectspace = objectspace
|
||||||
|
self.manage_alternative_name()
|
||||||
|
self.not_for_commandline()
|
||||||
|
|
||||||
|
def manage_alternative_name(self) -> None:
|
||||||
|
for variable in self.get_variables():
|
||||||
|
if variable.type == 'symlink':
|
||||||
|
continue
|
||||||
|
if not variable.alternative_name:
|
||||||
|
continue
|
||||||
|
alternative_name = variable.alternative_name
|
||||||
|
variable_path = variable.path
|
||||||
|
if '.' not in variable_path:
|
||||||
|
path = alternative_name
|
||||||
|
else:
|
||||||
|
path = variable_path.rsplit('.', 1)[0] + '.' + alternative_name
|
||||||
|
self.objectspace.add_variable(alternative_name, {'type': 'symlink', 'path': path, 'opt': variable}, variable.xmlfiles, False, False, variable.version)
|
||||||
|
|
||||||
|
def not_for_commandline(self) -> None:
|
||||||
|
for variable in self.get_variables():
|
||||||
|
if not hasattr(variable, 'commandline') or variable.commandline:
|
||||||
|
continue
|
||||||
|
self.objectspace.properties.add(variable.path, 'not_for_commandline', True)
|
31
src/rougail/structural_commandline/object_model.py
Normal file
31
src/rougail/structural_commandline/object_model.py
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
"""Annotate to add specify attribute for tiramisu-cmdline
|
||||||
|
|
||||||
|
Silique (https://www.silique.fr)
|
||||||
|
Copyright (C) 2024
|
||||||
|
|
||||||
|
distribued with GPL-2 or later license
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
"""
|
||||||
|
from typing import Optional
|
||||||
|
from pydantic import BaseModel
|
||||||
|
|
||||||
|
|
||||||
|
class Variable(BaseModel):
|
||||||
|
alternative_name: Optional[str]=None
|
||||||
|
commandline: bool=True
|
||||||
|
|
||||||
|
|
||||||
|
__all__ = ('Variable',)
|
|
@ -0,0 +1,12 @@
|
||||||
|
---
|
||||||
|
version: '1.1'
|
||||||
|
var: # A suffix variable
|
||||||
|
- val1
|
||||||
|
- val2
|
||||||
|
"dyn{{ suffix }}":
|
||||||
|
description: A dynamic family
|
||||||
|
type: dynamic
|
||||||
|
dynamic:
|
||||||
|
type: variable
|
||||||
|
variable: _.var
|
||||||
|
var: a value # A dynamic variable with suffix {{ suffix }}
|
|
@ -0,0 +1,12 @@
|
||||||
|
from tiramisu import *
|
||||||
|
from tiramisu.setting import ALLOWED_LEADER_PROPERTIES
|
||||||
|
from rougail.tiramisu import func, dict_env, load_functions, ConvertDynOptionDescription
|
||||||
|
load_functions('tests/dictionaries/../eosfunc/test.py')
|
||||||
|
ALLOWED_LEADER_PROPERTIES.add("basic")
|
||||||
|
ALLOWED_LEADER_PROPERTIES.add("standard")
|
||||||
|
ALLOWED_LEADER_PROPERTIES.add("advanced")
|
||||||
|
option_2 = StrOption(name="var", doc="A suffix variable", multi=True, default=["val1", "val2"], default_multi="val1", properties=frozenset({"mandatory", "notempty", "standard"}), informations={'type': 'string'})
|
||||||
|
option_4 = StrOption(name="var", doc="A dynamic variable with suffix {{ suffix }}", default="a value", properties=frozenset({"mandatory", "standard"}), informations={'type': 'string'})
|
||||||
|
optiondescription_3 = ConvertDynOptionDescription(name="dyn{{ suffix }}", doc="A dynamic family", suffixes=Calculation(func['calc_value'], Params((ParamOption(option_2)))), children=[option_4], properties=frozenset({"standard"}))
|
||||||
|
optiondescription_1 = OptionDescription(name="rougail", doc="Rougail", children=[option_2, optiondescription_3], properties=frozenset({"standard"}))
|
||||||
|
option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[optiondescription_1])
|
|
@ -0,0 +1,18 @@
|
||||||
|
from tiramisu import *
|
||||||
|
from tiramisu.setting import ALLOWED_LEADER_PROPERTIES
|
||||||
|
from rougail.tiramisu import func, dict_env, load_functions, ConvertDynOptionDescription
|
||||||
|
load_functions('tests/dictionaries/../eosfunc/test.py')
|
||||||
|
ALLOWED_LEADER_PROPERTIES.add("basic")
|
||||||
|
ALLOWED_LEADER_PROPERTIES.add("standard")
|
||||||
|
ALLOWED_LEADER_PROPERTIES.add("advanced")
|
||||||
|
option_3 = StrOption(name="var", doc="A suffix variable", multi=True, default=["val1", "val2"], default_multi="val1", properties=frozenset({"mandatory", "notempty", "standard"}), informations={'type': 'string'})
|
||||||
|
option_5 = StrOption(name="var", doc="A dynamic variable with suffix {{ suffix }}", default="a value", properties=frozenset({"mandatory", "standard"}), informations={'type': 'string'})
|
||||||
|
optiondescription_4 = ConvertDynOptionDescription(name="dyn{{ suffix }}", doc="A dynamic family", suffixes=Calculation(func['calc_value'], Params((ParamOption(option_3)))), children=[option_5], properties=frozenset({"standard"}))
|
||||||
|
optiondescription_2 = OptionDescription(name="rougail", doc="Rougail", children=[option_3, optiondescription_4], properties=frozenset({"standard"}))
|
||||||
|
optiondescription_1 = OptionDescription(name="1", doc="1", children=[optiondescription_2], properties=frozenset({"standard"}))
|
||||||
|
option_8 = StrOption(name="var", doc="A suffix variable", multi=True, default=["val1", "val2"], default_multi="val1", properties=frozenset({"mandatory", "notempty", "standard"}), informations={'type': 'string'})
|
||||||
|
option_10 = StrOption(name="var", doc="A dynamic variable with suffix {{ suffix }}", default="a value", properties=frozenset({"mandatory", "standard"}), informations={'type': 'string'})
|
||||||
|
optiondescription_9 = ConvertDynOptionDescription(name="dyn{{ suffix }}", doc="A dynamic family", suffixes=Calculation(func['calc_value'], Params((ParamOption(option_8)))), children=[option_10], properties=frozenset({"standard"}))
|
||||||
|
optiondescription_7 = OptionDescription(name="rougail", doc="Rougail", children=[option_8, optiondescription_9], properties=frozenset({"standard"}))
|
||||||
|
optiondescription_6 = OptionDescription(name="2", doc="2", children=[optiondescription_7], properties=frozenset({"standard"}))
|
||||||
|
option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[optiondescription_1, optiondescription_6])
|
|
@ -0,0 +1,11 @@
|
||||||
|
from tiramisu import *
|
||||||
|
from tiramisu.setting import ALLOWED_LEADER_PROPERTIES
|
||||||
|
from rougail.tiramisu import func, dict_env, load_functions, ConvertDynOptionDescription
|
||||||
|
load_functions('tests/dictionaries/../eosfunc/test.py')
|
||||||
|
ALLOWED_LEADER_PROPERTIES.add("basic")
|
||||||
|
ALLOWED_LEADER_PROPERTIES.add("standard")
|
||||||
|
ALLOWED_LEADER_PROPERTIES.add("advanced")
|
||||||
|
option_1 = StrOption(name="var", doc="A suffix variable", multi=True, default=["val1", "val2"], default_multi="val1", properties=frozenset({"mandatory", "notempty", "standard"}), informations={'type': 'string'})
|
||||||
|
option_3 = StrOption(name="var", doc="A dynamic variable with suffix {{ suffix }}", default="a value", properties=frozenset({"mandatory", "standard"}), informations={'type': 'string'})
|
||||||
|
optiondescription_2 = ConvertDynOptionDescription(name="dyn{{ suffix }}", doc="A dynamic family", suffixes=Calculation(func['calc_value'], Params((ParamOption(option_1)))), children=[option_3], properties=frozenset({"standard"}))
|
||||||
|
option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[option_1, optiondescription_2])
|
Loading…
Reference in a new issue