aboutsummaryrefslogtreecommitdiff
path: root/lib/python/qmk/cli/generate/info_json.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/python/qmk/cli/generate/info_json.py')
-rwxr-xr-xlib/python/qmk/cli/generate/info_json.py49
1 files changed, 49 insertions, 0 deletions
diff --git a/lib/python/qmk/cli/generate/info_json.py b/lib/python/qmk/cli/generate/info_json.py
new file mode 100755
index 000000000..7e6654e45
--- /dev/null
+++ b/lib/python/qmk/cli/generate/info_json.py
@@ -0,0 +1,49 @@
1"""Keyboard information script.
2
3Compile an info.json for a particular keyboard and pretty-print it.
4"""
5import json
6
7from milc import cli
8
9from qmk.info_json_encoder import InfoJSONEncoder
10from qmk.decorators import automagic_keyboard, automagic_keymap
11from qmk.info import info_json
12from qmk.path import is_keyboard
13
14
15@cli.argument('-kb', '--keyboard', help='Keyboard to show info for.')
16@cli.argument('-km', '--keymap', help='Show the layers for a JSON keymap too.')
17@cli.subcommand('Generate an info.json file for a keyboard.', hidden=False if cli.config.user.developer else True)
18@automagic_keyboard
19@automagic_keymap
20def generate_info_json(cli):
21 """Generate an info.json file for a keyboard
22 """
23 # Determine our keyboard(s)
24 if not cli.config.generate_info_json.keyboard:
25 cli.log.error('Missing paramater: --keyboard')
26 cli.subcommands['info'].print_help()
27 return False
28
29 if not is_keyboard(cli.config.generate_info_json.keyboard):
30 cli.log.error('Invalid keyboard: "%s"', cli.config.generate_info_json.keyboard)
31 return False
32
33 # Build the info.json file
34 kb_info_json = info_json(cli.config.generate_info_json.keyboard)
35 pared_down_json = {}
36
37 for key in ('manufacturer', 'maintainer', 'usb', 'keyboard_name', 'width', 'height', 'debounce', 'diode_direction', 'features', 'community_layouts', 'layout_aliases', 'matrix_pins', 'rgblight', 'url'):
38 if key in kb_info_json:
39 pared_down_json[key] = kb_info_json[key]
40
41 pared_down_json['layouts'] = {}
42 if 'layouts' in pared_down_json:
43 for layout_name, layout in kb_info_json['layouts'].items():
44 pared_down_json['layouts'][layout_name] = {}
45 pared_down_json['layouts'][layout_name]['key_count'] = layout.get('key_count', len(layout['layout']))
46 pared_down_json['layouts'][layout_name]['layout'] = layout['layout']
47
48 # Display the results
49 print(json.dumps(pared_down_json, indent=2, cls=InfoJSONEncoder))