Skip to content

Commit

Permalink
Filter out -C and separate commingled short options
Browse files Browse the repository at this point in the history
Fixes #71
  • Loading branch information
kislyuk committed Oct 28, 2019
1 parent 7306745 commit 32156a2
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 0 deletions.
9 changes: 9 additions & 0 deletions test/test.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,15 @@ def test_jq16_arg_passthrough(self):
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())

Expand Down
16 changes: 16 additions & 0 deletions yq/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -130,13 +130,29 @@ 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)
if values is not None:
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:
Expand Down

0 comments on commit 32156a2

Please sign in to comment.