|
4 | 4 | import argparse
|
5 | 5 | import json
|
6 | 6 | from operator import itemgetter
|
| 7 | +import pathlib |
| 8 | +import sys |
7 | 9 |
|
8 | 10 | from traitlets import (
|
9 | 11 | CaselessStrEnum,
|
@@ -225,16 +227,28 @@ def create_markdown(spec):
|
225 | 227 | parser = argparse.ArgumentParser(description='Description of your program')
|
226 | 228 | parser.add_argument('-f', '--format', choices=['json', 'json-pretty', 'markdown'],
|
227 | 229 | help='Format to generate', default='json')
|
| 230 | + parser.add_argument('output', nargs='?', type=pathlib.Path) |
228 | 231 | args = parser.parse_args()
|
229 | 232 | format = args.format
|
230 | 233 |
|
| 234 | + if args.output: |
| 235 | + args.output.parent.mkdir(exist_ok=True) |
| 236 | + output = open(args.output, mode='w', encoding='utf8') |
| 237 | + else: |
| 238 | + output = sys.stdout |
| 239 | + |
231 | 240 | widgets_to_document = sorted(widgets.Widget._widget_types.items())
|
232 | 241 | spec = create_spec(widgets_to_document)
|
233 |
| - if format == 'json': |
234 |
| - print(json.dumps(spec, sort_keys=True)) |
235 |
| - elif format == 'json-pretty': |
236 |
| - print(json.dumps(spec, sort_keys=True, |
237 |
| - indent=2, separators=(',', ': '))) |
238 |
| - elif format == 'markdown': |
239 |
| - # We go through the json engine to convert tuples to lists, etc. |
240 |
| - print(create_markdown(json.loads(json.dumps(spec)))) |
| 242 | + try: |
| 243 | + if format == 'json': |
| 244 | + json.dump(spec, output, sort_keys=True) |
| 245 | + elif format == 'json-pretty': |
| 246 | + json.dump(spec, output, sort_keys=True, |
| 247 | + indent=2, separators=(',', ': ')) |
| 248 | + elif format == 'markdown': |
| 249 | + # We go through the json engine to convert tuples to lists, etc. |
| 250 | + output.write(create_markdown(json.loads(json.dumps(spec)))) |
| 251 | + output.write('\n') |
| 252 | + finally: |
| 253 | + if args.output: |
| 254 | + output.close() |
0 commit comments