Source code for almanac.shortcuts.standard_app

from typing import Type

from prompt_toolkit.styles import Style

from .builtins import (
    back as builtin_back,
    cd as builtin_cd,
    forward as builtin_forward,
    help as builtin_help,
    ls as builtin_ls,
    pwd as builtin_pwd,
    quit as builtin_quit
)
from .exception_hooks import (
    hook_BaseArgumentError,
    hook_BasePageError,
    hook_MissingArgumentsError,
    hook_NoSuchArgumentError,
    hook_NoSuchCommandError,
    hook_TooManyPositionalArgumentsError,
    hook_UnknownArgumentBindingError
)
from .promoters import promote_to_page_path
from ..completion import PagePathCompleter, WordCompleter
from ..context import current_app
from ..core import Application
from ..errors import (
    BaseArgumentError,
    BasePageError,
    MissingArgumentsError,
    NoSuchArgumentError,
    NoSuchCommandError,
    TooManyPositionalArgumentsError,
    UnknownArgumentBindingError
)
from ..io import AbstractIoContext, StandardConsoleIoContext
from ..pages import PagePath
from ..style import DARK_MODE_STYLE


def _current_page_prompt_str(
) -> str:
    app = current_app()
    return app.page_navigator.current_page.get_prompt()


[docs]def make_standard_app( *, with_completion: bool = True, with_pages: bool = True, with_style: bool = True, style: Style = DARK_MODE_STYLE, io_context_cls: Type[AbstractIoContext] = StandardConsoleIoContext, propagate_runtime_exceptions: bool = False, print_all_exception_tracebacks: bool = False, print_unknown_exception_tracebacks: bool = True ) -> Application: """Instantiate and configure a standard application. When pages enabled, file-related commands will be registered on the returned :class:`Application` instance. Otherwise, only a few barebones commands are registered (quit, help, etc.). """ app = Application( with_completion=with_completion, with_style=with_style, style=style, io_context_cls=io_context_cls, propagate_runtime_exceptions=propagate_runtime_exceptions, print_all_exception_tracebacks=print_all_exception_tracebacks, print_unknown_exception_tracebacks=print_unknown_exception_tracebacks ) app.add_completers_for_type(bool, WordCompleter(['True', 'False'])) app.add_promoter_for_type(str, str) add_command = app.cmd.register() add_exc_hook = app.hook.exception.set_hook_for_exc_type add_command(builtin_help) add_command(builtin_quit) add_exc_hook(BaseArgumentError, hook_BaseArgumentError) add_exc_hook(MissingArgumentsError, hook_MissingArgumentsError) add_exc_hook(NoSuchArgumentError, hook_NoSuchArgumentError) add_exc_hook(NoSuchCommandError, hook_NoSuchCommandError) add_exc_hook(TooManyPositionalArgumentsError, hook_TooManyPositionalArgumentsError) add_exc_hook(UnknownArgumentBindingError, hook_UnknownArgumentBindingError) if with_pages: app.add_completers_for_type(PagePath, PagePathCompleter()) app.add_promoter_for_type(PagePath, promote_to_page_path) add_prompt_text = app.prompt_text() add_prompt_text(_current_page_prompt_str) add_command(builtin_back) add_command(builtin_cd) add_command(builtin_forward) add_command(builtin_ls) add_command(builtin_pwd) add_exc_hook(BasePageError, hook_BasePageError) return app