armodel 1.6.4__py3-none-any.whl → 1.7.0__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 (28) hide show
  1. armodel/cli/arxml_format_cli.py +14 -11
  2. armodel/models/M2/AUTOSARTemplates/BswModuleTemplate/BswBehavior.py +1 -1
  3. armodel/models/M2/AUTOSARTemplates/CommonStructure/Filter.py +86 -0
  4. armodel/models/M2/AUTOSARTemplates/CommonStructure/InternalBehavior.py +3 -4
  5. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/ARPackage.py +3 -1
  6. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/PrimitiveTypes.py +70 -2
  7. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Communication.py +21 -8
  8. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/ModeDeclarationGroup.py +24 -0
  9. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Can/CanTopology.py +173 -0
  10. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/CoreCommunication.py +6 -6
  11. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/CoreTopology.py +237 -28
  12. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/EcuInstance.py +223 -0
  13. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/Timing.py +177 -0
  14. armodel/models/M2/AUTOSARTemplates/SystemTemplate/InstanceRefs.py +37 -0
  15. armodel/models/M2/AUTOSARTemplates/SystemTemplate/__init__.py +88 -16
  16. armodel/models/__init__.py +12 -1
  17. armodel/parser/abstract_arxml_parser.py +50 -16
  18. armodel/parser/arxml_parser.py +249 -80
  19. armodel/tests/test_armodel/parser/test_sw_components.py +0 -22
  20. armodel/tests/test_armodel/parser/test_system.py +2 -2
  21. armodel/writer/abstract_arxml_writer.py +10 -1
  22. armodel/writer/arxml_writer.py +215 -58
  23. {armodel-1.6.4.dist-info → armodel-1.7.0.dist-info}/METADATA +15 -1
  24. {armodel-1.6.4.dist-info → armodel-1.7.0.dist-info}/RECORD +28 -24
  25. {armodel-1.6.4.dist-info → armodel-1.7.0.dist-info}/LICENSE +0 -0
  26. {armodel-1.6.4.dist-info → armodel-1.7.0.dist-info}/WHEEL +0 -0
  27. {armodel-1.6.4.dist-info → armodel-1.7.0.dist-info}/entry_points.txt +0 -0
  28. {armodel-1.6.4.dist-info → armodel-1.7.0.dist-info}/top_level.txt +0 -0
@@ -2,12 +2,16 @@ from typing import List
2
2
  import xml.etree.ElementTree as ET
3
3
  import os
4
4
 
5
- from ..models.M2.MSR.AsamHdo.Constraints.GlobalConstraints import DataConstrRule, InternalConstrs, PhysConstrs
6
- from ..models.M2.MSR.AsamHdo.BaseTypes import BaseTypeDirectDefinition
7
- from ..models.M2.MSR.AsamHdo.SpecialData import Sdg
5
+
6
+
7
+
8
+
8
9
  from ..models.M2.MSR.AsamHdo.AdminData import AdminData
9
- from ..models.M2.MSR.AsamHdo.ComputationMethod import Compu, CompuConst, CompuConstTextContent, CompuNominatorDenominator, CompuRationalCoeffs, CompuScale, CompuScaleConstantContents, CompuScaleRationalFormula, CompuScales
10
- from ..models.M2.MSR.CalibrationData.CalibrationValue import SwValues
10
+ from ..models.M2.MSR.AsamHdo.BaseTypes import BaseTypeDirectDefinition
11
+ from ..models.M2.MSR.AsamHdo.Constraints.GlobalConstraints import DataConstrRule, InternalConstrs, PhysConstrs, DataConstr
12
+ from ..models.M2.MSR.AsamHdo.ComputationMethod import CompuMethod, Compu, CompuConst, CompuConstTextContent, CompuNominatorDenominator, CompuRationalCoeffs, CompuScale, CompuScaleConstantContents, CompuScaleRationalFormula, CompuScales
13
+ from ..models.M2.MSR.AsamHdo.SpecialData import Sdg, Sd
14
+ from ..models.M2.MSR.CalibrationData.CalibrationValue import SwValueCont, SwValues
11
15
  from ..models.M2.MSR.DataDictionary.DataDefProperties import SwDataDefProps, SwPointerTargetProps
12
16
  from ..models.M2.MSR.DataDictionary.CalibrationParameter import SwCalprmAxis
13
17
  from ..models.M2.MSR.DataDictionary.Axis import SwAxisGrouped, SwAxisIndividual
@@ -15,80 +19,67 @@ from ..models.M2.MSR.DataDictionary.RecordLayout import SwRecordLayoutGroupConte
15
19
  from ..models.M2.MSR.DataDictionary.DataDefProperties import ValueList
16
20
  from ..models.M2.MSR.DataDictionary.RecordLayout import SwRecordLayoutGroup
17
21
  from ..models.M2.MSR.DataDictionary.CalibrationParameter import SwCalprmAxisSet
18
- from ..models.M2.MSR.Documentation.TextModel.LanguageDataModel import LLongName
22
+ from ..models.M2.MSR.Documentation.Annotation import Annotation, GeneralAnnotation
19
23
  from ..models.M2.MSR.Documentation.BlockElements import DocumentationBlock
20
- from ..models.M2.MSR.Documentation.TextModel.LanguageDataModel import LOverviewParagraph
24
+ from ..models.M2.MSR.Documentation.TextModel.LanguageDataModel import LLongName, LOverviewParagraph
21
25
  from ..models.M2.MSR.Documentation.TextModel.MultilanguageData import MultiLanguageOverviewParagraph, MultiLanguageParagraph, MultilanguageLongName
22
- from ..models.M2.MSR.Documentation.Annotation import GeneralAnnotation
23
26
 
24
- from ..models.M2.AUTOSARTemplates.CommonStructure import SwcInternalBehavior
25
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.PortAPIOptions import PortAPIOption, PortDefinedArgumentValue
26
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.RTEEvents import DataReceivedEvent, OperationInvokedEvent, RTEEvent, SwcModeSwitchEvent
27
- from ..models.M2.AUTOSARTemplates.CommonStructure.Timing.TimingConstraint.ExecutionOrderConstraint import ExecutionOrderConstraint
28
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Datatype.Datatypes import ApplicationCompositeDataType, ApplicationDataType, AutosarDataType, DataTypeMap, DataTypeMappingSet
29
- from ..models.M2.AUTOSARTemplates.CommonStructure.Implementation import Code
30
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.EndToEndProtection import EndToEndDescription, EndToEndProtection, EndToEndProtectionVariablePrototype
31
- from ..models.M2.AUTOSARTemplates.CommonStructure.ModeDeclaration import ModeDeclarationGroup, ModeRequestTypeMap
32
- from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.EngineeringObject import AutosarEngineeringObject, EngineeringObject
27
+ from ..models.M2.AUTOSARTemplates.AutosarTopLevelStructure import AUTOSAR
28
+ from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswBehavior import BswInternalBehavior, BswModuleEntity, BswScheduleEvent, BswModeSenderPolicy
29
+ from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswImplementation import BswImplementation
30
+ from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswOverview import BswModuleDescription
31
+ from ..models.M2.AUTOSARTemplates.CommonStructure import ApplicationValueSpecification, ArrayValueSpecification, ConstantReference, NumericalValueSpecification, RecordValueSpecification, TextValueSpecification, ValueSpecification
32
+ from ..models.M2.AUTOSARTemplates.CommonStructure.Filter import DataFilter
33
+ from ..models.M2.AUTOSARTemplates.CommonStructure.Implementation import ImplementationProps, Code
34
+ from ..models.M2.AUTOSARTemplates.CommonStructure.ModeDeclaration import ModeDeclarationGroup, ModeRequestTypeMap, ModeDeclarationGroupPrototype
33
35
  from ..models.M2.AUTOSARTemplates.CommonStructure.ResourceConsumption import ResourceConsumption
34
36
  from ..models.M2.AUTOSARTemplates.CommonStructure.ResourceConsumption.MemorySectionUsage import MemorySection
35
- from ..models.M2.AUTOSARTemplates.CommonStructure.InternalBehavior import ExecutableEntity
36
- from ..models.M2.AUTOSARTemplates.CommonStructure.SwcInternalBehavior.ModeDeclarationGroup import IncludedModeDeclarationGroupSet
37
+ from ..models.M2.AUTOSARTemplates.CommonStructure.InternalBehavior import ExecutableEntity, InternalBehavior
37
38
  from ..models.M2.AUTOSARTemplates.CommonStructure.SwcBswMapping import SwcBswMapping, SwcBswRunnableMapping
38
- from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.Identifiable import Identifiable
39
- from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswBehavior import BswInternalBehavior, BswModuleEntity, BswScheduleEvent
40
- from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ARPackage import ARPackage
41
- from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import RefType
42
- from ..models.M2.AUTOSARTemplates.CommonStructure.Implementation import ImplementationProps
43
- from ..models.M2.AUTOSARTemplates.CommonStructure import ApplicationValueSpecification, ArrayValueSpecification, ConstantReference, NumericalValueSpecification, RecordValueSpecification, TextValueSpecification, ValueSpecification
39
+ from ..models.M2.AUTOSARTemplates.CommonStructure.ServiceNeeds import RoleBasedDataAssignment, ServiceDependency
40
+ from ..models.M2.AUTOSARTemplates.CommonStructure.Implementation import Implementation
41
+ from ..models.M2.AUTOSARTemplates.CommonStructure.ImplementationDataTypes import ImplementationDataType
42
+ from ..models.M2.AUTOSARTemplates.CommonStructure.Timing.TimingConstraint.ExecutionOrderConstraint import ExecutionOrderConstraint
43
+ from ..models.M2.AUTOSARTemplates.CommonStructure.Timing.TimingConstraint.TimingExtensions import TimingExtension
44
+ from ..models.M2.AUTOSARTemplates.ECUCDescriptionTemplate import EcucAbstractReferenceValue, EcucContainerValue, EcucInstanceReferenceValue, EcucModuleConfigurationValues, EcucNumericalParamValue, EcucParameterValue, EcucReferenceValue, EcucTextualParamValue, EcucValueCollection
44
45
  from ..models.M2.AUTOSARTemplates.GenericStructure.AbstractStructure import AnyInstanceRef
45
- from ..models.M2.AUTOSARTemplates.CommonStructure.ImplementationDataTypes import ImplementationDataType, ImplementationDataTypeElement
46
+ from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.Identifiable import Identifiable, MultilanguageReferrable
47
+ from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.EngineeringObject import AutosarEngineeringObject, EngineeringObject
48
+ from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ARPackage import ARPackage
49
+ from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import RefType, ARLiteral
50
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.PortAPIOptions import PortAPIOption, PortDefinedArgumentValue
51
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.RTEEvents import DataReceivedEvent, OperationInvokedEvent, RTEEvent, SwcModeSwitchEvent
52
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Datatype.Datatypes import ApplicationRecordDataType, ApplicationArrayDataType, ApplicationCompositeDataType, ApplicationDataType, AutosarDataType, DataTypeMap, DataTypeMappingSet
53
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.EndToEndProtection import EndToEndProtectionSet, EndToEndDescription, EndToEndProtection, EndToEndProtectionVariablePrototype
46
54
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Composition.InstanceRefs import POperationInAtomicSwcInstanceRef, PPortInCompositionInstanceRef, ROperationInAtomicSwcInstanceRef, RPortInCompositionInstanceRef
47
55
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.PortInterface.InstanceRefs import ApplicationCompositeElementInPortInterfaceInstanceRef
48
56
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.InstanceRefsUsage import AutosarParameterRef, AutosarVariableRef, VariableInAtomicSWCTypeInstanceRef
49
- from ..models.M2.AUTOSARTemplates.SystemTemplate.InstanceRefs import VariableDataPrototypeInSystemInstanceRef
57
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Communication import CompositeNetworkRepresentation, TransmissionAcknowledgementRequest
58
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.IncludedDataTypes import IncludedDataTypeSet
50
59
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components.InstanceRefs import InnerPortGroupInCompositionInstanceRef, PModeGroupInAtomicSwcInstanceRef, RModeGroupInAtomicSWCInstanceRef, RModeInAtomicSwcInstanceRef, RVariableInAtomicSwcInstanceRef
51
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior import RunnableEntity, RunnableEntityArgument
60
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior import RunnableEntity, RunnableEntityArgument, SwcInternalBehavior
52
61
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components import CompositionSwComponentType, PortGroup, SwComponentType, SymbolProps, PPortPrototype, RPortPrototype
53
62
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Composition import AssemblySwConnector, DelegationSwConnector
54
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.ModeDeclarationGroup import ModeAccessPoint
63
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.ModeDeclarationGroup import IncludedModeDeclarationGroupSet, ModeAccessPoint
55
64
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.ServerCall import ServerCallPoint
65
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.ServiceMapping import RoleBasedPortAssignment, SwcServiceDependency
56
66
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Communication import ClientComSpec, ModeSwitchReceiverComSpec, ModeSwitchSenderComSpec, NonqueuedReceiverComSpec, NonqueuedSenderComSpec, ParameterRequireComSpec, QueuedReceiverComSpec, QueuedSenderComSpec, ReceiverComSpec, SenderComSpec, ServerComSpec
57
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Lin.LinCommunication import LinFrameTriggering
58
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreTopology import AbstractCanCluster, CanPhysicalChannel, CommunicationCluster, LinPhysicalChannel, PhysicalChannel
59
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Can.CanCommunication import CanFrameTriggering, RxIdentifierRange
60
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Multiplatform import ISignalMapping
61
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreCommunication import Frame, FrameTriggering, IPdu, ISignalIPdu, ISignalTriggering, PduTriggering
62
- from ..models.M2.AUTOSARTemplates.SystemTemplate import System, SystemMapping
63
- from ..models.M2.AUTOSARTemplates.SystemTemplate.DataMapping import SenderReceiverToSignalGroupMapping, SenderReceiverToSignalMapping
64
- from ..models.M2.AUTOSARTemplates.SystemTemplate.NetworkManagement import CanNmCluster, CanNmClusterCoupling, CanNmNode, NmCluster, NmConfig, NmNode
65
- from ..models.M2.AUTOSARTemplates.ECUCDescriptionTemplate import EcucAbstractReferenceValue, EcucContainerValue, EcucInstanceReferenceValue, EcucModuleConfigurationValues, EcucNumericalParamValue, EcucParameterValue, EcucReferenceValue, EcucTextualParamValue, EcucValueCollection
66
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Communication import CompositeNetworkRepresentation, TransmissionAcknowledgementRequest
67
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.IncludedDataTypes import IncludedDataTypeSet
68
- from ..models.M2.AUTOSARTemplates.CommonStructure.Timing.TimingConstraint.TimingExtensions import TimingExtension
69
- from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswBehavior import BswModeSenderPolicy
70
67
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.PortInterface import ArgumentDataPrototype, ClientServerInterface, ClientServerOperation, InvalidationPolicy, ModeSwitchInterface, ParameterInterface, PortInterface, SenderReceiverInterface
71
- from ..models.M2.AUTOSARTemplates.CommonStructure.ModeDeclaration import ModeDeclarationGroupPrototype
72
- from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswImplementation import BswImplementation
73
- from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.Identifiable import MultilanguageReferrable
74
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Datatype.Datatypes import ApplicationArrayDataType
75
-
76
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.EndToEndProtection import EndToEndProtectionSet
77
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.ServiceMapping import RoleBasedPortAssignment, SwcServiceDependency
78
- from ..models.M2.AUTOSARTemplates.AutosarTopLevelStructure import AUTOSAR
79
- from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARLiteral
80
- from ..models.M2.AUTOSARTemplates.CommonStructure.ServiceNeeds import RoleBasedDataAssignment, ServiceDependency
81
68
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components import AtomicSwComponentType
82
69
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Datatype.DataPrototypes import ApplicationCompositeElementDataPrototype, AutosarDataPrototype, DataPrototype, ParameterDataPrototype, VariableDataPrototype
83
- from ..models.M2.AUTOSARTemplates.CommonStructure.Implementation import Implementation
84
- from ..models.M2.MSR.Documentation.Annotation import Annotation
85
- from ..models.M2.MSR.AsamHdo.Constraints.GlobalConstraints import DataConstr
86
- from ..models.M2.MSR.AsamHdo.SpecialData import Sd
87
- from ..models.M2.MSR.AsamHdo.ComputationMethod import CompuMethod
88
- from ..models.M2.MSR.CalibrationData.CalibrationValue import SwValueCont
89
- from ..models.M2.AUTOSARTemplates.CommonStructure.InternalBehavior import InternalBehavior
90
- from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswOverview import BswModuleDescription
91
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Datatype.Datatypes import ApplicationRecordDataType
70
+
71
+ from ..models.M2.AUTOSARTemplates.SystemTemplate import SwcToEcuMapping , System, SystemMapping
72
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.DataMapping import SenderReceiverToSignalGroupMapping, SenderReceiverToSignalMapping
73
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.NetworkManagement import CanNmCluster, CanNmClusterCoupling, CanNmNode, NmCluster, NmConfig, NmNode
74
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.InstanceRefs import ComponentInSystemInstanceRef, VariableDataPrototypeInSystemInstanceRef
75
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Lin.LinCommunication import LinFrameTriggering
76
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreTopology import AbstractCanCluster, CanPhysicalChannel, CommConnectorPort, CommunicationCluster, CommunicationConnector, FramePort, IPduPort, ISignalPort, LinPhysicalChannel, PhysicalChannel
77
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreCommunication import Frame, FrameTriggering, IPdu, IPduTiming, ISignalIPdu, ISignalTriggering, PduTriggering
78
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.Timing import CyclicTiming, EventControlledTiming, TimeRangeType, TransmissionModeCondition, TransmissionModeDeclaration, TransmissionModeTiming
79
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.EcuInstance import EcuInstance
80
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Can.CanCommunication import CanFrameTriggering, RxIdentifierRange
81
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Can.CanTopology import CanCommunicationConnector, CanCommunicationController
82
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Multiplatform import ISignalMapping
92
83
 
93
84
  from .abstract_arxml_parser import AbstractARXMLParser
94
85
 
@@ -186,29 +177,39 @@ class ARXMLParser(AbstractARXMLParser):
186
177
  return paragraph
187
178
 
188
179
  def getVariableInAtomicSWCTypeInstanceRef(self, element: ET.Element) -> VariableInAtomicSWCTypeInstanceRef:
189
- autosar_variable_iref = None
180
+ iref = None
181
+ if element is not None:
182
+ iref = VariableInAtomicSWCTypeInstanceRef()
183
+ self.readElementAttributes(element, iref)
184
+ iref.setPortPrototypeRef(self.getChildElementOptionalRefType(element, "PORT-PROTOTYPE-REF"))
185
+ iref.setTargetDataPrototypeRef(self.getChildElementOptionalRefType(element, "TARGET-DATA-PROTOTYPE-REF"))
186
+ return iref
187
+
188
+ def getComponentInSystemInstanceRef(self, element: ET.Element) -> ComponentInSystemInstanceRef:
189
+ iref = None
190
190
  if element is not None:
191
- autosar_variable_iref = VariableInAtomicSWCTypeInstanceRef()
192
- self.readElementAttributes(element, autosar_variable_iref)
193
- autosar_variable_iref.setPortPrototypeRef(self.getChildElementOptionalRefType(element, "PORT-PROTOTYPE-REF"))
194
- autosar_variable_iref.setTargetDataPrototypeRef(self.getChildElementOptionalRefType(element, "TARGET-DATA-PROTOTYPE-REF"))
195
- return autosar_variable_iref
191
+ iref = ComponentInSystemInstanceRef()
192
+ self.readElementAttributes(element, iref)
193
+ iref.setBaseRef(self.getChildElementOptionalRefType(element, "BASE-REF"))
194
+ iref.setContextCompositionRef(self.getChildElementOptionalRefType(element, "CONTEXT-COMPOSITION-REF"))
195
+ iref.setTargetComponentRef(self.getChildElementOptionalRefType(element, "TARGET-COMPONENT-REF"))
196
+ return iref
196
197
 
197
198
  def getAutosarVariableInImplDatatype(self, element: ET.Element) -> AutosarVariableRef:
198
199
  child_element = self.find(element, "ACCESSED-VARIABLE")
199
- accessed_variable_ref = None
200
+ ref = None
200
201
  if (child_element is not None):
201
- accessed_variable_ref = AutosarVariableRef()
202
- accessed_variable_ref.setAutosarVariableIRef(self.getVariableInAtomicSWCTypeInstanceRef(self.find(child_element, "AUTOSAR-VARIABLE-IREF")))
203
- return accessed_variable_ref
202
+ ref = AutosarVariableRef()
203
+ ref.setAutosarVariableIRef(self.getVariableInAtomicSWCTypeInstanceRef(self.find(child_element, "AUTOSAR-VARIABLE-IREF")))
204
+ return ref
204
205
 
205
206
  def getLocalVariableRef(self, element: ET.Element) -> AutosarVariableRef:
206
207
  child_element = self.find(element, "ACCESSED-VARIABLE")
207
- accessed_variable_ref = None
208
+ ref = None
208
209
  if (child_element is not None):
209
- accessed_variable_ref = AutosarVariableRef()
210
- accessed_variable_ref.setLocalVariableRef(self.getChildElementOptionalRefType(child_element, "LOCAL-VARIABLE-REF"))
211
- return accessed_variable_ref
210
+ ref = AutosarVariableRef()
211
+ ref.setLocalVariableRef(self.getChildElementOptionalRefType(child_element, "LOCAL-VARIABLE-REF"))
212
+ return ref
212
213
 
213
214
  def _readVariableAccesses(self, element: ET.Element, parent: RunnableEntity, key: str):
214
215
  for child_element in element.findall("./xmlns:%s/xmlns:VARIABLE-ACCESS" % key, self.nsmap):
@@ -2148,7 +2149,8 @@ class ARXMLParser(AbstractARXMLParser):
2148
2149
  .setProtocolVersion(self.getChildElementOptionalLiteral(element, "PROTOCOL-VERSION"))
2149
2150
 
2150
2151
  def readAbstractCanCluster(self, element: ET.Element, cluster: AbstractCanCluster):
2151
- cluster.setCanFdBaudrate(self.getChildElementOptionalNumericalValue(element, "CAN-FD-BAUDRATE"))
2152
+ cluster.setCanFdBaudrate(self.getChildElementOptionalNumericalValue(element, "CAN-FD-BAUDRATE")) \
2153
+ .setSpeed(self.getChildElementOptionalNumericalValue(element, "SPEED"))
2152
2154
 
2153
2155
  def readLinCluster(self, element: ET.Element, parent: ARPackage):
2154
2156
  short_name = self.getShortName(element)
@@ -2318,21 +2320,90 @@ class ARXMLParser(AbstractARXMLParser):
2318
2320
 
2319
2321
  def readCanTpConfig(self, element: ET.Element, parent: ARPackage):
2320
2322
  short_name = self.getShortName(element)
2321
- self.logger.debug("CanTpConfig %s" % short_name)
2323
+ self.logger.debug("read CanTpConfig %s" % short_name)
2322
2324
  pdu = parent.createCanTpConfig(short_name)
2323
2325
  self.readIdentifiable(element, pdu)
2324
2326
 
2325
2327
  def readCanFrame(self, element: ET.Element, parent: ARPackage):
2326
2328
  short_name = self.getShortName(element)
2327
- self.logger.debug("CanFrame %s" % short_name)
2329
+ self.logger.debug("read CanFrame %s" % short_name)
2328
2330
  frame = parent.createCanFrame(short_name)
2329
2331
  self.readFrame(element, frame)
2330
2332
 
2333
+ def readCanCommunicationController(self, element: ET.Element, controller: CanCommunicationController):
2334
+ self.logger.debug("read CanCommunicationController %s" % controller.getShortName())
2335
+ self.readIdentifiable(element, controller)
2336
+
2337
+ def readEcuInstanceCommControllers(self, element: ET.Element, instance: EcuInstance):
2338
+ self.logger.debug("readEcuInstanceCommControllers %s" % instance.getShortName())
2339
+ for child_element in self.findall(element, "COMM-CONTROLLERS/*"):
2340
+ tag_name = self.getTagName(child_element)
2341
+ if tag_name == "CAN-COMMUNICATION-CONTROLLER":
2342
+ controller = instance.createCanCommunicationController(self.getShortName(child_element))
2343
+ self.readCanCommunicationController(child_element, controller)
2344
+ else:
2345
+ self._raiseError("Unsupported Communication Controller <%s>" % tag_name)
2346
+
2347
+ def readCommConnectorPort(self, element: ET.Element, port: CommConnectorPort):
2348
+ self.readIdentifiable(element, port)
2349
+ port.setCommunicationDirection(self.getChildElementOptionalLiteral(element, "COMMUNICATION-DIRECTION"))
2350
+
2351
+ def readFramePort(self, element: ET.Element, port: FramePort):
2352
+ self.readCommConnectorPort(element, port)
2353
+
2354
+ def readIPduPort(self, element: ET.Element, port: IPduPort):
2355
+ self.readCommConnectorPort(element, port)
2356
+
2357
+ def readISignalPort(self, element: ET.Element, port: ISignalPort):
2358
+ self.readCommConnectorPort(element, port)
2359
+
2360
+ def readCommunicationConnectorEcuCommPortInstances(self, element: ET.Element, connector: CommunicationConnector):
2361
+ self.logger.debug("read EcuCommPortInstances of CommunicationConnector %s" % connector.getShortName())
2362
+ for child_element in self.findall(element, "ECU-COMM-PORT-INSTANCES/*"):
2363
+ tag_name = self.getTagName(child_element)
2364
+ if tag_name == "FRAME-PORT":
2365
+ port = connector.createFramePort(self.getShortName(child_element))
2366
+ self.readFramePort(child_element, port)
2367
+ elif tag_name == "I-PDU-PORT":
2368
+ port = connector.createIPduPort(self.getShortName(child_element))
2369
+ self.readIPduPort(child_element, port)
2370
+ elif tag_name == "I-SIGNAL-PORT":
2371
+ port = connector.createISignalPort(self.getShortName(child_element))
2372
+ self.readISignalPort(child_element, port)
2373
+ else:
2374
+ self._raiseError("Unsupported EcuCommPortInstances <%s>" % tag_name)
2375
+
2376
+ def readCommunicationConnector(self, element: ET.Element, connector: CommunicationConnector):
2377
+ self.readIdentifiable(element, connector)
2378
+ connector.setCommControllerRef(self.getChildElementOptionalRefType(element, "COMM-CONTROLLER-REF"))
2379
+ self.readCommunicationConnectorEcuCommPortInstances(element, connector)
2380
+
2381
+ def readCanCommunicationConnector(self, element: ET.Element, connector: CanCommunicationConnector):
2382
+ self.readCommunicationConnector(element, connector)
2383
+
2384
+ def readEcuInstanceConnectors(self, element: ET.Element, instance: EcuInstance):
2385
+ self.logger.debug("readEcuInstanceCommControllers %s" % instance.getShortName())
2386
+ for child_element in self.findall(element, "CONNECTORS/*"):
2387
+ tag_name = self.getTagName(child_element)
2388
+ if tag_name == "CAN-COMMUNICATION-CONNECTOR":
2389
+ connector = instance.createCanCommunicationConnector(self.getShortName(child_element))
2390
+ self.readCanCommunicationConnector(child_element, connector)
2391
+ else:
2392
+ self._raiseError("Unsupported Communication Controller <%s>" % tag_name)
2393
+
2331
2394
  def readEcuInstance(self, element: ET.Element, parent: ARPackage):
2332
2395
  short_name = self.getShortName(element)
2333
2396
  self.logger.debug("EcuInstance %s" % short_name)
2334
2397
  instance = parent.createEcuInstance(short_name)
2335
2398
  self.readIdentifiable(element, instance)
2399
+ instance.setComConfigurationGwTimeBase(self.getChildElementOptionalTimeValue(element, "COM-CONFIGURATION-GW-TIME-BASE")) \
2400
+ .setComConfigurationRxTimeBase(self.getChildElementOptionalTimeValue(element, "COM-CONFIGURATION-RX-TIME-BASE")) \
2401
+ .setComConfigurationTxTimeBase(self.getChildElementOptionalTimeValue(element, "COM-CONFIGURATION-TX-TIME-BASE")) \
2402
+ .setComEnableMDTForCyclicTransmission(self.getChildElementOptionalBooleanValue(element, "COM-ENABLE-MDT-FOR-CYCLIC-TRANSMISSION"))
2403
+ self.readEcuInstanceCommControllers(element, instance)
2404
+ self.readEcuInstanceConnectors(element, instance)
2405
+ instance.setSleepModeSupported(self.getChildElementOptionalBooleanValue(element, "SLEEP-MODE-SUPPORTED")) \
2406
+ .setWakeUpOverBusSupported(self.getChildElementOptionalBooleanValue(element, "WAKE-UP-OVER-BUS-SUPPORTED"))
2336
2407
 
2337
2408
  '''
2338
2409
  def getFrameMappings(self, element: ET.Element) -> List[FrameMapping]:
@@ -2563,13 +2634,84 @@ class ARXMLParser(AbstractARXMLParser):
2563
2634
  .setStartPosition(self.getChildElementOptionalNumericalValue(child_element, "START-POSITION")) \
2564
2635
  .setTransferProperty(self.getChildElementOptionalLiteral(child_element, "TRANSFER-PROPERTY")) \
2565
2636
  .setUpdateIndicationBitPosition(self.getChildElementOptionalNumericalValue(child_element, "UPDATE-INDICATION-BIT-POSITION"))
2637
+
2638
+ def getDataFilter(self, element: ET.Element, key: str) -> DataFilter:
2639
+ filter = None
2640
+ child_element = self.find(element, key)
2641
+ if child_element is not None:
2642
+ filter = DataFilter()
2643
+ filter.setDataFilterType(self.getChildElementOptionalLiteral(child_element, "DATA-FILTER-TYPE"))
2644
+ return filter
2645
+
2646
+ def getTransmissionModeConditions(self, element: ET.Element, key: str) -> List[TransmissionModeCondition]:
2647
+ result = []
2648
+ child_elements = self.findall(element, key)
2649
+ for child_element in child_elements:
2650
+ condition = TransmissionModeCondition()
2651
+ condition.setDataFilter(self.getDataFilter(child_element, "DATA-FILTER")) \
2652
+ .setISignalInIPduRef(self.getChildElementOptionalRefType(child_element, "I-SIGNAL-IN-I-PDU-REF"))
2653
+ result.append(condition)
2654
+ return result
2655
+
2656
+ def getTimeRangeType(self, element: ET.Element, key: str) -> TimeRangeType:
2657
+ time_range = None
2658
+ child_element = self.find(element, key)
2659
+ if child_element is not None:
2660
+ time_range = TimeRangeType()
2661
+ time_range.setValue(self.getChildElementOptionalTimeValue(child_element, "VALUE"))
2662
+ return time_range
2663
+
2664
+ def getCyclicTiming(self, element: ET.Element, key: str) -> CyclicTiming:
2665
+ timing = None
2666
+ child_element = self.find(element, key)
2667
+ if child_element is not None:
2668
+ timing = CyclicTiming()
2669
+ return timing
2670
+
2671
+ def getEventControlledTiming(self, element: ET.Element, key: str) -> EventControlledTiming:
2672
+ timing = None
2673
+ child_element = self.find(element, key)
2674
+ if child_element is not None:
2675
+ timing = EventControlledTiming()
2676
+ timing.setNumberOfRepetitions(self.getChildElementOptionalIntegerValue(child_element, "NUMBER-OF-REPETITIONS"))
2677
+ timing.setRepetitionPeriod(self.getTimeRangeType(child_element, "REPETITION-PERIOD"))
2678
+ return timing
2679
+
2680
+ def getTransmissionModeTiming(self, element: ET.Element, key: str) -> TransmissionModeTiming:
2681
+ timing = None
2682
+ child_element = self.find(element, key)
2683
+ if child_element is not None:
2684
+ self.logger.debug("Get TransmissionModeTiming of <%s>" % key)
2685
+ timing = TransmissionModeTiming()
2686
+ #timing.getCyclicTiming(child_element, "")
2687
+ timing.setEventControlledTiming(self.getEventControlledTiming(child_element, "EVENT-CONTROLLED-TIMING"))
2688
+ return timing
2689
+
2690
+ def getTransmissionModeDeclaration(self, element: ET.Element, key: str) -> TransmissionModeDeclaration:
2691
+ decl = None
2692
+ child_element = self.find(element, key)
2693
+ if child_element != None:
2694
+ decl = TransmissionModeDeclaration()
2695
+ for condition in self.getTransmissionModeConditions(child_element, "TRANSMISSION-MODE-CONDITIONS/TRANSMISSION-MODE-CONDITION"):
2696
+ decl.addTransmissionModeCondition(condition)
2697
+ decl.setTransmissionModeTrueTiming(self.getTransmissionModeTiming(child_element, "TRANSMISSION-MODE-TRUE-TIMING"))
2698
+ return decl
2699
+
2700
+ def getISignalIPduIPduTimingSpecification(self, element: ET.Element) -> IPduTiming:
2701
+ timing = None
2702
+ child_element = self.find(element, "I-PDU-TIMING-SPECIFICATIONS/I-PDU-TIMING")
2703
+ if child_element is not None:
2704
+ timing = IPduTiming()
2705
+ timing.setTransmissionModeDeclaration(self.getTransmissionModeDeclaration(child_element, "TRANSMISSION-MODE-DECLARATION"))
2706
+ return timing
2566
2707
 
2567
2708
  def readISignalIPdu(self, element: ET.Element, parent: ARPackage):
2568
2709
  short_name = self.getShortName(element)
2569
2710
  self.logger.debug("ISignalIPdu %s" % short_name)
2570
2711
  i_pdu = parent.createISignalIPdu(short_name)
2571
2712
  self.readIdentifiable(element, i_pdu)
2572
- i_pdu.setLength(self.getChildElementOptionalNumericalValue(element, "LENGTH"))
2713
+ i_pdu.setLength(self.getChildElementOptionalNumericalValue(element, "LENGTH")) \
2714
+ .setIPduTimingSpecification(self.getISignalIPduIPduTimingSpecification(element))
2573
2715
  self.readISignalToPduMappings(element, i_pdu)
2574
2716
  i_pdu.setUnusedBitPattern(self.getChildElementOptionalLiteral(element, "UNUSED-BIT-PATTERN"))
2575
2717
 
@@ -2613,12 +2755,28 @@ class ARXMLParser(AbstractARXMLParser):
2613
2755
  else:
2614
2756
  raise NotImplementedError("Unsupported Data Mapping %s" % tag_name)
2615
2757
 
2758
+ def readSwcToEcuMapping(self, element: ET.Element, mapping: SwcToEcuMapping):
2759
+ self.logger.debug("SwcToEcuMapping %s" % mapping.getShortName())
2760
+ self.readIdentifiable(element, mapping)
2761
+ for child_element in self.findall(element, "COMPONENT-IREFS/COMPONENT-IREF"):
2762
+ mapping.addComponentIRef(self.getComponentInSystemInstanceRef(child_element))
2763
+ mapping.setEcuInstanceRef(self.getChildElementOptionalRefType(element, "ECU-INSTANCE-REF"))
2764
+
2765
+ def readSystemMappingSwMappings(self, element: ET.Element, mapping: SystemMapping):
2766
+ for child_element in self.findall(element, "SW-MAPPINGS/*"):
2767
+ tag_name = self.getTagName(child_element)
2768
+ if tag_name == "SWC-TO-ECU-MAPPING":
2769
+ self.readSwcToEcuMapping(child_element, mapping.createSwcToEcuMapping(self.getShortName(child_element)))
2770
+ else:
2771
+ raise NotImplementedError("Unsupported Sw Mapping %s" % tag_name)
2772
+
2616
2773
  def readSystemMapping(self, element: ET.Element, parent: System):
2617
2774
  short_name = self.getShortName(element)
2618
2775
  self.logger.debug("SystemMapping %s" % short_name)
2619
2776
  mapping = parent.createSystemMapping(short_name)
2620
2777
  self.readIdentifiable(element, mapping)
2621
2778
  self.readSystemMappingDataMappings(element, mapping)
2779
+ self.readSystemMappingSwMappings(element, mapping)
2622
2780
 
2623
2781
  def readSystemMappings(self, element: ET.Element, system: System):
2624
2782
  for child_element in self.findall(element, "MAPPINGS/*"):
@@ -2627,10 +2785,19 @@ class ARXMLParser(AbstractARXMLParser):
2627
2785
  self.readSystemMapping(child_element, system)
2628
2786
  else:
2629
2787
  raise NotImplementedError("Unsupported Mapping %s" % tag_name)
2788
+
2789
+ def readRootSwCompositionPrototype(self, element: ET.Element, system: System):
2790
+ child_element = self.find(element, "ROOT-SOFTWARE-COMPOSITIONS/ROOT-SW-COMPOSITION-PROTOTYPE")
2791
+ if child_element is not None:
2792
+ short_name = self.getShortName(child_element)
2793
+ self.logger.debug("Read RootSwCompositionPrototype %s" % short_name)
2794
+ prototype = system.createRootSoftwareComposition(short_name)
2795
+ self.readIdentifiable(child_element, prototype)
2796
+ prototype.setSoftwareCompositionTRef(self.getChildElementOptionalRefType(child_element, "SOFTWARE-COMPOSITION-TREF"))
2630
2797
 
2631
2798
  def readSystem(self, element: ET.Element, parent: ARPackage):
2632
2799
  short_name = self.getShortName(element)
2633
- self.logger.debug("System %s" % short_name)
2800
+ self.logger.debug("Read System %s" % short_name)
2634
2801
  system = parent.createSystem(short_name)
2635
2802
  self.readIdentifiable(element, system)
2636
2803
 
@@ -2638,6 +2805,8 @@ class ARXMLParser(AbstractARXMLParser):
2638
2805
  for child_element in self.findall(element, "FIBEX-ELEMENTS/FIBEX-ELEMENT-REF-CONDITIONAL"):
2639
2806
  system.addFibexElementRef(self.getChildElementOptionalRefType(child_element, "FIBEX-ELEMENT-REF"))
2640
2807
  self.readSystemMappings(element, system)
2808
+ self.readRootSwCompositionPrototype(element, system)
2809
+ system.setSystemVersion(self.getChildElementOptionalRevisionLabelString(element, "SYSTEM-VERSION"))
2641
2810
 
2642
2811
  def readParameterInterfaceParameters(self, element: ET.Element, parent: ParameterInterface):
2643
2812
  for child_element in self.findall(element, "PARAMETERS/PARAMETER-DATA-PROTOTYPE"):
@@ -53,28 +53,6 @@ class TestSWComponents:
53
53
  assert(len(sw_component.getAssemblySwConnectors()) == 0)
54
54
  assert(len(sw_component.getDelegationSwConnectors()) == 0)
55
55
 
56
- def test_software_components_arxml_loading_and_saving(self):
57
- document = AUTOSAR.getInstance()
58
- document.clear()
59
- parser = ARXMLParser()
60
- parser.load("src/armodel/tests/test_files/SoftwareComponents.arxml", document)
61
-
62
- writer = ARXMLWriter()
63
- writer.save("data/generated.arxml", document)
64
-
65
- assert(filecmp.cmp("src/armodel/tests/test_files/SoftwareComponents.arxml", "data/generated.arxml", shallow = False) == True)
66
-
67
- def test_software_components_arxml_loading_and_saving(self):
68
- document = AUTOSAR.getInstance()
69
- document.clear()
70
- parser = ARXMLParser()
71
- parser.load("src/armodel/tests/test_files/AUTOSAR_Datatypes.arxml", document)
72
-
73
- writer = ARXMLWriter()
74
- writer.save("data/generated_AUTOSAR_Datatypes.arxml", document)
75
-
76
- assert(filecmp.cmp("src/armodel/tests/test_files/AUTOSAR_Datatypes.arxml", "data/generated_AUTOSAR_Datatypes.arxml", shallow = False) == True)
77
-
78
56
  def test_bswm_mode_arxml_loading_and_saving(self):
79
57
  document = AUTOSAR.getInstance()
80
58
  document.clear()
@@ -12,7 +12,7 @@ class TestSystemTemplate:
12
12
  parser.load("src/armodel/tests/test_files/CanSystem.arxml", document)
13
13
 
14
14
 
15
- def test_bswm_mode_arxml_loading_and_saving(self):
15
+ def test_can_system_arxml_loading_and_saving(self):
16
16
  document = AUTOSAR.getInstance()
17
17
  document.clear()
18
18
  parser = ARXMLParser()
@@ -21,7 +21,7 @@ class TestSystemTemplate:
21
21
  writer = ARXMLWriter()
22
22
  writer.save("data/generated_CanSystem.arxml", document)
23
23
 
24
- #assert(filecmp.cmp("src/armodel/tests/test_files/CanSystem.arxml", "data/generated_CanSystem.arxml", shallow = False) == True)
24
+ assert(filecmp.cmp("src/armodel/tests/test_files/CanSystem.arxml", "data/generated_CanSystem.arxml", shallow = False) == True)
25
25
 
26
26
 
27
27
 
@@ -9,7 +9,7 @@ import xml.etree.cElementTree as ET
9
9
 
10
10
  from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
11
11
 
12
- from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARFloat, ARLiteral, ARNumerical
12
+ from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARFloat, ARLiteral, ARNumerical, Integer, TimeValue
13
13
  from armodel.models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import TRefType
14
14
 
15
15
  from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARBoolean
@@ -71,6 +71,9 @@ class AbstractARXMLWriter:
71
71
  self.setARObjectAttributes(child_element, numerical)
72
72
  child_element.text = numerical._text
73
73
 
74
+ def setChildElementOptionalIntegerValue(self, element: ET.Element, key: str, value: Integer):
75
+ self.setChildElementOptionalNumericalValue(element, key, value)
76
+
74
77
  def setChildElementOptionalLiteral(self, element: ET.Element, key: str, literal: ARLiteral):
75
78
  if literal is not None:
76
79
  child_element = ET.SubElement(element, key)
@@ -78,6 +81,9 @@ class AbstractARXMLWriter:
78
81
  if literal._value is not None:
79
82
  child_element.text = str(literal._value)
80
83
 
84
+ def setChildElementOptionalRevisionLabelString(self, element: ET.Element, key: str, literal: ARLiteral):
85
+ self.setChildElementOptionalLiteral(element, key, literal)
86
+
81
87
  def setChildElementOptionalRefType(self, parent: ET.Element, child_tag_name: str, ref: TRefType):
82
88
  if ref is not None:
83
89
  child_tag = ET.SubElement(parent, child_tag_name)
@@ -91,6 +97,9 @@ class AbstractARXMLWriter:
91
97
  child_element = ET.SubElement(element, key)
92
98
  child_element.text = value.getText()
93
99
 
100
+ def setChildElementOptionalTimeValue(self, element: ET.Element, key: str, value: TimeValue):
101
+ self.setChildElementOptionalFloatValue(element, key, value)
102
+
94
103
  def setChildElementOptionalBooleanValue(self, element: ET.Element, key: str, value: ARBoolean) -> ET.Element:
95
104
  child_element = None
96
105
  if value is not None: