Browse Source

chore: make west scripts more pythonic and apply Black

xmkb
okke 3 years ago committed by Pete Johanson
parent
commit
f767abe136
  1. 3
      .vscode/settings.json
  2. 45
      app/scripts/west_commands/metadata.py
  3. 32
      app/scripts/west_commands/test.py

3
.vscode/settings.json vendored

@ -2,5 +2,6 @@
"files.associations": { "files.associations": {
"*.overlay": "dts", "*.overlay": "dts",
"*.keymap": "dts" "*.keymap": "dts"
} },
"python.formatting.provider": "black"
} }

45
app/scripts/west_commands/metadata.py

@ -1,15 +1,13 @@
# Copyright (c) 2021 The ZMK Contributors # Copyright (c) 2021 The ZMK Contributors
# SPDX-License-Identifier: MIT # SPDX-License-Identifier: MIT
'''Metadata command for ZMK.''' """Metadata command for ZMK."""
from functools import cached_property from functools import cached_property
import glob import glob
import json import json
from jsonschema import validate, ValidationError import jsonschema
import os
import sys import sys
import yaml import yaml
from textwrap import dedent # just for nicer code indentation
from west.commands import WestCommand from west.commands import WestCommand
from west import log # use this for user output from west import log # use this for user output
@ -18,42 +16,49 @@ from west import log # use this for user output
class Metadata(WestCommand): class Metadata(WestCommand):
def __init__(self): def __init__(self):
super().__init__( super().__init__(
'metadata', # gets stored as self.name name="metadata",
'ZMK hardware metadata commands', # self.help help="ZMK hardware metadata commands",
# self.description: description="Operate on the board/shield metadata.",
dedent('''Operate on the board/shield metadata.''')) )
def do_add_parser(self, parser_adder): def do_add_parser(self, parser_adder):
parser = parser_adder.add_parser(self.name, parser = parser_adder.add_parser(
help=self.help, self.name, help=self.help, description=self.description
description=self.description) )
parser.add_argument('subcommand', default="check", parser.add_argument(
help='The subcommand to run. Defaults to "check".', nargs="?") "subcommand",
default="check",
help='The subcommand to run. Defaults to "check".',
nargs="?",
)
return parser # gets stored as self.parser return parser # gets stored as self.parser
@cached_property @cached_property
def schema(self): def schema(self):
return json.load( return json.load(open("../schema/hardware-metadata.schema.json", "r"))
open("../schema/hardware-metadata.schema.json", 'r'))
def validate_file(self, file): def validate_file(self, file):
print("Validating: " + file) print("Validating: " + file)
with open(file, 'r') as stream: with open(file, "r") as stream:
try: try:
validate(yaml.safe_load(stream), self.schema) jsonschema.validate(yaml.safe_load(stream), self.schema)
except yaml.YAMLError as exc: except yaml.YAMLError as exc:
print("Failed loading metadata yaml: " + file) print("Failed loading metadata yaml: " + file)
print(exc) print(exc)
return False return False
except ValidationError as vexc: except jsonschema.ValidationError as vexc:
print("Failed validation of: " + file) print("Failed validation of: " + file)
print(vexc) print(vexc)
return False return False
return True return True
def do_run(self, args, unknown_args): def do_run(self, args, unknown_args):
status = all([self.validate_file(f) for f in glob.glob( status = all(
"boards/**/*.zmk.yml", recursive=True)]) [
self.validate_file(f)
for f in glob.glob("boards/**/*.zmk.yml", recursive=True)
]
)
sys.exit(0 if status else 1) sys.exit(0 if status else 1)

32
app/scripts/west_commands/test.py

@ -1,10 +1,9 @@
# Copyright (c) 2020 The ZMK Contributors # Copyright (c) 2020 The ZMK Contributors
# SPDX-License-Identifier: MIT # SPDX-License-Identifier: MIT
'''Test runner for ZMK.''' """Test runner for ZMK."""
import os import os
import subprocess import subprocess
from textwrap import dedent # just for nicer code indentation
from west.commands import WestCommand from west.commands import WestCommand
from west import log # use this for user output from west import log # use this for user output
@ -13,23 +12,30 @@ from west import log # use this for user output
class Test(WestCommand): class Test(WestCommand):
def __init__(self): def __init__(self):
super().__init__( super().__init__(
'test', # gets stored as self.name name="test",
'run ZMK testsuite', # self.help help="run ZMK testsuite",
# self.description: description="Run the ZMK testsuite.",
dedent('''Run the ZMK testsuite.''')) )
def do_add_parser(self, parser_adder): def do_add_parser(self, parser_adder):
parser = parser_adder.add_parser(self.name, parser = parser_adder.add_parser(
self.name,
help=self.help, help=self.help,
description=self.description) description=self.description,
)
parser.add_argument('test_path', default="all", parser.add_argument(
help='The path to the test. Defaults to "all".', nargs="?") "test_path",
return parser # gets stored as self.parser default="all",
help='The path to the test. Defaults to "all".',
nargs="?",
)
return parser
def do_run(self, args, unknown_args): def do_run(self, args, unknown_args):
# the run-test script assumes the app directory is the current dir. # the run-test script assumes the app directory is the current dir.
os.chdir(f'{self.topdir}/app') os.chdir(f"{self.topdir}/app")
completed_process = subprocess.run( completed_process = subprocess.run(
[f'{self.topdir}/app/run-test.sh', args.test_path]) [f"{self.topdir}/app/run-test.sh", args.test_path]
)
exit(completed_process.returncode) exit(completed_process.returncode)

Loading…
Cancel
Save