M src/hello_hut/cli.py => src/hello_hut/cli.py +6 -1
@@ 1,6 1,7 @@
"""Command-line interface for hello-hut."""
import argparse
+import json
import os
import sys
@@ 23,6 24,8 @@ def build_parser():
help="repeat the greeting N times (default: 1)")
parser.add_argument("--color", choices=("auto", "always", "never"),
default="auto", help="colorize the output")
+ parser.add_argument("--format", choices=("text", "json"), default="text",
+ help="output format (default: text)")
parser.add_argument("--version", action="version",
version=f"%(prog)s {__version__}")
return parser
@@ 49,7 52,9 @@ def main(argv=None):
salutation = time_of_day_greeting() if args.time_of_day else None
message = greet(name, shout=shout, salutation=salutation)
for _ in range(args.count):
- if use_color(args.color):
+ if args.format == "json":
+ print(json.dumps({"greeting": message, "name": name}))
+ elif use_color(args.color):
print(f"\033[1;32m{message}\033[0m")
else:
print(message)
M tests/test_cli.py => tests/test_cli.py +6 -0
@@ 1,4 1,5 @@
import io
+import json
import unittest
from contextlib import redirect_stdout
@@ 22,3 23,8 @@ class CliTest(unittest.TestCase):
code, out = run("Ada", "--count", "0")
self.assertEqual(code, 2)
self.assertEqual(out, "")
+
+ def test_json(self):
+ code, out = run("Ada", "--format", "json")
+ self.assertEqual(code, 0)
+ self.assertEqual(json.loads(out), {"greeting": "Hello, Ada!", "name": "Ada"})