diff --git a/cli/lightning-cli.c b/cli/lightning-cli.c index 9ef4b8124..a213665ea 100644 --- a/cli/lightning-cli.c +++ b/cli/lightning-cli.c @@ -620,7 +620,7 @@ int main(int argc, char *argv[]) enum input input = DEFAULT_INPUT; enum log_level notification_level = LOG_INFORM; bool last_was_progress = false; - char *command = NULL; + char *command = NULL, *filter = NULL; err_set_progname(argv[0]); jsmn_init(&parser); @@ -650,6 +650,9 @@ int main(int argc, char *argv[]) opt_register_arg("-N|--notifications", opt_set_level, opt_show_level, ¬ification_level, "Set notification level, or none"); + opt_register_arg("-l|--filter", opt_set_charp, + opt_show_charp, &filter, + "Set JSON reply filter"); opt_register_version(); @@ -713,8 +716,11 @@ int main(int argc, char *argv[]) enable_notifications(fd); cmd = tal_fmt(ctx, - "{ \"jsonrpc\" : \"2.0\", \"method\" : \"%s\", \"id\" : \"%s\", \"params\" :", + "{ \"jsonrpc\" : \"2.0\", \"method\" : \"%s\", \"id\" : \"%s\",", json_escape(ctx, method)->s, idstr); + if (filter) + tal_append_fmt(&cmd, "\"filter\": %s,", filter); + tal_append_fmt(&cmd, " \"params\" :"); if (input == DEFAULT_INPUT) { /* Hacky autodetect; only matters if more than single arg */ diff --git a/doc/lightning-cli.1.md b/doc/lightning-cli.1.md index 8981c238a..29d2845c4 100644 --- a/doc/lightning-cli.1.md +++ b/doc/lightning-cli.1.md @@ -71,6 +71,10 @@ print out notifications of *LEVEL* or above (one of `io`, `debug`, `info` (the default), `unusual` or `broken`: they are prefixed with `# `. +* **--filter**/**-l**=*JSON* + + This hands lightningd *JSON* as a filter, which controls what will be output, e.g. `'--filter={"help":[{"command":true}]}'`. See lightningd-rpc(7) for more details on how to specify filters. + * **--help**/**-h** Pretty-print summary of options to standard output and exit. The format can diff --git a/tests/test_misc.py b/tests/test_misc.py index e28a62379..8dfe56c46 100644 --- a/tests/test_misc.py +++ b/tests/test_misc.py @@ -927,6 +927,16 @@ def test_cli(node_factory): j, _ = json.JSONDecoder().raw_decode(out) assert 'help [command]' in j['help'][0]['verbose'] + # Test filtering + out = subprocess.check_output(['cli/lightning-cli', + '--network={}'.format(TEST_NETWORK), + '--lightning-dir={}' + .format(l1.daemon.lightning_dir), + '-J', '--filter={"help":[{"command":true}]}', + 'help', 'help']).decode('utf-8') + j, _ = json.JSONDecoder().raw_decode(out) + assert j == {'help': [{'command': 'help [command]'}]} + # Test missing parameters. try: # This will error due to missing parameters.