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.
- armodel/cli/format_xml_cli.py +62 -0
- armodel/cli/uuid_checker_cli.py +94 -0
- armodel/models/M2/AUTOSARTemplates/AutosarTopLevelStructure.py +4 -1
- armodel/models/M2/AUTOSARTemplates/BswModuleTemplate/BswBehavior.py +7 -0
- armodel/models/M2/AUTOSARTemplates/BswModuleTemplate/BswInterfaces.py +7 -4
- armodel/models/M2/AUTOSARTemplates/CommonStructure/ImplementationDataTypes.py +17 -15
- armodel/models/M2/AUTOSARTemplates/CommonStructure/TriggerDeclaration.py +1 -1
- armodel/models/M2/AUTOSARTemplates/CommonStructure/__init__.py +44 -28
- armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/Identifiable.py +5 -5
- armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/PrimitiveTypes.py +15 -3
- armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Communication.py +247 -45
- armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/AutosarVariableRef.py +9 -6
- armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/DataElements.py +7 -5
- armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/RTEEvents.py +3 -3
- armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/Trigger.py +43 -2
- armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/__init__.py +40 -43
- armodel/models/M2/MSR/AsamHdo/ComputationMethod.py +13 -12
- armodel/models/M2/MSR/DataDictionary/DataDefProperties.py +40 -9
- armodel/models/utils/uuid_mgr.py +6 -0
- armodel/parser/abstract_arxml_parser.py +5 -1
- armodel/parser/arxml_parser.py +111 -62
- armodel/tests/test_armodel/models/test_common_structure.py +2 -2
- armodel/tests/test_armodel/parser/test_arxml_parser.py +38 -0
- armodel/tests/test_armodel/parser/test_implementation_data_type.py +247 -0
- armodel/tests/test_armodel/parser/test_rte_event.py +142 -0
- armodel/tests/test_armodel/parser/test_runnable_entity.py +135 -0
- armodel/writer/abstract_arxml_writer.py +2 -0
- armodel/writer/arxml_writer.py +106 -28
- {armodel-1.8.2.dist-info → armodel-1.8.4.dist-info}/METADATA +19 -1
- {armodel-1.8.2.dist-info → armodel-1.8.4.dist-info}/RECORD +34 -29
- {armodel-1.8.2.dist-info → armodel-1.8.4.dist-info}/entry_points.txt +2 -0
- {armodel-1.8.2.dist-info → armodel-1.8.4.dist-info}/LICENSE +0 -0
- {armodel-1.8.2.dist-info → armodel-1.8.4.dist-info}/WHEEL +0 -0
- {armodel-1.8.2.dist-info → armodel-1.8.4.dist-info}/top_level.txt +0 -0
armodel/parser/arxml_parser.py
CHANGED
|
@@ -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
|
-
|
|
311
|
-
|
|
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
|
-
|
|
400
|
-
instance_ref.setAutosarVariableIRef(self.getVariableInAtomicSWCTypeInstanceRef(self.find(child_element, "AUTOSAR-VARIABLE-IREF")))
|
|
401
|
-
|
|
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.
|
|
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.
|
|
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
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
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
|
|
1825
|
-
|
|
1826
|
-
|
|
1827
|
-
|
|
1828
|
-
|
|
1829
|
-
|
|
1830
|
-
|
|
1831
|
-
|
|
1832
|
-
|
|
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.
|
|
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
|
-
|
|
1877
|
-
|
|
1878
|
-
|
|
1879
|
-
|
|
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
|
-
|
|
1953
|
-
|
|
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
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
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
|
-
|
|
2039
|
-
|
|
2040
|
-
|
|
2041
|
-
|
|
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
|
-
|
|
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
|
-
|
|
2073
|
-
|
|
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.
|
|
2458
|
-
|
|
2459
|
-
|
|
2460
|
-
|
|
2461
|
-
|
|
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.
|
|
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.
|
|
81
|
-
sub_type2 = data_type.
|
|
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"
|