refactored generate_driver_wrappers.py
Signed-off-by: Asfandyar Orakzai <asfandyar.orakzai@silabs.com>
This commit is contained in:
parent
a2cac3224d
commit
08f397a676
1 changed files with 29 additions and 13 deletions
|
@ -23,7 +23,7 @@
|
|||
import sys
|
||||
import os
|
||||
import json
|
||||
from typing import Tuple, NewType
|
||||
from typing import Tuple, NewType, Dict, Any
|
||||
import argparse
|
||||
import jsonschema
|
||||
import jinja2
|
||||
|
@ -34,6 +34,13 @@ JSONSchema = NewType('JSONSchema', object)
|
|||
# keep MyPy happy till MyPy comes with a more composite type for JsonObjects.
|
||||
Driver = NewType('Driver', dict)
|
||||
|
||||
|
||||
class JsonValidationException(Exception):
|
||||
def __init__(self, message="Json Validation Failed"):
|
||||
self.message = message
|
||||
super().__init__(self.message)
|
||||
|
||||
|
||||
def render(template_path: str, driver_jsoncontext: list) -> str:
|
||||
"""
|
||||
Render template from the input file and driver JSON.
|
||||
|
@ -93,8 +100,17 @@ def validate_json(driverjson_data: Driver, driverschema_list: dict) -> bool:
|
|||
|
||||
return True
|
||||
|
||||
|
||||
def load_driver(schemas: Dict[str, Any], driver_file: str) -> Any:
|
||||
with open(driver_file, 'r') as f:
|
||||
json_data = json.load(f)
|
||||
if not validate_json(json_data, schemas):
|
||||
raise JsonValidationException()
|
||||
return json_data
|
||||
|
||||
|
||||
def read_driver_descriptions(mbedtls_root: str, json_directory: str, \
|
||||
jsondriver_list: str) -> Tuple[bool, list]:
|
||||
jsondriver_list: str) -> Tuple[bool, list]:
|
||||
"""
|
||||
Merge driver JSON files into a single ordered JSON after validation.
|
||||
"""
|
||||
|
@ -112,18 +128,17 @@ def read_driver_descriptions(mbedtls_root: str, json_directory: str, \
|
|||
'driver_opaque_schema.json'), 'r') as file:
|
||||
opaque_driver_schema = json.load(file)
|
||||
|
||||
driver_schema_list = {'transparent':transparent_driver_schema,
|
||||
'opaque':opaque_driver_schema}
|
||||
|
||||
driver_schema = {'transparent': transparent_driver_schema,
|
||||
'opaque': opaque_driver_schema}
|
||||
with open(os.path.join(json_directory, jsondriver_list), 'r') as driverlistfile:
|
||||
driverlist = json.load(driverlistfile)
|
||||
for file_name in driverlist:
|
||||
with open(os.path.join(json_directory, file_name), 'r') as infile:
|
||||
json_data = json.load(infile)
|
||||
ret = validate_json(json_data, driver_schema_list)
|
||||
if ret is False:
|
||||
return ret, []
|
||||
result.append(json_data)
|
||||
driver_list = json.load(driverlistfile)
|
||||
|
||||
try:
|
||||
result = [load_driver(driver_schema, driver_file=os.path.join(json_directory, driver_file_name))
|
||||
for driver_file_name in driver_list]
|
||||
except JsonValidationException as _:
|
||||
return False, []
|
||||
|
||||
return True, result
|
||||
|
||||
|
||||
|
@ -172,5 +187,6 @@ def main() -> int:
|
|||
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
sys.exit(main())
|
||||
|
|
Loading…
Reference in a new issue