diff options
Diffstat (limited to 'lib')
| -rwxr-xr-x | lib/python/qmk/cli/compile.py | 5 | ||||
| -rw-r--r-- | lib/python/qmk/cli/flash.py | 3 | ||||
| -rwxr-xr-x | lib/python/qmk/cli/json2c.py | 18 | ||||
| -rw-r--r-- | lib/python/qmk/path.py | 10 | 
4 files changed, 16 insertions, 20 deletions
diff --git a/lib/python/qmk/cli/compile.py b/lib/python/qmk/cli/compile.py index 322ce6a257..db195f78a5 100755 --- a/lib/python/qmk/cli/compile.py +++ b/lib/python/qmk/cli/compile.py @@ -2,15 +2,14 @@  You can compile a keymap already in the repo or using a QMK Configurator export.  """ -from argparse import FileType -  from milc import cli +import qmk.path  from qmk.decorators import automagic_keyboard, automagic_keymap  from qmk.commands import compile_configurator_json, create_make_command, parse_configurator_json -@cli.argument('filename', nargs='?', arg_only=True, type=FileType('r'), help='The configurator export to compile') +@cli.argument('filename', nargs='?', arg_only=True, type=qmk.path.FileType('r'), help='The configurator export to compile')  @cli.argument('-kb', '--keyboard', help='The keyboard to build a firmware for. Ignored when a configurator export is supplied.')  @cli.argument('-km', '--keymap', help='The keymap to build a firmware for. Ignored when a configurator export is supplied.')  @cli.argument('-n', '--dry-run', arg_only=True, action='store_true', help="Don't actually build, just show the make command to be run.") diff --git a/lib/python/qmk/cli/flash.py b/lib/python/qmk/cli/flash.py index a876290035..173dee3df5 100644 --- a/lib/python/qmk/cli/flash.py +++ b/lib/python/qmk/cli/flash.py @@ -3,7 +3,6 @@  You can compile a keymap already in the repo or using a QMK Configurator export.  A bootloader must be specified.  """ -from argparse import FileType  from milc import cli @@ -30,7 +29,7 @@ def print_bootloader_help():      cli.echo('For more info, visit https://docs.qmk.fm/#/flashing') -@cli.argument('filename', nargs='?', arg_only=True, type=FileType('r'), help='The configurator export JSON to compile.') +@cli.argument('filename', nargs='?', arg_only=True, type=qmk.path.FileType('r'), help='The configurator export JSON to compile.')  @cli.argument('-b', '--bootloaders', action='store_true', help='List the available bootloaders.')  @cli.argument('-bl', '--bootloader', default='flash', help='The flash command, corresponding to qmk\'s make options of bootloaders.')  @cli.argument('-km', '--keymap', help='The keymap to build a firmware for. Use this if you dont have a configurator file. Ignored when a configurator file is supplied.') diff --git a/lib/python/qmk/cli/json2c.py b/lib/python/qmk/cli/json2c.py index 97d8fb0c33..e7babc0e4c 100755 --- a/lib/python/qmk/cli/json2c.py +++ b/lib/python/qmk/cli/json2c.py @@ -1,7 +1,6 @@  """Generate a keymap.c from a configurator export.  """  import json -import sys  from milc import cli @@ -11,7 +10,7 @@ import qmk.path  @cli.argument('-o', '--output', arg_only=True, type=qmk.path.normpath, 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', type=qmk.path.normpath, arg_only=True, help='Configurator JSON file') +@cli.argument('filename', type=qmk.path.FileType('r'), arg_only=True, help='Configurator JSON file')  @cli.subcommand('Creates a keymap.c from a QMK Configurator export.')  def json2c(cli):      """Generate a keymap.c from a configurator export. @@ -20,19 +19,8 @@ def json2c(cli):      """      try: -        # Parse the configurator from stdin -        if cli.args.filename and cli.args.filename.name == '-': -            user_keymap = json.load(sys.stdin) - -        else: -            # Error checking -            if not cli.args.filename.exists(): -                cli.log.error('JSON file does not exist!') -                return False - -            # Parse the configurator json file -            else: -                user_keymap = json.loads(cli.args.filename.read_text()) +        # Parse the configurator from json file (or stdin) +        user_keymap = json.load(cli.args.filename)      except json.decoder.JSONDecodeError as ex:          cli.log.error('The JSON input does not appear to be valid.') diff --git a/lib/python/qmk/path.py b/lib/python/qmk/path.py index 54def1d5d6..2aa1916f55 100644 --- a/lib/python/qmk/path.py +++ b/lib/python/qmk/path.py @@ -2,6 +2,7 @@  """  import logging  import os +import argparse  from pathlib import Path  from qmk.constants import MAX_KEYBOARD_SUBFOLDERS, QMK_FIRMWARE @@ -65,3 +66,12 @@ def normpath(path):          return path      return Path(os.environ['ORIG_CWD']) / path + + +class FileType(argparse.FileType): +    def __call__(self, string): +        """normalize and check exists +            otherwise magic strings like '-' for stdin resolve to bad paths +        """ +        norm = normpath(string) +        return super().__call__(norm if norm.exists() else string)  | 
