From 8596d271a2602e9febfe57418ef60d9b4b2c8fee Mon Sep 17 00:00:00 2001 From: Ivan Kravets Date: Wed, 3 Dec 2014 20:16:50 +0200 Subject: [PATCH] Cleanup click-based source code --- platformio/commands/install.py | 18 ++++---- platformio/commands/list.py | 10 ++-- platformio/commands/run.py | 38 +++++++++------- platformio/commands/search.py | 12 ++--- platformio/commands/serialports.py | 73 +++++++++++++++--------------- platformio/commands/show.py | 26 ++++++----- platformio/commands/uninstall.py | 12 ++--- platformio/commands/update.py | 10 ++-- platformio/commands/upgrade.py | 20 ++++---- platformio/exception.py | 4 +- platformio/maintenance.py | 10 ++-- platformio/pkgmanager.py | 34 +++++++------- platformio/platforms/base.py | 2 +- 13 files changed, 139 insertions(+), 130 deletions(-) diff --git a/platformio/commands/install.py b/platformio/commands/install.py index 834ce14c..af476f43 100644 --- a/platformio/commands/install.py +++ b/platformio/commands/install.py @@ -1,20 +1,20 @@ # Copyright (C) Ivan Kravets # See LICENSE for details. -from click import argument, command, option, secho +import click from platformio.platforms.base import PlatformFactory -@command("install", short_help="Install new platforms") -@argument("platforms", nargs=-1) -@option("--with-package", multiple=True, metavar="") -@option("--without-package", multiple=True, metavar="") -@option("--skip-default-package", is_flag=True) +@click.command("install", short_help="Install new platforms") +@click.argument("platforms", nargs=-1) +@click.option("--with-package", multiple=True, metavar="") +@click.option("--without-package", multiple=True, metavar="") +@click.option("--skip-default-package", is_flag=True) def cli(platforms, with_package, without_package, skip_default_package): for platform in platforms: - p = PlatformFactory().newPlatform(platform) + p = PlatformFactory.newPlatform(platform) if p.install(with_package, without_package, skip_default_package): - secho("The platform '%s' has been successfully installed!" % - platform, fg="green") + click.secho("The platform '%s' has been successfully installed!" % + platform, fg="green") diff --git a/platformio/commands/list.py b/platformio/commands/list.py index 7b00e226..ed7ffad2 100644 --- a/platformio/commands/list.py +++ b/platformio/commands/list.py @@ -1,12 +1,12 @@ # Copyright (C) Ivan Kravets # See LICENSE for details. -from click import command, echo, style +import click from platformio.platforms.base import PlatformFactory -@command("list", short_help="List installed platforms") +@click.command("list", short_help="List installed platforms") def cli(): installed_platforms = PlatformFactory.get_platforms( @@ -14,8 +14,8 @@ def cli(): installed_platforms.sort() for platform in installed_platforms: - p = PlatformFactory().newPlatform(platform) - echo("{name:<20} with packages: {pkgs}".format( - name=style(p.get_name(), fg="cyan"), + p = PlatformFactory.newPlatform(platform) + click.echo("{name:<20} with packages: {pkgs}".format( + name=click.style(p.get_name(), fg="cyan"), pkgs=", ".join(p.get_installed_packages()) )) diff --git a/platformio/commands/run.py b/platformio/commands/run.py index 476e05c6..798f7382 100644 --- a/platformio/commands/run.py +++ b/platformio/commands/run.py @@ -1,43 +1,44 @@ # Copyright (C) Ivan Kravets # See LICENSE for details. -from click import command, echo, option, secho, style +import click -from platformio import telemetry -from platformio.exception import (InvalidEnvName, ProjectEnvsNotAvaialable, - UndefinedEnvPlatform, UnknownEnvNames) +from platformio import exception, telemetry +from platformio.commands.install import cli as cmd_install from platformio.platforms.base import PlatformFactory from platformio.util import get_project_config -@command("run", short_help="Process project environments") -@option("--environment", "-e", multiple=True, metavar="") -@option("--target", "-t", multiple=True, metavar="") -@option("--upload-port", metavar="") -def cli(environment, target, upload_port): +@click.command("run", short_help="Process project environments") +@click.option("--environment", "-e", multiple=True, metavar="") +@click.option("--target", "-t", multiple=True, metavar="") +@click.option("--upload-port", metavar="") +@click.pass_context +def cli(ctx, environment, target, upload_port): config = get_project_config() if not config.sections(): - raise ProjectEnvsNotAvaialable() + raise exception.ProjectEnvsNotAvaialable() unknown = set(environment) - set([s[4:] for s in config.sections()]) if unknown: - raise UnknownEnvNames(", ".join(unknown)) + raise exception.UnknownEnvNames(", ".join(unknown)) for section in config.sections(): # skip main configuration section if section == "platformio": continue elif section[:4] != "env:": - raise InvalidEnvName(section) + raise exception.InvalidEnvName(section) envname = section[4:] if environment and envname not in environment: # echo("Skipped %s environment" % style(envname, fg="yellow")) continue - echo("Processing %s environment:" % style(envname, fg="cyan")) + click.echo("Processing %s environment:" % + click.style(envname, fg="cyan")) variables = ["PIOENV=" + envname] if upload_port: @@ -55,7 +56,8 @@ def cli(environment, target, upload_port): envtargets = config.get(section, "targets").split() if not config.has_option(section, "platform"): - raise UndefinedEnvPlatform(envname) + raise exception.UndefinedEnvPlatform(envname) + platform = config.get(section, "platform") telemetry.on_run_environment(config.items(section), envtargets) @@ -63,7 +65,9 @@ def cli(environment, target, upload_port): click.confirm("The platform '%s' has not been installed yet. " "Would you like to install it now?" % platform)): ctx.invoke(cmd_install, platforms=[platform]) + + p = PlatformFactory.newPlatform(platform) result = p.run(variables, envtargets) - secho(result['out'], fg="green") - secho(result['err'], - fg="red" if "Error" in result['err'] else "yellow") + click.secho(result['out'], fg="green") + click.secho(result['err'], + fg="red" if "Error" in result['err'] else "yellow") diff --git a/platformio/commands/search.py b/platformio/commands/search.py index ec814be4..80a2d80d 100644 --- a/platformio/commands/search.py +++ b/platformio/commands/search.py @@ -1,16 +1,16 @@ # Copyright (C) Ivan Kravets # See LICENSE for details. -from click import argument, command, echo, style +import click from platformio.platforms.base import PlatformFactory -@command("search", short_help="Search for development platforms") -@argument("query", required=False) +@click.command("search", short_help="Search for development platforms") +@click.argument("query", required=False) def cli(query): for platform in PlatformFactory.get_platforms().keys(): - p = PlatformFactory().newPlatform(platform) + p = PlatformFactory.newPlatform(platform) name = p.get_name() shinfo = p.get_short_info() @@ -21,5 +21,5 @@ def cli(query): if query and query.lower() not in search_data.lower(): continue - echo("{name:<20} - {info}".format(name=style(name, fg="cyan"), - info=shinfo)) + click.echo("{name:<20} - {info}".format( + name=click.style(name, fg="cyan"), info=shinfo)) diff --git a/platformio/commands/serialports.py b/platformio/commands/serialports.py index 769e9a70..4a73775c 100644 --- a/platformio/commands/serialports.py +++ b/platformio/commands/serialports.py @@ -3,13 +3,13 @@ import sys -from click import Choice, echo, group, option, secho +import click from serial.tools import miniterm from platformio.util import get_serialports -@group(short_help="List or Monitor Serial ports") +@click.group(short_help="List or Monitor Serial ports") def cli(): pass @@ -18,48 +18,49 @@ def cli(): def serialports_list(): for item in get_serialports(): - secho(item['port'], fg="cyan") - echo("----------") - echo("Hardware ID: %s" % item['hwid']) - echo("Description: %s" % item['description']) - echo("") + click.secho(item['port'], fg="cyan") + click.echo("----------") + click.echo("Hardware ID: %s" % item['hwid']) + click.echo("Description: %s" % item['description']) + click.echo("") @cli.command("monitor", short_help="Monitor Serial port") -@option("--port", "-p", help="Port, a number or a device name") -@option("--baud", "-b", type=int, default=9600, - help="Set baud rate, default=9600") -@option("--parity", default="N", type=Choice(["N", "E", "O", "S", "M"]), - help="Set parity, default=N") -@option("--rtscts", is_flag=True, - help="Enable RTS/CTS flow control, default=Off") -@option("--xonxoff", is_flag=True, - help="Enable software flow control, default=Off") -@option("--rts", default="0", type=Choice(["0", "1"]), - help="Set initial RTS line state, default=0") -@option("--dtr", default="0", type=Choice(["0", "1"]), - help="Set initial DTR line state, default=0") -@option("--echo", is_flag=True, - help="Enable local echo, default=Off") -@option("--cr", is_flag=True, - help="Do not send CR+LF, send CR only, default=Off") -@option("--lf", is_flag=True, - help="Do not send CR+LF, send LF only, default=Off") -@option("--debug", "-d", count=True, - help="""Debug received data (escape non-printable chars) +@click.option("--port", "-p", help="Port, a number or a device name") +@click.option("--baud", "-b", type=int, default=9600, + help="Set baud rate, default=9600") +@click.option("--parity", default="N", + type=click.Choice(["N", "E", "O", "S", "M"]), + help="Set parity, default=N") +@click.option("--rtscts", is_flag=True, + help="Enable RTS/CTS flow control, default=Off") +@click.option("--xonxoff", is_flag=True, + help="Enable software flow control, default=Off") +@click.option("--rts", default="0", type=click.Choice(["0", "1"]), + help="Set initial RTS line state, default=0") +@click.option("--dtr", default="0", type=click.Choice(["0", "1"]), + help="Set initial DTR line state, default=0") +@click.option("--echo", is_flag=True, + help="Enable local echo, default=Off") +@click.option("--cr", is_flag=True, + help="Do not send CR+LF, send CR only, default=Off") +@click.option("--lf", is_flag=True, + help="Do not send CR+LF, send LF only, default=Off") +@click.option("--debug", "-d", count=True, + help="""Debug received data (escape non-printable chars) # --debug can be given multiple times: # 0: just print what is received # 1: escape non-printable characters, do newlines as unusual # 2: escape non-printable characters, newlines too # 3: hex dump everything""") -@option("--exit-char", type=int, default=0x1d, - help="ASCII code of special character that is used to exit the " - "application, default=0x1d") -@option("--menu-char", type=int, default=0x14, - help="ASCII code of special character that is used to control " - "miniterm (menu), default=0x14") -@option("--quiet", is_flag=True, - help="Diagnostics: suppress non-error messages, default=Off") +@click.option("--exit-char", type=int, default=0x1d, + help="ASCII code of special character that is used to exit the " + "application, default=0x1d") +@click.option("--menu-char", type=int, default=0x14, + help="ASCII code of special character that is used to control " + "miniterm (menu), default=0x14") +@click.option("--quiet", is_flag=True, + help="Diagnostics: suppress non-error messages, default=Off") def serialports_monitor(**_): sys.argv = sys.argv[3:] try: diff --git a/platformio/commands/show.py b/platformio/commands/show.py index 48f1b800..746daa61 100644 --- a/platformio/commands/show.py +++ b/platformio/commands/show.py @@ -3,16 +3,18 @@ from datetime import datetime -from click import argument, command, echo, style +import click +from platformio.commands.install import cli as cmd_install from platformio.exception import PlatformNotInstalledYet from platformio.pkgmanager import PackageManager from platformio.platforms.base import PlatformFactory -@command("show", short_help="Show details about installed platforms") -@argument("platform") -def cli(platform): +@click.command("show", short_help="Show details about installed platforms") +@click.argument("platform") +@click.pass_context +def cli(ctx, platform): installed_platforms = PlatformFactory.get_platforms( installed=True).keys() @@ -24,18 +26,18 @@ def cli(platform): else: raise PlatformNotInstalledYet(platform) - p = PlatformFactory().newPlatform(platform) - echo("{name:<20} - {info}".format(name=style(p.get_name(), fg="cyan"), - info=p.get_short_info())) + p = PlatformFactory.newPlatform(platform) + click.echo("{name:<20} - {info}".format( + name=click.style(p.get_name(), fg="cyan"), info=p.get_short_info())) installed_packages = PackageManager.get_installed() for name in p.get_installed_packages(): data = installed_packages[name] pkgalias = p.get_pkg_alias(name) - echo("----------") - echo("Package: %s" % style(name, fg="yellow")) + click.echo("----------") + click.echo("Package: %s" % click.style(name, fg="yellow")) if pkgalias: - echo("Alias: %s" % pkgalias) - echo("Version: %d" % int(data['version'])) - echo("Installed: %s" % datetime.fromtimestamp( + click.echo("Alias: %s" % pkgalias) + click.echo("Version: %d" % int(data['version'])) + click.echo("Installed: %s" % datetime.fromtimestamp( data['time']).strftime("%Y-%m-%d %H:%M:%S")) diff --git a/platformio/commands/uninstall.py b/platformio/commands/uninstall.py index 7d25eabb..a14569e2 100644 --- a/platformio/commands/uninstall.py +++ b/platformio/commands/uninstall.py @@ -1,17 +1,17 @@ # Copyright (C) Ivan Kravets # See LICENSE for details. -from click import argument, command, secho +import click from platformio.platforms.base import PlatformFactory -@command("uninstall", short_help="Uninstall platforms") -@argument("platforms", nargs=-1) +@click.command("uninstall", short_help="Uninstall platforms") +@click.argument("platforms", nargs=-1) def cli(platforms): for platform in platforms: - p = PlatformFactory().newPlatform(platform) + p = PlatformFactory.newPlatform(platform) if p.uninstall(): - secho("The platform '%s' has been successfully " - "uninstalled!" % platform, fg="green") + click.secho("The platform '%s' has been successfully " + "uninstalled!" % platform, fg="green") diff --git a/platformio/commands/update.py b/platformio/commands/update.py index 2ecd8d3f..9091e31e 100644 --- a/platformio/commands/update.py +++ b/platformio/commands/update.py @@ -1,12 +1,12 @@ # Copyright (C) Ivan Kravets # See LICENSE for details. -from click import command, echo, style +import click from platformio.platforms.base import PlatformFactory -@command("update", short_help="Update installed platforms") +@click.command("update", short_help="Update installed platforms") def cli(): installed_platforms = PlatformFactory.get_platforms( @@ -14,7 +14,7 @@ def cli(): installed_platforms.sort() for platform in installed_platforms: - echo("\nPlatform %s" % style(platform, fg="cyan")) - echo("--------") - p = PlatformFactory().newPlatform(platform) + click.echo("\nPlatform %s" % click.style(platform, fg="cyan")) + click.echo("--------") + p = PlatformFactory.newPlatform(platform) p.update() diff --git a/platformio/commands/upgrade.py b/platformio/commands/upgrade.py index 2f211d36..212744a6 100644 --- a/platformio/commands/upgrade.py +++ b/platformio/commands/upgrade.py @@ -1,15 +1,16 @@ # Copyright (C) Ivan Kravets # See LICENSE for details. -from click import command, secho -from requests import get +import click +import requests from platformio import __version__ from platformio.exception import GetLatestVersionError from platformio.util import exec_command -@command("upgrade", short_help="Upgrade PlatformIO to the latest version") +@click.command("upgrade", + short_help="Upgrade PlatformIO to the latest version") def cli(): try: last = get_latest_version() @@ -17,14 +18,17 @@ def cli(): raise GetLatestVersionError() if __version__ == last: - return secho("You're up-to-date!\nPlatformIO %s is currently the " - "newest version available." % __version__, fg="green") + return click.secho( + "You're up-to-date!\nPlatformIO %s is currently the " + "newest version available." % __version__, fg="green" + ) else: result = exec_command(["pip", "install", "--upgrade", "platformio"]) - secho(result['out'], fg="green") - secho(result['err'], fg="red") + click.secho(result['out'], fg="green") + click.secho(result['err'], fg="red") def get_latest_version(): - pkgdata = get("https://pypi.python.org/pypi/platformio/json").json() + pkgdata = requests.get( + "https://pypi.python.org/pypi/platformio/json").json() return pkgdata['info']['version'] diff --git a/platformio/exception.py b/platformio/exception.py index 34c635fe..ae55e352 100644 --- a/platformio/exception.py +++ b/platformio/exception.py @@ -150,7 +150,7 @@ class UpgraderFailed(PlatformioException): class SConsNotInstalled(PlatformioException): MESSAGE = ( - "The `scons` tool isn't installed properly. " - "Please use official installation procedure: " + "The PlatformIO and `scons` aren't installed properly. " + "Please use official installation manual: " "http://docs.platformio.ikravets.com/en/latest/installation.html" ) diff --git a/platformio/maintenance.py b/platformio/maintenance.py index 63e19664..ca6d5b91 100644 --- a/platformio/maintenance.py +++ b/platformio/maintenance.py @@ -10,8 +10,8 @@ from time import time import click from platformio import __version__, app, telemetry -from platformio.commands.install import cli as cli_install -from platformio.commands.lib import lib_update as cli_libraries_update +from platformio.commands.install import cli as cmd_install +from platformio.commands.lib import lib_update as cmd_libraries_update from platformio.commands.update import cli as cli_platforms_update from platformio.commands.upgrade import get_latest_version from platformio.exception import UpgraderFailed @@ -75,7 +75,7 @@ class Upgrader(object): remove(join(get_home_dir(), fname)) if prev_platforms: - ctx.invoke(cli_install, platforms=prev_platforms) + ctx.invoke(cmd_install, platforms=prev_platforms) return True @@ -156,7 +156,7 @@ def check_internal_updates(ctx, what): outdated_items = [] if what == "platforms": for platform in PlatformFactory.get_platforms(installed=True).keys(): - p = PlatformFactory().newPlatform(platform) + p = PlatformFactory.newPlatform(platform) if p.is_outdated(): outdated_items.append(platform) elif what == "libraries": @@ -180,7 +180,7 @@ def check_internal_updates(ctx, what): if what == "platforms": ctx.invoke(cli_platforms_update) elif what == "libraries": - ctx.invoke(cli_libraries_update) + ctx.invoke(cmd_libraries_update) click.echo() telemetry.on_event(category="Auto", action="Update", diff --git a/platformio/pkgmanager.py b/platformio/pkgmanager.py index 462f02b0..29090905 100644 --- a/platformio/pkgmanager.py +++ b/platformio/pkgmanager.py @@ -6,13 +6,11 @@ from os.path import isdir, join from shutil import rmtree from time import time -from click import echo, secho, style +import click -from platformio import telemetry +from platformio import exception, telemetry from platformio.app import get_state_item, set_state_item from platformio.downloader import FileDownloader -from platformio.exception import (InvalidPackageVersion, NonSystemPackage, - UnknownPackage) from platformio.unpacker import FileUnpacker from platformio.util import get_api_result, get_home_dir, get_systype @@ -62,28 +60,28 @@ class PackageManager(object): def get_info(self, name, version=None): manifest = self.get_manifest() if name not in manifest: - raise UnknownPackage(name) + raise exception.UnknownPackage(name) # check system platform systype = get_systype() builds = ([b for b in manifest[name] if b['system'] == "all" or systype in b['system']]) if not builds: - raise NonSystemPackage(name, systype) + raise exception.NonSystemPackage(name, systype) if version: for b in builds: if b['version'] == version: return b - raise InvalidPackageVersion(name, version) + raise exception.InvalidPackageVersion(name, version) else: return sorted(builds, key=lambda s: s['version'])[-1] def install(self, name): - echo("Installing %s package:" % style(name, fg="cyan")) + click.echo("Installing %s package:" % click.style(name, fg="cyan")) if self.is_installed(name): - secho("Already installed", fg="yellow") + click.secho("Already installed", fg="yellow") return False info = self.get_info(name) @@ -101,36 +99,36 @@ class PackageManager(object): category="PackageManager", action="Install", label=name) def uninstall(self, name): - echo("Uninstalling %s package: \t" % style(name, fg="cyan"), - nl=False) + click.echo("Uninstalling %s package: \t" % + click.style(name, fg="cyan"), nl=False) if not self.is_installed(name): - secho("Not installed", fg="yellow") + click.secho("Not installed", fg="yellow") return False rmtree(join(self._package_dir, name)) self._unregister(name) - echo("[%s]" % style("OK", fg="green")) + click.echo("[%s]" % click.style("OK", fg="green")) # report usage telemetry.on_event( category="PackageManager", action="Uninstall", label=name) def update(self, name): - echo("Updating %s package:" % style(name, fg="yellow")) + click.echo("Updating %s package:" % click.style(name, fg="yellow")) installed = self.get_installed() current_version = installed[name]['version'] latest_version = self.get_info(name)['version'] - echo("Versions: Current=%d, Latest=%d \t " % ( - current_version, latest_version), nl=False) + click.echo("Versions: Current=%d, Latest=%d \t " % ( + current_version, latest_version), nl=False) if current_version == latest_version: - echo("[%s]" % (style("Up-to-date", fg="green"))) + click.echo("[%s]" % (click.style("Up-to-date", fg="green"))) return True else: - echo("[%s]" % (style("Out-of-date", fg="red"))) + click.echo("[%s]" % (click.style("Out-of-date", fg="red"))) self.uninstall(name) self.install(name) diff --git a/platformio/platforms/base.py b/platformio/platforms/base.py index 5197e1d0..55b3f6da 100644 --- a/platformio/platforms/base.py +++ b/platformio/platforms/base.py @@ -156,7 +156,7 @@ class BasePlatform(object): for item in installed_platforms: if item == platform: continue - p = PlatformFactory().newPlatform(item) + p = PlatformFactory.newPlatform(item) deppkgs = deppkgs.union(set(p.get_packages().keys())) pm = PackageManager()