refactored generate_driver_wrappers.py
Signed-off-by: Asfandyar Orakzai <asfandyar.orakzai@silabs.com>
diff --git a/scripts/generate_driver_wrappers.py b/scripts/generate_driver_wrappers.py
index 097edd9..97e8bfd 100755
--- a/scripts/generate_driver_wrappers.py
+++ b/scripts/generate_driver_wrappers.py
@@ -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 @@
# 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 @@
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 @@
'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 @@
return 0
+
if __name__ == '__main__':
sys.exit(main())