CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/pypi-questionary

Python library to build pretty command line user prompts with interactive forms and validation

Overall
score

96%

Overview
Eval results
Files

text-input.mddocs/

Text Input Prompts

Text input prompts provide basic text collection functionality with support for single-line input, password masking, multiline text, and input validation.

Capabilities

Basic Text Input

Prompts for single-line text input with optional default values, validation, and custom styling.

def text(message: str, default: str = "", validate: Any = None, 
         qmark: str = "?", style: Optional[Style] = None, 
         multiline: bool = False, instruction: Optional[str] = None, 
         lexer: Optional[Lexer] = None, **kwargs) -> Question:
    """
    Create a text input prompt.
    
    Args:
        message: The question/prompt text to display
        default: Default value pre-filled in input
        validate: Validator function or Validator instance for input validation
        qmark: Question prefix symbol (default "?")
        style: Custom styling configuration
        multiline: Enable multiline input mode
        instruction: Additional instruction text displayed below prompt
        lexer: Syntax highlighting lexer for multiline input
        **kwargs: Additional prompt_toolkit arguments
    
    Returns:
        Question instance ready for execution
    """

Password Input

Prompts for password or sensitive text input with characters masked/hidden during typing.

def password(message: str, default: str = "", validate: Any = None, 
             qmark: str = "?", style: Optional[Style] = None, 
             **kwargs) -> Question:
    """
    Create a password input prompt with hidden text.
    
    Args:
        message: The question/prompt text to display
        default: Default value (not recommended for passwords)
        validate: Validator function or Validator instance
        qmark: Question prefix symbol (default "?")
        style: Custom styling configuration
        **kwargs: Additional prompt_toolkit arguments
    
    Returns:
        Question instance ready for execution
    """

Usage Examples

Simple Text Input

import questionary

# Basic text input
name = questionary.text("Enter your name:").ask()

# Text input with default value
city = questionary.text("Enter your city:", default="New York").ask()

# Text input with validation
def validate_email(text):
    if "@" not in text:
        return "Please enter a valid email address"
    return True

email = questionary.text(
    "Enter your email:", 
    validate=validate_email
).ask()

Password Input

import questionary

# Basic password input
password = questionary.password("Enter password:").ask()

# Password with validation
def validate_password(password):
    if len(password) < 8:
        return "Password must be at least 8 characters"
    return True

secure_password = questionary.password(
    "Create password:", 
    validate=validate_password
).ask()

Multiline Text Input

import questionary

# Multiline text input
description = questionary.text(
    "Enter description:",
    multiline=True,
    instruction="Press ESC then ENTER to submit"
).ask()

# Multiline with syntax highlighting
code = questionary.text(
    "Enter Python code:",
    multiline=True,
    lexer=PythonLexer()  # Requires pygments
).ask()

Advanced Validation

import questionary
from questionary import Validator, ValidationError

# Custom validator class
class NumberValidator(Validator):
    def validate(self, document):
        try:
            int(document.text)
        except ValueError:
            raise ValidationError(
                message="Please enter a valid number",
                cursor_position=len(document.text)
            )

age = questionary.text(
    "Enter your age:",
    validate=NumberValidator()
).ask()

# Lambda validation
phone = questionary.text(
    "Enter phone number:",
    validate=lambda x: "Invalid format" if not x.isdigit() else True
).ask()

Custom Styling

import questionary
from prompt_toolkit.styles import Style

custom_style = Style([
    ('question', 'bold'),
    ('answer', 'fg:#ff0066 bold'),
    ('pointer', 'fg:#673ab7 bold'),
    ('highlighted', 'fg:#673ab7 bold'),
])

name = questionary.text(
    "Stylized prompt:",
    style=custom_style
).ask()

Install with Tessl CLI

npx tessl i tessl/pypi-questionary

docs

autocomplete-paths.md

core-classes.md

execution-control.md

forms.md

index.md

selection-prompts.md

text-input.md

tile.json