From 7d2983b660e55f18ba79133e748c0fad471a65d4 Mon Sep 17 00:00:00 2001 From: Andrey Kislyuk Date: Mon, 29 Jan 2018 11:13:25 -0800 Subject: [PATCH] Parse multiple positional-consuming jq args. Fixes #16 --- test/test.py | 4 +++- yq/__init__.py | 12 ++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/test/test.py b/test/test.py index 22ad2ca..9d06314 100755 --- a/test/test.py +++ b/test/test.py @@ -42,7 +42,9 @@ def test_yq_err(self): self.run_yq("- %", ["."], expect_exit_code=err) def test_yq_arg_passthrough(self): - self.assertEqual(self.run_yq("{}", ["--arg", "foo", "bar", "--indent", "4", "."]), "") + self.assertEqual(self.run_yq("{}", ["--arg", "foo", "bar", "--arg", "x", "y", "--indent", "4", "."]), "") + self.assertEqual(self.run_yq("{}", ["--arg", "foo", "bar", "--arg", "x", "y", "-y", "--indent", "4", ".x=$x"]), + "x: y\n") self.run_yq("{}", ["--indent", "9", "."], expect_exit_code=2) def fd_path(self, fh): diff --git a/yq/__init__.py b/yq/__init__.py index fd9d177..af765d2 100755 --- a/yq/__init__.py +++ b/yq/__init__.py @@ -57,11 +57,10 @@ def decode_docs(jq_output, json_decoder): parser.add_argument("--version", action="version", version="%(prog)s {version}".format(version=__version__)) # jq arguments that consume positionals must be listed here to avoid our parser mistaking them for our positionals -jq_arg_group = parser.add_argument_group("jq_args") jq_arg_spec = {"--indent": 1, "-f": 1, "--from-file": 1, "-L": 1, "--arg": 2, "--argjson": 2, "--slurpfile": 2, "--argfile": 2} for arg in jq_arg_spec: - jq_arg_group.add_argument(arg, nargs=jq_arg_spec[arg], dest=arg, help=argparse.SUPPRESS) + parser.add_argument(arg, nargs=jq_arg_spec[arg], dest=arg, action="append", help=argparse.SUPPRESS) parser.add_argument("jq_filter") parser.add_argument("files", nargs="*", type=argparse.FileType()) @@ -69,10 +68,11 @@ def decode_docs(jq_output, json_decoder): def main(args=None): args, jq_args = parser.parse_known_args(args=args) for arg in jq_arg_spec: - vals = getattr(args, arg, None) - if vals is not None: - jq_args.append(arg) - jq_args.extend(vals) + values = getattr(args, arg, None) + if values is not None: + for value_group in values: + jq_args.append(arg) + jq_args.extend(value_group) if sys.stdin.isatty() and not args.files: return parser.print_help()