form: add prompt/fill generic function for simple list of options

This commit is contained in:
axolotle 2023-02-21 17:22:30 +01:00
parent 0778cf3ffe
commit 626a1a1b2d

View file

@ -19,6 +19,7 @@
import ast import ast
import datetime import datetime
import operator as op import operator as op
import os
import re import re
import urllib import urllib
from enum import Enum from enum import Enum
@ -1147,6 +1148,33 @@ def prompt_form(
return form return form
def prompt_or_fill_raw_questions(
raw_options: dict[str, Any],
args: Union[str, None] = None,
args_file=None, # FIXME TYPING
name: str = "DynamicYunoForm"
):
"""
Helper that from a raw list of questions and potential preffiled answers
tries to build a form from those questions and validate prompted or preffilled answers.
"""
prefilled_answers = parse_prefilled_values(args, args_file)
# Parse/validate raw questions
options = OptionsContainer(**raw_options)
options.translate_options()
# Build the form from those questions and instantiate it without
# parsing/validation (construct) since it may contains required questions.
form = build_form(options.options, name=name).construct()
if Moulinette.interface.type == "cli" and os.isatty(1):
form = prompt_form(options.options, form, prefilled_answers=prefilled_answers)
else: # API or CLI without tty?
form = fill_form(options.options, form, prefilled_answers=prefilled_answers)
# return the list of options directly, the object itself is no longer needed
return (options.options, form)
# ╭───────────────────────────────────────────────────────╮ # ╭───────────────────────────────────────────────────────╮
# │ ┌─╴╷ ╷╭─┐╷ │ # │ ┌─╴╷ ╷╭─┐╷ │
# │ ├─╴│╭╯├─┤│ │ # │ ├─╴│╭╯├─┤│ │