diff options
author | Andrey Kislyuk <kislyuk@gmail.com> | 2019-10-28 08:35:10 -0700 |
---|---|---|
committer | Andrey Kislyuk <kislyuk@gmail.com> | 2019-10-28 08:35:14 -0700 |
commit | 32156a2f1d955317a1116a7a5627fc3e65576c64 (patch) | |
tree | ae45f538b38c9c0b39eb4246d7e130ca062f2c18 | |
parent | 7306745a49844c11c4fbf039cb14848ebe03a89c (diff) |
Filter out -C and separate commingled short options
Fixes #71
-rwxr-xr-x | test/test.py | 9 | ||||
-rwxr-xr-x | yq/__init__.py | 16 |
2 files changed, 25 insertions, 0 deletions
diff --git a/test/test.py b/test/test.py index f76ecb1..935fa62 100755 --- a/test/test.py +++ b/test/test.py @@ -92,6 +92,15 @@ class TestYq(unittest.TestCase): self.assertEqual(self.run_yq("{}", ["-y", ".a=$ARGS.positional", "--args", "a", "b"]), "a:\n - a\n - b\n") self.assertEqual(self.run_yq("{}", [".", "--jsonargs", "a", "b"]), "") + def test_short_option_separation(self): + self.assertEqual(self.run_yq('{"a": 1}', ["-yCcC", "."]), "a: 1\n") + self.assertEqual(self.run_yq('{"a": 1}', ["-y", "-CS", "."]), "a: 1\n") + self.assertEqual(self.run_yq('{"a": 1}', ["-y", "-CC", "."]), "a: 1\n") + self.assertEqual(self.run_yq('{"a": 1}', ["-y", "-cC", "."]), "a: 1\n") + self.assertEqual(self.run_yq('{"a": 1}', ["-x", "-cC", "."]), "<a>1</a>\n") + self.assertEqual(self.run_yq('{"a": 1}', ["-C", "."]), "") + self.assertEqual(self.run_yq('{"a": 1}', ["-Cc", "."]), "") + def fd_path(self, fh): return "/dev/fd/{}".format(fh.fileno()) diff --git a/yq/__init__.py b/yq/__init__.py index 529879b..a33cce1 100755 --- a/yq/__init__.py +++ b/yq/__init__.py @@ -130,6 +130,21 @@ def tq_cli(): def cli(args=None, input_format="yaml", program_name="yq"): parser = get_parser(program_name) args, jq_args = parser.parse_known_args(args=args) + + for i, arg in enumerate(jq_args): + if arg.startswith("-") and not arg.startswith("--"): + if "y" in arg: + args.output_format = "yaml" + elif "x" in arg: + args.output_format = "xml" + jq_args[i] = arg.replace("x", "").replace("y", "") + if args.output_format != "json": + jq_args[i] = jq_args[i].replace("C", "") + if jq_args[i] == "-": + jq_args[i] = None + + jq_args = [arg for arg in jq_args if arg is not None] + for arg in jq_arg_spec: values = getattr(args, arg, None) delattr(args, arg) @@ -137,6 +152,7 @@ def cli(args=None, input_format="yaml", program_name="yq"): for value_group in values: jq_args.append(arg) jq_args.extend(value_group) + if "--from-file" in jq_args or "-f" in jq_args: args.input_streams.insert(0, argparse.FileType()(args.jq_filter)) else: |