Browse Source

chore: make west scripts more pythonic and apply Black

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

3
.vscode/settings.json vendored

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

49
app/scripts/west_commands/metadata.py

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

36
app/scripts/west_commands/test.py

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

Loading…
Cancel
Save