99 lines
3.5 KiB
Python
99 lines
3.5 KiB
Python
# -*- coding=utf-8 -*-
|
|
from __future__ import absolute_import, print_function, unicode_literals
|
|
|
|
import click
|
|
|
|
from . import __version__
|
|
from .pythonfinder import Finder
|
|
|
|
|
|
@click.command()
|
|
@click.option("--find", default=False, nargs=1, help="Find a specific python version.")
|
|
@click.option("--which", default=False, nargs=1, help="Run the which command.")
|
|
@click.option("--findall", is_flag=True, default=False, help="Find all python versions.")
|
|
@click.option(
|
|
"--version", is_flag=True, default=False, help="Display PythonFinder version."
|
|
)
|
|
@click.option(
|
|
"--ignore-unsupported/--no-unsupported",
|
|
is_flag=True,
|
|
default=True,
|
|
envvar="PYTHONFINDER_IGNORE_UNSUPPORTED",
|
|
help="Ignore unsupported python versions.",
|
|
)
|
|
@click.version_option(prog_name="pyfinder", version=__version__)
|
|
@click.pass_context
|
|
def cli(
|
|
ctx, find=False, which=False, findall=False, version=False, ignore_unsupported=True
|
|
):
|
|
if version:
|
|
click.echo(
|
|
"{0} version {1}".format(
|
|
click.style("PythonFinder", fg="white", bold=True),
|
|
click.style(str(__version__), fg="yellow")
|
|
)
|
|
)
|
|
ctx.exit()
|
|
finder = Finder(ignore_unsupported=ignore_unsupported)
|
|
if findall:
|
|
versions = [v for v in finder.find_all_python_versions()]
|
|
if versions:
|
|
click.secho("Found python at the following locations:", fg="green")
|
|
for v in versions:
|
|
py = v.py_version
|
|
comes_from = getattr(py, "comes_from", None)
|
|
if comes_from is not None:
|
|
comes_from_path = getattr(comes_from, "path", v.path)
|
|
else:
|
|
comes_from_path = v.path
|
|
click.secho(
|
|
"{py.name!s}: {py.version!s} ({py.architecture!s}) @ {comes_from!s}".format(
|
|
py=py, comes_from=comes_from_path
|
|
),
|
|
fg="yellow",
|
|
)
|
|
ctx.exit()
|
|
else:
|
|
click.secho(
|
|
"ERROR: No valid python versions found! Check your path and try again.",
|
|
fg="red",
|
|
)
|
|
if find:
|
|
click.secho("Searching for python: {0!s}".format(find.strip()), fg="yellow")
|
|
found = finder.find_python_version(find.strip())
|
|
if found:
|
|
py = found.py_version
|
|
comes_from = getattr(py, "comes_from", None)
|
|
if comes_from is not None:
|
|
comes_from_path = getattr(comes_from, "path", found.path)
|
|
else:
|
|
comes_from_path = found.path
|
|
arch = getattr(py, "architecture", None)
|
|
click.secho("Found python at the following locations:", fg="green")
|
|
click.secho(
|
|
"{py.name!s}: {py.version!s} ({py.architecture!s}) @ {comes_from!s}".format(
|
|
py=py, comes_from=comes_from_path
|
|
),
|
|
fg="yellow",
|
|
)
|
|
ctx.exit()
|
|
else:
|
|
click.secho("Failed to find matching executable...", fg="yellow")
|
|
ctx.exit(1)
|
|
elif which:
|
|
found = finder.system_path.which(which.strip())
|
|
if found:
|
|
click.secho("Found Executable: {0}".format(found), fg="white")
|
|
ctx.exit()
|
|
else:
|
|
click.secho("Failed to find matching executable...", fg="yellow")
|
|
ctx.exit(1)
|
|
else:
|
|
click.echo("Please provide a command", color="red")
|
|
ctx.exit(1)
|
|
ctx.exit()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
cli()
|