Add support for qmk_configurator style aliases (#11954)
* Add support for qmk_configurator style aliases * add the keyboard aliases to the api data * add support for a keyboard metadata file * make flake8 happypython_optimizations
parent
723d9af04d
commit
299008be36
@ -0,0 +1,443 @@ |
|||||||
|
{ |
||||||
|
# Format for each entry: |
||||||
|
# <alias>: { |
||||||
|
# target: <keyboard_folder>, |
||||||
|
# layouts: { |
||||||
|
# <layout_alias>: <layout_target> |
||||||
|
# } |
||||||
|
# } |
||||||
|
# |
||||||
|
# Both target and layouts are optional. |
||||||
|
'2_milk': { |
||||||
|
target: 'spaceman/2_milk' |
||||||
|
}, |
||||||
|
'aeboards/ext65': { |
||||||
|
target: 'aeboards/ext65/rev1' |
||||||
|
}, |
||||||
|
'ai03/equinox': { |
||||||
|
target: 'ai03/equinox/rev1' |
||||||
|
}, |
||||||
|
aleth42: { |
||||||
|
target: 'aleth42/rev1' |
||||||
|
}, |
||||||
|
alice: { |
||||||
|
target: 'tgr/alice' |
||||||
|
}, |
||||||
|
angel17: { |
||||||
|
target: 'angel17/alpha' |
||||||
|
}, |
||||||
|
angel64: { |
||||||
|
target: 'angel64/alpha' |
||||||
|
}, |
||||||
|
at101_blackheart: { |
||||||
|
target: 'at101_bh' |
||||||
|
}, |
||||||
|
'atom47/rev2': { |
||||||
|
target: 'maartenwut/atom47/rev2' |
||||||
|
}, |
||||||
|
'atom47/rev3': { |
||||||
|
target: 'maartenwut/atom47/rev3' |
||||||
|
}, |
||||||
|
bear_face: { |
||||||
|
target: 'bear_face/v1' |
||||||
|
}, |
||||||
|
'bpiphany/pegasushoof': { |
||||||
|
target: 'bpiphany/pegasushoof/2013' |
||||||
|
}, |
||||||
|
chavdai40: { |
||||||
|
target: 'chavdai40/rev1' |
||||||
|
}, |
||||||
|
'candybar/lefty': { |
||||||
|
target: 'tkc/candybar/lefty' |
||||||
|
}, |
||||||
|
'candybar/righty': { |
||||||
|
target: 'tkc/candybar/righty' |
||||||
|
}, |
||||||
|
canoe: { |
||||||
|
target: 'percent/canoe' |
||||||
|
}, |
||||||
|
'cmm_studio/saka68': { |
||||||
|
target: 'cmm_studio/saka68/solder' |
||||||
|
}, |
||||||
|
'crkbd/rev1': { |
||||||
|
target: 'crkbd/rev1/legacy' |
||||||
|
}, |
||||||
|
'doro67/multi': { |
||||||
|
layouts: { |
||||||
|
LAYOUT_ansi: 'LAYOUT_65_ansi_blocker' |
||||||
|
} |
||||||
|
}, |
||||||
|
'doro67/regular': { |
||||||
|
layouts: { |
||||||
|
LAYOUT: 'LAYOUT_65_ansi_blocker' |
||||||
|
} |
||||||
|
}, |
||||||
|
'doro67/rgb': { |
||||||
|
layouts: { |
||||||
|
LAYOUT: 'LAYOUT_65_ansi_blocker' |
||||||
|
} |
||||||
|
}, |
||||||
|
drakon: { |
||||||
|
target: 'jagdpietr/drakon' |
||||||
|
}, |
||||||
|
'dztech/dz60rgb': { |
||||||
|
target: 'dztech/dz60rgb/v1' |
||||||
|
}, |
||||||
|
'dztech/dz60rgb_ansi': { |
||||||
|
target: 'dztech/dz60rgb_ansi/v1' |
||||||
|
}, |
||||||
|
'dztech/dz60rgb_wkl': { |
||||||
|
target: 'dztech/dz60rgb_wkl/v1' |
||||||
|
}, |
||||||
|
'dztech/dz65rgb': { |
||||||
|
target: 'dztech/dz65rgb/v1' |
||||||
|
}, |
||||||
|
eek: { |
||||||
|
target: 'eek/silk_down' |
||||||
|
}, |
||||||
|
ergoinu: { |
||||||
|
target: 'dm9records/ergoinu' |
||||||
|
}, |
||||||
|
'exclusive/e85': { |
||||||
|
target: 'exclusive/e85/hotswap' |
||||||
|
}, |
||||||
|
gh60: { |
||||||
|
target: 'gh60/revc' |
||||||
|
}, |
||||||
|
'handwired/ferris': { |
||||||
|
target: 'ferris/0_1' |
||||||
|
}, |
||||||
|
'helix/pico/sc/back': { |
||||||
|
target: 'helix/pico/sc' |
||||||
|
}, |
||||||
|
'helix/pico/sc/under': { |
||||||
|
target: 'helix/pico/sc' |
||||||
|
}, |
||||||
|
'helix/rev2/back/oled': { |
||||||
|
target: 'helix/rev2/back' |
||||||
|
}, |
||||||
|
'helix/rev2/oled': { |
||||||
|
target: 'helix/rev2' |
||||||
|
}, |
||||||
|
'helix/rev2/oled/back': { |
||||||
|
target: 'helix/rev2/back' |
||||||
|
}, |
||||||
|
'helix/rev2/oled/under': { |
||||||
|
target: 'helix/rev2/under' |
||||||
|
}, |
||||||
|
'helix/rev2/sc/back': { |
||||||
|
target: 'helix/rev2/sc' |
||||||
|
}, |
||||||
|
'helix/rev2/sc/oled': { |
||||||
|
target: 'helix/rev2/sc' |
||||||
|
}, |
||||||
|
'helix/rev2/sc/oledback': { |
||||||
|
target: 'helix/rev2/sc' |
||||||
|
}, |
||||||
|
'helix/rev2/sc/oledunder': { |
||||||
|
target: 'helix/rev2/sc' |
||||||
|
}, |
||||||
|
'helix/rev2/sc/under': { |
||||||
|
target: 'helix/rev2/sc' |
||||||
|
}, |
||||||
|
'helix/rev2/under': { |
||||||
|
target: 'helix/rev2/sc' |
||||||
|
}, |
||||||
|
'helix/rev2/under/oled': { |
||||||
|
target: 'helix/rev2/under' |
||||||
|
}, |
||||||
|
id80: { |
||||||
|
target: 'id80/ansi' |
||||||
|
}, |
||||||
|
idb_60: { |
||||||
|
target: 'idb/idb_60', |
||||||
|
layouts: { |
||||||
|
LAYOUT: 'LAYOUT_all' |
||||||
|
} |
||||||
|
}, |
||||||
|
jones: { |
||||||
|
target: 'jones/v03_1' |
||||||
|
}, |
||||||
|
katana60: { |
||||||
|
target: 'rominronin/katana60/rev1' |
||||||
|
}, |
||||||
|
'kbdfans/kbd67mkiirgb': { |
||||||
|
target: 'kbdfans/kbd67/mkiirgb', |
||||||
|
layouts: { |
||||||
|
LAYOUT: 'LAYOUT_65_ansi_blocker' |
||||||
|
} |
||||||
|
}, |
||||||
|
'kbdfans/kbd67/mkiirgb': { |
||||||
|
target: 'kbdfans/kbd67/mkiirgb/v1' |
||||||
|
}, |
||||||
|
'keebio/dsp40': { |
||||||
|
target: 'keebio/dsp40/rev1' |
||||||
|
}, |
||||||
|
'keycapsss/plaid_pad': { |
||||||
|
target: 'keycapsss/plaid_pad/rev1' |
||||||
|
}, |
||||||
|
kudox: { |
||||||
|
target: 'kudox/rev1' |
||||||
|
}, |
||||||
|
'lfkeyboards/lfk78': { |
||||||
|
target: 'lfkeyboards/lfk78/revj' |
||||||
|
}, |
||||||
|
'lfkeyboards/smk65': { |
||||||
|
target: 'lfkeyboards/smk65/revb' |
||||||
|
}, |
||||||
|
'maartenwut/atom47/rev2': { |
||||||
|
target: 'evyd13/atom47/rev2' |
||||||
|
}, |
||||||
|
'maartenwut/atom47/rev3': { |
||||||
|
target: 'evyd13/atom47/rev3' |
||||||
|
}, |
||||||
|
'maartenwut/eon40': { |
||||||
|
target: 'evyd13/eon40' |
||||||
|
}, |
||||||
|
'maartenwut/eon65': { |
||||||
|
target: 'evyd13/eon65' |
||||||
|
}, |
||||||
|
'maartenwut/eon75': { |
||||||
|
target: 'evyd13/eon75' |
||||||
|
}, |
||||||
|
'maartenwut/eon87': { |
||||||
|
target: 'evyd13/eon87' |
||||||
|
}, |
||||||
|
'maartenwut/eon95': { |
||||||
|
target: 'evyd13/eon95' |
||||||
|
}, |
||||||
|
'maartenwut/gh80_1800': { |
||||||
|
target: 'evyd13/gh80_1800' |
||||||
|
}, |
||||||
|
'maartenwut/gh80_3700': { |
||||||
|
target: 'evyd13/gh80_3700' |
||||||
|
}, |
||||||
|
'maartenwut/minitomic': { |
||||||
|
target: 'evyd13/minitomic' |
||||||
|
}, |
||||||
|
'maartenwut/mx5160': { |
||||||
|
target: 'evyd13/mx5160' |
||||||
|
}, |
||||||
|
'maartenwut/nt660': { |
||||||
|
target: 'evyd13/nt660' |
||||||
|
}, |
||||||
|
'maartenwut/omrontkl': { |
||||||
|
target: 'evyd13/omrontkl' |
||||||
|
}, |
||||||
|
'maartenwut/plain60': { |
||||||
|
target: 'evyd13/plain60' |
||||||
|
}, |
||||||
|
'maartenwut/pockettype': { |
||||||
|
target: 'evyd13/pockettype' |
||||||
|
}, |
||||||
|
'maartenwut/quackfire': { |
||||||
|
target: 'evyd13/quackfire' |
||||||
|
}, |
||||||
|
'maartenwut/solheim68': { |
||||||
|
target: 'evyd13/solheim68' |
||||||
|
}, |
||||||
|
'maartenwut/ta65': { |
||||||
|
target: 'evyd13/ta65' |
||||||
|
}, |
||||||
|
'maartenwut/wasdat': { |
||||||
|
target: 'evyd13/wasdat' |
||||||
|
}, |
||||||
|
'maartenwut/wasdat_code': { |
||||||
|
target: 'evyd13/wasdat_code' |
||||||
|
}, |
||||||
|
'maartenwut/wonderland': { |
||||||
|
target: 'evyd13/wonderland' |
||||||
|
}, |
||||||
|
'mechlovin/hannah910': { |
||||||
|
target: 'mechlovin/hannah910/rev1' |
||||||
|
}, |
||||||
|
'mechlovin/adelais/rgb_led': { |
||||||
|
target: 'mechlovin/adelais/rgb_led/rev1' |
||||||
|
}, |
||||||
|
'mechlovin/adelais/standard_led': { |
||||||
|
target: 'mechlovin/adelais/standard_led/rev2' |
||||||
|
}, |
||||||
|
'mechlovin/delphine': { |
||||||
|
target: 'mechlovin/delphine/mono_led' |
||||||
|
}, |
||||||
|
'mechlovin/hannah60rgb': { |
||||||
|
target: 'mechlovin/hannah60rgb/rev1' |
||||||
|
}, |
||||||
|
'melgeek/z70ultra': { |
||||||
|
target: 'melgeek/z70ultra/rev1' |
||||||
|
}, |
||||||
|
'mechlovin/hannah65': { |
||||||
|
target: 'mechlovin/hannah65/rev1' |
||||||
|
}, |
||||||
|
model01: { |
||||||
|
target: 'keyboardio/model01' |
||||||
|
}, |
||||||
|
m0lly: { |
||||||
|
target: 'tkc/m0lly' |
||||||
|
}, |
||||||
|
'montsinger/rebound': { |
||||||
|
target: 'montsinger/rebound/rev1' |
||||||
|
}, |
||||||
|
nomu30: { |
||||||
|
target: 'nomu30/rev1' |
||||||
|
}, |
||||||
|
'noxary/268_2': { |
||||||
|
layouts: { |
||||||
|
LAYOUT: 'LAYOUT_65_ansi_blocker' |
||||||
|
} |
||||||
|
}, |
||||||
|
oddball: { |
||||||
|
target: 'oddball/v1' |
||||||
|
}, |
||||||
|
omnikey_blackheart: { |
||||||
|
target: 'omnikey_bh' |
||||||
|
}, |
||||||
|
'pabile/p20': { |
||||||
|
target: 'pabile/p20/ver1' |
||||||
|
}, |
||||||
|
'pancake/feather': { |
||||||
|
target: 'spaceman/pancake/feather' |
||||||
|
}, |
||||||
|
'pancake/promicro': { |
||||||
|
target: 'spaceman/pancake/promicro' |
||||||
|
}, |
||||||
|
'percent/canoe': { |
||||||
|
layouts: { |
||||||
|
LAYOUT_iso: 'LAYOUT_65_iso_blocker' |
||||||
|
} |
||||||
|
}, |
||||||
|
plaid: { |
||||||
|
target: 'dm9records/plaid' |
||||||
|
}, |
||||||
|
plain60: { |
||||||
|
target: 'maartenwut/plain60' |
||||||
|
}, |
||||||
|
'ploopyco/trackball': { |
||||||
|
target: 'ploopyco/trackball/rev1_005' |
||||||
|
}, |
||||||
|
polilla: { |
||||||
|
target: 'polilla/rev1' |
||||||
|
}, |
||||||
|
'preonic/rev1': { |
||||||
|
layouts: { |
||||||
|
LAYOUT_preonic_grid: 'LAYOUT_ortho_5x12' |
||||||
|
} |
||||||
|
}, |
||||||
|
'preonic/rev2': { |
||||||
|
layouts: { |
||||||
|
LAYOUT_preonic_grid: 'LAYOUT_ortho_5x12' |
||||||
|
} |
||||||
|
}, |
||||||
|
'preonic/rev3': { |
||||||
|
layouts: { |
||||||
|
LAYOUT_preonic_grid: 'LAYOUT_ortho_5x12' |
||||||
|
} |
||||||
|
}, |
||||||
|
'primekb/prime_l': { |
||||||
|
target: 'primekb/prime_l/v1' |
||||||
|
}, |
||||||
|
'primekb/prime_l_v2': { |
||||||
|
target: 'primekb/prime_l/v2' |
||||||
|
}, |
||||||
|
'projectkb/alice': { |
||||||
|
target: 'projectkb/alice/rev1' |
||||||
|
}, |
||||||
|
'rama/koyu': { |
||||||
|
target: 'wilba_tech/rama_works_koyu' |
||||||
|
}, |
||||||
|
'rama/m6_a': { |
||||||
|
target: 'wilba_tech/rama_works_m6_a' |
||||||
|
}, |
||||||
|
'rama/m6_b': { |
||||||
|
target: 'wilba_tech/rama_works_m6_b' |
||||||
|
}, |
||||||
|
'rama/m10_b': { |
||||||
|
target: 'wilba_tech/rama_works_m10_b' |
||||||
|
}, |
||||||
|
'rama/m60_a': { |
||||||
|
target: 'wilba_tech/rama_works_m60_a' |
||||||
|
}, |
||||||
|
'rama/u80_a': { |
||||||
|
target: 'wilba_tech/rama_works_u80_a' |
||||||
|
}, |
||||||
|
'ramonimbao/herringbone': { |
||||||
|
target: 'ramonimbao/herringbone/v1' |
||||||
|
}, |
||||||
|
'rgbkb/pan': { |
||||||
|
target: 'rgbkb/pan/rev1/32a' |
||||||
|
}, |
||||||
|
'rgbkb/pan/rev1': { |
||||||
|
target: 'rgbkb/pan/rev1/32a' |
||||||
|
}, |
||||||
|
romac: { |
||||||
|
target: 'kingly_keys/romac' |
||||||
|
}, |
||||||
|
ropro: { |
||||||
|
target: 'kingly_keys/ropro' |
||||||
|
}, |
||||||
|
satan: { |
||||||
|
target: 'gh60/satan' |
||||||
|
}, |
||||||
|
skog: { |
||||||
|
target: 'percent/skog' |
||||||
|
}, |
||||||
|
speedo: { |
||||||
|
target: 'cozykeys/speedo/v2' |
||||||
|
}, |
||||||
|
stoutgat: { |
||||||
|
target: 'tkw/stoutgat/v1' |
||||||
|
}, |
||||||
|
suihankey: { |
||||||
|
target: 'suihankey/split/alpha' |
||||||
|
}, |
||||||
|
ta65: { |
||||||
|
target: 'maartenwut/ta65' |
||||||
|
}, |
||||||
|
tartan: { |
||||||
|
target: 'dm9records/tartan' |
||||||
|
}, |
||||||
|
tkc1800: { |
||||||
|
target: 'tkc/tkc1800' |
||||||
|
}, |
||||||
|
'tkw/stoutgat/v2': { |
||||||
|
target: 'tkw/stoutgat/v2/f411' |
||||||
|
}, |
||||||
|
underscore33: { |
||||||
|
target: 'underscore33/rev1' |
||||||
|
}, |
||||||
|
vinta: { |
||||||
|
layouts: { |
||||||
|
LAYOUT_67_ansi: 'LAYOUT_65_ansi_blocker' |
||||||
|
} |
||||||
|
}, |
||||||
|
wasdat: { |
||||||
|
target: 'maartenwut/wasdat' |
||||||
|
}, |
||||||
|
'westfoxtrot/cypher': { |
||||||
|
target: 'westfoxtrot/cypher/rev1' |
||||||
|
}, |
||||||
|
'whale/sk': { |
||||||
|
target: 'whale/sk/v3' |
||||||
|
}, |
||||||
|
'xelus/dawn60': { |
||||||
|
target: 'xelus/dawn60/rev1' |
||||||
|
}, |
||||||
|
'xelus/valor': { |
||||||
|
target: 'xelus/valor/rev1' |
||||||
|
}, |
||||||
|
yd60mq: { |
||||||
|
target: 'yd60mq/12led' |
||||||
|
}, |
||||||
|
ymd75: { |
||||||
|
target: 'ymd75/rev1' |
||||||
|
}, |
||||||
|
z150_blackheart: { |
||||||
|
target: 'z150_bh' |
||||||
|
}, |
||||||
|
zeal60: { |
||||||
|
target: 'wilba_tech/zeal60' |
||||||
|
}, |
||||||
|
zeal65: { |
||||||
|
target: 'wilba_tech/zeal65' |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,68 @@ |
|||||||
|
"""Functions that help us generate and use info.json files. |
||||||
|
""" |
||||||
|
import json |
||||||
|
from collections.abc import Mapping |
||||||
|
from pathlib import Path |
||||||
|
|
||||||
|
import hjson |
||||||
|
import jsonschema |
||||||
|
from milc import cli |
||||||
|
|
||||||
|
|
||||||
|
def json_load(json_file): |
||||||
|
"""Load a json file from disk. |
||||||
|
|
||||||
|
Note: file must be a Path object. |
||||||
|
""" |
||||||
|
try: |
||||||
|
return hjson.load(json_file.open()) |
||||||
|
|
||||||
|
except json.decoder.JSONDecodeError as e: |
||||||
|
cli.log.error('Invalid JSON encountered attempting to load {fg_cyan}%s{fg_reset}:\n\t{fg_red}%s', json_file, e) |
||||||
|
exit(1) |
||||||
|
|
||||||
|
|
||||||
|
def load_jsonschema(schema_name): |
||||||
|
"""Read a jsonschema file from disk. |
||||||
|
|
||||||
|
FIXME(skullydazed/anyone): Refactor to make this a public function. |
||||||
|
""" |
||||||
|
schema_path = Path(f'data/schemas/{schema_name}.jsonschema') |
||||||
|
|
||||||
|
if not schema_path.exists(): |
||||||
|
schema_path = Path('data/schemas/false.jsonschema') |
||||||
|
|
||||||
|
return json_load(schema_path) |
||||||
|
|
||||||
|
|
||||||
|
def keyboard_validate(data): |
||||||
|
"""Validates data against the keyboard jsonschema. |
||||||
|
""" |
||||||
|
schema = load_jsonschema('keyboard') |
||||||
|
validator = jsonschema.Draft7Validator(schema).validate |
||||||
|
|
||||||
|
return validator(data) |
||||||
|
|
||||||
|
|
||||||
|
def keyboard_api_validate(data): |
||||||
|
"""Validates data against the api_keyboard jsonschema. |
||||||
|
""" |
||||||
|
base = load_jsonschema('keyboard') |
||||||
|
relative = load_jsonschema('api_keyboard') |
||||||
|
resolver = jsonschema.RefResolver.from_schema(base) |
||||||
|
validator = jsonschema.Draft7Validator(relative, resolver=resolver).validate |
||||||
|
|
||||||
|
return validator(data) |
||||||
|
|
||||||
|
|
||||||
|
def deep_update(origdict, newdict): |
||||||
|
"""Update a dictionary in place, recursing to do a deep copy. |
||||||
|
""" |
||||||
|
for key, value in newdict.items(): |
||||||
|
if isinstance(value, Mapping): |
||||||
|
origdict[key] = deep_update(origdict.get(key, {}), value) |
||||||
|
|
||||||
|
else: |
||||||
|
origdict[key] = value |
||||||
|
|
||||||
|
return origdict |
Loading…
Reference in new issue