# -*- coding: utf-8 -*-
"""
ascii_colors: A Python library for rich terminal output with advanced logging features.
Now with questionary-compatible interactive prompts and rich library compatibility!
"""
from ascii_colors.constants import (
LogLevel, CRITICAL, ERROR, WARNING, INFO, DEBUG, NOTSET
)
from ascii_colors.utils import strip_ansi, get_trace_exception
from ascii_colors.formatters import Formatter, JSONFormatter
from ascii_colors.handlers import (
Handler, ConsoleHandler, StreamHandler, FileHandler, RotatingFileHandler, handlers
)
from ascii_colors.core import ASCIIColors
from ascii_colors.progress import ProgressBar
from ascii_colors.menu import Menu, MenuItem
# Expose context methods at module level for convenience
set_context = ASCIIColors.set_context
clear_context = ASCIIColors.clear_context
context = ASCIIColors.context
get_thread_context = ASCIIColors.get_thread_context
# Logging compatibility
from ascii_colors.logging import (
getLogger, basicConfig, shutdown, _logger_cache, _AsciiLoggerAdapter
)
# Questionary compatibility (interactive prompts)
# Note: Text here is PromptText (question input), not rich.Text (styled text)
from ascii_colors.questionary import (
# Classes
PromptText, # The actual class, renamed to avoid conflict with rich.Text
Password, Select, Checkbox, Autocomplete,
Form, Validator, ValidationError,
# Functions
password, confirm, select, checkbox, autocomplete, form, ask,
)
# Rich library compatibility (new!)
from ascii_colors.rich import (
# Core classes
Console, Text as RichText, Style, Renderable, ConsoleOptions, Measurement,
Prompt, Confirm,
# Layout
Panel, Padding, Columns, Rule,
# Data display
Table, Tree,
# Content
Syntax, Markdown,
# Live display
Live, Status,
# Enums
BoxStyle,
# Default instances
rich,
# Convenience functions
print as rich_print,
log as rich_log,
rule as rich_rule,
prompt as rich_prompt,
)
from ascii_colors.rich.text import Text
# Create questionary module alias for drop-in replacement
[docs]
class _QuestionaryModule:
"""Module-like object for drop-in questionary compatibility."""
def __init__(self):
# Import here to avoid circular imports
from ascii_colors.questionary import PromptText, Password, Confirm, Select, Checkbox, Autocomplete, Form, Validator, ValidationError, text, password, confirm, select, checkbox, autocomplete, form, ask
# Use PromptText as Text for questionary API compatibility
self.Text = PromptText
self.Password = Password
self.Confirm = Confirm
self.Select = Select
self.Checkbox = Checkbox
self.Autocomplete = Autocomplete
self.Form = Form
self.Validator = Validator
self.ValidationError = ValidationError
# Function aliases
self.text = text
self.password = password
self.confirm = confirm
self.select = select
self.checkbox = checkbox
self.autocomplete = autocomplete
self.form = form
self.ask = ask # alias
def __getattr__(self, name):
# Forward any other attribute access
raise AttributeError(f"questionary has no attribute '{name}'")
# Create singleton instance
questionary = _QuestionaryModule()
[docs]
def trace_exception(ex: BaseException, enhanced: bool = False, max_width: int = None) -> None:
"""Logs the traceback of a given exception."""
formatted = get_trace_exception(ex, enhanced=enhanced, max_width=max_width)
ASCIIColors._log(LogLevel.ERROR, formatted, (), exc_info=None, logger_name='trace_exception')
__all__ = [
# Core
"ASCIIColors", "LogLevel", "Formatter", "JSONFormatter", "Handler",
"ConsoleHandler", "StreamHandler", "FileHandler", "RotatingFileHandler",
"handlers", "ProgressBar", "Menu", "MenuItem",
# Context management
"set_context", "clear_context", "context", "get_thread_context",
# Logging compat
"getLogger", "basicConfig", "shutdown", "trace_exception",
"strip_ansi", "get_trace_exception",
"CRITICAL", "ERROR", "WARNING", "INFO", "DEBUG", "NOTSET",
"_logger_cache", "_AsciiLoggerAdapter",
# Questionary compat
"questionary", # Module-like object for `from ascii_colors import questionary`
"PromptText", # Explicit name for questionary text input class
"Password", "Select", "Checkbox",
"Autocomplete", "Form", "Validator", "ValidationError",
"text", "password", "confirm", "select", "checkbox", "autocomplete",
"form", "ask",
# Rich compat (new!)
"rich", # Module-like object for `from ascii_colors import rich`
"Console", "Style", "Renderable", "ConsoleOptions", "Measurement",
"Prompt", "Confirm",
"Panel", "Padding", "Columns", "Rule",
"Table", "Tree",
"Syntax", "Markdown",
"Live", "Status",
"BoxStyle",
"rich_print", "rich_log", "rich_rule", "rich_prompt", # Convenience functions
# Aliases to avoid name conflicts
"RichText",
]