diff options
author | skullydazed <skullydazed@users.noreply.github.com> | 2020-02-17 11:42:11 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-02-17 11:42:11 -0800 |
commit | c66930445f7d5941eb847568288046d51f853786 (patch) | |
tree | 273f290ca81a27bbbe7bdbf90221c02ac11f42cd /lib/python/qmk/cli/json | |
parent | 58724f8dcb9eccb1c132b8ddab422790ddd26be0 (diff) |
Use pathlib everywhere we can (#7872)
* Use pathlib everywhere we can
* Update lib/python/qmk/path.py
Co-Authored-By: Erovia <Erovia@users.noreply.github.com>
* Update lib/python/qmk/path.py
Co-Authored-By: Erovia <Erovia@users.noreply.github.com>
* Improvements based on @erovia's feedback
* rework qmk compile and qmk flash to use pathlib
* style
* Remove the subcommand_name argument from find_keyboard_keymap()
Co-authored-by: Erovia <Erovia@users.noreply.github.com>
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 -@cli.argument('-o', '--output', arg_only=True, help='File to write to') +@cli.argument('-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) |