You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
1.9 KiB
45 lines
1.9 KiB
import itertools
|
|
import sys
|
|
|
|
from leapp.cli.commands.config import get_config
|
|
from leapp.exceptions import UsageError
|
|
from leapp.messaging.answerstore import AnswerStore
|
|
from leapp.utils.clicmd import command, command_opt
|
|
|
|
|
|
@command('answer', help='Manage answerfile generation: register persistent user choices for specific dialog sections')
|
|
@command_opt('section', action='append', metavar='dialog_sections',
|
|
help='Register answer for a specific section in the answerfile')
|
|
@command_opt('add', is_flag=True,
|
|
help='If set sections will be created even if missing in original answerfile')
|
|
def answer(args):
|
|
"""A command to record user choices to the questions in the answerfile.
|
|
Saves user answer between leapp preupgrade runs.
|
|
"""
|
|
cfg = get_config()
|
|
if args.section:
|
|
args.section = list(itertools.chain(*[i.split(',') for i in args.section]))
|
|
else:
|
|
raise UsageError('At least one dialog section must be specified, ex. --section dialog.option=mychoice')
|
|
try:
|
|
sections = [tuple((dialog_option.split('.', 2) + [value]))
|
|
for dialog_option, value in [s.split('=', 2) for s in args.section]]
|
|
except ValueError:
|
|
raise UsageError("A bad formatted section has been passed. Expected format is dialog.option=mychoice")
|
|
answerfile_path = cfg.get('report', 'answerfile')
|
|
answerstore = AnswerStore()
|
|
answerstore.load(answerfile_path)
|
|
for dialog, option, value in sections:
|
|
answerstore.answer(dialog, option, value)
|
|
not_updated = answerstore.update(answerfile_path, allow_missing=args.add)
|
|
if not_updated:
|
|
sys.stderr.write("WARNING: Only sections found in original userfile can be updated, ignoring {}\n".format(
|
|
",".join(not_updated)))
|
|
|
|
|
|
def register(base_command):
|
|
"""
|
|
Registers `leapp answer`
|
|
"""
|
|
base_command.add_sub(answer)
|