diff options
Diffstat (limited to 'lib/python/qmk/cli/json')
| -rwxr-xr-x | lib/python/qmk/cli/json/keymap.py | 31 | 
1 files changed, 16 insertions, 15 deletions
| diff --git a/lib/python/qmk/cli/json/keymap.py b/lib/python/qmk/cli/json/keymap.py index a030ab53d6..c2b7dde7ab 100755 --- a/lib/python/qmk/cli/json/keymap.py +++ b/lib/python/qmk/cli/json/keymap.py @@ -1,14 +1,15 @@  """Generate a keymap.c from a configurator export.  """  import json -import os +from pathlib import Path  from milc import cli  import qmk.keymap +import qmk.path [email protected]('-o', '--output', arg_only=True, help='File to write to') [email protected]('-o', '--output', arg_only=True, type=Path, help='File to write to')  @cli.argument('-q', '--quiet', arg_only=True, action='store_true', help="Quiet mode, only output error messages")  @cli.argument('filename', arg_only=True, help='Configurator JSON file')  @cli.subcommand('Creates a keymap.c from a QMK Configurator export.') @@ -17,13 +18,17 @@ def json_keymap(cli):      This command uses the `qmk.keymap` module to generate a keymap.c from a configurator export. The generated keymap is written to stdout, or to a file if -o is provided.      """ +    cli.args.filename = qmk.path.normpath(cli.args.filename) +      # Error checking -    if cli.args.filename == ('-'): -        cli.log.error('Reading from STDIN is not (yet) supported.') +    if not cli.args.filename.exists(): +        cli.log.error('JSON file does not exist!')          cli.print_usage()          exit(1) -    if not os.path.exists(qmk.path.normpath(cli.args.filename)): -        cli.log.error('JSON file does not exist!') + +    if str(cli.args.filename) == '-': +        # TODO(skullydazed/anyone): Read file contents from STDIN +        cli.log.error('Reading from STDIN is not (yet) supported.')          cli.print_usage()          exit(1) @@ -32,21 +37,17 @@ def json_keymap(cli):          cli.args.output = None      # Parse the configurator json -    with open(qmk.path.normpath(cli.args.filename), 'r') as fd: +    with cli.args.filename.open('r') as fd:          user_keymap = json.load(fd)      # Generate the keymap      keymap_c = qmk.keymap.generate(user_keymap['keyboard'], user_keymap['layout'], user_keymap['layers'])      if cli.args.output: -        output_dir = os.path.dirname(cli.args.output) - -        if not os.path.exists(output_dir): -            os.makedirs(output_dir) - -        output_file = qmk.path.normpath(cli.args.output) -        with open(output_file, 'w') as keymap_fd: -            keymap_fd.write(keymap_c) +        cli.args.output.parent.mkdir(parents=True, exist_ok=True) +        if cli.args.output.exists(): +            cli.args.output.replace(cli.args.output.name + '.bak') +        cli.args.output.write_text(keymap_c)          if not cli.args.quiet:              cli.log.info('Wrote keymap to %s.', cli.args.output) | 
