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.
Files changed (52) hide show
  1. armodel/cli/arxml_dump_cli.py +33 -22
  2. armodel/cli/arxml_format_cli.py +25 -13
  3. armodel/models/M2/AUTOSARTemplates/AutosarTopLevelStructure.py +64 -29
  4. armodel/models/M2/AUTOSARTemplates/BswModuleTemplate/BswBehavior.py +322 -63
  5. armodel/models/M2/AUTOSARTemplates/BswModuleTemplate/BswOverview.py +134 -35
  6. armodel/models/M2/AUTOSARTemplates/CommonStructure/InternalBehavior.py +10 -1
  7. armodel/models/M2/AUTOSARTemplates/CommonStructure/TriggerDeclaration.py +18 -2
  8. armodel/models/M2/AUTOSARTemplates/ECUCDescriptionTemplate.py +20 -19
  9. armodel/models/M2/AUTOSARTemplates/EcuResourceTemplate/HwElementCategory.py +59 -0
  10. armodel/models/M2/AUTOSARTemplates/EcuResourceTemplate/__init__.py +145 -0
  11. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/ARPackage.py +214 -156
  12. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/Identifiable.py +60 -32
  13. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Components/__init__.py +63 -42
  14. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Composition/__init__.py +1 -0
  15. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/EndToEndProtection.py +13 -6
  16. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/PortInterface/__init__.py +111 -38
  17. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/AccessCount.py +9 -1
  18. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/ModeDeclarationGroup.py +5 -4
  19. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/__init__.py +9 -1
  20. armodel/models/M2/AUTOSARTemplates/SystemTemplate/DataMapping.py +167 -5
  21. armodel/models/M2/AUTOSARTemplates/SystemTemplate/{ECUResourceMapping.py → EcuResourceMapping.py} +4 -3
  22. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Can/CanTopology.py +31 -21
  23. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Ethernet/EthernetFrame.py +5 -3
  24. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Flexray/FlexrayCommunication.py +76 -0
  25. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Flexray/FlexrayTopology.py +654 -0
  26. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Flexray/__init__.py +0 -0
  27. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/CoreCommunication.py +64 -31
  28. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/CoreTopology.py +158 -40
  29. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/EcuInstance.py +19 -6
  30. armodel/models/M2/AUTOSARTemplates/SystemTemplate/InstanceRefs.py +2 -0
  31. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Transformer/__init__.py +524 -0
  32. armodel/models/M2/AUTOSARTemplates/SystemTemplate/__init__.py +15 -13
  33. armodel/models/__init__.py +5 -1
  34. armodel/parser/abstract_arxml_parser.py +34 -30
  35. armodel/parser/arxml_parser.py +1196 -525
  36. armodel/parser/file_parser.py +5 -3
  37. armodel/tests/test_armodel/models/test_ar_package.py +6 -11
  38. armodel/tests/test_armodel/models/test_port_interface.py +116 -117
  39. armodel/tests/test_armodel/parser/test_bsw_module_descriiption.py +109 -109
  40. armodel/tests/test_armodel/parser/test_sw_components.py +38 -27
  41. armodel/tests/test_armodel/parser/test_system.py +2 -8
  42. armodel/transformer/__init__.py +0 -0
  43. armodel/transformer/abstract.py +6 -0
  44. armodel/transformer/admin_data.py +31 -0
  45. armodel/writer/abstract_arxml_writer.py +22 -29
  46. armodel/writer/arxml_writer.py +1198 -477
  47. {armodel-1.7.7.dist-info → armodel-1.7.8.dist-info}/METADATA +41 -1
  48. {armodel-1.7.7.dist-info → armodel-1.7.8.dist-info}/RECORD +52 -43
  49. {armodel-1.7.7.dist-info → armodel-1.7.8.dist-info}/LICENSE +0 -0
  50. {armodel-1.7.7.dist-info → armodel-1.7.8.dist-info}/WHEEL +0 -0
  51. {armodel-1.7.7.dist-info → armodel-1.7.8.dist-info}/entry_points.txt +0 -0
  52. {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.PrimitiveTypes import RefType
13
- from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARBoolean
14
- from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import Limit
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 = None) -> None:
20
- if type(self) == AbstractARXMLParser:
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'] == True):
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'] == True):
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 == None:
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 == None:
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 == None:
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 == None:
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") # read the timestamp
272
- ar_object.uuid = self.readElementOptionalAttrib(element, "UUID") # read the 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
- self.logger.debug("Timestamp: %s" % ar_object.timestamp)
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
- self.logger.debug("UUID: %s" % ar_object.uuid)
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 findChild(self, parent:ET.Element, key: str) -> ET.Element:
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)