示例#1
0
def xontrib_data(ns):
    """Collects and returns the data about xontribs."""
    meta = get_xontribs()
    data = {}
    names: tp.Set[str] = set() if not ns else set(ns.names)
    for xo_name in meta:
        if xo_name not in names:
            continue
        spec = find_xontrib(xo_name)
        if spec is None:
            installed = loaded = False
        else:
            installed = True
            loaded = spec.name in sys.modules
        data[xo_name] = {
            "name": xo_name,
            "installed": installed,
            "loaded": loaded
        }

    installed_xontribs = xontrib_installed(names)
    for name in installed_xontribs:
        if name not in data:
            loaded = f"xontrib.{name}" in sys.modules
            data[name] = {"name": name, "installed": True, "loaded": loaded}

    return dict(sorted(data.items()))
示例#2
0
def _list_installed_xontribs():
    meta = xmt.get_xontribs()
    installed = []
    for name in meta:
        spec = xx.find_xontrib(name)
        if spec is not None:
            installed.append(spec.name.rsplit(".")[-1])

    return installed
示例#3
0
def xontrib_names_completer(**_):
    meta = get_xontribs()
    spec = importlib.util.find_spec("xontrib")
    for module in pkgutil.walk_packages(spec.submodule_search_locations):
        xont = meta.get(module.name)
        full_name = f"xontrib.{module.name}"

        if xont and full_name not in sys.modules:
            yield RichCompletion(
                module.name, append_space=True, description=xont.description
            )
示例#4
0
def prompt_xontrib_install(names: tp.List[str]):
    """Returns a formatted string with name of xontrib package to prompt user"""
    xontribs = get_xontribs()
    packages = []
    for name in names:
        if name in xontribs:
            xontrib = xontribs[name]
            if xontrib.package:
                packages.append(xontrib.package.name)

    print("The following xontribs are enabled but not installed: \n"
          "   {xontribs}\n"
          "To install them run \n"
          "    xpip install {packages}".format(xontribs=" ".join(names),
                                               packages=" ".join(packages)))
示例#5
0
文件: xonfig.py 项目: roblabla/xonsh
def make_xontribs_wiz():
    """Makes a xontrib wizard."""
    return _make_flat_wiz(make_xontrib, get_xontribs().items())
示例#6
0
def make_xontribs():
    xons = get_xontribs()
    names = sorted(xons)
    s = ".. list-table::\n" "    :header-rows: 0\n\n"
    table = []
    ncol = 5
    row = "    {0} - :ref:`{1} <{2}>`"
    for i, name in enumerate(names):
        star = "*" if i % ncol == 0 else " "
        table.append(row.format(star, name, name.lower()))
    table.extend(["      -"] * ((ncol - len(names) % ncol) % ncol))
    s += "\n".join(table) + "\n\n"
    s += "Information\n" "-----------\n\n"
    sec = (".. _{low}:\n\n"
           "{title}\n"
           "{under}\n"
           ":Website: {url}\n"
           ":Package: {pkg}\n\n"
           "{desc}\n\n"
           "{inst}\n\n"
           "{usage}"
           "-------\n\n")
    for name in names:
        d = xons[name]
        title = name
        under = "." * len(title)
        desc = d.description
        if not isinstance(desc, str):
            desc = "".join(desc)
        if d.package is None:
            pkg = "unknown"
            inst = ""
            usage = ""
        else:
            pkg = d.package.name
            if d.package.url:
                pkg = "`{0} website <{1}>`_".format(pkg, d.package.url)
            if d.package.license:
                pkg = pkg + ", " + d.package.license
            inst = ""
            installd = d.package.install
            if d.package.name == "xonsh":
                inst = "This xontrib is preinstalled with xonsh.\n\n"
            elif len(installd) > 0:
                inst = "**Installation:**\n\n" ".. code-block:: xonsh\n\n"
                for k, v in sorted(installd.items()):
                    cmd = "\n    ".join(v.split("\n"))
                    inst += ("    # install with {k}\n"
                             "    {cmd}").format(k=k, cmd=cmd)
            usage = ("**Usage:**\n\n"
                     "Run the following command to enable (or add "
                     "it to your :doc:`.xonshrc </xonshrc>` file to enable "
                     "on startup.)\n\n"
                     ".. code-block:: xonsh\n\n")
            usage += "    xontrib load {}\n\n".format(name)
        s += sec.format(
            low=name.lower(),
            title=title,
            under=under,
            url=d.url or "unknown",
            desc=desc,
            pkg=pkg,
            inst=inst,
            usage=usage,
        )
    s = s[:-9]
    fname = os.path.join(os.path.dirname(__file__), "xontribsbody")
    with open(fname, "w") as f:
        f.write(s)