139 lines
4 KiB
Python
139 lines
4 KiB
Python
"""
|
|
Silique (https://www.silique.fr)
|
|
Copyright (C) 2024-2025
|
|
|
|
This program is free software: you can redistribute it and/or modify it
|
|
under the terms of the GNU Lesser General Public License as published by the
|
|
Free Software Foundation, either version 3 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 Lesser General Public License for more
|
|
details.
|
|
|
|
You should have received a copy of the GNU Lesser General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
"""
|
|
|
|
from pathlib import Path
|
|
from rougail.utils import load_modules
|
|
|
|
from .i18n import _
|
|
|
|
|
|
OUTPUTS = None
|
|
|
|
|
|
def get_outputs() -> None:
|
|
"""Load all outputs"""
|
|
module_name = f"rougail.output_display.output"
|
|
outputs = {}
|
|
names = []
|
|
for path in (Path(__file__).parent / "output").iterdir():
|
|
name = path.name
|
|
if not name.endswith(".py") or name.endswith("__.py"):
|
|
continue
|
|
module = load_modules(module_name + "." + name[:-3], str(path))
|
|
if "OutputFamily" not in dir(module):
|
|
continue
|
|
obj_class = module.OutputFamily
|
|
level = obj_class.level
|
|
if level in outputs:
|
|
raise ImportError(
|
|
_('duplicated level rougail-output-display for output "{0}": {1} and {2}').format(
|
|
level, obj_class.name, outputs[level].name
|
|
)
|
|
)
|
|
if obj_class.name in names:
|
|
raise ImportError(
|
|
_('duplicated name "{0}" in rougail-output-doc').format(
|
|
obj_class.name
|
|
)
|
|
)
|
|
names.append(obj_class.name)
|
|
outputs[level] = obj_class
|
|
return {outputs[level].name: outputs[level] for level in sorted(outputs)}
|
|
|
|
|
|
class OutPuts: # pylint: disable=R0903
|
|
"""Transformations applied on a object instance"""
|
|
|
|
def __init__(
|
|
self,
|
|
) -> None:
|
|
global OUTPUTS
|
|
if OUTPUTS is None:
|
|
OUTPUTS = get_outputs()
|
|
|
|
def get(self) -> dict:
|
|
"""Get all outputs"""
|
|
return OUTPUTS
|
|
|
|
|
|
def get_rougail_config(
|
|
*,
|
|
backward_compatibility=True,
|
|
) -> dict:
|
|
outputs = list(OutPuts().get())
|
|
output_format_default = outputs[0]
|
|
options = f"""
|
|
display:
|
|
description: {_('Display variables and values')}
|
|
help: |-
|
|
{_('Find all the variables and their values in your configuration (structural and user datas). Additional informations are available, such as the default value, the location where the value is loaded, etc.')}
|
|
disabled:
|
|
jinja: |-
|
|
{{% if step.output is propertyerror or step.output != 'display' %}}
|
|
true
|
|
{{% else %}}
|
|
false
|
|
{{% endif %}}
|
|
return_type: boolean
|
|
description: {_('if display is not set in "step.output"')}
|
|
|
|
output_format:
|
|
description: {_('The output format for displaying variables')}
|
|
default: { output_format_default }
|
|
choices:
|
|
"""
|
|
for output in outputs:
|
|
options += f" - {output}\n"
|
|
options += f"""
|
|
show_secrets: false # {_('Show secrets instead of obscuring them')}
|
|
|
|
mandatory:
|
|
description: {_('test mandatories variables before display in display')}
|
|
type: boolean
|
|
default:
|
|
jinja: |-
|
|
{{% if cli.read_write is defined and cli.read_write == true %}}
|
|
false
|
|
{{% else %}}
|
|
true
|
|
{{% endif %}}
|
|
description: {_('do not test if "cli.read_write" is true')}
|
|
|
|
console:
|
|
description: {_("Specific configuration when variables are displayed")}
|
|
disabled:
|
|
variable: _.output_format
|
|
when_not: console
|
|
|
|
max_width:
|
|
description: {_("Maximum number of characters per line")}
|
|
help: {_('null means unlimited')}
|
|
type: integer
|
|
mandatory: false
|
|
params:
|
|
min_integer: 50
|
|
"""
|
|
return {
|
|
"name": "display",
|
|
"process": "output",
|
|
"options": options,
|
|
"level": 40,
|
|
}
|
|
|
|
|
|
__all__ = ("get_rougail_config",)
|