powertrain-build 1.13.1__py3-none-any.whl → 1.13.3.dev3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- powertrain_build/__init__.py +40 -40
- powertrain_build/__main__.py +6 -6
- powertrain_build/a2l.py +582 -582
- powertrain_build/a2l_merge.py +650 -650
- powertrain_build/a2l_templates.py +717 -717
- powertrain_build/build.py +985 -985
- powertrain_build/build_defs.py +309 -309
- powertrain_build/build_proj_config.py +690 -690
- powertrain_build/check_interface.py +575 -575
- powertrain_build/cli.py +141 -141
- powertrain_build/config.py +542 -542
- powertrain_build/core.py +395 -395
- powertrain_build/core_dummy.py +343 -343
- powertrain_build/create_conversion_table.py +73 -73
- powertrain_build/dids.py +916 -916
- powertrain_build/dummy.py +157 -157
- powertrain_build/dummy_spm.py +252 -252
- powertrain_build/environmentcheck.py +52 -52
- powertrain_build/ext_dbg.py +255 -255
- powertrain_build/ext_var.py +327 -327
- powertrain_build/feature_configs.py +301 -301
- powertrain_build/gen_allsysteminfo.py +227 -227
- powertrain_build/gen_label_split.py +449 -449
- powertrain_build/handcode_replacer.py +124 -124
- powertrain_build/html_report.py +133 -133
- powertrain_build/interface/__init__.py +4 -4
- powertrain_build/interface/application.py +511 -511
- powertrain_build/interface/base.py +500 -500
- powertrain_build/interface/csp_api.py +490 -490
- powertrain_build/interface/device_proxy.py +677 -677
- powertrain_build/interface/ems.py +67 -67
- powertrain_build/interface/export_global_vars.py +121 -121
- powertrain_build/interface/generate_adapters.py +132 -132
- powertrain_build/interface/generate_hi_interface.py +87 -87
- powertrain_build/interface/generate_service.py +69 -69
- powertrain_build/interface/generate_wrappers.py +147 -147
- powertrain_build/interface/generation_utils.py +142 -142
- powertrain_build/interface/hal.py +194 -194
- powertrain_build/interface/model_yaml_verification.py +348 -348
- powertrain_build/interface/service.py +296 -296
- powertrain_build/interface/simulink.py +249 -249
- powertrain_build/interface/update_call_sources.py +180 -180
- powertrain_build/interface/update_model_yaml.py +186 -186
- powertrain_build/interface/zone_controller.py +362 -362
- powertrain_build/lib/__init__.py +4 -4
- powertrain_build/lib/helper_functions.py +127 -127
- powertrain_build/lib/logger.py +55 -55
- powertrain_build/matlab_scripts/CodeGen/BuildAutomationPyBuild.m +78 -78
- powertrain_build/matlab_scripts/CodeGen/Generate_A2L.m +154 -154
- powertrain_build/matlab_scripts/CodeGen/generateTLUnit.m +239 -239
- powertrain_build/matlab_scripts/CodeGen/getAsilClassification.m +28 -28
- powertrain_build/matlab_scripts/CodeGen/modelConfiguredForTL.m +28 -28
- powertrain_build/matlab_scripts/CodeGen/moveDefOutports.m +88 -88
- powertrain_build/matlab_scripts/CodeGen/parseCalMeasData.m +410 -410
- powertrain_build/matlab_scripts/CodeGen/parseCoreIdentifiers.m +139 -139
- powertrain_build/matlab_scripts/CodeGen/parseDIDs.m +141 -141
- powertrain_build/matlab_scripts/CodeGen/parseInPorts.m +106 -106
- powertrain_build/matlab_scripts/CodeGen/parseIncludeConfigs.m +25 -25
- powertrain_build/matlab_scripts/CodeGen/parseModelInfo.m +38 -38
- powertrain_build/matlab_scripts/CodeGen/parseNVM.m +81 -81
- powertrain_build/matlab_scripts/CodeGen/parseOutPorts.m +120 -120
- powertrain_build/matlab_scripts/CodeGen/parsePreProcBlks.m +23 -23
- powertrain_build/matlab_scripts/CodeGen/struct2JSON.m +128 -128
- powertrain_build/matlab_scripts/CodeGen/updateCodeSwConfig.m +31 -31
- powertrain_build/matlab_scripts/Init_PyBuild.m +91 -91
- powertrain_build/matlab_scripts/__init__.py +2 -2
- powertrain_build/matlab_scripts/helperFunctions/Get_Full_Name.m +46 -46
- powertrain_build/matlab_scripts/helperFunctions/Get_SrcLines.m +12 -12
- powertrain_build/matlab_scripts/helperFunctions/Init_Models.m +78 -78
- powertrain_build/matlab_scripts/helperFunctions/Init_Projects.m +67 -67
- powertrain_build/matlab_scripts/helperFunctions/Read_Units.m +34 -34
- powertrain_build/matlab_scripts/helperFunctions/SetProjectTimeSamples.m +26 -26
- powertrain_build/matlab_scripts/helperFunctions/Strip_Suffix.m +16 -16
- powertrain_build/matlab_scripts/helperFunctions/followLink.m +118 -118
- powertrain_build/matlab_scripts/helperFunctions/getCodeSwitches.m +50 -50
- powertrain_build/matlab_scripts/helperFunctions/getConsumerBlocks.m +30 -30
- powertrain_build/matlab_scripts/helperFunctions/getDefBlock.m +39 -39
- powertrain_build/matlab_scripts/helperFunctions/getDefOutport.m +58 -58
- powertrain_build/matlab_scripts/helperFunctions/getDstBlocks.m +19 -19
- powertrain_build/matlab_scripts/helperFunctions/getDstLines.m +13 -13
- powertrain_build/matlab_scripts/helperFunctions/getInterfaceSignals.m +37 -37
- powertrain_build/matlab_scripts/helperFunctions/getName.m +37 -37
- powertrain_build/matlab_scripts/helperFunctions/getPath.m +6 -6
- powertrain_build/matlab_scripts/helperFunctions/getProperValue.m +21 -21
- powertrain_build/matlab_scripts/helperFunctions/getSrcBlocks.m +19 -19
- powertrain_build/matlab_scripts/helperFunctions/getSrcLines.m +13 -13
- powertrain_build/matlab_scripts/helperFunctions/loadLibraries.m +10 -10
- powertrain_build/matlab_scripts/helperFunctions/loadjson.m +6 -6
- powertrain_build/matlab_scripts/helperFunctions/modifyEnumStructField.m +21 -21
- powertrain_build/matlab_scripts/helperFunctions/removeConfigDuplicates.m +31 -31
- powertrain_build/matlab_scripts/helperFunctions/sortSystemByClass.m +26 -26
- powertrain_build/matlab_scripts/helperFunctions/tl_getfast.m +89 -89
- powertrain_build/matlab_scripts/helperFunctions/topLevelSystem.m +20 -20
- powertrain_build/matlab_scripts/helperFunctions/updateModels.m +131 -131
- powertrain_build/memory_section.py +224 -224
- powertrain_build/nvm_def.py +729 -729
- powertrain_build/problem_logger.py +86 -86
- powertrain_build/pt_matlab.py +430 -430
- powertrain_build/pt_win32.py +144 -144
- powertrain_build/replace_compu_tab_ref.py +105 -105
- powertrain_build/rte_dummy.py +254 -254
- powertrain_build/sched_funcs.py +209 -207
- powertrain_build/signal.py +7 -7
- powertrain_build/signal_if_html_rep.py +221 -221
- powertrain_build/signal_if_html_rep_all.py +302 -302
- powertrain_build/signal_incons_html_rep.py +180 -180
- powertrain_build/signal_incons_html_rep_all.py +366 -366
- powertrain_build/signal_incons_html_rep_base.py +168 -168
- powertrain_build/signal_inconsistency_check.py +641 -641
- powertrain_build/signal_interfaces.py +864 -864
- powertrain_build/templates/Index_SigCheck_All.html +22 -22
- powertrain_build/templates/Index_SigIf_All.html +19 -19
- powertrain_build/types.py +218 -218
- powertrain_build/unit_configs.py +419 -419
- powertrain_build/user_defined_types.py +660 -660
- powertrain_build/versioncheck.py +66 -66
- powertrain_build/wrapper.py +512 -512
- powertrain_build/xlrd_csv.py +87 -87
- powertrain_build/zone_controller/__init__.py +4 -4
- powertrain_build/zone_controller/calibration.py +176 -176
- powertrain_build/zone_controller/composition_yaml.py +880 -878
- {powertrain_build-1.13.1.dist-info → powertrain_build-1.13.3.dev3.dist-info}/METADATA +100 -100
- powertrain_build-1.13.3.dev3.dist-info/RECORD +130 -0
- {powertrain_build-1.13.1.dist-info → powertrain_build-1.13.3.dev3.dist-info}/WHEEL +1 -1
- {powertrain_build-1.13.1.dist-info → powertrain_build-1.13.3.dev3.dist-info}/licenses/LICENSE +202 -202
- powertrain_build-1.13.3.dev3.dist-info/pbr.json +1 -0
- powertrain_build-1.13.1.dist-info/RECORD +0 -130
- powertrain_build-1.13.1.dist-info/pbr.json +0 -1
- {powertrain_build-1.13.1.dist-info → powertrain_build-1.13.3.dev3.dist-info}/entry_points.txt +0 -0
- {powertrain_build-1.13.1.dist-info → powertrain_build-1.13.3.dev3.dist-info}/licenses/AUTHORS +0 -0
- {powertrain_build-1.13.1.dist-info → powertrain_build-1.13.3.dev3.dist-info}/licenses/NOTICE +0 -0
- {powertrain_build-1.13.1.dist-info → powertrain_build-1.13.3.dev3.dist-info}/top_level.txt +0 -0
|
@@ -1,186 +1,186 @@
|
|
|
1
|
-
# Copyright 2024 Volvo Car Corporation
|
|
2
|
-
# Licensed under Apache 2.0.
|
|
3
|
-
|
|
4
|
-
"""Module for handling the update of model yaml files."""
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
import argparse
|
|
8
|
-
import sys
|
|
9
|
-
from pathlib import Path
|
|
10
|
-
from typing import List, Optional
|
|
11
|
-
|
|
12
|
-
from ruamel.yaml import YAML
|
|
13
|
-
from powertrain_build.interface.application import Application
|
|
14
|
-
from powertrain_build.interface.base import BaseApplication
|
|
15
|
-
|
|
16
|
-
PARSER_HELP = "Update model yaml files."
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
class BadYamlFormat(Exception):
|
|
20
|
-
"""Exception to raise when signal is not in/out signal."""
|
|
21
|
-
def __init__(self, signal):
|
|
22
|
-
self.message = f"{signal} is not in-signal or out-signal."
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
class UpdateYmlFormat(BaseApplication):
|
|
26
|
-
"""Class to handle the update of model yaml files."""
|
|
27
|
-
|
|
28
|
-
def __init__(self, base_application):
|
|
29
|
-
self.base_application = base_application
|
|
30
|
-
self.raw = {}
|
|
31
|
-
self.app_insignals = self.get_insignals_name()
|
|
32
|
-
self.app_outsignals = self.get_outsignals_name()
|
|
33
|
-
|
|
34
|
-
def read_translation(self, translation_file):
|
|
35
|
-
"""Read specification of the yaml file.
|
|
36
|
-
|
|
37
|
-
Args:
|
|
38
|
-
translation_file (Path): file with specs.
|
|
39
|
-
"""
|
|
40
|
-
if not translation_file.is_file():
|
|
41
|
-
return {}
|
|
42
|
-
with open(translation_file, encoding="utf-8") as translation:
|
|
43
|
-
yaml = YAML(typ='safe', pure=True)
|
|
44
|
-
self.raw = yaml.load(translation)
|
|
45
|
-
|
|
46
|
-
def parse_groups(self, signal_groups):
|
|
47
|
-
"""Parse signal groups.
|
|
48
|
-
|
|
49
|
-
Args:
|
|
50
|
-
signal_groups (dict): Hal/dp signal group in yaml file.
|
|
51
|
-
"""
|
|
52
|
-
for interface_type, group_definitions in signal_groups.items():
|
|
53
|
-
for group in group_definitions:
|
|
54
|
-
for signals in group.values():
|
|
55
|
-
self.check_signals({interface_type: signals})
|
|
56
|
-
|
|
57
|
-
def parse_hal_definitions(self, hal):
|
|
58
|
-
"""Parse hal.
|
|
59
|
-
|
|
60
|
-
Args:
|
|
61
|
-
hal (dict): hal in yaml file.
|
|
62
|
-
"""
|
|
63
|
-
self.parse_groups(hal)
|
|
64
|
-
|
|
65
|
-
def parse_service_definitions(self, service):
|
|
66
|
-
"""Parse service.
|
|
67
|
-
|
|
68
|
-
Args:
|
|
69
|
-
service (dict): service in yaml file.
|
|
70
|
-
"""
|
|
71
|
-
for interface, definition in service.items():
|
|
72
|
-
for apis in definition['properties']:
|
|
73
|
-
for signals in apis.values():
|
|
74
|
-
self.check_signals({interface: signals})
|
|
75
|
-
|
|
76
|
-
def check_signals(self, signals_definition):
|
|
77
|
-
"""check signal direction(in-signal or out-signal).
|
|
78
|
-
|
|
79
|
-
Args:
|
|
80
|
-
signals_definition (dict): parsed yaml file.
|
|
81
|
-
"""
|
|
82
|
-
for specifications in signals_definition.values():
|
|
83
|
-
for specification in specifications:
|
|
84
|
-
in_out_signal = [key for key in specification.keys() if 'signal' in key]
|
|
85
|
-
if in_out_signal == []:
|
|
86
|
-
raise ValueError(f"signal is not defined for property: {specification['property']} !")
|
|
87
|
-
if "in" in in_out_signal[0]:
|
|
88
|
-
if specification[in_out_signal[0]] not in self.app_insignals:
|
|
89
|
-
if specification[in_out_signal[0]] in self.app_outsignals:
|
|
90
|
-
specification["outsignal"] = specification[in_out_signal[0]]
|
|
91
|
-
else:
|
|
92
|
-
raise BadYamlFormat(specification[in_out_signal[0]])
|
|
93
|
-
if "out" in in_out_signal[0]:
|
|
94
|
-
if specification[in_out_signal[0]] not in self.app_outsignals:
|
|
95
|
-
if specification[in_out_signal[0]] in self.app_insignals:
|
|
96
|
-
specification["insignal"] = specification[in_out_signal[0]]
|
|
97
|
-
else:
|
|
98
|
-
raise BadYamlFormat(specification[in_out_signal[0]])
|
|
99
|
-
if in_out_signal[0] == "signal":
|
|
100
|
-
if specification["signal"] in self.app_insignals:
|
|
101
|
-
specification["insignal"] = specification["signal"]
|
|
102
|
-
del specification["signal"]
|
|
103
|
-
elif specification["signal"] in self.app_outsignals:
|
|
104
|
-
specification["outsignal"] = specification["signal"]
|
|
105
|
-
del specification["signal"]
|
|
106
|
-
else:
|
|
107
|
-
raise BadYamlFormat(specification[in_out_signal[0]])
|
|
108
|
-
|
|
109
|
-
def get_insignals_name(self):
|
|
110
|
-
"""Base application in-signals.
|
|
111
|
-
"""
|
|
112
|
-
app_insignals = []
|
|
113
|
-
for signal in self.base_application.insignals:
|
|
114
|
-
app_insignals.append(signal.name)
|
|
115
|
-
return app_insignals
|
|
116
|
-
|
|
117
|
-
def get_outsignals_name(self):
|
|
118
|
-
"""Base application out-signals.
|
|
119
|
-
"""
|
|
120
|
-
app_outsignals = []
|
|
121
|
-
for signal in self.base_application.outsignals:
|
|
122
|
-
app_outsignals.append(signal.name)
|
|
123
|
-
return app_outsignals
|
|
124
|
-
|
|
125
|
-
def parse_definition(self, definition):
|
|
126
|
-
"""Parses all definition files
|
|
127
|
-
|
|
128
|
-
Args:
|
|
129
|
-
definition (list(Path)): Definition files
|
|
130
|
-
"""
|
|
131
|
-
for translation in definition:
|
|
132
|
-
self.read_translation(translation)
|
|
133
|
-
self.check_signals(self.raw.get("signals", {}))
|
|
134
|
-
self.parse_groups(self.raw.get("signal_groups", {}))
|
|
135
|
-
self.parse_hal_definitions(self.raw.get("hal", {}))
|
|
136
|
-
self.parse_service_definitions(self.raw.get("service", {}))
|
|
137
|
-
self.write_to_file(translation)
|
|
138
|
-
|
|
139
|
-
def write_to_file(self, translation):
|
|
140
|
-
"""Write in/out signals to file
|
|
141
|
-
Args:
|
|
142
|
-
spec (dict): Specification
|
|
143
|
-
output (Path): File to write
|
|
144
|
-
"""
|
|
145
|
-
with open(translation, "w", encoding="utf-8") as new_file:
|
|
146
|
-
yaml = YAML()
|
|
147
|
-
yaml.dump(self.raw, new_file)
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
def get_app(config):
|
|
151
|
-
""" Get an app specification for the current project
|
|
152
|
-
|
|
153
|
-
Args:
|
|
154
|
-
config (pathlib.Path): Path to the ProjectCfg.json.
|
|
155
|
-
Returns:
|
|
156
|
-
app (Application): powertrain_build project.
|
|
157
|
-
"""
|
|
158
|
-
app = Application()
|
|
159
|
-
app.parse_definition(config)
|
|
160
|
-
return app
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
def update_model_yaml_cli(args: argparse.Namespace):
|
|
164
|
-
"""CLI for update model yaml."""
|
|
165
|
-
app = get_app(args.config)
|
|
166
|
-
translation_files = app.get_translation_files()
|
|
167
|
-
uymlf = UpdateYmlFormat(app)
|
|
168
|
-
uymlf.parse_definition(translation_files)
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
def configure_parser(parser: argparse.ArgumentParser):
|
|
172
|
-
"""Configure parser for update model yaml."""
|
|
173
|
-
parser.add_argument("config", help="The SPA2 project config file", type=Path)
|
|
174
|
-
parser.set_defaults(func=update_model_yaml_cli)
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
def main(argv: Optional[List[str]] = None):
|
|
178
|
-
"""Main function for update model yaml."""
|
|
179
|
-
parser = argparse.ArgumentParser(description=PARSER_HELP)
|
|
180
|
-
configure_parser(parser)
|
|
181
|
-
args = parser.parse_args(argv)
|
|
182
|
-
return args.func(args)
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
if __name__ == "__main__":
|
|
186
|
-
main(sys.argv[1:])
|
|
1
|
+
# Copyright 2024 Volvo Car Corporation
|
|
2
|
+
# Licensed under Apache 2.0.
|
|
3
|
+
|
|
4
|
+
"""Module for handling the update of model yaml files."""
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
import argparse
|
|
8
|
+
import sys
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
from typing import List, Optional
|
|
11
|
+
|
|
12
|
+
from ruamel.yaml import YAML
|
|
13
|
+
from powertrain_build.interface.application import Application
|
|
14
|
+
from powertrain_build.interface.base import BaseApplication
|
|
15
|
+
|
|
16
|
+
PARSER_HELP = "Update model yaml files."
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class BadYamlFormat(Exception):
|
|
20
|
+
"""Exception to raise when signal is not in/out signal."""
|
|
21
|
+
def __init__(self, signal):
|
|
22
|
+
self.message = f"{signal} is not in-signal or out-signal."
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class UpdateYmlFormat(BaseApplication):
|
|
26
|
+
"""Class to handle the update of model yaml files."""
|
|
27
|
+
|
|
28
|
+
def __init__(self, base_application):
|
|
29
|
+
self.base_application = base_application
|
|
30
|
+
self.raw = {}
|
|
31
|
+
self.app_insignals = self.get_insignals_name()
|
|
32
|
+
self.app_outsignals = self.get_outsignals_name()
|
|
33
|
+
|
|
34
|
+
def read_translation(self, translation_file):
|
|
35
|
+
"""Read specification of the yaml file.
|
|
36
|
+
|
|
37
|
+
Args:
|
|
38
|
+
translation_file (Path): file with specs.
|
|
39
|
+
"""
|
|
40
|
+
if not translation_file.is_file():
|
|
41
|
+
return {}
|
|
42
|
+
with open(translation_file, encoding="utf-8") as translation:
|
|
43
|
+
yaml = YAML(typ='safe', pure=True)
|
|
44
|
+
self.raw = yaml.load(translation)
|
|
45
|
+
|
|
46
|
+
def parse_groups(self, signal_groups):
|
|
47
|
+
"""Parse signal groups.
|
|
48
|
+
|
|
49
|
+
Args:
|
|
50
|
+
signal_groups (dict): Hal/dp signal group in yaml file.
|
|
51
|
+
"""
|
|
52
|
+
for interface_type, group_definitions in signal_groups.items():
|
|
53
|
+
for group in group_definitions:
|
|
54
|
+
for signals in group.values():
|
|
55
|
+
self.check_signals({interface_type: signals})
|
|
56
|
+
|
|
57
|
+
def parse_hal_definitions(self, hal):
|
|
58
|
+
"""Parse hal.
|
|
59
|
+
|
|
60
|
+
Args:
|
|
61
|
+
hal (dict): hal in yaml file.
|
|
62
|
+
"""
|
|
63
|
+
self.parse_groups(hal)
|
|
64
|
+
|
|
65
|
+
def parse_service_definitions(self, service):
|
|
66
|
+
"""Parse service.
|
|
67
|
+
|
|
68
|
+
Args:
|
|
69
|
+
service (dict): service in yaml file.
|
|
70
|
+
"""
|
|
71
|
+
for interface, definition in service.items():
|
|
72
|
+
for apis in definition['properties']:
|
|
73
|
+
for signals in apis.values():
|
|
74
|
+
self.check_signals({interface: signals})
|
|
75
|
+
|
|
76
|
+
def check_signals(self, signals_definition):
|
|
77
|
+
"""check signal direction(in-signal or out-signal).
|
|
78
|
+
|
|
79
|
+
Args:
|
|
80
|
+
signals_definition (dict): parsed yaml file.
|
|
81
|
+
"""
|
|
82
|
+
for specifications in signals_definition.values():
|
|
83
|
+
for specification in specifications:
|
|
84
|
+
in_out_signal = [key for key in specification.keys() if 'signal' in key]
|
|
85
|
+
if in_out_signal == []:
|
|
86
|
+
raise ValueError(f"signal is not defined for property: {specification['property']} !")
|
|
87
|
+
if "in" in in_out_signal[0]:
|
|
88
|
+
if specification[in_out_signal[0]] not in self.app_insignals:
|
|
89
|
+
if specification[in_out_signal[0]] in self.app_outsignals:
|
|
90
|
+
specification["outsignal"] = specification[in_out_signal[0]]
|
|
91
|
+
else:
|
|
92
|
+
raise BadYamlFormat(specification[in_out_signal[0]])
|
|
93
|
+
if "out" in in_out_signal[0]:
|
|
94
|
+
if specification[in_out_signal[0]] not in self.app_outsignals:
|
|
95
|
+
if specification[in_out_signal[0]] in self.app_insignals:
|
|
96
|
+
specification["insignal"] = specification[in_out_signal[0]]
|
|
97
|
+
else:
|
|
98
|
+
raise BadYamlFormat(specification[in_out_signal[0]])
|
|
99
|
+
if in_out_signal[0] == "signal":
|
|
100
|
+
if specification["signal"] in self.app_insignals:
|
|
101
|
+
specification["insignal"] = specification["signal"]
|
|
102
|
+
del specification["signal"]
|
|
103
|
+
elif specification["signal"] in self.app_outsignals:
|
|
104
|
+
specification["outsignal"] = specification["signal"]
|
|
105
|
+
del specification["signal"]
|
|
106
|
+
else:
|
|
107
|
+
raise BadYamlFormat(specification[in_out_signal[0]])
|
|
108
|
+
|
|
109
|
+
def get_insignals_name(self):
|
|
110
|
+
"""Base application in-signals.
|
|
111
|
+
"""
|
|
112
|
+
app_insignals = []
|
|
113
|
+
for signal in self.base_application.insignals:
|
|
114
|
+
app_insignals.append(signal.name)
|
|
115
|
+
return app_insignals
|
|
116
|
+
|
|
117
|
+
def get_outsignals_name(self):
|
|
118
|
+
"""Base application out-signals.
|
|
119
|
+
"""
|
|
120
|
+
app_outsignals = []
|
|
121
|
+
for signal in self.base_application.outsignals:
|
|
122
|
+
app_outsignals.append(signal.name)
|
|
123
|
+
return app_outsignals
|
|
124
|
+
|
|
125
|
+
def parse_definition(self, definition):
|
|
126
|
+
"""Parses all definition files
|
|
127
|
+
|
|
128
|
+
Args:
|
|
129
|
+
definition (list(Path)): Definition files
|
|
130
|
+
"""
|
|
131
|
+
for translation in definition:
|
|
132
|
+
self.read_translation(translation)
|
|
133
|
+
self.check_signals(self.raw.get("signals", {}))
|
|
134
|
+
self.parse_groups(self.raw.get("signal_groups", {}))
|
|
135
|
+
self.parse_hal_definitions(self.raw.get("hal", {}))
|
|
136
|
+
self.parse_service_definitions(self.raw.get("service", {}))
|
|
137
|
+
self.write_to_file(translation)
|
|
138
|
+
|
|
139
|
+
def write_to_file(self, translation):
|
|
140
|
+
"""Write in/out signals to file
|
|
141
|
+
Args:
|
|
142
|
+
spec (dict): Specification
|
|
143
|
+
output (Path): File to write
|
|
144
|
+
"""
|
|
145
|
+
with open(translation, "w", encoding="utf-8") as new_file:
|
|
146
|
+
yaml = YAML()
|
|
147
|
+
yaml.dump(self.raw, new_file)
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
def get_app(config):
|
|
151
|
+
""" Get an app specification for the current project
|
|
152
|
+
|
|
153
|
+
Args:
|
|
154
|
+
config (pathlib.Path): Path to the ProjectCfg.json.
|
|
155
|
+
Returns:
|
|
156
|
+
app (Application): powertrain_build project.
|
|
157
|
+
"""
|
|
158
|
+
app = Application()
|
|
159
|
+
app.parse_definition(config)
|
|
160
|
+
return app
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
def update_model_yaml_cli(args: argparse.Namespace):
|
|
164
|
+
"""CLI for update model yaml."""
|
|
165
|
+
app = get_app(args.config)
|
|
166
|
+
translation_files = app.get_translation_files()
|
|
167
|
+
uymlf = UpdateYmlFormat(app)
|
|
168
|
+
uymlf.parse_definition(translation_files)
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
def configure_parser(parser: argparse.ArgumentParser):
|
|
172
|
+
"""Configure parser for update model yaml."""
|
|
173
|
+
parser.add_argument("config", help="The SPA2 project config file", type=Path)
|
|
174
|
+
parser.set_defaults(func=update_model_yaml_cli)
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
def main(argv: Optional[List[str]] = None):
|
|
178
|
+
"""Main function for update model yaml."""
|
|
179
|
+
parser = argparse.ArgumentParser(description=PARSER_HELP)
|
|
180
|
+
configure_parser(parser)
|
|
181
|
+
args = parser.parse_args(argv)
|
|
182
|
+
return args.func(args)
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
if __name__ == "__main__":
|
|
186
|
+
main(sys.argv[1:])
|