summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrey Kislyuk <kislyuk@gmail.com>2019-10-28 08:35:10 -0700
committerAndrey Kislyuk <kislyuk@gmail.com>2019-10-28 08:35:14 -0700
commit32156a2f1d955317a1116a7a5627fc3e65576c64 (patch)
treeae45f538b38c9c0b39eb4246d7e130ca062f2c18
parent7306745a49844c11c4fbf039cb14848ebe03a89c (diff)
Filter out -C and separate commingled short options
Fixes #71
-rwxr-xr-xtest/test.py9
-rwxr-xr-xyq/__init__.py16
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: