~ruther/qmk_firmware

ref: 50844a8e67c37329d5a08f1f35cd57bb7c7a8c24 qmk_firmware/lib/python/qmk/cli/kle2json.py -rwxr-xr-x 2.2 KiB
50844a8e — precondition Fix typos: key-modifer→key-modifier and interacton→interaction (#22464) 1 year, 6 months ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
"""Convert raw KLE to JSON
"""
import json
import os
from pathlib import Path

from argcomplete.completers import FilesCompleter
from milc import cli
from kle2xy import KLE2xy

from qmk.converter import kle2qmk
from qmk.json_encoders import InfoJSONEncoder


@cli.argument('filename', completer=FilesCompleter('.json'), help='The KLE raw txt to convert')
@cli.argument('-f', '--force', action='store_true', help='Flag to overwrite current info.json')
@cli.subcommand('Convert a KLE layout to a Configurator JSON', hidden=False if cli.config.user.developer else True)
def kle2json(cli):
    """Convert a KLE layout to QMK's layout format.
    """  # If filename is a path
    if cli.args.filename.startswith("/") or cli.args.filename.startswith("./"):
        file_path = Path(cli.args.filename)
    # Otherwise assume it is a file name
    else:
        file_path = Path(os.environ['ORIG_CWD'], cli.args.filename)
    # Check for valid file_path for more graceful failure
    if not file_path.exists():
        cli.log.error('File {fg_cyan}%s{style_reset_all} was not found.', file_path)
        return False
    out_path = file_path.parent
    raw_code = file_path.read_text(encoding='utf-8')
    # Check if info.json exists, allow overwrite with force
    if Path(out_path, "info.json").exists() and not cli.args.force:
        cli.log.error('File {fg_cyan}%s/info.json{style_reset_all} already exists, use -f or --force to overwrite.', out_path)
        return False
    try:
        # Convert KLE raw to x/y coordinates (using kle2xy package from skullydazed)
        kle = KLE2xy(raw_code)
    except Exception as e:
        cli.log.error('Could not parse KLE raw data: %s', raw_code)
        cli.log.exception(e)
        return False
    keyboard = {
        'keyboard_name': kle.name,
        'url': '',
        'maintainer': 'qmk',
        'layouts': {
            'LAYOUT': {
                'layout': kle2qmk(kle)
            }
        },
    }

    # Write our info.json
    keyboard = json.dumps(keyboard, indent=4, separators=(', ', ': '), sort_keys=False, cls=InfoJSONEncoder)
    info_json_file = out_path / 'info.json'

    info_json_file.write_text(keyboard)
    cli.log.info('Wrote out {fg_cyan}%s/info.json', out_path)
Do not follow this link