def lib_stats(json_output): regclient = LibraryPackageManager().get_registry_client_instance() result = regclient.fetch_json_data("get", "/v2/lib/stats", cache_valid="1h") if json_output: return click.echo(dump_json_to_unicode(result)) for key in ("updated", "added"): tabular_data = [ ( click.style(item["name"], fg="cyan"), time.strftime("%c", util.parse_date(item["date"])), "https://platformio.org/lib/show/%s/%s" % (item["id"], quote(item["name"])), ) for item in result.get(key, []) ] table = tabulate( tabular_data, headers=[click.style("RECENTLY " + key.upper(), bold=True), "Date", "URL"], ) click.echo(table) click.echo() for key in ("lastkeywords", "topkeywords"): tabular_data = [ ( click.style(name, fg="cyan"), "https://platformio.org/lib/search?query=" + quote("keyword:%s" % name), ) for name in result.get(key, []) ] table = tabulate( tabular_data, headers=[ click.style( ("RECENT" if key == "lastkeywords" else "POPULAR") + " KEYWORDS", bold=True, ), "URL", ], ) click.echo(table) click.echo() for key, title in (("dlday", "Today"), ("dlweek", "Week"), ("dlmonth", "Month")): tabular_data = [ ( click.style(item["name"], fg="cyan"), "https://platformio.org/lib/show/%s/%s" % (item["id"], quote(item["name"])), ) for item in result.get(key, []) ] table = tabulate( tabular_data, headers=[click.style("FEATURED: " + title.upper(), bold=True), "URL"], ) click.echo(table) click.echo() return True
def lib_search(query, json_output, page, noninteractive, **filters): regclient = LibraryPackageManager().get_registry_client_instance() if not query: query = [] if not isinstance(query, list): query = list(query) for key, values in filters.items(): for value in values: query.append('%s:"%s"' % (key, value)) result = regclient.fetch_json_data( "get", "/v2/lib/search", params=dict(query=" ".join(query), page=page), cache_valid="1d", ) if json_output: click.echo(dump_json_to_unicode(result)) return if result["total"] == 0: click.secho( "Nothing has been found by your request\n" "Try a less-specific search or use truncation (or wildcard) " "operator", fg="yellow", nl=False, ) click.secho(" *", fg="green") click.secho("For example: DS*, PCA*, DHT* and etc.\n", fg="yellow") click.echo( "For more examples and advanced search syntax, please use documentation:" ) click.secho( "https://docs.platformio.org/page/userguide/lib/cmd_search.html\n", fg="cyan", ) return click.secho( "Found %d libraries:\n" % result["total"], fg="green" if result["total"] else "yellow", ) while True: for item in result["items"]: print_lib_item(item) if int(result["page"]) * int(result["perpage"]) >= int(result["total"]): break if noninteractive: click.echo() click.secho( "Loading next %d libraries... Press Ctrl+C to stop!" % result["perpage"], fg="yellow", ) click.echo() time.sleep(5) elif not click.confirm("Show next libraries?"): break result = regclient.fetch_json_data( "get", "/v2/lib/search", params=dict(query=" ".join(query), page=int(result["page"]) + 1), cache_valid="1d", )