armodel 1.8.2__py3-none-any.whl → 1.8.4__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 (34) hide show
  1. armodel/cli/format_xml_cli.py +62 -0
  2. armodel/cli/uuid_checker_cli.py +94 -0
  3. armodel/models/M2/AUTOSARTemplates/AutosarTopLevelStructure.py +4 -1
  4. armodel/models/M2/AUTOSARTemplates/BswModuleTemplate/BswBehavior.py +7 -0
  5. armodel/models/M2/AUTOSARTemplates/BswModuleTemplate/BswInterfaces.py +7 -4
  6. armodel/models/M2/AUTOSARTemplates/CommonStructure/ImplementationDataTypes.py +17 -15
  7. armodel/models/M2/AUTOSARTemplates/CommonStructure/TriggerDeclaration.py +1 -1
  8. armodel/models/M2/AUTOSARTemplates/CommonStructure/__init__.py +44 -28
  9. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/Identifiable.py +5 -5
  10. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/PrimitiveTypes.py +15 -3
  11. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Communication.py +247 -45
  12. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/AutosarVariableRef.py +9 -6
  13. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/DataElements.py +7 -5
  14. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/RTEEvents.py +3 -3
  15. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/Trigger.py +43 -2
  16. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/__init__.py +40 -43
  17. armodel/models/M2/MSR/AsamHdo/ComputationMethod.py +13 -12
  18. armodel/models/M2/MSR/DataDictionary/DataDefProperties.py +40 -9
  19. armodel/models/utils/uuid_mgr.py +6 -0
  20. armodel/parser/abstract_arxml_parser.py +5 -1
  21. armodel/parser/arxml_parser.py +111 -62
  22. armodel/tests/test_armodel/models/test_common_structure.py +2 -2
  23. armodel/tests/test_armodel/parser/test_arxml_parser.py +38 -0
  24. armodel/tests/test_armodel/parser/test_implementation_data_type.py +247 -0
  25. armodel/tests/test_armodel/parser/test_rte_event.py +142 -0
  26. armodel/tests/test_armodel/parser/test_runnable_entity.py +135 -0
  27. armodel/writer/abstract_arxml_writer.py +2 -0
  28. armodel/writer/arxml_writer.py +106 -28
  29. {armodel-1.8.2.dist-info → armodel-1.8.4.dist-info}/METADATA +19 -1
  30. {armodel-1.8.2.dist-info → armodel-1.8.4.dist-info}/RECORD +34 -29
  31. {armodel-1.8.2.dist-info → armodel-1.8.4.dist-info}/entry_points.txt +2 -0
  32. {armodel-1.8.2.dist-info → armodel-1.8.4.dist-info}/LICENSE +0 -0
  33. {armodel-1.8.2.dist-info → armodel-1.8.4.dist-info}/WHEEL +0 -0
  34. {armodel-1.8.2.dist-info → armodel-1.8.4.dist-info}/top_level.txt +0 -0
@@ -31,6 +31,7 @@ from ..models.M2.MSR.Documentation.TextModel.BlockElements.PaginationAndView imp
31
31
 
32
32
  from ..models.M2.AUTOSARTemplates.AutosarTopLevelStructure import AUTOSAR
33
33
  from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswBehavior import BswApiOptions, BswAsynchronousServerCallPoint, BswBackgroundEvent
34
+ from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswBehavior import BswSynchronousServerCallPoint
34
35
  from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswBehavior import BswCalledEntity, BswDataReceivedEvent, BswModuleCallPoint
35
36
  from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswBehavior import BswInternalTriggeringPoint, BswOperationInvokedEvent
36
37
  from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswBehavior import BswDataReceptionPolicy, BswExternalTriggerOccurredEvent, BswInternalBehavior
@@ -62,7 +63,7 @@ from ..models.M2.AUTOSARTemplates.CommonStructure.ServiceNeeds import RoleBasedD
62
63
  from ..models.M2.AUTOSARTemplates.CommonStructure.StandardizationTemplate.BlueprintDedicated.PortPrototypeBlueprint import PortPrototypeBlueprint
63
64
  from ..models.M2.AUTOSARTemplates.CommonStructure.StandardizationTemplate.Keyword import Keyword, KeywordSet
64
65
  from ..models.M2.AUTOSARTemplates.CommonStructure.Implementation import Implementation
65
- from ..models.M2.AUTOSARTemplates.CommonStructure.ImplementationDataTypes import ImplementationDataType
66
+ from ..models.M2.AUTOSARTemplates.CommonStructure.ImplementationDataTypes import ImplementationDataType, ImplementationDataTypeElement
66
67
  from ..models.M2.AUTOSARTemplates.CommonStructure.Timing.TimingConstraint.ExecutionOrderConstraint import ExecutionOrderConstraint
67
68
  from ..models.M2.AUTOSARTemplates.CommonStructure.Timing.TimingConstraint.TimingExtensions import SwcTiming, TimingExtension
68
69
  from ..models.M2.AUTOSARTemplates.CommonStructure.TriggerDeclaration import Trigger
@@ -101,6 +102,7 @@ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Composition.InstanceRefs i
101
102
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Composition.InstanceRefs import ROperationInAtomicSwcInstanceRef, RPortInCompositionInstanceRef
102
103
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.PortInterface.InstanceRefs import ApplicationCompositeElementInPortInterfaceInstanceRef
103
104
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Communication import CompositeNetworkRepresentation, ModeSwitchedAckRequest
105
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Communication import TransformationComSpecProps, UserDefinedTransformationComSpecProps
104
106
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Communication import TransmissionAcknowledgementRequest
105
107
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Communication import ClientComSpec, ModeSwitchReceiverComSpec, ModeSwitchSenderComSpec
106
108
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Communication import NonqueuedReceiverComSpec, NonqueuedSenderComSpec, ParameterRequireComSpec
@@ -140,6 +142,7 @@ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.ModeDe
140
142
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.ModeDeclarationGroup import ModeAccessPoint, ModeSwitchPoint
141
143
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.PortAPIOptions import PortAPIOption, PortDefinedArgumentValue
142
144
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.RTEEvents import AsynchronousServerCallReturnsEvent, BackgroundEvent
145
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.RTEEvents import DataSendCompletedEvent
143
146
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.RTEEvents import DataReceivedEvent, InitEvent, InternalTriggerOccurredEvent
144
147
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.RTEEvents import ModeSwitchedAckEvent, OperationInvokedEvent, RTEEvent
145
148
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.RTEEvents import SwcModeSwitchEvent, TimingEvent
@@ -236,6 +239,7 @@ class ARXMLParser(AbstractARXMLParser):
236
239
  def readSd(self, element: ET.Element, sdg: Sdg):
237
240
  for child_element in self.findall(element, "./SD"):
238
241
  sd = Sd()
242
+ self.readARObjectAttributes(child_element, sd)
239
243
  if 'GID' in child_element.attrib:
240
244
  sd.setGID(child_element.attrib['GID'])
241
245
  sd.setValue(child_element.text)
@@ -252,6 +256,7 @@ class ARXMLParser(AbstractARXMLParser):
252
256
 
253
257
  def getSdg(self, element: ET.Element) -> Sdg:
254
258
  sdg = Sdg()
259
+ self.readARObjectAttributes(element, sdg)
255
260
  if 'GID' in element.attrib:
256
261
  sdg.setGID(element.attrib["GID"])
257
262
  self.readSdgCaption(element, sdg)
@@ -307,8 +312,9 @@ class ARXMLParser(AbstractARXMLParser):
307
312
  if child_element is not None:
308
313
  # self.logger.debug("Read AdminData")
309
314
  admin_data = AdminData()
310
- admin_data.setLanguage(self.getChildElementOptionalLiteral(child_element, "LANGUAGE")) \
311
- .setUsedLanguages(self.getMultiLanguagePlainText(child_element, "USED-LANGUAGES"))
315
+ self.readARObjectAttributes(child_element, admin_data)
316
+ admin_data.setLanguage(self.getChildElementOptionalLiteral(child_element, "LANGUAGE"))
317
+ admin_data.setUsedLanguages(self.getMultiLanguagePlainText(child_element, "USED-LANGUAGES"))
312
318
 
313
319
  self.readAdminDataSdgs(child_element, admin_data)
314
320
  self.readAdminDataDocRevisions(child_element, admin_data)
@@ -396,19 +402,11 @@ class ARXMLParser(AbstractARXMLParser):
396
402
  instance_ref = None
397
403
  if (child_element is not None):
398
404
  instance_ref = AutosarVariableRef()
399
- # self.readARObjectAttributes(child_element, ref)
400
- instance_ref.setAutosarVariableIRef(self.getVariableInAtomicSWCTypeInstanceRef(self.find(child_element, "AUTOSAR-VARIABLE-IREF"))) \
401
- .setLocalVariableRef(self.getChildElementOptionalRefType(child_element, "LOCAL-VARIABLE-REF"))
405
+ self.readARObjectAttributes(child_element, instance_ref)
406
+ instance_ref.setAutosarVariableIRef(self.getVariableInAtomicSWCTypeInstanceRef(self.find(child_element, "AUTOSAR-VARIABLE-IREF")))
407
+ instance_ref.setLocalVariableRef(self.getChildElementOptionalRefType(child_element, "LOCAL-VARIABLE-REF"))
402
408
  return instance_ref
403
409
 
404
- def getLocalVariableRef(self, element: ET.Element, key: str) -> AutosarVariableRef:
405
- child_element = self.find(element, key)
406
- ref = None
407
- if (child_element is not None):
408
- ref = AutosarVariableRef()
409
- ref.setLocalVariableRef(self.getChildElementOptionalRefType(child_element, "LOCAL-VARIABLE-REF"))
410
- return ref
411
-
412
410
  def _readVariableAccesses(self, element: ET.Element, parent: RunnableEntity, key: str):
413
411
  for child_element in self.findall(element, "%s/VARIABLE-ACCESS" % key):
414
412
  short_name = self.getShortName(child_element)
@@ -432,10 +430,10 @@ class ARXMLParser(AbstractARXMLParser):
432
430
  variable_access.setAccessedVariableRef(self.getAutosarVariableRef(child_element, "ACCESSED-VARIABLE"))
433
431
  elif (key == "WRITTEN-LOCAL-VARIABLES"):
434
432
  variable_access = parent.createWrittenLocalVariable(short_name)
435
- variable_access.setAccessedVariableRef(self.getLocalVariableRef(child_element, "ACCESSED-VARIABLE"))
433
+ variable_access.setAccessedVariableRef(self.getAutosarVariableRef(child_element, "ACCESSED-VARIABLE"))
436
434
  elif (key == "READ-LOCAL-VARIABLES"):
437
435
  variable_access = parent.createReadLocalVariable(short_name)
438
- variable_access.setAccessedVariableRef(self.getLocalVariableRef(child_element, "ACCESSED-VARIABLE"))
436
+ variable_access.setAccessedVariableRef(self.getAutosarVariableRef(child_element, "ACCESSED-VARIABLE"))
439
437
  else:
440
438
  self.notImplemented("Unsupported Variable Accesss <%s>" % key)
441
439
 
@@ -577,6 +575,7 @@ class ARXMLParser(AbstractARXMLParser):
577
575
 
578
576
  def getRoleBasedPortAssignment(self, element: ET.Element) -> RoleBasedPortAssignment:
579
577
  assignment = RoleBasedPortAssignment()
578
+ self.readARObjectAttributes(element, assignment)
580
579
  assignment.portPrototypeRef = self.getChildElementOptionalRefType(element, "PORT-PROTOTYPE-REF")
581
580
  assignment.role = self.getChildElementOptionalLiteral(element, "ROLE")
582
581
  return assignment
@@ -867,12 +866,19 @@ class ARXMLParser(AbstractARXMLParser):
867
866
  self.readBswModuleCallPoint(element, point)
868
867
  point.setCalledEntryRef(self.getChildElementOptionalRefType(element, "CALLED-ENTRY-REF"))
869
868
 
869
+ def readBswSynchronousServerCallPoint(self, element: ET.Element, point: BswSynchronousServerCallPoint):
870
+ self.readBswModuleCallPoint(element, point)
871
+ point.setCalledEntryRef(self.getChildElementOptionalRefType(element, "CALLED-ENTRY-REF"))
872
+
870
873
  def readBswModuleEntityCallPoints(self, element: ET.Element, entity: BswModuleEntity):
871
874
  for child_element in self.findall(element, "CALL-POINTS/*"):
872
875
  tag_name = self.getTagName(child_element)
873
876
  if tag_name == "BSW-ASYNCHRONOUS-SERVER-CALL-POINT":
874
877
  point = entity.createBswAsynchronousServerCallPoint(self.getShortName(child_element))
875
878
  self.readBswAsynchronousServerCallPoint(child_element, point)
879
+ elif tag_name == "BSW-SYNCHRONOUS-SERVER-CALL-POINT":
880
+ point = entity.createBswSynchronousServerCallPoint(self.getShortName(child_element))
881
+ self.readBswSynchronousServerCallPoint(child_element, point)
876
882
  else:
877
883
  self.notImplemented("Unsupported Call Point <%s>" % tag_name)
878
884
 
@@ -1101,16 +1107,25 @@ class ARXMLParser(AbstractARXMLParser):
1101
1107
  else:
1102
1108
  self.notImplemented("Unsupported Argument <%s>" % tag_name)
1103
1109
 
1110
+ def readBswModuleEntryReturnType(self, element: ET.Element, entry: BswModuleEntry):
1111
+ child_element = self.find(element, "RETURN-TYPE")
1112
+ if child_element is not None:
1113
+ self.logger.debug("Read ReturnType of BswModuleEntry <%s>" % entry.getShortName())
1114
+ return_type = entry.createReturnType(self.getShortName(child_element))
1115
+ self.readSwServiceArg(child_element, return_type)
1116
+
1104
1117
  def readBswModuleEntry(self, element: ET.Element, entry: BswModuleEntry):
1105
1118
  self.logger.debug("Read BswModuleEntry <%s>" % entry.getShortName())
1106
1119
  self.readIdentifiable(element, entry)
1107
1120
  self.readBswModuleEntryArguments(element, entry)
1108
- entry.setIsReentrant(self.getChildElementOptionalBooleanValue(element, "IS-REENTRANT")) \
1109
- .setIsSynchronous(self.getChildElementOptionalBooleanValue(element, "IS-SYNCHRONOUS")) \
1110
- .setServiceId(self.getChildElementOptionalNumericalValue(element, "SERVICE-ID")) \
1111
- .setCallType(self.getChildElementOptionalLiteral(element, "CALL-TYPE")) \
1112
- .setExecutionContext(self.getChildElementOptionalLiteral(element, "EXECUTION-CONTEXT")) \
1113
- .setSwServiceImplPolicy(self.getChildElementOptionalLiteral(element, "SW-SERVICE-IMPL-POLICY"))
1121
+ entry.setIsReentrant(self.getChildElementOptionalBooleanValue(element, "IS-REENTRANT"))
1122
+ entry.setIsSynchronous(self.getChildElementOptionalBooleanValue(element, "IS-SYNCHRONOUS"))
1123
+ entry.setServiceId(self.getChildElementOptionalNumericalValue(element, "SERVICE-ID"))
1124
+ entry.setCallType(self.getChildElementOptionalLiteral(element, "CALL-TYPE"))
1125
+ entry.setExecutionContext(self.getChildElementOptionalLiteral(element, "EXECUTION-CONTEXT"))
1126
+ entry.setSwServiceImplPolicy(self.getChildElementOptionalLiteral(element, "SW-SERVICE-IMPL-POLICY"))
1127
+ entry.setBswEntryKind(self.getChildElementOptionalLiteral(element, "BSW-ENTRY-KIND"))
1128
+ self.readBswModuleEntryReturnType(element, entry)
1114
1129
 
1115
1130
  def readEngineeringObject(self, element: ET.Element, engineering_obj: EngineeringObject):
1116
1131
  self.readARObjectAttributes(element, engineering_obj)
@@ -1539,6 +1554,11 @@ class ARXMLParser(AbstractARXMLParser):
1539
1554
  # self.logger.debug("Read BackgroundEvent <%s>" % event.getShortName())
1540
1555
  self.readRTEEvent(element, event)
1541
1556
 
1557
+ def readDataSendCompletedEvent(self, element, event: DataSendCompletedEvent):
1558
+ # self.logger.debug("Read DataSendCompletedEvent <%s>" % event.getShortName())
1559
+ self.readRTEEvent(element, event)
1560
+ event.setEventSourceRef(self.getChildElementOptionalRefType(element, "EVENT-SOURCE-REF"))
1561
+
1542
1562
  def readSwcInternalBehaviorEvents(self, element: ET.Element, parent: SwcInternalBehavior):
1543
1563
  for child_element in self.findall(element, "EVENTS/*"):
1544
1564
  tag_name = self.getTagName(child_element)
@@ -1569,6 +1589,9 @@ class ARXMLParser(AbstractARXMLParser):
1569
1589
  elif tag_name == "BACKGROUND-EVENT":
1570
1590
  event = parent.createBackgroundEvent(self.getShortName(child_element))
1571
1591
  self.readBackgroundEvent(child_element, event)
1592
+ elif tag_name == "DATA-SEND-COMPLETED-EVENT":
1593
+ event = parent.createDataSendCompletedEvent(self.getShortName(child_element))
1594
+ self.readDataSendCompletedEvent(child_element, event)
1572
1595
  else:
1573
1596
  self.notImplemented("Unsupported SwcInternalBehavior Event <%s>" % tag_name)
1574
1597
 
@@ -1821,21 +1844,27 @@ class ARXMLParser(AbstractARXMLParser):
1821
1844
  data_type.setSwDataDefProps(self.getSwDataDefProps(element, "SW-DATA-DEF-PROPS"))
1822
1845
  self.readApplicationRecordDataTypeElements(element, data_type)
1823
1846
 
1824
- def readImplementationDataTypeElements(self, element: ET.Element, parent: ImplementationDataType):
1825
- for child_element in self.findall(element, "SUB-ELEMENTS/IMPLEMENTATION-DATA-TYPE-ELEMENT"):
1826
- type_element = parent.createImplementationDataTypeElement(self.getShortName(child_element))
1827
- self.readIdentifiable(child_element, type_element)
1828
- type_element.setArraySize(self.getChildElementOptionalLiteral(child_element, "ARRAY-SIZE")) \
1829
- .setArraySizeHandling(self.getChildElementOptionalLiteral(child_element, "ARRAY-SIZE-HANDLING")) \
1830
- .setArraySizeSemantics(self.getChildElementOptionalLiteral(child_element, "ARRAY-SIZE-SEMANTICS"))
1831
- self.readImplementationDataTypeElements(child_element, type_element)
1832
- type_element.setSwDataDefProps(self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS"))
1847
+ def readImplementationDataTypeElement(self, element: ET.Element, impl_data_type_element: ImplementationDataTypeElement):
1848
+ self.readAutosarDataType(element, impl_data_type_element)
1849
+ impl_data_type_element.setArraySize(self.getChildElementOptionalPositiveInteger(element, "ARRAY-SIZE"))
1850
+ impl_data_type_element.setArraySizeHandling(self.getChildElementOptionalLiteral(element, "ARRAY-SIZE-HANDLING"))
1851
+ impl_data_type_element.setArraySizeSemantics(self.getChildElementOptionalLiteral(element, "ARRAY-SIZE-SEMANTICS"))
1852
+ self.readImplementationDataTypeSubElements(element, impl_data_type_element)
1853
+
1854
+ def readImplementationDataTypeSubElements(self, element: ET.Element, parent: ImplementationDataType):
1855
+ for child_element in self.findall(element, "SUB-ELEMENTS/*"):
1856
+ tag_name = self.getTagName(child_element)
1857
+ if tag_name == "IMPLEMENTATION-DATA-TYPE-ELEMENT":
1858
+ impl_data_type_element = parent.createImplementationDataTypeElement(self.getShortName(child_element))
1859
+ self.readImplementationDataTypeElement(child_element, impl_data_type_element)
1860
+ else:
1861
+ self.notImplemented("Unsupported ImplementationDataType SubElement <%s>" % tag_name)
1833
1862
 
1834
1863
  def readImplementationDataType(self, element: ET.Element, data_type: ImplementationDataType):
1835
1864
  self.logger.debug("Read ImplementationDataType <%s>" % data_type.getShortName())
1836
1865
  self.readAutosarDataType(element, data_type)
1837
1866
  data_type.setDynamicArraySizeProfile(self.getChildElementOptionalLiteral(element, "DYNAMIC-ARRAY-SIZE-PROFILE"))
1838
- self.readImplementationDataTypeElements(element, data_type)
1867
+ self.readImplementationDataTypeSubElements(element, data_type)
1839
1868
  self.readImplementationDataTypeSymbolProps(element, data_type)
1840
1869
  data_type.setTypeEmitter(self.getChildElementOptionalLiteral(element, "TYPE-EMITTER"))
1841
1870
 
@@ -1872,11 +1901,13 @@ class ARXMLParser(AbstractARXMLParser):
1872
1901
  self.readARObjectAttributes(element, com_spec)
1873
1902
  for child_element in self.findall(element, "COMPOSITE-NETWORK-REPRESENTATIONS/COMPOSITE-NETWORK-REPRESENTATION"):
1874
1903
  com_spec.addCompositeNetworkRepresentation(self.getCompositeNetworkRepresentation(child_element))
1875
- com_spec.setDataElementRef(self.getChildElementOptionalRefType(element, "DATA-ELEMENT-REF")) \
1876
- .setNetworkRepresentation(self.getSwDataDefProps(element, "NETWORK-REPRESENTATION")) \
1877
- .setHandleOutOfRange(self.getChildElementOptionalLiteral(element, "HANDLE-OUT-OF-RANGE")) \
1878
- .setHandleOutOfRangeStatus(self.getChildElementOptionalLiteral(element, "HANDLE-OUT-OF-RANGE-STATUS")) \
1879
- .setUsesEndToEndProtection(self.getChildElementOptionalBooleanValue(element, "USES-END-TO-END-PROTECTION"))
1904
+ com_spec.setDataElementRef(self.getChildElementOptionalRefType(element, "DATA-ELEMENT-REF"))
1905
+ com_spec.setNetworkRepresentation(self.getSwDataDefProps(element, "NETWORK-REPRESENTATION"))
1906
+ com_spec.setHandleOutOfRange(self.getChildElementOptionalLiteral(element, "HANDLE-OUT-OF-RANGE"))
1907
+ com_spec.setHandleOutOfRangeStatus(self.getChildElementOptionalLiteral(element, "HANDLE-OUT-OF-RANGE-STATUS"))
1908
+ com_spec.setMaxDeltaCounterInit(self.getChildElementOptionalPositiveInteger(element, "MAX-DELTA-COUNTER-INIT"))
1909
+ com_spec.setMaxNoNewOrRepeatedData(self.getChildElementOptionalPositiveInteger(element, "MAX-NO-NEW-OR-REPEATED-DATA"))
1910
+ com_spec.setUsesEndToEndProtection(self.getChildElementOptionalBooleanValue(element, "USES-END-TO-END-PROTECTION"))
1880
1911
 
1881
1912
  def getSwValues(self, element: ET.Element, key: str) -> SwValues:
1882
1913
  child_element = self.find(element, key)
@@ -1948,21 +1979,21 @@ class ARXMLParser(AbstractARXMLParser):
1948
1979
  def getModeSwitchReceiverComSpec(self, element: ET.Element) -> ModeSwitchReceiverComSpec:
1949
1980
  com_spec = ModeSwitchReceiverComSpec()
1950
1981
  self.readARObjectAttributes(element, com_spec)
1951
- com_spec.setEnhancedModeApi(self.getChildElementOptionalBooleanValue(element, "ENHANCED-MODE-API")) \
1952
- .setModeGroupRef(self.getChildElementOptionalRefType(element, "MODE-GROUP-REF")) \
1953
- .setSupportsAsynchronousModeSwitch(self.getChildElementOptionalBooleanValue(element, "SUPPORTS-ASYNCHRONOUS-MODE-SWITCH"))
1982
+ com_spec.setEnhancedModeApi(self.getChildElementOptionalBooleanValue(element, "ENHANCED-MODE-API"))
1983
+ com_spec.setModeGroupRef(self.getChildElementOptionalRefType(element, "MODE-GROUP-REF"))
1984
+ com_spec.setSupportsAsynchronousModeSwitch(self.getChildElementOptionalBooleanValue(element, "SUPPORTS-ASYNCHRONOUS-MODE-SWITCH"))
1954
1985
  return com_spec
1955
1986
 
1956
1987
  def getNonqueuedReceiverComSpec(self, element: ET.Element) -> NonqueuedReceiverComSpec:
1957
1988
  com_spec = NonqueuedReceiverComSpec()
1958
1989
  self.readARObjectAttributes(element, com_spec)
1959
1990
  self.readReceiverComSpec(element, com_spec)
1960
- com_spec.setAliveTimeout(self.getChildElementOptionalFloatValue(element, "ALIVE-TIMEOUT")) \
1961
- .setEnableUpdated(self.getChildElementOptionalBooleanValue(element, "ENABLE-UPDATE")) \
1962
- .setHandleNeverReceived(self.getChildElementOptionalBooleanValue(element, "HANDLE-NEVER-RECEIVED")) \
1963
- .setFilter(self.getDataFilter(element, "FILTER")) \
1964
- .setHandleTimeoutType(self.getChildElementOptionalLiteral(element, "HANDLE-TIMEOUT-TYPE")) \
1965
- .setInitValue(self.getInitValue(element))
1991
+ com_spec.setAliveTimeout(self.getChildElementOptionalFloatValue(element, "ALIVE-TIMEOUT"))
1992
+ com_spec.setEnableUpdated(self.getChildElementOptionalBooleanValue(element, "ENABLE-UPDATE"))
1993
+ com_spec.setHandleNeverReceived(self.getChildElementOptionalBooleanValue(element, "HANDLE-NEVER-RECEIVED"))
1994
+ com_spec.setFilter(self.getDataFilter(element, "FILTER"))
1995
+ com_spec.setHandleTimeoutType(self.getChildElementOptionalLiteral(element, "HANDLE-TIMEOUT-TYPE"))
1996
+ com_spec.setInitValue(self.getInitValue(element))
1966
1997
  return com_spec
1967
1998
 
1968
1999
  def readRequiredComSpec(self, element: ET.Element, parent: RPortPrototype):
@@ -2034,23 +2065,40 @@ class ARXMLParser(AbstractARXMLParser):
2034
2065
  self.readARObjectAttributes(element, com_spec)
2035
2066
  for child_element in self.findall(element, "COMPOSITE-NETWORK-REPRESENTATIONS/COMPOSITE-NETWORK-REPRESENTATION"):
2036
2067
  com_spec.addCompositeNetworkRepresentation(self.getCompositeNetworkRepresentation(child_element))
2037
- com_spec.setDataElementRef(self.getChildElementOptionalRefType(element, "DATA-ELEMENT-REF")) \
2038
- .setNetworkRepresentation(self.getSwDataDefProps(element, "NETWORK-REPRESENTATION")) \
2039
- .setHandleOutOfRange(self.getChildElementOptionalLiteral(element, "HANDLE-OUT-OF-RANGE")) \
2040
- .setTransmissionAcknowledge(self.readTransmissionAcknowledgementRequest(element)) \
2041
- .setUsesEndToEndProtection(self.getChildElementOptionalBooleanValue(element, "USES-END-TO-END-PROTECTION"))
2068
+ com_spec.setDataElementRef(self.getChildElementOptionalRefType(element, "DATA-ELEMENT-REF"))
2069
+ com_spec.setNetworkRepresentation(self.getSwDataDefProps(element, "NETWORK-REPRESENTATION"))
2070
+ com_spec.setHandleOutOfRange(self.getChildElementOptionalLiteral(element, "HANDLE-OUT-OF-RANGE"))
2071
+ com_spec.setTransmissionAcknowledge(self.readTransmissionAcknowledgementRequest(element))
2072
+ com_spec.setUsesEndToEndProtection(self.getChildElementOptionalBooleanValue(element, "USES-END-TO-END-PROTECTION"))
2042
2073
 
2043
2074
  def getNonqueuedSenderComSpec(self, element: ET.Element) -> NonqueuedSenderComSpec:
2044
2075
  com_spec = NonqueuedSenderComSpec()
2045
2076
  self.readSenderComSpec(element, com_spec)
2046
2077
  com_spec.setInitValue(self.getInitValue(element))
2047
2078
  return com_spec
2079
+
2080
+ def readTransformationComSpecProps(self, element: ET.Element, props: TransformationComSpecProps):
2081
+ self.readARObjectAttributes(element, props)
2082
+
2083
+ def readUserDefinedTransformationComSpecProps(self, element: ET.Element, props: UserDefinedTransformationComSpecProps):
2084
+ self.readTransformationComSpecProps(element, props)
2085
+
2086
+ def readServerComSpecTransformationComSpecProps(self, element: ET.Element, com_spec: ServerComSpec):
2087
+ for child_element in self.findall(element, "TRANSFORMATION-COM-SPEC-PROPSS/*"):
2088
+ tag_name = self.getTagName(child_element)
2089
+ if tag_name == "USER-DEFINED-TRANSFORMATION-COM-SPEC-PROPS":
2090
+ props = UserDefinedTransformationComSpecProps()
2091
+ self.readUserDefinedTransformationComSpecProps(child_element, props)
2092
+ com_spec.addTransformationComSpecProps(props)
2093
+ else:
2094
+ self.notImplemented("Unsupported TransformationComSpecProps <%s>" % tag_name)
2048
2095
 
2049
2096
  def getServerComSpec(self, element: ET.Element) -> ServerComSpec:
2050
2097
  com_spec = ServerComSpec()
2051
2098
  self.readARObjectAttributes(element, com_spec)
2052
- com_spec.setOperationRef(self.getChildElementOptionalRefType(element, "OPERATION-REF")) \
2053
- .setQueueLength(self.getChildElementOptionalNumericalValue(element, "QUEUE-LENGTH"))
2099
+ com_spec.setOperationRef(self.getChildElementOptionalRefType(element, "OPERATION-REF"))
2100
+ com_spec.setQueueLength(self.getChildElementOptionalNumericalValue(element, "QUEUE-LENGTH"))
2101
+ self.readServerComSpecTransformationComSpecProps(element, com_spec)
2054
2102
  return com_spec
2055
2103
 
2056
2104
  def getQueuedSenderComSpec(self, element: ET.Element) -> QueuedSenderComSpec:
@@ -2068,9 +2116,9 @@ class ARXMLParser(AbstractARXMLParser):
2068
2116
 
2069
2117
  def getModeSwitchSenderComSpec(self, element) -> ModeSwitchSenderComSpec:
2070
2118
  com_spec = ModeSwitchSenderComSpec()
2071
- com_spec.setModeGroupRef(self.getChildElementOptionalRefType(element, "MODE-GROUP-REF")) \
2072
- .setModeSwitchedAck(self.getModeSwitchedAckRequest(element, "MODE-SWITCHED-ACK")) \
2073
- .setQueueLength(self.getChildElementOptionalNumericalValue(element, "QUEUE-LENGTH"))
2119
+ com_spec.setModeGroupRef(self.getChildElementOptionalRefType(element, "MODE-GROUP-REF"))
2120
+ com_spec.setModeSwitchedAck(self.getModeSwitchedAckRequest(element, "MODE-SWITCHED-ACK"))
2121
+ com_spec.setQueueLength(self.getChildElementOptionalNumericalValue(element, "QUEUE-LENGTH"))
2074
2122
  return com_spec
2075
2123
 
2076
2124
  def readProvidedComSpec(self, element: ET.Element, parent: PPortPrototype):
@@ -2454,11 +2502,12 @@ class ARXMLParser(AbstractARXMLParser):
2454
2502
 
2455
2503
  def readCompuScale(self, element: ET.Element, compu_scale: CompuScale):
2456
2504
  self.readARObjectAttributes(element, compu_scale)
2457
- compu_scale.setLowerLimit(self.getChildLimitElement(element, "LOWER-LIMIT")) \
2458
- .setShortLabel(self.getChildElementOptionalLiteral(element, "SHORT-LABEL")) \
2459
- .setDesc(self.getMultiLanguageOverviewParagraph(element, "DESC")) \
2460
- .setSymbol(self.getChildElementOptionalLiteral(element, "SYMBOL")) \
2461
- .setUpperLimit(self.getChildLimitElement(element, "UPPER-LIMIT"))
2505
+ compu_scale.setShortLabel(self.getChildElementOptionalLiteral(element, "SHORT-LABEL"))
2506
+ compu_scale.setSymbol(self.getChildElementOptionalLiteral(element, "SYMBOL"))
2507
+ compu_scale.setDesc(self.getMultiLanguageOverviewParagraph(element, "DESC"))
2508
+ compu_scale.setMask(self.getChildElementOptionalPositiveInteger(element, "MASK"))
2509
+ compu_scale.setLowerLimit(self.getChildLimitElement(element, "LOWER-LIMIT"))
2510
+ compu_scale.setUpperLimit(self.getChildLimitElement(element, "UPPER-LIMIT"))
2462
2511
  self.readCompuScaleContents(element, compu_scale)
2463
2512
 
2464
2513
  def getCompuScales(self, element: ET.Element) -> CompuScales:
@@ -2520,7 +2569,7 @@ class ARXMLParser(AbstractARXMLParser):
2520
2569
  value_spec = NumericalValueSpecification()
2521
2570
  self.readValueSpecification(element, value_spec)
2522
2571
  value_spec.setShortLabel(self.getChildElementOptionalLiteral(element, "SHORT-LABEL")) \
2523
- .setValue(self.getChildElementOptionalFloatValue(element, "VALUE"))
2572
+ .setValue(self.getChildElementOptionalNumericalValue(element, "VALUE"))
2524
2573
  return value_spec
2525
2574
 
2526
2575
  def getTextValueSpecification(self, element: ET.Element) -> TextValueSpecification:
@@ -77,6 +77,6 @@ class Test_M2_AUTOSARTemplates_CommonStructure_ImplementationDataTypes:
77
77
  assert (sub_type.getShortName() == "sub_type")
78
78
  assert (isinstance(sub_type, ImplementationDataTypeElement))
79
79
 
80
- assert (len(data_type.getImplementationDataTypeElements()) == 1)
81
- sub_type2 = data_type.getImplementationDataTypeElements()[0]
80
+ assert (len(data_type.getSubElements()) == 1)
81
+ sub_type2 = data_type.getSubElements()[0]
82
82
  assert (sub_type == sub_type2)
@@ -1,5 +1,8 @@
1
1
 
2
+ from ....writer.arxml_writer import ARXMLWriter
3
+ from ....models.M2.AUTOSARTemplates.AutosarTopLevelStructure import AUTOSARDoc
2
4
  from ....parser.arxml_parser import ARXMLParser
5
+ import xml.etree.ElementTree as ET
3
6
 
4
7
 
5
8
  class TestARXMLParser:
@@ -13,3 +16,38 @@ class TestARXMLParser:
13
16
  assert (parser.convert_find_key("A/B/*") == "xmlns:A/xmlns:B/*")
14
17
  assert (parser.convert_find_key("./A/B") == "./xmlns:A/xmlns:B")
15
18
  assert (parser.convert_find_key("./A/B/*") == "./xmlns:A/xmlns:B/*")
19
+
20
+ def test_read_ar_packages(self):
21
+ parser = ARXMLParser()
22
+ parser.nsmap = {"xmlns": "http://autosar.org/schema/r4.0"}
23
+ xml_content = """
24
+ <AUTOSAR xmlns="http://autosar.org/schema/r4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://autosar.org/schema/r4.0 AUTOSAR_4-3-0.xsd">
25
+ <AR-PACKAGES T="2023-03-08T00:27:29+08:00" UUID="cb03ce49-8b4b-4565-abce-0a7a054d24af">
26
+ <AR-PACKAGE>
27
+ <SHORT-NAME>ApplicationTypes</SHORT-NAME>s
28
+ <ELEMENTS>
29
+ <IMPLEMENTATION-DATA-TYPE>
30
+ <SHORT-NAME>MyDataType</SHORT-NAME>
31
+ </IMPLEMENTATION-DATA-TYPE>
32
+ </ELEMENTS>
33
+ </AR-PACKAGE>
34
+ <AR-PACKAGE>
35
+ <SHORT-NAME>MyPackage</SHORT-NAME>
36
+ <ELEMENTS>
37
+ <IMPLEMENTATION-DATA-TYPE>
38
+ <SHORT-NAME>MyDataType2</SHORT-NAME>
39
+ </IMPLEMENTATION-DATA-TYPE>
40
+ </ELEMENTS>
41
+ </AR-PACKAGE>
42
+ </AR-PACKAGES>
43
+ </AUTOSAR>
44
+ """ # noqa E501
45
+
46
+ # prepare the XML content
47
+ element = ET.fromstring(xml_content)
48
+
49
+ document = AUTOSARDoc()
50
+ parser.readARPackages(element, document)
51
+ assert len(document.getARPackages()) == 2
52
+ assert document.getARPackages()[0].getShortName() == "ApplicationTypes"
53
+ assert document.getARPackages()[1].getShortName() == "MyPackage"