From 72b1e4ba3150ce5c475b7f1c7d16f38d110a2cbe Mon Sep 17 00:00:00 2001 From: Tamar Ben-Shachar Date: Wed, 24 Feb 2016 18:36:47 -0800 Subject: [PATCH] add --json option for `dcos package repo list` --- cli/dcoscli/data/help/package.txt | 2 +- cli/dcoscli/package/main.py | 16 +++++++++++----- cli/tests/data/help/package.txt | 2 +- cli/tests/data/package/json/test_repo_list.json | 8 ++++++++ cli/tests/integrations/test_package.py | 7 +++++++ dcos/cosmospackage.py | 9 +++------ 6 files changed, 31 insertions(+), 13 deletions(-) create mode 100644 cli/tests/data/package/json/test_repo_list.json diff --git a/cli/dcoscli/data/help/package.txt b/cli/dcoscli/data/help/package.txt index 50a1598..85f7eb2 100644 --- a/cli/dcoscli/data/help/package.txt +++ b/cli/dcoscli/data/help/package.txt @@ -18,7 +18,7 @@ Usage: dcos package search [--json ] dcos package repo add [--index=] dcos package repo remove (--repo-name= | --repo-url=) - dcos package repo list + dcos package repo list [--json] dcos package uninstall [--cli | [--app --app-id= --all]] diff --git a/cli/dcoscli/package/main.py b/cli/dcoscli/package/main.py index 04b8daf..1349cf5 100644 --- a/cli/dcoscli/package/main.py +++ b/cli/dcoscli/package/main.py @@ -55,8 +55,8 @@ def _cmds(): return [ cmds.Command( hierarchy=['package', 'repo', 'list'], - arg_keys=[], - function=_list_response), + arg_keys=['--json'], + function=_list_repos), cmds.Command( hierarchy=['package', 'repo', 'add'], @@ -138,9 +138,11 @@ def _info(): return 0 -def _list_response(): +def _list_repos(is_json): """List configured package repositories. + :param json_: output json if True + :type json_: bool :returns: Process status :rtype: int """ @@ -148,8 +150,12 @@ def _list_response(): package_manager = _get_package_manager() repos = package_manager.get_repos() - if repos: - emitter.publish(repos) + if is_json: + return emitter.publish(repos) + elif repos.get("repositories"): + repos = ["{}: {}".format(repo.get("name"), repo.get("uri")) + for repo in repos.get("repositories")] + emitter.publish("\n".join(repos)) else: msg = ("There are currently no repos configured. " "Please use `dcos package repo add` to add a repo") diff --git a/cli/tests/data/help/package.txt b/cli/tests/data/help/package.txt index 50a1598..85f7eb2 100644 --- a/cli/tests/data/help/package.txt +++ b/cli/tests/data/help/package.txt @@ -18,7 +18,7 @@ Usage: dcos package search [--json ] dcos package repo add [--index=] dcos package repo remove (--repo-name= | --repo-url=) - dcos package repo list + dcos package repo list [--json] dcos package uninstall [--cli | [--app --app-id= --all]] diff --git a/cli/tests/data/package/json/test_repo_list.json b/cli/tests/data/package/json/test_repo_list.json new file mode 100644 index 0000000..6b72ca6 --- /dev/null +++ b/cli/tests/data/package/json/test_repo_list.json @@ -0,0 +1,8 @@ +{ + "repositories": [ + { + "name": "test4", + "uri": "https://github.com/mesosphere/universe/archive/cli-test-4.zip" + } + ] +} diff --git a/cli/tests/integrations/test_package.py b/cli/tests/integrations/test_package.py index 1b9e5b2..837bfb6 100644 --- a/cli/tests/integrations/test_package.py +++ b/cli/tests/integrations/test_package.py @@ -59,6 +59,13 @@ test4: https://github.com/mesosphere/universe/archive/cli-test-4.zip assert_command(['dcos', 'package', 'repo', 'list'], stdout=repo_list) +def test_repo_list_json(): + repo_list = file_json( + 'tests/data/package/json/test_repo_list.json') + assert_command( + ['dcos', 'package', 'repo', 'list', '--json'], stdout=repo_list) + + def test_repo_add(): repo = \ "https://github.com/mesosphere/universe/archive/cli-test-3.zip" diff --git a/dcos/cosmospackage.py b/dcos/cosmospackage.py index eea3226..1e1f62f 100644 --- a/dcos/cosmospackage.py +++ b/dcos/cosmospackage.py @@ -158,14 +158,11 @@ class Cosmos(): def get_repos(self): """List locations of repos - :returns: the list of repos, in resolution order - :rtype: [str] + :returns: the list of repos, in resolution order or list + :rtype: dict """ - response = self.cosmos_post("repository/list", params={}) - repos = ["{}: {}".format(repo.get("name"), repo.get("uri")) - for repo in response.json().get("repositories")] - return "\n".join(repos) + return self.cosmos_post("repository/list", params={}).json() def add_repo(self, name, package_repo, index): """Add package repo and update repo with new repo