From d509d77193c64fcaceba8a173767a63da5377084 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Redzy=C5=84ski?= Date: Fri, 30 Apr 2021 11:40:44 +0200 Subject: [PATCH] list: add --show-json option (#5888) * list: add --show-json option * list: add test for --show-json --- dvc/command/ls/__init__.py | 9 ++++++++- tests/unit/command/ls/test_ls.py | 18 ++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/dvc/command/ls/__init__.py b/dvc/command/ls/__init__.py index 62d9e844e..ff18ddec0 100644 --- a/dvc/command/ls/__init__.py +++ b/dvc/command/ls/__init__.py @@ -34,7 +34,11 @@ class CmdList(CmdBaseNoRepo): recursive=self.args.recursive, dvc_only=self.args.dvc_only, ) - if entries: + if self.args.show_json: + import json + + logger.info(json.dumps(entries)) + elif entries: entries = _prettify(entries, sys.stdout.isatty()) logger.info("\n".join(entries)) return 0 @@ -65,6 +69,9 @@ def add_parser(subparsers, parent_parser): list_parser.add_argument( "--dvc-only", action="store_true", help="Show only DVC outputs." ) + list_parser.add_argument( + "--show-json", action="store_true", help="Show output in JSON format." + ) list_parser.add_argument( "--rev", nargs="?", diff --git a/tests/unit/command/ls/test_ls.py b/tests/unit/command/ls/test_ls.py index 3b7b4b409..c6be019de 100644 --- a/tests/unit/command/ls/test_ls.py +++ b/tests/unit/command/ls/test_ls.py @@ -1,3 +1,6 @@ +import json +import logging + from dvc.cli import parse_args from dvc.command.ls import CmdList @@ -52,3 +55,18 @@ def test_list_outputs_only(mocker): m.assert_called_once_with( url, None, recursive=False, rev=None, dvc_only=True ) + + +def test_show_json(mocker, caplog): + cli_args = parse_args(["list", "local_dir", "--show-json"]) + assert cli_args.func == CmdList + + cmd = cli_args.func(cli_args) + + result = [{"key": "val"}] + mocker.patch("dvc.repo.Repo.ls", return_value=result) + + with caplog.at_level(logging.INFO, "dvc"): + assert cmd.run() == 0 + + assert json.dumps(result) in caplog.messages