2af5260194e83a0ace648ae0404ef5e104eeb5c2
[sdc/sdc-distribution-client.git] /
1 #  Licensed under the Apache License, Version 2.0 (the "License"); you may
2 #  not use this file except in compliance with the License. You may obtain
3 #  a copy of the License at
4 #
5 #       http://www.apache.org/licenses/LICENSE-2.0
6 #
7 #  Unless required by applicable law or agreed to in writing, software
8 #  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
9 #  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
10 #  License for the specific language governing permissions and limitations
11 #  under the License.
12
13 """Output formatters for JSON.
14 """
15
16 import json
17
18 from . import base
19 from cliff import columns
20
21
22 class JSONFormatter(base.ListFormatter, base.SingleFormatter):
23
24     def add_argument_group(self, parser):
25         group = parser.add_argument_group(title='json formatter')
26         group.add_argument(
27             '--noindent',
28             action='store_true',
29             dest='noindent',
30             help='whether to disable indenting the JSON'
31         )
32
33     def emit_list(self, column_names, data, stdout, parsed_args):
34         items = []
35         for item in data:
36             items.append(
37                 {n: (i.machine_readable()
38                      if isinstance(i, columns.FormattableColumn)
39                      else i)
40                  for n, i in zip(column_names, item)}
41             )
42         indent = None if parsed_args.noindent else 2
43         json.dump(items, stdout, indent=indent)
44
45     def emit_one(self, column_names, data, stdout, parsed_args):
46         one = {
47             n: (i.machine_readable()
48                 if isinstance(i, columns.FormattableColumn)
49                 else i)
50             for n, i in zip(column_names, data)
51         }
52         indent = None if parsed_args.noindent else 2
53         json.dump(one, stdout, indent=indent)