~ruther/qmk_firmware

17ec1650fd4fd27b3bf409e3493faf11c8d421e8 — Joel Challis 3 years ago 7b3ee1d
Additional schema fixes (#17414)

M data/schemas/definitions.jsonschema => data/schemas/definitions.jsonschema +16 -23
@@ 1,5 1,5 @@
{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "$schema": "https://json-schema.org/draft/2020-12/schema#",
    "$id": "qmk.definitions.v1",
    "title": "Common definitions used across QMK's jsonschemas.",
    "type": "object",


@@ 65,8 65,7 @@
        ]
    },
    "key_unit": {
        "type": "number",
        "min": 0.25
        "type": "number"
    },
    "keyboard": {
        "oneOf": [


@@ 103,8 102,7 @@
                "pattern": "^LINE_PIN\\d{1,2}$"
            },
            {
                "type": "number",
                "multipleOf": 1
                "type": "integer"
            },
            {
                "type": "null"


@@ 115,14 113,12 @@
        "type": "number"
    },
    "signed_int": {
        "type": "number",
        "multipleOf": 1
        "type": "integer"
    },
    "signed_int_8": {
        "type": "number",
        "min": -127,
        "max": 127,
        "multipleOf": 1
        "type": "integer",
        "minimum": -127,
        "maximum": 127
    },
    "string_array": {
        "type": "array",


@@ 138,23 134,20 @@
    },
    "unsigned_decimal": {
        "type": "number",
        "min": 0
        "minimum": 0
    },
    "unsigned_int": {
        "type": "number",
        "min": 0,
        "multipleOf": 1
        "type": "integer",
        "minimum": 0
    },
    "unsigned_int_8": {
        "type": "number",
        "min": 0,
        "max": 255,
        "multipleOf": 1
        "type": "integer",
        "minimum": 0,
        "maximum": 255
    },
    "bit": {
        "type": "number",
        "min": 0,
        "max": 1,
        "multipleOf": 1
        "type": "integer",
        "minimum": 0,
        "maximum": 1
    }
}

M data/schemas/keyboard.jsonschema => data/schemas/keyboard.jsonschema +22 -29
@@ 1,5 1,5 @@
{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "$schema": "https://json-schema.org/draft/2020-12/schema#",
    "$id": "qmk.keyboard.v1",
    "title": "Keyboard Information",
    "type": "object",


@@ 40,10 40,9 @@
                "breathing": {"type": "boolean"},
                "breathing_period": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},
                "levels": {
                    "type": "number",
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 31,
                    "multipleOf": 1
                    "maximum": 31
                },
                "pin": {"$ref": "qmk.definitions.v1#/mcu_pin"},
                "on_state": {"$ref": "qmk.definitions.v1#/bit"}


@@ 158,12 157,11 @@
                                    "minItems": 2,
                                    "maxItems": 2,
                                    "items": {
                                        "type": "number",
                                        "minimum": 0,
                                        "multipleOf": 1
                                        "type": "integer",
                                        "minimum": 0
                                    }
                                },
                                "r": {"$ref": "qmk.definitions.v1#/unsigned_decimal"},
                                "r": {"$ref": "qmk.definitions.v1#/signed_decimal"},
                                "rx": {"$ref": "qmk.definitions.v1#/unsigned_decimal"},
                                "ry": {"$ref": "qmk.definitions.v1#/unsigned_decimal"},
                                "h": {"$ref": "qmk.definitions.v1#/key_unit"},


@@ 234,14 232,13 @@
                                "minItems": 2,
                                "maxItems": 2,
                                "items": {
                                    "type": "number",
                                    "minimum": 0,
                                    "multipleOf": 1
                                    "type": "integer",
                                    "minimum": 0
                                }
                            },
                            "x": {"$ref": "qmk.definitions.v1#/key_unit"},
                            "y": {"$ref": "qmk.definitions.v1#/key_unit"},
                            "flags": {"$ref": "qmk.definitions.v1#/unsigned_decimal"}
                            "flags": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}
                        }
                    }
                }


@@ 262,14 259,13 @@
                                "minItems": 2,
                                "maxItems": 2,
                                "items": {
                                    "type": "number",
                                    "minimum": 0,
                                    "multipleOf": 1
                                    "type": "integer",
                                    "minimum": 0
                                }
                            },
                            "x": {"$ref": "qmk.definitions.v1#/key_unit"},
                            "y": {"$ref": "qmk.definitions.v1#/key_unit"},
                            "flags": {"$ref": "qmk.definitions.v1#/unsigned_decimal"}
                            "flags": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}
                        }
                    }
                }


@@ 294,10 290,9 @@
                        "blink": {"type": "boolean"},
                        "enabled": {"type": "boolean"},
                        "max": {
                            "type": "number",
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 32,
                            "multipleOf": 1
                            "maximum": 32
                        },
                        "override_rgb": {"type": "boolean"}
                    }


@@ 333,9 328,8 @@
                        "minItems": 2,
                        "maxItems": 2,
                        "items": {
                            "type": "number",
                            "minimum": 0,
                            "multipleOf": 1
                            "type": "integer",
                            "minimum": 0
                        }
                    }
                }


@@ 375,10 369,9 @@
                },
                "soft_serial_pin": {"$ref": "qmk.definitions.v1#/mcu_pin"},
                "soft_serial_speed": {
                    "type": "number",
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 5,
                    "multipleOf": 1
                    "maximum": 5
                },
                "transport": {
                    "type": "object",


@@ 432,7 425,7 @@
                "force_nkro": {"type": "boolean"},
                "pid": {"$ref": "qmk.definitions.v1#/hex_number_4d"},
                "vid": {"$ref": "qmk.definitions.v1#/hex_number_4d"},
                "max_power": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},
                "max_power": {"$ref": "qmk.definitions.v1#/unsigned_int"},
                "no_startup_check": {"type": "boolean"},
                "polling_interval": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},
                "shared_endpoint": {


@@ 443,7 436,7 @@
                        "mouse": {"type": "boolean"}
                    }
                },
                "suspend_wakeup_delay": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},
                "suspend_wakeup_delay": {"$ref": "qmk.definitions.v1#/unsigned_int"},
                "wait_for": {"type": "boolean"},
            }
        },


@@ 452,8 445,8 @@
            "additionalProperties": false,
            "properties": {
                "keys_per_scan": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},
                "tap_keycode_delay": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},
                "tap_capslock_delay": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},
                "tap_keycode_delay": {"$ref": "qmk.definitions.v1#/unsigned_int"},
                "tap_capslock_delay": {"$ref": "qmk.definitions.v1#/unsigned_int"},
            }
        },
        "qmk_lufa_bootloader": {

M data/schemas/keymap.jsonschema => data/schemas/keymap.jsonschema +2 -3
@@ 1,5 1,5 @@
{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "$schema": "https://json-schema.org/draft/2020-12/schema#",
    "$id": "qmk.keymap.v1",
    "title": "Keymap Information",
    "type": "object",


@@ 50,8 50,7 @@
        },
        "config": {"$ref": "qmk.keyboard.v1"},
        "notes": {
            "type": "string",
            "description": "asdf"
            "type": "string"
        }
    },
    "required": [

M lib/python/qmk/cli/generate/info_json.py => lib/python/qmk/cli/generate/info_json.py +4 -4
@@ 5,7 5,7 @@ Compile an info.json for a particular keyboard and pretty-print it.
import json

from argcomplete.completers import FilesCompleter
from jsonschema import Draft7Validator, RefResolver, validators
from jsonschema import Draft202012Validator, RefResolver, validators
from milc import cli
from pathlib import Path



@@ 18,7 18,7 @@ from qmk.path import is_keyboard, normpath


def pruning_validator(validator_class):
    """Extends Draft7Validator to remove properties that aren't specified in the schema.
    """Extends Draft202012Validator to remove properties that aren't specified in the schema.
    """
    validate_properties = validator_class.VALIDATORS["properties"]



@@ 37,10 37,10 @@ def strip_info_json(kb_info_json):
    """Remove the API-only properties from the info.json.
    """
    schema_store = compile_schema_store()
    pruning_draft_7_validator = pruning_validator(Draft7Validator)
    pruning_draft_validator = pruning_validator(Draft202012Validator)
    schema = schema_store['qmk.keyboard.v1']
    resolver = RefResolver.from_schema(schema_store['qmk.keyboard.v1'], store=schema_store)
    validator = pruning_draft_7_validator(schema, resolver=resolver).validate
    validator = pruning_draft_validator(schema, resolver=resolver).validate

    return validator(kb_info_json)


M lib/python/qmk/json_schema.py => lib/python/qmk/json_schema.py +1 -5
@@ 68,11 68,7 @@ def create_validator(schema):
    schema_store = compile_schema_store()
    resolver = jsonschema.RefResolver.from_schema(schema_store[schema], store=schema_store)

    # TODO: Remove this after the jsonschema>=4 requirement had time to reach users
    try:
        return jsonschema.Draft202012Validator(schema_store[schema], resolver=resolver).validate
    except AttributeError:
        return jsonschema.Draft7Validator(schema_store[schema], resolver=resolver).validate
    return jsonschema.Draft202012Validator(schema_store[schema], resolver=resolver).validate


def validate(data, schema):