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, SyntacticValidationStage
10from scenario_config.xml_loader import XMLLoadStage
11
12from .pyodide import (
13    convert_result, write_temp_file,
14    nuc11_scenario, schema_dir
15)
16
17
18def main(scenario):
19    pipeline = PipelineEngine(["scenario_path", "schema_path", "datachecks_path"])
20    pipeline.add_stages([
21        ValidatorConstructionByFileStage(),
22        XMLLoadStage("schema"),
23        XMLLoadStage("scenario"),
24        DefaultValuePopulatingStage(),
25        SyntacticValidationStage(),
26    ])
27
28    try:
29        with TemporaryDirectory() as tmpdir:
30            write_temp_file(tmpdir, {
31                'scenario.xml': scenario
32            })
33            scenario_file_path = Path(tmpdir) / 'scenario.xml'
34
35            obj = PipelineObject(
36                scenario_path=scenario_file_path,
37                schema_path=schema_dir / 'scenario_structure.xsd',
38                datachecks_path=None
39            )
40            pipeline.run(obj)
41
42            validate_result = obj.get("syntactic_errors")
43            return "\n\n".join(map(lambda x: x["message"], validate_result))
44    except Exception as e:
45        return str(e)
46
47
48def test():
49    print(main(nuc11_scenario))
50
51
52if __name__ == '__main__':
53    test()
54