Ver código fonte

Merge remote-tracking branch 'origin/master' into develop

QMK Bot 1 ano atrás
pai
commit
b17322b9b8

+ 2 - 0
lib/python/qmk/cli/find.py

@@ -1,5 +1,6 @@
 """Command to search through all keyboards and keymaps for a given search criteria.
 """
+import os
 from milc import cli
 from qmk.search import filter_help, search_keymap_targets
 from qmk.util import maybe_exit_config
@@ -20,6 +21,7 @@ from qmk.util import maybe_exit_config
 def find(cli):
     """Search through all keyboards and keymaps for a given search criteria.
     """
+    os.environ.setdefault('SKIP_SCHEMA_VALIDATION', '1')
     maybe_exit_config(should_exit=False, should_reraise=True)
 
     targets = search_keymap_targets([('all', cli.config.find.keymap)], cli.args.filter)

+ 2 - 0
lib/python/qmk/cli/mass_compile.py

@@ -20,6 +20,8 @@ def mass_compile_targets(targets: List[BuildTarget], clean: bool, dry_run: bool,
     if len(targets) == 0:
         return
 
+    os.environ.setdefault('SKIP_SCHEMA_VALIDATION', '1')
+
     make_cmd = find_make()
     builddir = Path(QMK_FIRMWARE) / '.build'
     makefile = builddir / 'parallel_kb_builds.mk'

+ 13 - 9
lib/python/qmk/info.py

@@ -1,6 +1,7 @@
 """Functions that help us generate and use info.json files.
 """
 import re
+import os
 from pathlib import Path
 import jsonschema
 from dotty_dict import dotty
@@ -14,7 +15,7 @@ from qmk.keyboard import config_h, rules_mk
 from qmk.commands import parse_configurator_json
 from qmk.makefile import parse_rules_mk_file
 from qmk.math import compute
-from qmk.util import maybe_exit
+from qmk.util import maybe_exit, truthy
 
 true_values = ['1', 'on', 'yes']
 false_values = ['0', 'off', 'no']
@@ -262,7 +263,9 @@ def info_json(keyboard, force_layout=None):
         info_data["community_layouts"] = [force_layout]
 
     # Validate
-    _validate(keyboard, info_data)
+    # Skip processing if necessary
+    if not truthy(os.environ.get('SKIP_SCHEMA_VALIDATION'), False):
+        _validate(keyboard, info_data)
 
     # Check that the reported matrix size is consistent with the actual matrix size
     _check_matrix(info_data)
@@ -941,13 +944,14 @@ def merge_info_jsons(keyboard, info_data):
             _log_error(info_data, "Invalid file %s, root object should be a dictionary." % (str(info_file),))
             continue
 
-        try:
-            validate(new_info_data, 'qmk.keyboard.v1')
-        except jsonschema.ValidationError as e:
-            json_path = '.'.join([str(p) for p in e.absolute_path])
-            cli.log.error('Not including data from file: %s', info_file)
-            cli.log.error('\t%s: %s', json_path, e.message)
-            continue
+        if not truthy(os.environ.get('SKIP_SCHEMA_VALIDATION'), False):
+            try:
+                validate(new_info_data, 'qmk.keyboard.v1')
+            except jsonschema.ValidationError as e:
+                json_path = '.'.join([str(p) for p in e.absolute_path])
+                cli.log.error('Not including data from file: %s', info_file)
+                cli.log.error('\t%s: %s', json_path, e.message)
+                continue
 
         # Merge layout data in
         if 'layout_aliases' in new_info_data:

+ 21 - 0
lib/python/qmk/util.py

@@ -27,6 +27,27 @@ def maybe_exit_config(should_exit: bool = True, should_reraise: bool = False):
     maybe_exit_reraise = should_reraise
 
 
+def truthy(value, value_if_unknown=False):
+    """Returns True if the value is truthy, False otherwise.
+
+    Deals with:
+        True: 1, true, t, yes, y, on
+        False: 0, false, f, no, n, off
+    """
+    if value in {False, True}:
+        return bool(value)
+
+    test_value = str(value).strip().lower()
+
+    if test_value in {"1", "true", "t", "yes", "y", "on"}:
+        return True
+
+    if test_value in {"0", "false", "f", "no", "n", "off"}:
+        return False
+
+    return value_if_unknown
+
+
 @contextlib.contextmanager
 def parallelize():
     """Returns a function that can be used in place of a map() call.