Speed improvements to qmk find. (#24385)
				
					
				
			This commit is contained in:
		
							parent
							
								
									4f9ef90754
								
							
						
					
					
						commit
						580d18d2e9
					
				
					 4 changed files with 38 additions and 9 deletions
				
			
		| 
						 | 
				
			
			@ -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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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'
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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)
 | 
			
		||||
| 
						 | 
				
			
			@ -944,13 +947,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:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue