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 .__version__ import __version__
RougailUserData = 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)
Copyright (C) 2024
Copyright (C) 2024-2025
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
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
"""
def get_rougail_config(*,
backward_compatibility=True,
) -> dict:
options = """
from .i18n import _
def get_rougail_config(
*,
backward_compatibility=True,
) -> dict:
options = f"""
questionary:
description: Define value interactivly
description: {_("Define values interactivly")}
disabled:
type: jinja
jinja: |
{% if 'questionary' not in step.user_data %}
{{% if step.user_data is not propertyerror and 'questionary' not in step.user_data %}}
disabled
{% endif %}
{{% endif %}}
mandatory:
description: Ask values only for mandatories variables without any value
negative_description: Ask values all variables
description: {_("Ask values only for mandatories variables without any value")}
alternative_name: qm
default: false
show_secrets:
description: Show secrets instead of obscuring them
negative_description: Obscuring secrets instead of show them
description: {_("Show secrets instead of obscuring them")}
alternative_name: qs
type: boolean
default:
type: variable
variable: __.exporter.show_secrets
optional: true
default: false
"""
return {'name': 'questionary',
'process': 'user data',

View file

@ -1,35 +1,41 @@
#!/usr/bin/env python3
"""
Silique (https://www.silique.fr)
Copyright (C) 2024
Copyright (C) 2024-2025
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.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 rougail.tiramisu import CONVERT_OPTION
from rougail.config import RougailConfig
from rougail.error import ExtentionError
from tiramisu.error import ValueOptionError
class RougailUserDataQuestionary:
def __init__(self,
config: 'Config',
*,
rougailconfig: RougailConfig=None,
):
interactive_user_datas = True
def __init__(
self,
config: "Config",
*,
rougailconfig: "RougailConfig" = None,
):
# this is the tiramisu config object
self.config = config
if rougailconfig is None:
rougailconfig = RougailConfig
@ -39,12 +45,14 @@ class RougailUserDataQuestionary:
rougailconfig['step.user_data'] = user_data
user_data = rougailconfig['step.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.errors = []
self.warnings = []
def run(self):
def run(
self,
) -> None:
self.config.property.read_write()
if self.rougailconfig['questionary.mandatory']:
current_titles = []
@ -68,6 +76,17 @@ class RougailUserDataQuestionary:
else:
self.parse(self.config)
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):
for option in config:
@ -93,6 +112,7 @@ class RougailUserDataQuestionary:
'func': type_obj,
}
RougailValidator.ismulti = ismulti
ori_default = default
if option_type == 'choice':
question_funtion = select
RougailValidator.default = default
@ -108,11 +128,13 @@ class RougailUserDataQuestionary:
if ismulti:
kwargs['multiline'] = True
if default:
kwargs['default'] = "\n".join(default)
kwargs['default'] = "\n".join([str(d) for d in default])
elif default is not None:
if isinstance(default, (int, float)):
default = str(default)
kwargs['default'] = default
value = RougailValidator().convert_value(question_funtion(*args, **kwargs).ask(), False)
if isdefault and value == default:
if isdefault and value == ori_default:
option.value.reset()
else:
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