1#!/usr/bin/env python3
2__package__ = 'configurator.pyodide'
3
4from pathlib import Path
5from tempfile import TemporaryDirectory
6
7from scenario_config.default_populator import DefaultValuePopulatingStage
8from scenario_config.pipeline import PipelineObject, PipelineEngine
9from scenario_config.validator import ValidatorConstructionByFileStage, SemanticValidationStage, \
10    SyntacticValidationStage
11from scenario_config.lxml_loader import LXMLLoadStage
12
13from .pyodide import (
14    convert_result, write_temp_file,
15    # Todo: add debug switch
16    # is_debug,
17    nuc11_board, nuc11_scenario, scenario_xml_schema_path, datachecks_xml_schema_path
18)
19
20
21def main(board, scenario):
22    pipeline = PipelineEngine(["board_path", "scenario_path", "schema_path", "datachecks_path"])
23    stages = [
24        ValidatorConstructionByFileStage(),
25        LXMLLoadStage("schema"),
26
27        LXMLLoadStage("board"),
28        LXMLLoadStage("scenario"),
29        DefaultValuePopulatingStage(),
30        SyntacticValidationStage(),
31        SemanticValidationStage(),
32    ]
33
34    pipeline.add_stages(stages)
35    with TemporaryDirectory() as tmpdir:
36        write_temp_file(tmpdir, {
37            'board.xml': board,
38            'scenario.xml': scenario
39        })
40        board_file_path = Path(tmpdir) / 'board.xml'
41        scenario_file_path = Path(tmpdir) / 'scenario.xml'
42
43        obj = PipelineObject(
44            board_path=board_file_path,
45            scenario_path=scenario_file_path,
46            schema_path=scenario_xml_schema_path,
47            datachecks_path=datachecks_xml_schema_path
48        )
49        pipeline.run(obj)
50
51        syntactic_errors = obj.get("syntactic_errors")
52        semantic_errors = obj.get("semantic_errors")
53        return convert_result({"syntactic_errors": syntactic_errors, "semantic_errors": semantic_errors})
54
55
56def test():
57    main(nuc11_board, nuc11_scenario)
58
59
60if __name__ == '__main__':
61    test()
62