Source code for now.thirdparty.PyInquirer.prompts.input
# -*- coding: utf-8 -*-
"""
`input` type question
"""
import inspect
from prompt_toolkit.lexers import SimpleLexer
from prompt_toolkit.shortcuts import prompt
from prompt_toolkit.validation import Validator, ValidationError
from .common import default_style
# use std prompt-toolkit control
[docs]def question(message, **kwargs):
default = kwargs.pop('default', '')
validate_prompt = kwargs.pop('validate', None)
if validate_prompt:
if inspect.isclass(validate_prompt) and issubclass(validate_prompt, Validator):
kwargs['validator'] = validate_prompt()
elif callable(validate_prompt):
class _InputValidator(Validator):
def validate(self, document):
verdict = validate_prompt(document.text)
if not verdict == True:
if verdict == False:
verdict = 'invalid input'
raise ValidationError(
message=verdict, cursor_position=len(document.text)
)
kwargs['validator'] = _InputValidator()
# TODO style defaults on detail level
kwargs['style'] = kwargs.pop('style', default_style)
qmark = kwargs.pop('qmark', '?')
def _get_prompt_tokens():
return [('class:questionmark', qmark), ('class:question', ' %s ' % message)]
return prompt(
message=_get_prompt_tokens,
lexer=SimpleLexer('class:answer'),
default=default,
**kwargs
)