83 lines
2.6 KiB
Python
83 lines
2.6 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""
|
|
confirm type question
|
|
"""
|
|
from __future__ import print_function, unicode_literals
|
|
from libs.prompt_toolkit.application import Application
|
|
from libs.prompt_toolkit.key_binding.manager import KeyBindingManager
|
|
from libs.prompt_toolkit.keys import Keys
|
|
from libs.prompt_toolkit.layout.containers import Window, HSplit
|
|
from libs.prompt_toolkit.layout.controls import TokenListControl
|
|
from libs.prompt_toolkit.layout.dimension import LayoutDimension as D
|
|
from libs.prompt_toolkit.token import Token
|
|
from libs.prompt_toolkit.shortcuts import create_prompt_application
|
|
from libs.prompt_toolkit.styles import style_from_dict
|
|
|
|
|
|
# custom control based on TokenListControl
|
|
|
|
|
|
def question(message, **kwargs):
|
|
# TODO need ENTER confirmation
|
|
default = kwargs.pop('default', True)
|
|
|
|
# TODO style defaults on detail level
|
|
style = kwargs.pop('style', style_from_dict({
|
|
Token.QuestionMark: '#5F819D',
|
|
#Token.Selected: '#FF9D00', # AWS orange
|
|
Token.Instruction: '', # default
|
|
Token.Answer: '#FF9D00 bold', # AWS orange
|
|
Token.Question: 'bold',
|
|
}))
|
|
status = {'answer': None}
|
|
|
|
qmark = kwargs.pop('qmark', '?')
|
|
|
|
def get_prompt_tokens(cli):
|
|
tokens = []
|
|
|
|
tokens.append((Token.QuestionMark, qmark))
|
|
tokens.append((Token.Question, ' %s ' % message))
|
|
if isinstance(status['answer'], bool):
|
|
tokens.append((Token.Answer, ' Yes' if status['answer'] else ' No'))
|
|
else:
|
|
if default:
|
|
instruction = ' (Y/n)'
|
|
else:
|
|
instruction = ' (y/N)'
|
|
tokens.append((Token.Instruction, instruction))
|
|
return tokens
|
|
|
|
# key bindings
|
|
manager = KeyBindingManager.for_prompt()
|
|
|
|
@manager.registry.add_binding(Keys.ControlQ, eager=True)
|
|
@manager.registry.add_binding(Keys.ControlC, eager=True)
|
|
def _(event):
|
|
raise KeyboardInterrupt()
|
|
|
|
@manager.registry.add_binding('n')
|
|
@manager.registry.add_binding('N')
|
|
def key_n(event):
|
|
status['answer'] = False
|
|
event.cli.set_return_value(False)
|
|
|
|
@manager.registry.add_binding('y')
|
|
@manager.registry.add_binding('Y')
|
|
def key_y(event):
|
|
status['answer'] = True
|
|
event.cli.set_return_value(True)
|
|
|
|
@manager.registry.add_binding(Keys.Enter, eager=True)
|
|
def set_answer(event):
|
|
status['answer'] = default
|
|
event.cli.set_return_value(default)
|
|
|
|
return create_prompt_application(
|
|
get_prompt_tokens=get_prompt_tokens,
|
|
key_bindings_registry=manager.registry,
|
|
mouse_support=False,
|
|
style=style,
|
|
erase_when_done=False,
|
|
)
|