diff options
author | Andrey Kislyuk <kislyuk@gmail.com> | 2018-01-29 11:13:25 -0800 |
---|---|---|
committer | Andrey Kislyuk <kislyuk@gmail.com> | 2018-01-29 11:13:25 -0800 |
commit | 7d2983b660e55f18ba79133e748c0fad471a65d4 (patch) | |
tree | f3932ca15efa726ac8042b3be40290e9ebcb4dde | |
parent | 61d96c58583b802d24d5439cd1a10b9cc9084824 (diff) |
Parse multiple positional-consuming jq args. Fixes #16
-rwxr-xr-x | test/test.py | 4 | ||||
-rwxr-xr-x | 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 @@ class TestYq(unittest.TestCase): 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 @@ parser.add_argument("--width", "-w", type=int, help="When using --yaml-output, s 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 @@ parser.add_argument("files", nargs="*", type=argparse.FileType()) 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() |