feat: support auto_save variable

This commit is contained in:
egarette@silique.fr 2024-09-04 09:04:08 +02:00
parent c5d67cfd61
commit 1b3ae40dce
4 changed files with 47 additions and 24 deletions

View file

@ -19,6 +19,7 @@ along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
""" """
from typing import Optional
from tiramisu.error import PropertiesOptionError, ConfigError from tiramisu.error import PropertiesOptionError, ConfigError
from rougail import RougailConfig from rougail import RougailConfig
from .config import OutPuts from .config import OutPuts
@ -29,6 +30,8 @@ class RougailOutputExporter:
def __init__(self, def __init__(self,
conf: 'Config', conf: 'Config',
rougailconfig: RougailConfig=None, rougailconfig: RougailConfig=None,
user_data_errors: Optional[list]=None,
user_data_warnings: Optional[list]=None,
) -> None: ) -> None:
if rougailconfig is None: if rougailconfig is None:
rougailconfig = RougailConfig rougailconfig = RougailConfig
@ -41,11 +44,13 @@ class RougailOutputExporter:
self.read_write = self.rougailconfig['exporter.read_write'] self.read_write = self.rougailconfig['exporter.read_write']
self.errors = [] self.errors = []
self.warnings = [] self.warnings = []
self.user_data_errors = user_data_errors
self.user_data_warnings = user_data_warnings
self.formater = outputs[output](self.rougailconfig) self.formater = outputs[output](self.rougailconfig)
self.root = self.formater.root() self.root = self.formater.root()
def mandatory(self): def mandatory(self):
if self.rougailconfig['exporter.no_mandatory']: if not self.rougailconfig['exporter.mandatory']:
return return
title = False title = False
options_with_error = [] options_with_error = []
@ -78,11 +83,14 @@ class RougailOutputExporter:
self.conf.property.read_write() self.conf.property.read_write()
else: else:
self.conf.property.read_only() self.conf.property.read_only()
errors = self.user_data_errors + self.errors
if errors:
self.formater.errors(errors)
if self.errors: if self.errors:
self.formater.errors(self.errors)
return False return False
if self.warnings: warnings = self.user_data_warnings + self.warnings
self.formater.warnings(self.warnings) if warnings:
self.formater.warnings(warnings)
self.formater.header() self.formater.header()
self.parse_options(self.conf, self.parse_options(self.conf,
self.root, self.root,
@ -93,6 +101,10 @@ class RougailOutputExporter:
def print(self) -> None: def print(self) -> None:
return self.formater.print() return self.formater.print()
def run(self) -> None:
self.exporter()
self.print()
def parse_options(self, def parse_options(self,
conf, conf,
parent, parent,
@ -116,13 +128,14 @@ class RougailOutputExporter:
parent, parent,
): ):
leader, *followers = list(conf) leader, *followers = list(conf)
idx = -1
leader_values = leader.value.get() leader_values = leader.value.get()
for follower in followers: for idx, leader_value in enumerate(leader_values):
if idx != follower.index():
idx += 1
leader_obj = parent.add_family(leader) leader_obj = parent.add_family(leader)
leader_obj.add_variable(leader, leader_obj.add_variable(leader,
value=follower.value.get(), value=leader_value,
leader_index=idx,
) )
for follower in followers:
if follower.index() != idx:
continue
leader_obj.add_variable(follower) leader_obj.add_variable(follower)

View file

@ -27,14 +27,18 @@ def run(rougailconfig,
config, config,
user_data, user_data,
): ):
if user_data:
errors = user_data['errors']
warnings = user_data['warnings']
else:
errors = []
warnings = []
export = RougailOutputExporter(config, export = RougailOutputExporter(config,
rougailconfig, rougailconfig,
user_data_errors=errors,
user_data_warnings=warnings,
) )
if user_data: export.run()
export.errors = user_data['errors']
export.warnings = user_data['warnings']
export.exporter()
export.print()
__all__ = ('run',) __all__ = ('run',)

View file

@ -73,17 +73,20 @@ exporter:
disabled disabled
{% endif %} {% endif %}
read_write: read_write:
description: Display only variables available in read_write mode description: Display variables available in read_write mode
negative_description: Display variables available in read_only mode
alternative_name: er alternative_name: er
default: false default: false
show_secrets: show_secrets:
description: Show secrets instead of obscuring them description: Show secrets instead of obscuring them
negative_description: Obscuring secrets instead of show them
alternative_name: es alternative_name: es
default: false default: false
no_mandatory: mandatory:
description: Do not test mandatories variable before export description: Test mandatories variable before export
negative_description: Do not test mandatories variable before export
alternative_name: em alternative_name: em
default: false default: true
output_format: output_format:
description: Generate document in format description: Generate document in format
alternative_name: eo alternative_name: eo

View file

@ -20,7 +20,7 @@ along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
""" """
from typing import Any, List from typing import Any, List, Optional
from rich.tree import Tree from rich.tree import Tree
from rich.console import Console from rich.console import Console
@ -215,6 +215,7 @@ class OutputFamily:
def add_variable(self, def add_variable(self,
option, option,
value: Any=undefined, value: Any=undefined,
leader_index: Optional[int]=None
): ):
properties = option.property.get() properties = option.property.get()
variable_color = None variable_color = None
@ -232,6 +233,8 @@ class OutputFamily:
variable_color = self.root.variable_advanced_and_modified_color variable_color = self.root.variable_advanced_and_modified_color
color = None color = None
default_value = option.value.default() default_value = option.value.default()
if leader_index is not None and len(default_value) > leader_index:
default_value = default_value[leader_index]
if value is undefined: if value is undefined:
value = option.value.get() value = option.value.get()
key = self.colorize(None, key = self.colorize(None,
@ -293,7 +296,7 @@ class OutputFamily:
ret = f'[{color}]{value}[/{color}]' ret = f'[{color}]{value}[/{color}]'
else: else:
ret = value ret = value
if default_value: if default_value and 'force_store_value' not in option.property.get():
default_value_color = self.root.value_default_color default_value_color = self.root.value_default_color
ret += f' ([{default_value_color}]{default_value}[/{default_value_color}])' ret += f' ([{default_value_color}]{default_value}[/{default_value_color}])'
return ret return ret