diff options
Diffstat (limited to 'lib/python/qmk/cli')
| -rw-r--r-- | lib/python/qmk/cli/__init__.py | 1 | ||||
| -rw-r--r-- | lib/python/qmk/cli/c2json.py | 62 | ||||
| -rwxr-xr-x | lib/python/qmk/cli/doctor.py | 4 | ||||
| -rwxr-xr-x | lib/python/qmk/cli/info.py | 11 | ||||
| -rwxr-xr-x | lib/python/qmk/cli/json/keymap.py | 2 | ||||
| -rwxr-xr-x | lib/python/qmk/cli/json2c.py | 4 | ||||
| -rwxr-xr-x | lib/python/qmk/cli/kle2json.py | 6 | ||||
| -rw-r--r-- | lib/python/qmk/cli/list/keymaps.py | 2 | ||||
| -rwxr-xr-x | lib/python/qmk/cli/new/keymap.py | 6 | 
9 files changed, 80 insertions, 18 deletions
| diff --git a/lib/python/qmk/cli/__init__.py b/lib/python/qmk/cli/__init__.py index 47f60c601b..ba964ebbbb 100644 --- a/lib/python/qmk/cli/__init__.py +++ b/lib/python/qmk/cli/__init__.py @@ -6,6 +6,7 @@ import sys  from milc import cli +from . import c2json  from . import cformat  from . import compile  from . import config diff --git a/lib/python/qmk/cli/c2json.py b/lib/python/qmk/cli/c2json.py new file mode 100644 index 0000000000..0267303fd2 --- /dev/null +++ b/lib/python/qmk/cli/c2json.py @@ -0,0 +1,62 @@ +"""Generate a keymap.json from a keymap.c file. +""" +import json +import sys + +from milc import cli + +import qmk.keymap +import qmk.path + + +@cli.argument('--no-cpp', arg_only=True, action='store_false', help='Do not use \'cpp\' on keymap.c') +@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('-kb', '--keyboard', arg_only=True, required=True, help='The keyboard\'s name') +@cli.argument('-km', '--keymap', arg_only=True, required=True, help='The keymap\'s name') +@cli.argument('filename', arg_only=True, help='keymap.c file') +@cli.subcommand('Creates a keymap.json from a keymap.c file.') +def c2json(cli): +    """Generate a keymap.json from a keymap.c file. + +    This command uses the `qmk.keymap` module to generate a keymap.json from a keymap.c file. 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 not cli.args.filename.exists(): +        cli.log.error('C file does not exist!') +        cli.print_usage() +        exit(1) + +    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) + +    # Environment processing +    if cli.args.output == ('-'): +        cli.args.output = None + +    # Parse the keymap.c +    keymap_json = qmk.keymap.c2json(cli.args.keyboard, cli.args.keymap, cli.args.filename, use_cpp=cli.args.no_cpp) + +    # Generate the keymap.json +    try: +        keymap_json = qmk.keymap.generate(keymap_json['keyboard'], keymap_json['layout'], keymap_json['layers'], type='json', keymap=keymap_json['keymap']) +    except KeyError: +        cli.log.error('Something went wrong. Try to use --no-cpp.') +        sys.exit(1) + +    if cli.args.output: +        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(json.dumps(keymap_json)) + +        if not cli.args.quiet: +            cli.log.info('Wrote keymap to %s.', cli.args.output) + +    else: +        print(json.dumps(keymap_json)) diff --git a/lib/python/qmk/cli/doctor.py b/lib/python/qmk/cli/doctor.py index bad864f72d..7fafd57575 100755 --- a/lib/python/qmk/cli/doctor.py +++ b/lib/python/qmk/cli/doctor.py @@ -58,7 +58,7 @@ def parse_gcc_version(version):      return {          'major': int(m.group(1)),          'minor': int(m.group(2)) if m.group(2) else 0, -        'patch': int(m.group(3)) if m.group(3) else 0 +        'patch': int(m.group(3)) if m.group(3) else 0,      } @@ -364,3 +364,5 @@ def doctor(cli):      else:          cli.log.info('{fg_yellow}Problems detected, please fix these problems before proceeding.')          # FIXME(skullydazed/unclaimed): Link to a document about troubleshooting, or discord or something + +    return ok diff --git a/lib/python/qmk/cli/info.py b/lib/python/qmk/cli/info.py index 5e4b391411..0e64d40742 100755 --- a/lib/python/qmk/cli/info.py +++ b/lib/python/qmk/cli/info.py @@ -134,11 +134,11 @@ def info(cli):      if not cli.config.info.keyboard:          cli.log.error('Missing paramater: --keyboard')          cli.subcommands['info'].print_help() -        exit(1) +        return False      if not is_keyboard(cli.config.info.keyboard):          cli.log.error('Invalid keyboard: "%s"', cli.config.info.keyboard) -        exit(1) +        return False      # Build the info.json file      kb_info_json = info_json(cli.config.info.keyboard) @@ -146,13 +146,10 @@ def info(cli):      # Output in the requested format      if cli.args.format == 'json':          print(json.dumps(kb_info_json)) -        exit() - -    if cli.args.format == 'text': +    elif cli.args.format == 'text':          print_text_output(kb_info_json) -      elif cli.args.format == 'friendly':          print_friendly_output(kb_info_json) -      else:          cli.log.error('Unknown format: %s', cli.args.format) +        return False diff --git a/lib/python/qmk/cli/json/keymap.py b/lib/python/qmk/cli/json/keymap.py index c97a2d0462..2af9faaa72 100755 --- a/lib/python/qmk/cli/json/keymap.py +++ b/lib/python/qmk/cli/json/keymap.py @@ -13,4 +13,4 @@ def json_keymap(cli):      """Renamed to `qmk json2c`.      """      cli.log.error('This command has been renamed to `qmk json2c`.') -    exit(1) +    return False diff --git a/lib/python/qmk/cli/json2c.py b/lib/python/qmk/cli/json2c.py index af0d80a9ac..2a90094368 100755 --- a/lib/python/qmk/cli/json2c.py +++ b/lib/python/qmk/cli/json2c.py @@ -22,12 +22,12 @@ def json2c(cli):          # TODO(skullydazed/anyone): Read file contents from STDIN          cli.log.error('Reading from STDIN is not (yet) supported.')          cli.print_usage() -        exit(1) +        return False      if not cli.args.filename.exists():          cli.log.error('JSON file does not exist!')          cli.print_usage() -        exit(1) +        return False      # Environment processing      if cli.args.output and cli.args.output.name == '-': diff --git a/lib/python/qmk/cli/kle2json.py b/lib/python/qmk/cli/kle2json.py index 798f95fd19..3d1bb8c43c 100755 --- a/lib/python/qmk/cli/kle2json.py +++ b/lib/python/qmk/cli/kle2json.py @@ -37,7 +37,8 @@ def kle2json(cli):          file_path = Path(os.environ['ORIG_CWD'], cli.args.filename)      # Check for valid file_path for more graceful failure      if not file_path.exists(): -        return cli.log.error('File {fg_cyan}%s{style_reset_all} was not found.', file_path) +        cli.log.error('File {fg_cyan}%s{style_reset_all} was not found.', file_path) +        return False      out_path = file_path.parent      raw_code = file_path.open().read()      # Check if info.json exists, allow overwrite with force @@ -50,8 +51,7 @@ def kle2json(cli):      except Exception as e:          cli.log.error('Could not parse KLE raw data: %s', raw_code)          cli.log.exception(e) -        # FIXME: This should be better -        return cli.log.error('Could not parse KLE raw data.') +        return False      keyboard = OrderedDict(          keyboard_name=kle.name,          url='', diff --git a/lib/python/qmk/cli/list/keymaps.py b/lib/python/qmk/cli/list/keymaps.py index b18289eb35..49bc84b2ce 100644 --- a/lib/python/qmk/cli/list/keymaps.py +++ b/lib/python/qmk/cli/list/keymaps.py @@ -15,7 +15,7 @@ def list_keymaps(cli):      """      if not is_keyboard(cli.config.list_keymaps.keyboard):          cli.log.error('Keyboard %s does not exist!', cli.config.list_keymaps.keyboard) -        exit(1) +        return False      for name in qmk.keymap.list_keymaps(cli.config.list_keymaps.keyboard):          print(name) diff --git a/lib/python/qmk/cli/new/keymap.py b/lib/python/qmk/cli/new/keymap.py index 474fe7974f..52c564997b 100755 --- a/lib/python/qmk/cli/new/keymap.py +++ b/lib/python/qmk/cli/new/keymap.py @@ -29,15 +29,15 @@ def new_keymap(cli):      # check directories      if not kb_path.exists():          cli.log.error('Keyboard %s does not exist!', kb_path) -        exit(1) +        return False      if not keymap_path_default.exists():          cli.log.error('Keyboard default %s does not exist!', keymap_path_default) -        exit(1) +        return False      if keymap_path_new.exists():          cli.log.error('Keymap %s already exists!', keymap_path_new) -        exit(1) +        return False      # create user directory with default keymap files      shutil.copytree(keymap_path_default, keymap_path_new, symlinks=True) | 
