Esempio n. 1
0
def make_fs_wiz():
    """Makes the foreign shell part of the wizard."""
    cond = wiz.create_truefalse_cond(prompt="Add a new foreign shell, " +
                                     wiz.YN)
    fs = wiz.While(
        cond=cond,
        body=[
            wiz.Input("shell name (e.g. bash): ",
                      path="/foreign_shells/{idx}/shell"),
            wiz.StoreNonEmpty(
                "interactive shell [bool, default=True]: ",
                converter=to_bool,
                show_conversion=True,
                path="/foreign_shells/{idx}/interactive",
            ),
            wiz.StoreNonEmpty(
                "login shell [bool, default=False]: ",
                converter=to_bool,
                show_conversion=True,
                path="/foreign_shells/{idx}/login",
            ),
            wiz.StoreNonEmpty(
                "env command [str, default='env']: ",
                path="/foreign_shells/{idx}/envcmd",
            ),
            wiz.StoreNonEmpty(
                "alias command [str, default='alias']: ",
                path="/foreign_shells/{idx}/aliascmd",
            ),
            wiz.StoreNonEmpty(
                ("extra command line arguments [list of str, "
                 "default=[]]: "),
                converter=ast.literal_eval,
                show_conversion=True,
                path="/foreign_shells/{idx}/extra_args",
            ),
            wiz.StoreNonEmpty(
                "safely handle exceptions [bool, default=True]: ",
                converter=to_bool,
                show_conversion=True,
                path="/foreign_shells/{idx}/safe",
            ),
            wiz.StoreNonEmpty("pre-command [str, default='']: ",
                              path="/foreign_shells/{idx}/prevcmd"),
            wiz.StoreNonEmpty("post-command [str, default='']: ",
                              path="/foreign_shells/{idx}/postcmd"),
            wiz.StoreNonEmpty(
                "foreign function command [str, default=None]: ",
                path="/foreign_shells/{idx}/funcscmd",
            ),
            wiz.StoreNonEmpty(
                "source command [str, default=None]: ",
                path="/foreign_shells/{idx}/sourcer",
            ),
            wiz.Message(message="Foreign shell added.\n"),
        ],
    )
    return fs
Esempio n. 2
0
def make_xontrib(xon_item: tp.Tuple[str, Xontrib]):
    """Makes a message and StoreNonEmpty node for a xontrib."""
    name, xontrib = xon_item
    name = name or "<unknown-xontrib-name>"
    msg = "\n{BOLD_CYAN}" + name + "{RESET}\n"
    if xontrib.url:
        msg += "{RED}url:{RESET} " + xontrib.url + "\n"
    if xontrib.package:
        pkg = xontrib.package
        msg += "{RED}package:{RESET} " + pkg.name + "\n"
        if pkg.url:
            if xontrib.url and pkg.url != xontrib.url:
                msg += "{RED}package-url:{RESET} " + pkg.url + "\n"
        if pkg.license:
            msg += "{RED}license:{RESET} " + pkg.license + "\n"
    msg += "{PURPLE}installed?{RESET} "
    msg += ("no" if find_xontrib(name) is None else "yes") + "\n"
    msg += _wrap_paragraphs(xontrib.description, width=69)
    if msg.endswith("\n"):
        msg = msg[:-1]
    mnode = wiz.Message(message=msg)
    convert = lambda x: name if to_bool(x) else wiz.Unstorable
    pnode = wiz.StoreNonEmpty(XONTRIB_PROMPT,
                              converter=convert,
                              path=_xontrib_path)
    return mnode, pnode
Esempio n. 3
0
def make_envvar(name):
    """Makes a StoreNonEmpty node for an environment variable."""
    env = builtins.__xonsh__.env
    vd = env.get_docs(name)
    if not vd.doc_configurable:
        return
    default = vd.doc_default
    if "\n" in default:
        default = "\n" + _wrap_paragraphs(default, width=69)
    curr = env.get(name)
    if is_string(curr) and is_template_string(curr):
        curr = curr.replace("{", "{{").replace("}", "}}")
    curr = pprint.pformat(curr, width=69)
    if "\n" in curr:
        curr = "\n" + curr
    msg = ENVVAR_MESSAGE.format(
        name=name,
        default=default,
        current=curr,
        docstr=_wrap_paragraphs(vd.doc, width=69),
    )
    mnode = wiz.Message(message=msg)
    converter = env.get_converter(name)
    path = "/env/" + name
    pnode = wiz.StoreNonEmpty(
        ENVVAR_PROMPT,
        converter=converter,
        show_conversion=True,
        path=path,
        retry=True,
        store_raw=vd.doc_store_as_str,
    )
    return mnode, pnode
Esempio n. 4
0
def make_xontrib(xontrib, package):
    """Makes a message and StoreNonEmpty node for a xontrib."""
    name = xontrib.get('name', '<unknown-xontrib-name>')
    msg = '\n{BOLD_CYAN}' + name + '{NO_COLOR}\n'
    if 'url' in xontrib:
        msg += '{RED}url:{NO_COLOR} ' + xontrib['url'] + '\n'
    if 'package' in xontrib:
        msg += '{RED}package:{NO_COLOR} ' + xontrib['package'] + '\n'
    if 'url' in package:
        if 'url' in xontrib and package['url'] != xontrib['url']:
            msg += '{RED}package-url:{NO_COLOR} ' + package['url'] + '\n'
    if 'license' in package:
        msg += '{RED}license:{NO_COLOR} ' + package['license'] + '\n'
    msg += '{PURPLE}installed?{NO_COLOR} '
    msg += ('no' if find_xontrib(name) is None else 'yes') + '\n'
    desc = xontrib.get('description', '')
    if not isinstance(desc, str):
        desc = ''.join(desc)
    msg += _wrap_paragraphs(desc, width=69)
    if msg.endswith('\n'):
        msg = msg[:-1]
    mnode = wiz.Message(message=msg)
    convert = lambda x: name if to_bool(x) else wiz.Unstorable
    pnode = wiz.StoreNonEmpty(XONTRIB_PROMPT, converter=convert,
                              path=_xontrib_path)
    return mnode, pnode
Esempio n. 5
0
def make_envvar(name):
    """Makes a StoreNonEmpty node for an environment variable."""
    env = builtins.__xonsh_env__
    vd = env.get_docs(name)
    if not vd.configurable:
        return
    default = vd.default
    if '\n' in default:
        default = '\n' + _wrap_paragraphs(default, width=69)
    curr = env.get(name)
    if is_string(curr) and is_template_string(curr):
        curr = curr.replace('{', '{{').replace('}', '}}')
    curr = pprint.pformat(curr, width=69)
    if '\n' in curr:
        curr = '\n' + curr
    msg = ENVVAR_MESSAGE.format(name=name,
                                default=default,
                                current=curr,
                                docstr=_wrap_paragraphs(vd.docstr, width=69))
    mnode = wiz.Message(message=msg)
    ens = env.get_ensurer(name)
    path = '/env/' + name
    pnode = wiz.StoreNonEmpty(ENVVAR_PROMPT,
                              converter=ens.convert,
                              show_conversion=True,
                              path=path,
                              retry=True,
                              store_raw=vd.store_as_str)
    return mnode, pnode
Esempio n. 6
0
def make_xontrib(xontrib, package):
    """Makes a message and StoreNonEmpty node for a xontrib."""
    name = xontrib.get("name", "<unknown-xontrib-name>")
    msg = "\n{BOLD_CYAN}" + name + "{RESET}\n"
    if "url" in xontrib:
        msg += "{RED}url:{RESET} " + xontrib["url"] + "\n"
    if "package" in xontrib:
        msg += "{RED}package:{RESET} " + xontrib["package"] + "\n"
    if "url" in package:
        if "url" in xontrib and package["url"] != xontrib["url"]:
            msg += "{RED}package-url:{RESET} " + package["url"] + "\n"
    if "license" in package:
        msg += "{RED}license:{RESET} " + package["license"] + "\n"
    msg += "{PURPLE}installed?{RESET} "
    msg += ("no" if find_xontrib(name) is None else "yes") + "\n"
    desc = xontrib.get("description", "")
    if not isinstance(desc, str):
        desc = "".join(desc)
    msg += _wrap_paragraphs(desc, width=69)
    if msg.endswith("\n"):
        msg = msg[:-1]
    mnode = wiz.Message(message=msg)
    convert = lambda x: name if to_bool(x) else wiz.Unstorable
    pnode = wiz.StoreNonEmpty(XONTRIB_PROMPT,
                              converter=convert,
                              path=_xontrib_path)
    return mnode, pnode
Esempio n. 7
0
def make_fs_wiz():
    """Makes the foreign shell part of the wizard."""
    cond = wiz.create_truefalse_cond(prompt='Add a foreign shell, ' + wiz.YN)
    fs = wiz.While(
        cond=cond,
        body=[
            wiz.Input('shell name (e.g. bash): ',
                      path='/foreign_shells/{idx}/shell'),
            wiz.StoreNonEmpty('interactive shell [bool, default=True]: ',
                              converter=to_bool,
                              show_conversion=True,
                              path='/foreign_shells/{idx}/interactive'),
            wiz.StoreNonEmpty('login shell [bool, default=False]: ',
                              converter=to_bool,
                              show_conversion=True,
                              path='/foreign_shells/{idx}/login'),
            wiz.StoreNonEmpty("env command [str, default='env']: ",
                              path='/foreign_shells/{idx}/envcmd'),
            wiz.StoreNonEmpty("alias command [str, default='alias']: ",
                              path='/foreign_shells/{idx}/aliascmd'),
            wiz.StoreNonEmpty(("extra command line arguments [list of str, "
                               "default=[]]: "),
                              converter=ast.literal_eval,
                              show_conversion=True,
                              path='/foreign_shells/{idx}/extra_args'),
            wiz.StoreNonEmpty('current environment [dict, default=None]: ',
                              converter=ast.literal_eval,
                              show_conversion=True,
                              path='/foreign_shells/{idx}/currenv'),
            wiz.StoreNonEmpty(
                'safely handle exceptions [bool, default=True]: ',
                converter=to_bool,
                show_conversion=True,
                path='/foreign_shells/{idx}/safe'),
            wiz.StoreNonEmpty("pre-command [str, default='']: ",
                              path='/foreign_shells/{idx}/prevcmd'),
            wiz.StoreNonEmpty("post-command [str, default='']: ",
                              path='/foreign_shells/{idx}/postcmd'),
            wiz.StoreNonEmpty("foreign function command [str, default=None]: ",
                              path='/foreign_shells/{idx}/funcscmd'),
            wiz.StoreNonEmpty("source command [str, default=None]: ",
                              path='/foreign_shells/{idx}/sourcer'),
            wiz.Message(message='')  # inserts a newline
        ])
    return fs