feat: update for last rougail version

This commit is contained in:
egarette@silique.fr 2025-11-06 06:19:25 +01:00
parent da16ffffc8
commit c918b287a7
11 changed files with 190 additions and 72 deletions

0
CHANGELOG.md Normal file
View file

View file

@ -0,0 +1,29 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR ORGANIZATION
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"POT-Creation-Date: 2025-11-06 06:11+0100\n"
"PO-Revision-Date: 2025-11-06 06:11+0100\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
"X-Generator: Poedit 3.7\n"
#: src/rougail/user_data_questionary/config.py:31
msgid "Define values interactivly"
msgstr "Définir des valeurs interactivement"
#: src/rougail/user_data_questionary/config.py:39
msgid "Ask values only for mandatories variables without any value"
msgstr "Demander des valeurs uniquement pour des variables obligatoires sans valeur"
#: src/rougail/user_data_questionary/config.py:44
msgid "Show secrets instead of obscuring them"
msgstr "Afficher les secrets plutôt que des obscurcir."

View file

@ -0,0 +1,29 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR ORGANIZATION
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2025-11-06 06:11+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
#: src/rougail/user_data_questionary/config.py:31
msgid "Define values interactivly"
msgstr ""
#: src/rougail/user_data_questionary/config.py:39
msgid "Ask values only for mandatories variables without any value"
msgstr ""
#: src/rougail/user_data_questionary/config.py:44
msgid "Show secrets instead of obscuring them"
msgstr ""

44
pyproject.toml Normal file
View file

@ -0,0 +1,44 @@
[build-system]
build-backend = "flit_core.buildapi"
requires = ["flit_core >=3.8.0,<4"]
[project]
name = "rougail.user_data_questionary"
version = "0.0.0"
authors = [{name = "Emmanuel Garette", email = "gnunux@gnunux.info"}]
readme = "README.md"
description = "Rougail user_data questionary"
requires-python = ">=3.11"
license = {file = "LICENSE"}
classifiers = [
"License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)",
"Programming Language :: Python",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Programming Language :: Python :: 3",
"Operating System :: OS Independent",
"Natural Language :: English",
"Natural Language :: French",
]
dependencies = [
"rougail-base >= 1.1,<2",
"questionary ~= 2.1.0",
]
[project.urls]
Home = "https://forge.cloud.silique.fr/stove/rougail-user-data-questionary"
[tool.commitizen]
name = "cz_conventional_commits"
tag_format = "$version"
version_scheme = "pep440"
version_provider = "pep621"
version_files = [
"src/rougail/user_data_questionary/__version__.py",
"pyproject.toml:version"
]
update_changelog_on_bump = true
changelog_merge_prerelease = true

View file

@ -1,2 +1,5 @@
from .data import RougailUserDataQuestionary from .data import RougailUserDataQuestionary
from .__version__ import __version__
RougailUserData = RougailUserDataQuestionary
__all__ = ('RougailUserDataQuestionary',) __all__ = ('RougailUserDataQuestionary',)

View file

@ -0,0 +1 @@
__version__ = "0.0.0"

View file

@ -1,35 +0,0 @@
"""
Cli code for Rougail-user-data-questionary
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 .data import RougailUserDataQuestionary
def run(rougailconfig,
config,
user_datas,
):
RougailUserDataQuestionary(config,
rougailconfig=rougailconfig,
).run()
__all__ = ('run',)

View file

@ -1,8 +1,6 @@
""" """
Config file for Rougail-user-data-questionary
Silique (https://www.silique.fr) Silique (https://www.silique.fr)
Copyright (C) 2024 Copyright (C) 2024-2025
distribued with GPL-2 or later license distribued with GPL-2 or later license
@ -20,32 +18,33 @@ You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software 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
""" """
def get_rougail_config(*,
backward_compatibility=True, from .i18n import _
) -> dict:
options = """
def get_rougail_config(
*,
backward_compatibility=True,
) -> dict:
options = f"""
questionary: questionary:
description: Define value interactivly description: {_("Define values interactivly")}
disabled: disabled:
type: jinja
jinja: | jinja: |
{% if 'questionary' not in step.user_data %} {{% if step.user_data is not propertyerror and 'questionary' not in step.user_data %}}
disabled disabled
{% endif %} {{% endif %}}
mandatory: mandatory:
description: Ask values only for mandatories variables without any value description: {_("Ask values only for mandatories variables without any value")}
negative_description: Ask values all variables
alternative_name: qm alternative_name: qm
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: qs alternative_name: qs
type: boolean type: boolean
default: default: false
type: variable
variable: __.exporter.show_secrets
optional: true
""" """
return {'name': 'questionary', return {'name': 'questionary',
'process': 'user data', 'process': 'user data',

View file

@ -1,7 +1,6 @@
#!/usr/bin/env python3
""" """
Silique (https://www.silique.fr) Silique (https://www.silique.fr)
Copyright (C) 2024 Copyright (C) 2024-2025
distribued with GPL-2 or later license distribued with GPL-2 or later license
@ -19,17 +18,24 @@ You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software 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 rougail.object_model import CONVERT_OPTION
from rougail.config import RougailConfig
from tiramisu.error import ValueOptionError
from questionary import text, select, confirm, password, Validator, ValidationError, print as qprint from questionary import text, select, confirm, password, Validator, ValidationError, print as qprint
from rougail.tiramisu import CONVERT_OPTION
from rougail.config import RougailConfig
from rougail.error import ExtentionError
from tiramisu.error import ValueOptionError
class RougailUserDataQuestionary: class RougailUserDataQuestionary:
def __init__(self, interactive_user_datas = True
config: 'Config',
*, def __init__(
rougailconfig: RougailConfig=None, self,
): config: "Config",
*,
rougailconfig: "RougailConfig" = None,
):
# this is the tiramisu config object
self.config = config self.config = config
if rougailconfig is None: if rougailconfig is None:
rougailconfig = RougailConfig rougailconfig = RougailConfig
@ -39,12 +45,14 @@ class RougailUserDataQuestionary:
rougailconfig['step.user_data'] = user_data rougailconfig['step.user_data'] = user_data
user_data = rougailconfig['step.user_data'] user_data = rougailconfig['step.user_data']
if 'questionary' not in user_data: if 'questionary' not in user_data:
raise Exception('questionary is not set in step.user_data') raise ExtentionError('questionary is not set in step.user_data')
self.rougailconfig = rougailconfig self.rougailconfig = rougailconfig
self.errors = [] self.errors = []
self.warnings = [] self.warnings = []
def run(self): def run(
self,
) -> None:
self.config.property.read_write() self.config.property.read_write()
if self.rougailconfig['questionary.mandatory']: if self.rougailconfig['questionary.mandatory']:
current_titles = [] current_titles = []
@ -68,6 +76,17 @@ class RougailUserDataQuestionary:
else: else:
self.parse(self.config) self.parse(self.config)
self.config.property.read_only() self.config.property.read_only()
return {'errors': [],
'warnings': [],
}
return [
{
"source": 'Questionary',
"errors": self.errors,
"warnings": self.warnings,
"values": values,
}
]
def parse(self, config, title_level=0): def parse(self, config, title_level=0):
for option in config: for option in config:
@ -93,6 +112,7 @@ class RougailUserDataQuestionary:
'func': type_obj, 'func': type_obj,
} }
RougailValidator.ismulti = ismulti RougailValidator.ismulti = ismulti
ori_default = default
if option_type == 'choice': if option_type == 'choice':
question_funtion = select question_funtion = select
RougailValidator.default = default RougailValidator.default = default
@ -108,11 +128,13 @@ class RougailUserDataQuestionary:
if ismulti: if ismulti:
kwargs['multiline'] = True kwargs['multiline'] = True
if default: if default:
kwargs['default'] = "\n".join(default) kwargs['default'] = "\n".join([str(d) for d in default])
elif default is not None: elif default is not None:
if isinstance(default, (int, float)):
default = str(default)
kwargs['default'] = default kwargs['default'] = default
value = RougailValidator().convert_value(question_funtion(*args, **kwargs).ask(), False) value = RougailValidator().convert_value(question_funtion(*args, **kwargs).ask(), False)
if isdefault and value == default: if isdefault and value == ori_default:
option.value.reset() option.value.reset()
else: else:
option.value.set(value) option.value.set(value)

View file

@ -0,0 +1,26 @@
"""
Silique (https://www.silique.fr)
Copyright (C) 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 gettext import translation
from pathlib import Path
t = translation(
"rougail_user_data_questionary", str(Path(__file__).parent / "locale"), fallback=True
)
_ = t.gettext