CLI refactoring for common build target APIs (#22221)
This commit is contained in:
parent
c4d3521ba6
commit
4938210711
10 changed files with 296 additions and 285 deletions
|
@ -11,8 +11,9 @@ from milc import cli
|
|||
|
||||
from qmk.util import parallel_map
|
||||
from qmk.info import keymap_json
|
||||
import qmk.keyboard
|
||||
import qmk.keymap
|
||||
from qmk.keyboard import list_keyboards, keyboard_folder
|
||||
from qmk.keymap import list_keymaps, locate_keymap
|
||||
from qmk.build_targets import KeyboardKeymapBuildTarget, BuildTarget
|
||||
|
||||
|
||||
def _set_log_level(level):
|
||||
|
@ -36,15 +37,15 @@ def _all_keymaps(keyboard):
|
|||
"""Returns a list of tuples of (keyboard, keymap) for all keymaps for the given keyboard.
|
||||
"""
|
||||
with ignore_logging():
|
||||
keyboard = qmk.keyboard.resolve_keyboard(keyboard)
|
||||
return [(keyboard, keymap) for keymap in qmk.keymap.list_keymaps(keyboard)]
|
||||
keyboard = keyboard_folder(keyboard)
|
||||
return [(keyboard, keymap) for keymap in list_keymaps(keyboard)]
|
||||
|
||||
|
||||
def _keymap_exists(keyboard, keymap):
|
||||
"""Returns the keyboard name if the keyboard+keymap combination exists, otherwise None.
|
||||
"""
|
||||
with ignore_logging():
|
||||
return keyboard if qmk.keymap.locate_keymap(keyboard, keymap) is not None else None
|
||||
return keyboard if locate_keymap(keyboard, keymap) is not None else None
|
||||
|
||||
|
||||
def _load_keymap_info(kb_km):
|
||||
|
@ -75,7 +76,7 @@ def _expand_keymap_target(keyboard: str, keymap: str, all_keyboards: List[str] =
|
|||
Caters for 'all' in either keyboard or keymap, or both.
|
||||
"""
|
||||
if all_keyboards is None:
|
||||
all_keyboards = qmk.keyboard.list_keyboards()
|
||||
all_keyboards = list_keyboards()
|
||||
|
||||
if keyboard == 'all':
|
||||
if keymap == 'all':
|
||||
|
@ -90,30 +91,29 @@ def _expand_keymap_target(keyboard: str, keymap: str, all_keyboards: List[str] =
|
|||
return [(kb, keymap) for kb in filter(lambda e: e is not None, parallel_map(keyboard_filter, all_keyboards))]
|
||||
else:
|
||||
if keymap == 'all':
|
||||
keyboard = qmk.keyboard.resolve_keyboard(keyboard)
|
||||
cli.log.info(f'Retrieving list of keymaps for keyboard "{keyboard}"...')
|
||||
return _all_keymaps(keyboard)
|
||||
else:
|
||||
return [(qmk.keyboard.resolve_keyboard(keyboard), keymap)]
|
||||
return [(keyboard, keymap)]
|
||||
|
||||
|
||||
def expand_keymap_targets(targets: List[Tuple[str, str]]) -> List[Tuple[str, str]]:
|
||||
"""Expand a list of (keyboard, keymap) tuples inclusive of 'all', into a list of explicit (keyboard, keymap) tuples.
|
||||
"""
|
||||
overall_targets = []
|
||||
all_keyboards = qmk.keyboard.list_keyboards()
|
||||
all_keyboards = list_keyboards()
|
||||
for target in targets:
|
||||
overall_targets.extend(_expand_keymap_target(target[0], target[1], all_keyboards))
|
||||
return list(sorted(set(overall_targets)))
|
||||
|
||||
|
||||
def _filter_keymap_targets(target_list: List[Tuple[str, str]], filters: List[str] = [], print_vals: List[str] = []) -> List[Tuple[str, str, List[Tuple[str, str]]]]:
|
||||
def _filter_keymap_targets(target_list: List[Tuple[str, str]], filters: List[str] = []) -> List[BuildTarget]:
|
||||
"""Filter a list of (keyboard, keymap) tuples based on the supplied filters.
|
||||
|
||||
Optionally includes the values of the queried info.json keys.
|
||||
"""
|
||||
if len(filters) == 0 and len(print_vals) == 0:
|
||||
targets = [(kb, km, {}) for kb, km in target_list]
|
||||
if len(filters) == 0:
|
||||
targets = [KeyboardKeymapBuildTarget(keyboard=kb, keymap=km) for kb, km in target_list]
|
||||
else:
|
||||
cli.log.info('Parsing data for all matching keyboard/keymap combinations...')
|
||||
valid_keymaps = [(e[0], e[1], dotty(e[2])) for e in parallel_map(_load_keymap_info, target_list)]
|
||||
|
@ -172,18 +172,18 @@ def _filter_keymap_targets(target_list: List[Tuple[str, str]], filters: List[str
|
|||
cli.log.warning(f'Unrecognized filter expression: {filter_expr}')
|
||||
continue
|
||||
|
||||
targets = [(e[0], e[1], [(p, e[2].get(p)) for p in print_vals]) for e in valid_keymaps]
|
||||
targets = [KeyboardKeymapBuildTarget(keyboard=e[0], keymap=e[1], json=e[2]) for e in valid_keymaps]
|
||||
|
||||
return targets
|
||||
|
||||
|
||||
def search_keymap_targets(targets: List[Tuple[str, str]] = [('all', 'default')], filters: List[str] = [], print_vals: List[str] = []) -> List[Tuple[str, str, List[Tuple[str, str]]]]:
|
||||
def search_keymap_targets(targets: List[Tuple[str, str]] = [('all', 'default')], filters: List[str] = []) -> List[BuildTarget]:
|
||||
"""Search for build targets matching the supplied criteria.
|
||||
"""
|
||||
return list(sorted(_filter_keymap_targets(expand_keymap_targets(targets), filters, print_vals), key=lambda e: (e[0], e[1])))
|
||||
return _filter_keymap_targets(expand_keymap_targets(targets), filters)
|
||||
|
||||
|
||||
def search_make_targets(targets: List[str], filters: List[str] = [], print_vals: List[str] = []) -> List[Tuple[str, str, List[Tuple[str, str]]]]:
|
||||
def search_make_targets(targets: List[str], filters: List[str] = []) -> List[BuildTarget]:
|
||||
"""Search for build targets matching the supplied criteria.
|
||||
"""
|
||||
return list(sorted(_filter_keymap_targets(expand_make_targets(targets), filters, print_vals), key=lambda e: (e[0], e[1])))
|
||||
return _filter_keymap_targets(expand_make_targets(targets), filters)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue