Ver Fonte

Make milc work with positional arguments

skullY há 6 anos atrás
pai
commit
d4872fa242

+ 5 - 2
lib/python/milc.py

@@ -320,7 +320,7 @@ class MILC(object):
     def add_argument(self, *args, **kwargs):
         """Wrapper to add arguments to both the main and the shadow argparser.
         """
-        if kwargs.get('add_dest', True):
+        if kwargs.get('add_dest', True) and args[0][0] == '-':
             kwargs['dest'] = 'general_' + self.get_argument_name(*args, **kwargs)
         if 'add_dest' in kwargs:
             del kwargs['add_dest']
@@ -401,7 +401,10 @@ class MILC(object):
     def get_argument_name(self, *args, **kwargs):
         """Takes argparse arguments and returns the dest name.
         """
-        return self._arg_parser._get_optional_kwargs(*args, **kwargs)['dest']
+        try:
+            return self._arg_parser._get_optional_kwargs(*args, **kwargs)['dest']
+        except ValueError:
+            return self._arg_parser._get_positional_kwargs(*args, **kwargs)['dest']
 
     def argument(self, *args, **kwargs):
         """Decorator to call self.add_argument or self.<subcommand>.add_argument.

+ 6 - 5
lib/python/qmk/cli/compile/json.py

@@ -5,23 +5,24 @@ import os
 import sys
 import subprocess
 
-import qmk.keymap
 from milc import cli
 
+import qmk.keymap
+
 
-@cli.argument('-f', '--filename', help='Configurator JSON export', required=True)  # FIXME: This should be positional
+@cli.argument('filename', help='Configurator JSON export')
 @cli.entrypoint('Generate a keymap.c from a QMK Configurator export.')
 def main(cli):
     # Error checking
-    if cli.config.general.filename == ('-'):
+    if cli.args.filename == ('-'):
         cli.log.error('Reading from STDIN is not (yet) supported.')
         cli.print_usage()
-    if not os.path.exists(cli.config.general.filename):
+    if not os.path.exists(cli.args.filename):
         cli.log.error('JSON file does not exist!')
         cli.print_usage()
 
     # Parse the configurator json
-    with open(cli.config.general.filename, 'r') as fd:
+    with open(cli.args.filename, 'r') as fd:
         user_keymap = json.load(fd)
 
     # Generate the keymap

+ 12 - 11
lib/python/qmk/cli/json/keymap.py

@@ -4,44 +4,45 @@ import json
 import os
 import sys
 
-import qmk.keymap
 from milc import cli
 
+import qmk.keymap
+
 
-@cli.argument('-f', '--filename', help='Configurator JSON export', required=True)  # FIXME: This should be positional
+@cli.argument('filename', help='Configurator JSON file')
 @cli.argument('-o', '--output', help='File to write to')
 @cli.entrypoint('Generate a keymap.c from a QMK Configurator export.')
 def main(cli):
     # Error checking
-    if cli.config.general.filename == ('-'):
+    if cli.args.filename == ('-'):
         cli.log.error('Reading from STDIN is not (yet) supported.')
         cli.print_usage()
-    if not os.path.exists(cli.config.general.filename):
+    if not os.path.exists(cli.args.filename):
         cli.log.error('JSON file does not exist!')
         cli.print_usage()
 
     # Environment processing
-    if cli.config.general.output == ('-'):
-        cli.config.general.output = None
+    if cli.args.output == ('-'):
+        cli.args.output = None
 
     # Parse the configurator json
-    with open(cli.config.general.filename, 'r') as fd:
+    with open(cli.args.filename, '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.config.general.output:
-        output_dir = os.path.dirname(cli.config.general.output)
+    if cli.args.output:
+        output_dir = os.path.dirname(cli.args.output)
 
         if not os.path.exists(output_dir):
             os.makedirs(output_dir)
 
-        with open(cli.config.general.output, 'w') as keymap_fd:
+        with open(cli.args.output, 'w') as keymap_fd:
             keymap_fd.write(keymap_c)
 
         if sys.stdout.isatty():
-            cli.echo('Wrote keymap to %s.', cli.config.general.output)
+            cli.echo('Wrote keymap to %s.', cli.args.output)
 
     else:
         cli.echo(keymap_c)

+ 1 - 1
lib/python/qmk/keymap.py

@@ -3,7 +3,7 @@ import logging
 import os
 from traceback import format_exc
 
-from .errors import NoSuchKeyboardError
+from qmk.errors import NoSuchKeyboardError
 
 # The `keymap.c` template to use when a keyboard doesn't have its own
 DEFAULT_KEYMAP_C = """#include QMK_KEYBOARD_H