mirror of
				https://github.com/mfulz/qmk_firmware.git
				synced 2025-11-04 07:12:33 +01:00 
			
		
		
		
	Fix CLI community detection (#19562)
This commit is contained in:
		
							parent
							
								
									f4a25bcfaf
								
							
						
					
					
						commit
						20474ae232
					
				@ -10,6 +10,7 @@ from qmk.datetime import current_datetime
 | 
				
			|||||||
from qmk.info import info_json
 | 
					from qmk.info import info_json
 | 
				
			||||||
from qmk.json_encoders import InfoJSONEncoder
 | 
					from qmk.json_encoders import InfoJSONEncoder
 | 
				
			||||||
from qmk.json_schema import json_load
 | 
					from qmk.json_schema import json_load
 | 
				
			||||||
 | 
					from qmk.keymap import list_keymaps
 | 
				
			||||||
from qmk.keyboard import find_readme, list_keyboards
 | 
					from qmk.keyboard import find_readme, list_keyboards
 | 
				
			||||||
from qmk.keycodes import load_spec, list_versions, list_languages
 | 
					from qmk.keycodes import load_spec, list_versions, list_languages
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -111,6 +112,11 @@ def generate_api(cli):
 | 
				
			|||||||
    # Generate and write keyboard specific JSON files
 | 
					    # Generate and write keyboard specific JSON files
 | 
				
			||||||
    for keyboard_name in keyboard_list:
 | 
					    for keyboard_name in keyboard_list:
 | 
				
			||||||
        kb_all[keyboard_name] = info_json(keyboard_name)
 | 
					        kb_all[keyboard_name] = info_json(keyboard_name)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Populate the list of JSON keymaps
 | 
				
			||||||
 | 
					        for keymap in list_keymaps(keyboard_name, c=False, fullpath=True):
 | 
				
			||||||
 | 
					            kb_all[keyboard_name]['keymaps'][keymap.name] = {'url': f'https://raw.githubusercontent.com/qmk/qmk_firmware/master/{keymap}/keymap.json'}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        keyboard_dir = v1_dir / 'keyboards' / keyboard_name
 | 
					        keyboard_dir = v1_dir / 'keyboards' / keyboard_name
 | 
				
			||||||
        keyboard_info = keyboard_dir / 'info.json'
 | 
					        keyboard_info = keyboard_dir / 'info.json'
 | 
				
			||||||
        keyboard_readme = keyboard_dir / 'readme.md'
 | 
					        keyboard_readme = keyboard_dir / 'readme.md'
 | 
				
			||||||
 | 
				
			|||||||
@ -10,7 +10,6 @@ from qmk.constants import CHIBIOS_PROCESSORS, LUFA_PROCESSORS, VUSB_PROCESSORS
 | 
				
			|||||||
from qmk.c_parse import find_layouts, parse_config_h_file, find_led_config
 | 
					from qmk.c_parse import find_layouts, parse_config_h_file, find_led_config
 | 
				
			||||||
from qmk.json_schema import deep_update, json_load, validate
 | 
					from qmk.json_schema import deep_update, json_load, validate
 | 
				
			||||||
from qmk.keyboard import config_h, rules_mk
 | 
					from qmk.keyboard import config_h, rules_mk
 | 
				
			||||||
from qmk.keymap import list_keymaps, locate_keymap
 | 
					 | 
				
			||||||
from qmk.commands import parse_configurator_json
 | 
					from qmk.commands import parse_configurator_json
 | 
				
			||||||
from qmk.makefile import parse_rules_mk_file
 | 
					from qmk.makefile import parse_rules_mk_file
 | 
				
			||||||
from qmk.math import compute
 | 
					from qmk.math import compute
 | 
				
			||||||
@ -99,10 +98,6 @@ def info_json(keyboard):
 | 
				
			|||||||
        'maintainer': 'qmk',
 | 
					        'maintainer': 'qmk',
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Populate the list of JSON keymaps
 | 
					 | 
				
			||||||
    for keymap in list_keymaps(keyboard, c=False, fullpath=True):
 | 
					 | 
				
			||||||
        info_data['keymaps'][keymap.name] = {'url': f'https://raw.githubusercontent.com/qmk/qmk_firmware/master/{keymap}/keymap.json'}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Populate layout data
 | 
					    # Populate layout data
 | 
				
			||||||
    layouts, aliases = _search_keyboard_h(keyboard)
 | 
					    layouts, aliases = _search_keyboard_h(keyboard)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -872,6 +867,9 @@ def find_info_json(keyboard):
 | 
				
			|||||||
def keymap_json_config(keyboard, keymap):
 | 
					def keymap_json_config(keyboard, keymap):
 | 
				
			||||||
    """Extract keymap level config
 | 
					    """Extract keymap level config
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
 | 
					    # TODO: resolve keymap.py and info.py circular dependencies
 | 
				
			||||||
 | 
					    from qmk.keymap import locate_keymap
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    keymap_folder = locate_keymap(keyboard, keymap).parent
 | 
					    keymap_folder = locate_keymap(keyboard, keymap).parent
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    km_info_json = parse_configurator_json(keymap_folder / 'keymap.json')
 | 
					    km_info_json = parse_configurator_json(keymap_folder / 'keymap.json')
 | 
				
			||||||
@ -881,6 +879,9 @@ def keymap_json_config(keyboard, keymap):
 | 
				
			|||||||
def keymap_json(keyboard, keymap):
 | 
					def keymap_json(keyboard, keymap):
 | 
				
			||||||
    """Generate the info.json data for a specific keymap.
 | 
					    """Generate the info.json data for a specific keymap.
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
 | 
					    # TODO: resolve keymap.py and info.py circular dependencies
 | 
				
			||||||
 | 
					    from qmk.keymap import locate_keymap
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    keymap_folder = locate_keymap(keyboard, keymap).parent
 | 
					    keymap_folder = locate_keymap(keyboard, keymap).parent
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Files to scan
 | 
					    # Files to scan
 | 
				
			||||||
 | 
				
			|||||||
@ -12,8 +12,9 @@ from pygments.token import Token
 | 
				
			|||||||
from pygments import lex
 | 
					from pygments import lex
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import qmk.path
 | 
					import qmk.path
 | 
				
			||||||
from qmk.keyboard import find_keyboard_from_dir, rules_mk, keyboard_folder
 | 
					from qmk.keyboard import find_keyboard_from_dir, keyboard_folder
 | 
				
			||||||
from qmk.errors import CppError
 | 
					from qmk.errors import CppError
 | 
				
			||||||
 | 
					from qmk.info import info_json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# The `keymap.c` template to use when a keyboard doesn't have its own
 | 
					# The `keymap.c` template to use when a keyboard doesn't have its own
 | 
				
			||||||
DEFAULT_KEYMAP_C = """#include QMK_KEYBOARD_H
 | 
					DEFAULT_KEYMAP_C = """#include QMK_KEYBOARD_H
 | 
				
			||||||
@ -374,11 +375,11 @@ def locate_keymap(keyboard, keymap):
 | 
				
			|||||||
        return keymap_path
 | 
					        return keymap_path
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Check community layouts as a fallback
 | 
					    # Check community layouts as a fallback
 | 
				
			||||||
    rules = rules_mk(keyboard)
 | 
					    info = info_json(keyboard)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if "LAYOUTS" in rules:
 | 
					    for community_parent in Path('layouts').glob('*/'):
 | 
				
			||||||
        for layout in rules["LAYOUTS"].split():
 | 
					        for layout in info.get("community_layouts", []):
 | 
				
			||||||
            community_layout = Path('layouts/community') / layout / keymap
 | 
					            community_layout = community_parent / layout / keymap
 | 
				
			||||||
            if community_layout.exists():
 | 
					            if community_layout.exists():
 | 
				
			||||||
                if (community_layout / 'keymap.json').exists():
 | 
					                if (community_layout / 'keymap.json').exists():
 | 
				
			||||||
                    return community_layout / 'keymap.json'
 | 
					                    return community_layout / 'keymap.json'
 | 
				
			||||||
@ -408,11 +409,8 @@ def list_keymaps(keyboard, c=True, json=True, additional_files=None, fullpath=Fa
 | 
				
			|||||||
    Returns:
 | 
					    Returns:
 | 
				
			||||||
        a sorted list of valid keymap names.
 | 
					        a sorted list of valid keymap names.
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
    # parse all the rules.mk files for the keyboard
 | 
					 | 
				
			||||||
    rules = rules_mk(keyboard)
 | 
					 | 
				
			||||||
    names = set()
 | 
					    names = set()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if rules is not None:
 | 
					 | 
				
			||||||
    keyboards_dir = Path('keyboards')
 | 
					    keyboards_dir = Path('keyboards')
 | 
				
			||||||
    kb_path = keyboards_dir / keyboard
 | 
					    kb_path = keyboards_dir / keyboard
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -429,10 +427,12 @@ def list_keymaps(keyboard, c=True, json=True, additional_files=None, fullpath=Fa
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        kb_path = kb_path.parent
 | 
					        kb_path = kb_path.parent
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # if community layouts are supported, get them
 | 
					    # Check community layouts as a fallback
 | 
				
			||||||
        if "LAYOUTS" in rules:
 | 
					    info = info_json(keyboard)
 | 
				
			||||||
            for layout in rules["LAYOUTS"].split():
 | 
					
 | 
				
			||||||
                cl_path = Path('layouts/community') / layout
 | 
					    for community_parent in Path('layouts').glob('*/'):
 | 
				
			||||||
 | 
					        for layout in info.get("community_layouts", []):
 | 
				
			||||||
 | 
					            cl_path = community_parent / layout
 | 
				
			||||||
            if cl_path.is_dir():
 | 
					            if cl_path.is_dir():
 | 
				
			||||||
                for keymap in cl_path.iterdir():
 | 
					                for keymap in cl_path.iterdir():
 | 
				
			||||||
                    if is_keymap_dir(keymap, c, json, additional_files):
 | 
					                    if is_keymap_dir(keymap, c, json, additional_files):
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user