diff --git a/HISTORY.rst b/HISTORY.rst index 1e7c67f4..a5786014 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -9,6 +9,11 @@ PlatformIO 2.0 * Project generator for `CodeBlocks IDE `__ (`issue #600 `_) +* PlatformIO Library Registry in JSON format! Implemented + ``--json-output`` and ``--page`` options for + `platformio lib search `__ + command + (`issue #604 `_) * Updated native SDK for ESP8266 to 1.5 (`issue #366 `_) * Automatically reboot Teensy board after upload when Teensy Loader GUI is used diff --git a/docs/userguide/lib/cmd_search.rst b/docs/userguide/lib/cmd_search.rst index 9ad9d66f..4325fe7f 100644 --- a/docs/userguide/lib/cmd_search.rst +++ b/docs/userguide/lib/cmd_search.rst @@ -96,6 +96,17 @@ Filter libraries by specified framework Filter libraries by specified keyword +.. option:: + --json-output + +Return the output in `JSON `_ format + +.. option:: + --page + +Manually paginate through search results. This option is useful in pair with +``--json-output``. + Examples -------- diff --git a/platformio/__init__.py b/platformio/__init__.py index 61d83191..9e5ec0bb 100644 --- a/platformio/__init__.py +++ b/platformio/__init__.py @@ -14,7 +14,7 @@ import sys -VERSION = (2, 9, "0.dev0") +VERSION = (2, 9, "0.dev1") __version__ = ".".join([str(s) for s in VERSION]) __title__ = "platformio" diff --git a/platformio/commands/lib.py b/platformio/commands/lib.py index 0444b088..f2bd73e5 100644 --- a/platformio/commands/lib.py +++ b/platformio/commands/lib.py @@ -56,12 +56,14 @@ def cli(): @cli.command("search", short_help="Search for library") +@click.option("--json-output", is_flag=True) +@click.option("--page", type=click.INT, default=1) @click.option("-a", "--author", multiple=True) @click.option("-k", "--keyword", multiple=True) @click.option("-f", "--framework", multiple=True) @click.option("-p", "--platform", multiple=True) @click.argument("query", required=False, nargs=-1) -def lib_search(query, **filters): +def lib_search(query, json_output, page, **filters): if not query: query = [] if not isinstance(query, list): @@ -71,7 +73,13 @@ def lib_search(query, **filters): for value in values: query.append('%s:"%s"' % (key, value)) - result = get_api_result("/lib/search", dict(query=" ".join(query))) + result = get_api_result("/lib/search", + dict(query=" ".join(query), page=page)) + + if json_output: + click.echo(json.dumps(result)) + return + if result['total'] == 0: click.secho( "Nothing has been found by your request\n" @@ -103,7 +111,7 @@ def lib_search(query, **filters): click.confirm("Show next libraries?")): result = get_api_result( "/lib/search", - dict(query=" ".join(query), page=str(int(result['page']) + 1)) + dict(query=" ".join(query), page=int(result['page']) + 1) ) else: break