Skip to content

Commit 37e016f

Browse files
committed
cli/list can generate json output
1 parent 150f500 commit 37e016f

File tree

1 file changed

+24
-1
lines changed

1 file changed

+24
-1
lines changed

libiocage/cli/list.py

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
# POSSIBILITY OF SUCH DAMAGE.
2424
"""list module for the cli."""
2525
import click
26+
import json
2627
import texttable
2728
import typing
2829

@@ -31,7 +32,7 @@
3132
import libiocage.lib.JailFilter
3233
import libiocage.lib.Logger
3334

34-
supported_output_formats = ['table', 'csv', 'list']
35+
supported_output_formats = ['table', 'csv', 'list', 'json']
3536

3637

3738
@click.command(name="list", help="List a specified dataset type, by default"
@@ -97,6 +98,8 @@ def cli(ctx, dataset_type, header, _long, remote, plugins,
9798
_print_list(jails, columns, header, "\t")
9899
elif output_format == "csv":
99100
_print_list(jails, columns, header, ";")
101+
elif output_format == "json":
102+
_print_json(jails, columns)
100103
else:
101104
_print_table(jails, columns, header, _sort)
102105

@@ -147,6 +150,26 @@ def _print_list(
147150
print(separator.join(_lookup_jail_values(jail, columns)))
148151

149152

153+
def _print_json(
154+
jails: typing.Generator[libiocage.lib.Jails.JailsGenerator, None, None],
155+
columns: list,
156+
**json_dumps_args
157+
):
158+
159+
if "indent" not in json_dumps_args.keys():
160+
json_dumps_args["indent"] = 2
161+
162+
if "sort_keys" not in json_dumps_args.keys():
163+
json_dumps_args["sort_keys"] = True
164+
165+
output = []
166+
167+
for jail in jails:
168+
output.append(dict(zip(columns, _lookup_jail_values(jail, columns))))
169+
170+
print(json.dumps(output, **json_dumps_args))
171+
172+
150173
def _lookup_jail_values(jail, columns) -> typing.List[str]:
151174
return list(map(
152175
lambda column: jail.getstring(column),

0 commit comments

Comments
 (0)