armodel 1.7.7__py3-none-any.whl → 1.7.8__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.
- armodel/cli/arxml_dump_cli.py +33 -22
- armodel/cli/arxml_format_cli.py +25 -13
- armodel/models/M2/AUTOSARTemplates/AutosarTopLevelStructure.py +64 -29
- armodel/models/M2/AUTOSARTemplates/BswModuleTemplate/BswBehavior.py +322 -63
- armodel/models/M2/AUTOSARTemplates/BswModuleTemplate/BswOverview.py +134 -35
- armodel/models/M2/AUTOSARTemplates/CommonStructure/InternalBehavior.py +10 -1
- armodel/models/M2/AUTOSARTemplates/CommonStructure/TriggerDeclaration.py +18 -2
- armodel/models/M2/AUTOSARTemplates/ECUCDescriptionTemplate.py +20 -19
- armodel/models/M2/AUTOSARTemplates/EcuResourceTemplate/HwElementCategory.py +59 -0
- armodel/models/M2/AUTOSARTemplates/EcuResourceTemplate/__init__.py +145 -0
- armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/ARPackage.py +214 -156
- armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/Identifiable.py +60 -32
- armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Components/__init__.py +63 -42
- armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Composition/__init__.py +1 -0
- armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/EndToEndProtection.py +13 -6
- armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/PortInterface/__init__.py +111 -38
- armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/AccessCount.py +9 -1
- armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/ModeDeclarationGroup.py +5 -4
- armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/__init__.py +9 -1
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/DataMapping.py +167 -5
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/{ECUResourceMapping.py → EcuResourceMapping.py} +4 -3
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Can/CanTopology.py +31 -21
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Ethernet/EthernetFrame.py +5 -3
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Flexray/FlexrayCommunication.py +76 -0
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Flexray/FlexrayTopology.py +654 -0
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Flexray/__init__.py +0 -0
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/CoreCommunication.py +64 -31
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/CoreTopology.py +158 -40
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/EcuInstance.py +19 -6
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/InstanceRefs.py +2 -0
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/Transformer/__init__.py +524 -0
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/__init__.py +15 -13
- armodel/models/__init__.py +5 -1
- armodel/parser/abstract_arxml_parser.py +34 -30
- armodel/parser/arxml_parser.py +1196 -525
- armodel/parser/file_parser.py +5 -3
- armodel/tests/test_armodel/models/test_ar_package.py +6 -11
- armodel/tests/test_armodel/models/test_port_interface.py +116 -117
- armodel/tests/test_armodel/parser/test_bsw_module_descriiption.py +109 -109
- armodel/tests/test_armodel/parser/test_sw_components.py +38 -27
- armodel/tests/test_armodel/parser/test_system.py +2 -8
- armodel/transformer/__init__.py +0 -0
- armodel/transformer/abstract.py +6 -0
- armodel/transformer/admin_data.py +31 -0
- armodel/writer/abstract_arxml_writer.py +22 -29
- armodel/writer/arxml_writer.py +1198 -477
- {armodel-1.7.7.dist-info → armodel-1.7.8.dist-info}/METADATA +41 -1
- {armodel-1.7.7.dist-info → armodel-1.7.8.dist-info}/RECORD +52 -43
- {armodel-1.7.7.dist-info → armodel-1.7.8.dist-info}/LICENSE +0 -0
- {armodel-1.7.7.dist-info → armodel-1.7.8.dist-info}/WHEEL +0 -0
- {armodel-1.7.7.dist-info → armodel-1.7.8.dist-info}/entry_points.txt +0 -0
- {armodel-1.7.7.dist-info → armodel-1.7.8.dist-info}/top_level.txt +0 -0
|
@@ -6,18 +6,19 @@ import re
|
|
|
6
6
|
import logging
|
|
7
7
|
import xml.etree.ElementTree as ET
|
|
8
8
|
|
|
9
|
-
from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
|
|
10
|
-
from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import AREnum, ARFloat, ARLiteral, ARNumerical, Boolean, Integer, PositiveInteger, TimeValue
|
|
11
9
|
from ..models.M2.AUTOSARTemplates.AutosarTopLevelStructure import AUTOSAR
|
|
12
|
-
from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.
|
|
13
|
-
from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.
|
|
14
|
-
from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import
|
|
10
|
+
from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
|
|
11
|
+
from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.Identifiable import Identifiable
|
|
12
|
+
from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARFloat, ARLiteral, ARNumerical, Boolean
|
|
13
|
+
from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import Integer, PositiveInteger, TimeValue
|
|
14
|
+
from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import RefType, Limit
|
|
15
|
+
|
|
15
16
|
|
|
16
17
|
class AbstractARXMLParser:
|
|
17
18
|
__metaclass__ = ABCMeta
|
|
18
19
|
|
|
19
|
-
def __init__(self, options
|
|
20
|
-
if type(self)
|
|
20
|
+
def __init__(self, options=None) -> None:
|
|
21
|
+
if type(self) is AbstractARXMLParser:
|
|
21
22
|
raise NotImplementedError("AbstractArxmlParser is an abstract class.")
|
|
22
23
|
|
|
23
24
|
self.nsmap = {"xmlns": "http://autosar.org/schema/r4.0"}
|
|
@@ -40,13 +41,13 @@ class AbstractARXMLParser:
|
|
|
40
41
|
self.options['warning'] = options['warning']
|
|
41
42
|
|
|
42
43
|
def raiseError(self, error_msg):
|
|
43
|
-
if (self.options['warning']
|
|
44
|
+
if (self.options['warning'] is True):
|
|
44
45
|
self.logger.error(Fore.RED + error_msg + Fore.WHITE)
|
|
45
46
|
else:
|
|
46
47
|
raise ValueError(error_msg)
|
|
47
48
|
|
|
48
49
|
def notImplemented(self, error_msg):
|
|
49
|
-
if (self.options['warning']
|
|
50
|
+
if (self.options['warning'] is True):
|
|
50
51
|
self.logger.error(Fore.RED + error_msg + Fore.WHITE)
|
|
51
52
|
else:
|
|
52
53
|
raise NotImplementedError(error_msg)
|
|
@@ -96,11 +97,11 @@ class AbstractARXMLParser:
|
|
|
96
97
|
child_element = self.find(element, key)
|
|
97
98
|
literal = None
|
|
98
99
|
if (child_element is not None):
|
|
99
|
-
self.logger.debug("getChildElementOptionalLiteral : %s" % child_element.text)
|
|
100
|
+
# self.logger.debug("getChildElementOptionalLiteral : %s" % child_element.text)
|
|
100
101
|
literal = ARLiteral()
|
|
101
102
|
self.readARObjectAttributes(child_element, literal)
|
|
102
103
|
# Patch for empty element <USED-CODE-GENERATOR></USED-CODE-GENERATOR>
|
|
103
|
-
if child_element.text is None:
|
|
104
|
+
if child_element.text is None:
|
|
104
105
|
literal.setValue("")
|
|
105
106
|
else:
|
|
106
107
|
literal.setValue(child_element.text)
|
|
@@ -110,14 +111,14 @@ class AbstractARXMLParser:
|
|
|
110
111
|
child_element = self.find(element, key)
|
|
111
112
|
literal = None
|
|
112
113
|
if (child_element is not None) and (child_element.text is not None):
|
|
113
|
-
self.logger.debug("getChildElementOptionalRevisionLabelString : %s" % child_element.text)
|
|
114
|
+
# self.logger.debug("getChildElementOptionalRevisionLabelString : %s" % child_element.text)
|
|
114
115
|
m = re.match(r'[0-9]+\.[0-9]+\.[0-9]+([\._;].*)?', child_element.text)
|
|
115
116
|
if not m:
|
|
116
117
|
raise ValueError("Invalid RevisionLabelString <%s>" % child_element.text)
|
|
117
118
|
literal = ARLiteral()
|
|
118
119
|
self.readARObjectAttributes(child_element, literal)
|
|
119
120
|
# Patch for empty element <USED-CODE-GENERATOR></USED-CODE-GENERATOR>
|
|
120
|
-
if child_element.text is None:
|
|
121
|
+
if child_element.text is None:
|
|
121
122
|
literal.setValue("")
|
|
122
123
|
else:
|
|
123
124
|
literal.setValue(child_element.text)
|
|
@@ -165,7 +166,7 @@ class AbstractARXMLParser:
|
|
|
165
166
|
|
|
166
167
|
def getChildElementOptionalBooleanValue(self, element: ET.Element, key: str) -> Boolean:
|
|
167
168
|
literal = self.getChildElementOptionalLiteral(element, key)
|
|
168
|
-
if literal
|
|
169
|
+
if literal is None:
|
|
169
170
|
return None
|
|
170
171
|
if literal.getText() == "":
|
|
171
172
|
return None
|
|
@@ -182,7 +183,7 @@ class AbstractARXMLParser:
|
|
|
182
183
|
|
|
183
184
|
def getChildElementOptionalNumericalValue(self, element: ET.Element, key: str) -> ARNumerical:
|
|
184
185
|
child_element = self.find(element, key)
|
|
185
|
-
if child_element
|
|
186
|
+
if child_element is None:
|
|
186
187
|
return None
|
|
187
188
|
numerical = ARNumerical()
|
|
188
189
|
self.readARObjectAttributes(child_element, numerical)
|
|
@@ -191,7 +192,7 @@ class AbstractARXMLParser:
|
|
|
191
192
|
|
|
192
193
|
def getChildElementOptionalIntegerValue(self, element: ET.Element, key: str) -> Integer:
|
|
193
194
|
child_element = self.find(element, key)
|
|
194
|
-
if child_element
|
|
195
|
+
if child_element is None:
|
|
195
196
|
return None
|
|
196
197
|
numerical = Integer()
|
|
197
198
|
self.readARObjectAttributes(child_element, numerical)
|
|
@@ -200,7 +201,7 @@ class AbstractARXMLParser:
|
|
|
200
201
|
|
|
201
202
|
def getChildElementOptionalPositiveInteger(self, element: ET.Element, key: str) -> PositiveInteger:
|
|
202
203
|
child_element = self.find(element, key)
|
|
203
|
-
if child_element
|
|
204
|
+
if child_element is None:
|
|
204
205
|
return None
|
|
205
206
|
numerical = PositiveInteger()
|
|
206
207
|
self.readARObjectAttributes(child_element, numerical)
|
|
@@ -231,7 +232,7 @@ class AbstractARXMLParser:
|
|
|
231
232
|
return limit
|
|
232
233
|
return None
|
|
233
234
|
|
|
234
|
-
def _getChildElementRefTypeDestAndValue(self, element) -> RefType:
|
|
235
|
+
def _getChildElementRefTypeDestAndValue(self, element: ET.Element) -> RefType:
|
|
235
236
|
ref = RefType()
|
|
236
237
|
if 'BASE' in element.attrib:
|
|
237
238
|
ref.setBase(element.attrib['BASE'])
|
|
@@ -246,7 +247,7 @@ class AbstractARXMLParser:
|
|
|
246
247
|
return self._getChildElementRefTypeDestAndValue(child_element)
|
|
247
248
|
self.raiseError("The attribute %s of <%s> has not been defined" % (key, short_name))
|
|
248
249
|
|
|
249
|
-
def getChildElementOptionalRefType(self, element:ET.Element, key: str) -> RefType:
|
|
250
|
+
def getChildElementOptionalRefType(self, element: ET.Element, key: str) -> RefType:
|
|
250
251
|
child_element = self.find(element, key)
|
|
251
252
|
if (child_element is not None):
|
|
252
253
|
return self._getChildElementRefTypeDestAndValue(child_element)
|
|
@@ -268,13 +269,19 @@ class AbstractARXMLParser:
|
|
|
268
269
|
return None
|
|
269
270
|
|
|
270
271
|
def readARObjectAttributes(self, element: ET.Element, ar_object: ARObject):
|
|
271
|
-
ar_object.timestamp = self.readElementOptionalAttrib(element, "T")
|
|
272
|
-
ar_object.uuid
|
|
272
|
+
ar_object.timestamp = self.readElementOptionalAttrib(element, "T") # read the timestamp
|
|
273
|
+
ar_object.uuid = self.readElementOptionalAttrib(element, "UUID") # read the uuid
|
|
273
274
|
|
|
274
|
-
if ar_object.timestamp is not None:
|
|
275
|
-
|
|
275
|
+
# if ar_object.timestamp is not None:
|
|
276
|
+
# self.logger.debug("Timestamp: %s" % ar_object.timestamp)
|
|
276
277
|
if ar_object.uuid is not None:
|
|
277
|
-
|
|
278
|
+
instance = AUTOSAR.getInstance()
|
|
279
|
+
old_ar_object = instance.getARObjectByUUID(ar_object.uuid)
|
|
280
|
+
if old_ar_object is not None:
|
|
281
|
+
self.logger.warning(Fore.YELLOW + "Duplicate UUID <%s> / type <%s>" % (ar_object.uuid, type(old_ar_object)) + Fore.WHITE)
|
|
282
|
+
else:
|
|
283
|
+
instance.addARObject(ar_object)
|
|
284
|
+
# self.logger.debug("UUID: %s" % ar_object.uuid)
|
|
278
285
|
|
|
279
286
|
def getAUTOSARInfo(self, element: ET.Element, document: AUTOSAR):
|
|
280
287
|
key = "{http://www.w3.org/2001/XMLSchema-instance}schemaLocation"
|
|
@@ -295,12 +302,9 @@ class AbstractARXMLParser:
|
|
|
295
302
|
if item != "*" and item != ".":
|
|
296
303
|
keys[idx] = "xmlns:%s" % item
|
|
297
304
|
return "/".join(keys)
|
|
298
|
-
|
|
299
|
-
def
|
|
300
|
-
return parent.find("xmlns:./child::%s" % key, self.nsmap)
|
|
301
|
-
|
|
302
|
-
def find(self, parent:ET.Element, key: str) -> ET.Element:
|
|
305
|
+
|
|
306
|
+
def find(self, parent: ET.Element, key: str) -> ET.Element:
|
|
303
307
|
return parent.find(self.convert_find_key(key), self.nsmap)
|
|
304
308
|
|
|
305
309
|
def findall(self, parent: ET.Element, key: str) -> List[ET.Element]:
|
|
306
|
-
return parent.findall(self.convert_find_key(key), self.nsmap)
|
|
310
|
+
return parent.findall(self.convert_find_key(key), self.nsmap)
|