summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrey Kislyuk <kislyuk@gmail.com>2018-01-29 11:13:25 -0800
committerAndrey Kislyuk <kislyuk@gmail.com>2018-01-29 11:13:25 -0800
commit7d2983b660e55f18ba79133e748c0fad471a65d4 (patch)
treef3932ca15efa726ac8042b3be40290e9ebcb4dde
parent61d96c58583b802d24d5439cd1a10b9cc9084824 (diff)
Parse multiple positional-consuming jq args. Fixes #16
-rwxr-xr-xtest/test.py4
-rwxr-xr-xyq/__init__.py12
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()