Add a lot more data to info.json (#13366)
* add some split data to info.json * add tags * add half of config_options.md to info.json * add support for designating master split * sort out split transport and primary * fix bad data in UNUSED_PINS * fixup custom transport * wip * allow for setting split right half keyboard matrix * add SPLIT_USB_DETECT * minor cleanup * fix an erroneous message * rework split.usb_detect * adding missing rgblight vars to info.json * add mouse_key to info.json * add all remaining options from docs/config_options.md * fix audio voices * qmk info: Change text output to use dotted notation * tweak layout output * resolve alias names * break out some functions to make flake8 happy * add a field for bootloader instructions * qmk generate-info-json: add a write-to-file argument Adds an argument that instructs qmk generate-info-json to write the output to a file instead of just to the terminal. * -arg_only, +action Because it was never my intention that one would have to specify a value for the argument that enables writing the file. * Bring qmk generate-info-json inline with other generate commands * pytest fixup * fix esca/getawayvan * fix data driven errors for bpiphany converters * features.force_nkro -> usb.force_nkro * split.primary->split.main * fix esca/getawayvan_f042 * fix the bpiphany converters for real * fix bpiphany/tiger_lily * Apply suggestions from code review Co-authored-by: Nick Brassel <nick@tzarc.org> * fix generate-api errors * fix matrix pin extraction for split boards * fix ploopyco/trackball_nano/rev1_001 Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com> Co-authored-by: Nick Brassel <nick@tzarc.org>
This commit is contained in:
parent
fac717c11c
commit
8d9bfdc254
17 changed files with 654 additions and 99 deletions
|
@ -4,15 +4,17 @@ Compile an info.json for a particular keyboard and pretty-print it.
|
|||
"""
|
||||
import json
|
||||
|
||||
from jsonschema import Draft7Validator, validators
|
||||
from argcomplete.completers import FilesCompleter
|
||||
from jsonschema import Draft7Validator, RefResolver, validators
|
||||
from milc import cli
|
||||
from pathlib import Path
|
||||
|
||||
from qmk.decorators import automagic_keyboard, automagic_keymap
|
||||
from qmk.info import info_json
|
||||
from qmk.json_encoders import InfoJSONEncoder
|
||||
from qmk.json_schema import load_jsonschema
|
||||
from qmk.json_schema import compile_schema_store
|
||||
from qmk.keyboard import keyboard_completer, keyboard_folder
|
||||
from qmk.path import is_keyboard
|
||||
from qmk.path import is_keyboard, normpath
|
||||
|
||||
|
||||
def pruning_validator(validator_class):
|
||||
|
@ -34,15 +36,19 @@ def pruning_validator(validator_class):
|
|||
def strip_info_json(kb_info_json):
|
||||
"""Remove the API-only properties from the info.json.
|
||||
"""
|
||||
schema_store = compile_schema_store()
|
||||
pruning_draft_7_validator = pruning_validator(Draft7Validator)
|
||||
schema = load_jsonschema('keyboard')
|
||||
validator = pruning_draft_7_validator(schema).validate
|
||||
schema = schema_store['qmk.keyboard.v1']
|
||||
resolver = RefResolver.from_schema(schema_store['qmk.keyboard.v1'], store=schema_store)
|
||||
validator = pruning_draft_7_validator(schema, resolver=resolver).validate
|
||||
|
||||
return validator(kb_info_json)
|
||||
|
||||
|
||||
@cli.argument('-kb', '--keyboard', type=keyboard_folder, completer=keyboard_completer, help='Keyboard to show info for.')
|
||||
@cli.argument('-km', '--keymap', help='Show the layers for a JSON keymap too.')
|
||||
@cli.argument('-o', '--output', arg_only=True, completer=FilesCompleter, help='Write the output the specified file, overwriting if necessary.')
|
||||
@cli.argument('-ow', '--overwrite', arg_only=True, action='store_true', help='Overwrite the existing info.json. (Overrides the location of --output)')
|
||||
@cli.subcommand('Generate an info.json file for a keyboard.', hidden=False if cli.config.user.developer else True)
|
||||
@automagic_keyboard
|
||||
@automagic_keymap
|
||||
|
@ -59,9 +65,29 @@ def generate_info_json(cli):
|
|||
cli.log.error('Invalid keyboard: "%s"', cli.config.generate_info_json.keyboard)
|
||||
return False
|
||||
|
||||
if cli.args.overwrite:
|
||||
output_path = (Path('keyboards') / cli.config.generate_info_json.keyboard / 'info.json').resolve()
|
||||
|
||||
if cli.args.output:
|
||||
cli.log.warning('Overwriting user supplied --output with %s', output_path)
|
||||
|
||||
cli.args.output = output_path
|
||||
|
||||
# Build the info.json file
|
||||
kb_info_json = info_json(cli.config.generate_info_json.keyboard)
|
||||
strip_info_json(kb_info_json)
|
||||
info_json_text = json.dumps(kb_info_json, indent=4, cls=InfoJSONEncoder)
|
||||
|
||||
# Display the results
|
||||
print(json.dumps(kb_info_json, indent=2, cls=InfoJSONEncoder))
|
||||
if cli.args.output:
|
||||
# Write to a file
|
||||
output_path = normpath(cli.args.output)
|
||||
|
||||
if output_path.exists():
|
||||
cli.log.warning('Overwriting output file %s', output_path)
|
||||
|
||||
output_path.write_text(info_json_text + '\n')
|
||||
cli.log.info('Wrote info.json to %s.', output_path)
|
||||
|
||||
else:
|
||||
# Display the results
|
||||
print(info_json_text)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue