forked from platformio/platformio-core
65 lines
1.6 KiB
Python
65 lines
1.6 KiB
Python
# Copyright (C) Ivan Kravets <me@ikravets.com>
|
|
# See LICENSE for details.
|
|
|
|
from os import listdir
|
|
from os.path import join
|
|
from sys import exit as sys_exit
|
|
from traceback import format_exc
|
|
|
|
import click
|
|
|
|
from platformio import __version__, maintenance
|
|
from platformio.exception import PlatformioException, UnknownCLICommand
|
|
from platformio.util import get_source_dir
|
|
|
|
|
|
class PlatformioCLI(click.MultiCommand): # pylint: disable=R0904
|
|
|
|
def list_commands(self, ctx):
|
|
cmds = []
|
|
for filename in listdir(join(get_source_dir(), "commands")):
|
|
if filename.startswith("__init__"):
|
|
continue
|
|
if filename.endswith(".py"):
|
|
cmds.append(filename[:-3])
|
|
cmds.sort()
|
|
return cmds
|
|
|
|
def get_command(self, ctx, name):
|
|
mod = None
|
|
try:
|
|
mod = __import__("platformio.commands." + name,
|
|
None, None, ["cli"])
|
|
except ImportError:
|
|
raise UnknownCLICommand(name)
|
|
return mod.cli
|
|
|
|
|
|
@click.command(cls=PlatformioCLI)
|
|
@click.version_option(__version__, prog_name="PlatformIO")
|
|
@click.pass_context
|
|
def cli(ctx):
|
|
maintenance.on_platformio_start(ctx)
|
|
|
|
|
|
@cli.resultcallback()
|
|
@click.pass_context
|
|
def process_result(ctx, result):
|
|
maintenance.on_platformio_end(ctx, result)
|
|
|
|
|
|
def main():
|
|
try:
|
|
cli(None)
|
|
except Exception as e: # pylint: disable=W0703
|
|
maintenance.on_platformio_exception(e)
|
|
if isinstance(e, PlatformioException):
|
|
click.echo("Error: " + str(e))
|
|
sys_exit(1)
|
|
else:
|
|
print format_exc()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys_exit(main())
|