armodel 1.7.6__py3-none-any.whl → 1.7.8__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. armodel/cli/arxml_dump_cli.py +33 -22
  2. armodel/cli/arxml_format_cli.py +25 -13
  3. armodel/models/M2/AUTOSARTemplates/AutosarTopLevelStructure.py +95 -21
  4. armodel/models/M2/AUTOSARTemplates/BswModuleTemplate/BswBehavior.py +359 -59
  5. armodel/models/M2/AUTOSARTemplates/BswModuleTemplate/BswOverview.py +134 -35
  6. armodel/models/M2/AUTOSARTemplates/CommonStructure/Filter.py +17 -7
  7. armodel/models/M2/AUTOSARTemplates/CommonStructure/InternalBehavior.py +10 -1
  8. armodel/models/M2/AUTOSARTemplates/CommonStructure/TriggerDeclaration.py +18 -2
  9. armodel/models/M2/AUTOSARTemplates/ECUCDescriptionTemplate.py +20 -19
  10. armodel/models/M2/AUTOSARTemplates/EcuResourceTemplate/HwElementCategory.py +59 -0
  11. armodel/models/M2/AUTOSARTemplates/EcuResourceTemplate/__init__.py +145 -0
  12. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/ARPackage.py +215 -157
  13. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/Identifiable.py +69 -35
  14. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/PrimitiveTypes.py +17 -1
  15. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Communication.py +19 -5
  16. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Components/__init__.py +113 -39
  17. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Composition/__init__.py +3 -2
  18. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Datatype/DataPrototypes.py +41 -16
  19. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Datatype/Datatypes.py +10 -3
  20. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/EndToEndProtection.py +13 -6
  21. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/PortInterface/__init__.py +111 -38
  22. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/AccessCount.py +9 -1
  23. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/ModeDeclarationGroup.py +5 -4
  24. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/RTEEvents.py +26 -8
  25. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/__init__.py +28 -6
  26. armodel/models/M2/AUTOSARTemplates/SystemTemplate/DataMapping.py +167 -5
  27. armodel/models/M2/AUTOSARTemplates/SystemTemplate/DoIp.py +29 -0
  28. armodel/models/M2/AUTOSARTemplates/SystemTemplate/EcuResourceMapping.py +45 -0
  29. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Can/CanTopology.py +31 -21
  30. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Ethernet/EthernetFrame.py +5 -3
  31. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Ethernet/EthernetTopology.py +9 -0
  32. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Flexray/FlexrayCommunication.py +76 -0
  33. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Flexray/FlexrayTopology.py +654 -0
  34. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Flexray/__init__.py +0 -0
  35. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/CoreCommunication.py +539 -77
  36. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/CoreTopology.py +158 -40
  37. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/EcuInstance.py +28 -6
  38. armodel/models/M2/AUTOSARTemplates/SystemTemplate/InstanceRefs.py +2 -0
  39. armodel/models/M2/AUTOSARTemplates/SystemTemplate/NetworkManagement.py +245 -130
  40. armodel/models/M2/AUTOSARTemplates/SystemTemplate/SWmapping.py +27 -0
  41. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Transformer/__init__.py +524 -0
  42. armodel/models/M2/AUTOSARTemplates/SystemTemplate/TransportProtocols.py +592 -17
  43. armodel/models/M2/AUTOSARTemplates/SystemTemplate/__init__.py +33 -21
  44. armodel/models/M2/MSR/AsamHdo/AdminData.py +1 -2
  45. armodel/models/M2/MSR/AsamHdo/ComputationMethod.py +3 -1
  46. armodel/models/M2/MSR/AsamHdo/SpecialData.py +35 -8
  47. armodel/models/M2/MSR/DataDictionary/RecordLayout.py +0 -3
  48. armodel/models/__init__.py +8 -0
  49. armodel/parser/abstract_arxml_parser.py +34 -27
  50. armodel/parser/arxml_parser.py +1778 -616
  51. armodel/parser/file_parser.py +5 -3
  52. armodel/tests/test_armodel/models/test_ar_package.py +6 -11
  53. armodel/tests/test_armodel/models/test_bsw_module_template.py +5 -3
  54. armodel/tests/test_armodel/models/test_datatype.py +1 -1
  55. armodel/tests/test_armodel/models/test_port_interface.py +116 -117
  56. armodel/tests/test_armodel/parser/test_bsw_module_descriiption.py +218 -0
  57. armodel/tests/test_armodel/parser/test_sw_components.py +54 -22
  58. armodel/tests/test_armodel/parser/test_system.py +2 -8
  59. armodel/transformer/__init__.py +0 -0
  60. armodel/transformer/abstract.py +6 -0
  61. armodel/transformer/admin_data.py +31 -0
  62. armodel/writer/abstract_arxml_writer.py +27 -33
  63. armodel/writer/arxml_writer.py +1875 -599
  64. {armodel-1.7.6.dist-info → armodel-1.7.8.dist-info}/METADATA +81 -3
  65. {armodel-1.7.6.dist-info → armodel-1.7.8.dist-info}/RECORD +69 -56
  66. {armodel-1.7.6.dist-info → armodel-1.7.8.dist-info}/LICENSE +0 -0
  67. {armodel-1.7.6.dist-info → armodel-1.7.8.dist-info}/WHEEL +0 -0
  68. {armodel-1.7.6.dist-info → armodel-1.7.8.dist-info}/entry_points.txt +0 -0
  69. {armodel-1.7.6.dist-info → armodel-1.7.8.dist-info}/top_level.txt +0 -0
@@ -1,8 +1,12 @@
1
1
  from typing import List
2
+
3
+ from ....M2.AUTOSARTemplates.SystemTemplate.EcuResourceMapping import ECUMapping
2
4
  from ....M2.AUTOSARTemplates.SystemTemplate.InstanceRefs import ComponentInSystemInstanceRef
5
+ from ....M2.AUTOSARTemplates.SystemTemplate.SWmapping import SwcToImplMapping
3
6
  from ....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
4
7
  from ....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.Identifiable import ARElement, Identifiable
5
- from ....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import PositiveInteger, RefType, TRefType
8
+ from ....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import PositiveInteger, RefType, RevisionLabelString, TRefType
9
+
6
10
 
7
11
  class SwcToEcuMapping(Identifiable):
8
12
  def __init__(self, parent: ARObject, short_name: str):
@@ -41,6 +45,7 @@ class SwcToEcuMapping(Identifiable):
41
45
  self.processingUnitRef = value
42
46
  return self
43
47
 
48
+
44
49
  class SystemMapping(Identifiable):
45
50
  def __init__(self, parent: ARObject, short_name: str):
46
51
  super().__init__(parent, short_name)
@@ -51,7 +56,7 @@ class SystemMapping(Identifiable):
51
56
  self.cryptoServiceMappings = []
52
57
  self.dataMappings = []
53
58
  self.ddsISignalToTopicMappings = []
54
- self.ecuResourceMappings = []
59
+ self.ecuResourceMappings = [] # type: List[ECUMapping]
55
60
  self.j1939ControllerApplicationToJ1939NmNodeMappings = []
56
61
  self.mappingConstraints = []
57
62
  self.pncMappings = []
@@ -65,8 +70,8 @@ class SystemMapping(Identifiable):
65
70
  self.softwareClusterToResourceMappings = []
66
71
  self.swClusterMappings = []
67
72
  self.swcToApplicationPartitionMappings = []
68
- self.swImplMappings = []
69
- self.swMappings = [] # type: List[SwcToEcuMapping]
73
+ self.swImplMappings = [] # type: List[SwcToImplMapping]
74
+ self.swMappings = [] # type: List[SwcToEcuMapping]
70
75
  self.systemSignalGroupToComResourceMappings = []
71
76
  self.systemSignalToComResourceMappings = []
72
77
 
@@ -115,9 +120,12 @@ class SystemMapping(Identifiable):
115
120
  def getEcuResourceMappings(self):
116
121
  return self.ecuResourceMappings
117
122
 
118
- def addEcuResourceMapping(self, value):
119
- self.ecuResourceMappings.append(value)
120
- return self
123
+ def createECUMapping(self, short_name: str) -> ECUMapping:
124
+ if short_name not in self.elements:
125
+ mapping = ECUMapping(self, short_name)
126
+ self.addElement(mapping)
127
+ self.ecuResourceMappings.append(mapping)
128
+ return self.getElement(short_name)
121
129
 
122
130
  def getJ1939ControllerApplicationToJ1939NmNodeMappings(self):
123
131
  return self.j1939ControllerApplicationToJ1939NmNodeMappings
@@ -210,15 +218,21 @@ class SystemMapping(Identifiable):
210
218
  self.swcToApplicationPartitionMappings.append(value)
211
219
  return self
212
220
 
213
- def getSwImplMapping(self):
221
+ def getSwImplMappings(self):
214
222
  return self.swImplMappings
215
223
 
216
- def addSwImplMappings(self, value):
217
- self.swImplMappings.append(value)
218
- return self
224
+ def createSwcToImplMapping(self, short_name: str) -> SwcToImplMapping:
225
+ if short_name not in self.elements:
226
+ mapping = SwcToImplMapping(self, short_name)
227
+ self.addElement(mapping)
228
+ self.swImplMappings.append(mapping)
229
+ return self.getElement(short_name)
219
230
 
220
231
  def getSwMappings(self):
221
232
  return self.swMappings
233
+
234
+ def getSwcToEcuMappings(self) -> List[SwcToEcuMapping]:
235
+ return list(sorted(filter(lambda a: isinstance(a, SwcToEcuMapping), self.elements.values()), key=lambda o: o.short_name))
222
236
 
223
237
  def createSwcToEcuMapping(self, short_name: str) -> SwcToEcuMapping:
224
238
  if short_name not in self.elements:
@@ -241,6 +255,7 @@ class SystemMapping(Identifiable):
241
255
  self.systemSignalToComResourceMappings.append(value)
242
256
  return self
243
257
 
258
+
244
259
  class RootSwCompositionPrototype(Identifiable):
245
260
  def __init__(self, parent: ARObject, short_name: str):
246
261
  super().__init__(parent, short_name)
@@ -270,6 +285,7 @@ class RootSwCompositionPrototype(Identifiable):
270
285
  self.softwareCompositionTRef = value
271
286
  return self
272
287
 
288
+
273
289
  class System(ARElement):
274
290
  def __init__(self, parent: ARObject, short_name: str):
275
291
  super().__init__(parent, short_name)
@@ -310,7 +326,7 @@ class System(ARElement):
310
326
  return self
311
327
 
312
328
  def getFibexElementRefs(self):
313
- #return sorted(self.fibexElements, key= lambda i: i.getShortValue())
329
+ # return sorted(self.fibexElements, key= lambda i: i.getShortValue())
314
330
  return self.fibexElements
315
331
 
316
332
  def addFibexElementRef(self, value):
@@ -333,14 +349,17 @@ class System(ARElement):
333
349
  return self
334
350
 
335
351
  def getMappings(self) -> List[SystemMapping]:
336
- return list(sorted(filter(lambda a: isinstance(a, SystemMapping), self.elements.values()), key= lambda o:o.short_name))
352
+ return list(sorted(filter(lambda a: isinstance(a, SystemMapping), self.elements.values()), key=lambda o: o.short_name))
353
+
354
+ def getSystemMappings(self) -> List[SystemMapping]:
355
+ return list(sorted(filter(lambda a: isinstance(a, SystemMapping), self.elements.values()), key=lambda o: o.short_name))
337
356
 
338
357
  def createSystemMapping(self, short_name) -> SystemMapping:
339
358
  if (short_name not in self.elements):
340
359
  mapping = SystemMapping(self, short_name)
341
360
  self.elements[short_name] = mapping
342
361
  return self.elements[short_name]
343
-
362
+
344
363
  def getPncVectorLength(self):
345
364
  return self.pncVectorLength
346
365
 
@@ -385,10 +404,3 @@ class System(ARElement):
385
404
  def setSystemVersion(self, value):
386
405
  self.systemVersion = value
387
406
  return self
388
-
389
-
390
-
391
-
392
-
393
-
394
-
@@ -1,7 +1,6 @@
1
1
  from ....M2.MSR.Documentation.TextModel.LanguageDataModel import LEnum
2
2
  from ....M2.MSR.Documentation.TextModel.MultilanguageData import MultiLanguagePlainText
3
3
  from ....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
4
- from ....M2.MSR.AsamHdo.SpecialData import Sdg
5
4
  from typing import List
6
5
 
7
6
  class AdminData(ARObject):
@@ -10,7 +9,7 @@ class AdminData(ARObject):
10
9
 
11
10
  self.DocRevisions = [] # type: List[DocRevision]
12
11
  self.language = None # type: LEnum
13
- self.sdgs = [] # type: List[Sdg]
12
+ self.sdgs = [] # type: List ## Sdg will cause the circular import
14
13
  self.usedLanguages = None # type: MultiLanguagePlainText
15
14
 
16
15
  def getDocRevisions(self):
@@ -1,7 +1,9 @@
1
1
  from typing import List
2
2
  from abc import ABCMeta
3
+
4
+ from ....M2.MSR.Documentation.TextModel.MultilanguageData import MultiLanguageOverviewParagraph
3
5
  from ....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.Identifiable import ARElement
4
- from ....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARLiteral, CIdentifier, Identifier, PositiveUnlimitedInteger, String
6
+ from ....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import CIdentifier, Identifier, PositiveUnlimitedInteger, String
5
7
  from ....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
6
8
  from ....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import RefType
7
9
  from ....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import Limit
@@ -1,3 +1,6 @@
1
+ from ....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import RefType
2
+ from ....M2.MSR.Documentation.TextModel.MultilanguageData import MultiLanguageOverviewParagraph
3
+ from ....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.Identifiable import MultilanguageReferrable
1
4
  from ....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
2
5
  from typing import List
3
6
 
@@ -22,15 +25,30 @@ class Sd(ARObject):
22
25
  self.value = value
23
26
  return self
24
27
 
28
+ class SdgCaption(MultilanguageReferrable):
29
+ def __init__(self, parent, short_name):
30
+ super().__init__(parent, short_name)
31
+
32
+ self.desc = None # type: MultiLanguageOverviewParagraph
33
+
34
+ def getDesc(self):
35
+ return self.desc
36
+
37
+ def setDesc(self, value):
38
+ if value is not None:
39
+ self.desc = value
40
+ return self
41
+
25
42
 
26
43
  class Sdg(ARObject):
27
44
  def __init__(self):
28
45
  super().__init__()
29
46
 
30
47
  self.gid = ""
31
- self.sd = [] # type: List[Sd]
32
- self.sdgCaption = None
33
- self.sdgContentsTypes = [] # type: List[Sdg]
48
+ self.sd = [] # type: List[Sd]
49
+ self.sdgCaption = None # type: SdgCaption
50
+ self.sdgContentsTypes = [] # type: List[Sdg]
51
+ self.sdxRefs = [] # type: List[RefType]
34
52
 
35
53
  def getGID(self):
36
54
  return self.gid
@@ -49,12 +67,21 @@ class Sdg(ARObject):
49
67
  def getSdgCaption(self):
50
68
  return self.sdgCaption
51
69
 
52
- def setSdgCaption(self, value):
53
- self.sdgCaption = value
54
- return self
70
+ def createSdgCaption(self, short_name: str) -> SdgCaption:
71
+ caption = SdgCaption(self, short_name)
72
+ self.sdgCaption = caption
73
+ return caption
55
74
 
75
+ def getSdgContentsTypes(self):
76
+ return self.sdgContentsTypes
77
+
56
78
  def addSdgContentsType(self, sdg):
57
79
  self.sdgContentsTypes.append(sdg)
80
+
81
+ def getSdxRefs(self):
82
+ return self.sdxRefs
58
83
 
59
- def getSdgContentsTypes(self):
60
- return self.sdgContentsTypes
84
+ def addSdxRef(self, value):
85
+ if value is not None:
86
+ self.sdxRefs.append(value)
87
+ return self
@@ -72,9 +72,6 @@ class SwRecordLayoutV(ARObject):
72
72
  self.swRecordLayoutVProp = value
73
73
  return self
74
74
 
75
-
76
-
77
-
78
75
  class SwRecordLayoutGroupContent(ARObject):
79
76
  def __init__(self):
80
77
  super().__init__()
@@ -15,6 +15,9 @@ from .M2.MSR.Documentation.TextModel.BlockElements.PaginationAndView import *
15
15
  from .M2.MSR.Documentation.TextModel.LanguageDataModel import *
16
16
  from .M2.MSR.Documentation.TextModel.MultilanguageData import *
17
17
  from .M2.AUTOSARTemplates.AutosarTopLevelStructure import *
18
+ from .M2.AUTOSARTemplates.ECUCDescriptionTemplate import *
19
+ from .M2.AUTOSARTemplates.EcuResourceTemplate import *
20
+ from .M2.AUTOSARTemplates.EcuResourceTemplate.HwElementCategory import *
18
21
  from .M2.AUTOSARTemplates.BswModuleTemplate import *
19
22
  from .M2.AUTOSARTemplates.BswModuleTemplate.BswBehavior import *
20
23
  from .M2.AUTOSARTemplates.BswModuleTemplate.BswImplementation import *
@@ -52,11 +55,15 @@ from .M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.RTEEvents impo
52
55
  from .M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.ServerCall import *
53
56
  from .M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.ServiceMapping import *
54
57
  from .M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.Trigger import *
58
+ from .M2.AUTOSARTemplates.SystemTemplate import *
59
+ from .M2.AUTOSARTemplates.SystemTemplate.DoIp import *
55
60
  from .M2.AUTOSARTemplates.SystemTemplate.DataMapping import *
56
61
  from .M2.AUTOSARTemplates.SystemTemplate.DiagnosticConnection import *
62
+ from .M2.AUTOSARTemplates.SystemTemplate.EcuResourceMapping import *
57
63
  from .M2.AUTOSARTemplates.SystemTemplate.InstanceRefs import *
58
64
  from .M2.AUTOSARTemplates.SystemTemplate.NetworkManagement import *
59
65
  from .M2.AUTOSARTemplates.SystemTemplate.TransportProtocols import *
66
+ from .M2.AUTOSARTemplates.SystemTemplate.SWmapping import *
60
67
  from .M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Multiplatform import *
61
68
  from .M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Can.CanCommunication import *
62
69
  from .M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Can.CanTopology import *
@@ -67,6 +74,7 @@ from .M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetTopology i
67
74
  from .M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.NetworkEndpoint import *
68
75
  from .M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetCommunication import *
69
76
  from .M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.ServiceInstances import *
77
+ from .M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Flexray.FlexrayCommunication import *
70
78
  from .M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreCommunication import *
71
79
  from .M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreTopology import *
72
80
  from .M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.EcuInstance import *
@@ -6,18 +6,19 @@ import re
6
6
  import logging
7
7
  import xml.etree.ElementTree as ET
8
8
 
9
- from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
10
- from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import AREnum, ARFloat, ARLiteral, ARNumerical, Boolean, Integer, PositiveInteger, TimeValue
11
9
  from ..models.M2.AUTOSARTemplates.AutosarTopLevelStructure import AUTOSAR
12
- from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import RefType
13
- from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARBoolean
14
- from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import Limit
10
+ from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
11
+ from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.Identifiable import Identifiable
12
+ from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARFloat, ARLiteral, ARNumerical, Boolean
13
+ from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import Integer, PositiveInteger, TimeValue
14
+ from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import RefType, Limit
15
+
15
16
 
16
17
  class AbstractARXMLParser:
17
18
  __metaclass__ = ABCMeta
18
19
 
19
- def __init__(self, options = None) -> None:
20
- if type(self) == AbstractARXMLParser:
20
+ def __init__(self, options=None) -> None:
21
+ if type(self) is AbstractARXMLParser:
21
22
  raise NotImplementedError("AbstractArxmlParser is an abstract class.")
22
23
 
23
24
  self.nsmap = {"xmlns": "http://autosar.org/schema/r4.0"}
@@ -40,13 +41,13 @@ class AbstractARXMLParser:
40
41
  self.options['warning'] = options['warning']
41
42
 
42
43
  def raiseError(self, error_msg):
43
- if (self.options['warning'] == True):
44
+ if (self.options['warning'] is True):
44
45
  self.logger.error(Fore.RED + error_msg + Fore.WHITE)
45
46
  else:
46
47
  raise ValueError(error_msg)
47
48
 
48
49
  def notImplemented(self, error_msg):
49
- if (self.options['warning'] == True):
50
+ if (self.options['warning'] is True):
50
51
  self.logger.error(Fore.RED + error_msg + Fore.WHITE)
51
52
  else:
52
53
  raise NotImplementedError(error_msg)
@@ -96,11 +97,11 @@ class AbstractARXMLParser:
96
97
  child_element = self.find(element, key)
97
98
  literal = None
98
99
  if (child_element is not None):
99
- self.logger.debug("getChildElementOptionalLiteral : %s" % child_element.text)
100
+ # self.logger.debug("getChildElementOptionalLiteral : %s" % child_element.text)
100
101
  literal = ARLiteral()
101
102
  self.readARObjectAttributes(child_element, literal)
102
103
  # Patch for empty element <USED-CODE-GENERATOR></USED-CODE-GENERATOR>
103
- if child_element.text is None:
104
+ if child_element.text is None:
104
105
  literal.setValue("")
105
106
  else:
106
107
  literal.setValue(child_element.text)
@@ -110,14 +111,14 @@ class AbstractARXMLParser:
110
111
  child_element = self.find(element, key)
111
112
  literal = None
112
113
  if (child_element is not None) and (child_element.text is not None):
113
- self.logger.debug("getChildElementOptionalRevisionLabelString : %s" % child_element.text)
114
+ # self.logger.debug("getChildElementOptionalRevisionLabelString : %s" % child_element.text)
114
115
  m = re.match(r'[0-9]+\.[0-9]+\.[0-9]+([\._;].*)?', child_element.text)
115
116
  if not m:
116
117
  raise ValueError("Invalid RevisionLabelString <%s>" % child_element.text)
117
118
  literal = ARLiteral()
118
119
  self.readARObjectAttributes(child_element, literal)
119
120
  # Patch for empty element <USED-CODE-GENERATOR></USED-CODE-GENERATOR>
120
- if child_element.text is None:
121
+ if child_element.text is None:
121
122
  literal.setValue("")
122
123
  else:
123
124
  literal.setValue(child_element.text)
@@ -165,7 +166,7 @@ class AbstractARXMLParser:
165
166
 
166
167
  def getChildElementOptionalBooleanValue(self, element: ET.Element, key: str) -> Boolean:
167
168
  literal = self.getChildElementOptionalLiteral(element, key)
168
- if literal == None:
169
+ if literal is None:
169
170
  return None
170
171
  if literal.getText() == "":
171
172
  return None
@@ -182,7 +183,7 @@ class AbstractARXMLParser:
182
183
 
183
184
  def getChildElementOptionalNumericalValue(self, element: ET.Element, key: str) -> ARNumerical:
184
185
  child_element = self.find(element, key)
185
- if child_element == None:
186
+ if child_element is None:
186
187
  return None
187
188
  numerical = ARNumerical()
188
189
  self.readARObjectAttributes(child_element, numerical)
@@ -191,7 +192,7 @@ class AbstractARXMLParser:
191
192
 
192
193
  def getChildElementOptionalIntegerValue(self, element: ET.Element, key: str) -> Integer:
193
194
  child_element = self.find(element, key)
194
- if child_element == None:
195
+ if child_element is None:
195
196
  return None
196
197
  numerical = Integer()
197
198
  self.readARObjectAttributes(child_element, numerical)
@@ -200,7 +201,7 @@ class AbstractARXMLParser:
200
201
 
201
202
  def getChildElementOptionalPositiveInteger(self, element: ET.Element, key: str) -> PositiveInteger:
202
203
  child_element = self.find(element, key)
203
- if child_element == None:
204
+ if child_element is None:
204
205
  return None
205
206
  numerical = PositiveInteger()
206
207
  self.readARObjectAttributes(child_element, numerical)
@@ -231,7 +232,7 @@ class AbstractARXMLParser:
231
232
  return limit
232
233
  return None
233
234
 
234
- def _getChildElementRefTypeDestAndValue(self, element) -> RefType:
235
+ def _getChildElementRefTypeDestAndValue(self, element: ET.Element) -> RefType:
235
236
  ref = RefType()
236
237
  if 'BASE' in element.attrib:
237
238
  ref.setBase(element.attrib['BASE'])
@@ -246,7 +247,7 @@ class AbstractARXMLParser:
246
247
  return self._getChildElementRefTypeDestAndValue(child_element)
247
248
  self.raiseError("The attribute %s of <%s> has not been defined" % (key, short_name))
248
249
 
249
- def getChildElementOptionalRefType(self, element:ET.Element, key: str) -> RefType:
250
+ def getChildElementOptionalRefType(self, element: ET.Element, key: str) -> RefType:
250
251
  child_element = self.find(element, key)
251
252
  if (child_element is not None):
252
253
  return self._getChildElementRefTypeDestAndValue(child_element)
@@ -268,13 +269,19 @@ class AbstractARXMLParser:
268
269
  return None
269
270
 
270
271
  def readARObjectAttributes(self, element: ET.Element, ar_object: ARObject):
271
- ar_object.timestamp = self.readElementOptionalAttrib(element, "T") # read the timestamp
272
- ar_object.uuid = self.readElementOptionalAttrib(element, "UUID") # read the uuid
272
+ ar_object.timestamp = self.readElementOptionalAttrib(element, "T") # read the timestamp
273
+ ar_object.uuid = self.readElementOptionalAttrib(element, "UUID") # read the uuid
273
274
 
274
- if ar_object.timestamp is not None:
275
- self.logger.debug("Timestamp: %s" % ar_object.timestamp)
275
+ # if ar_object.timestamp is not None:
276
+ # self.logger.debug("Timestamp: %s" % ar_object.timestamp)
276
277
  if ar_object.uuid is not None:
277
- self.logger.debug("UUID: %s" % ar_object.uuid)
278
+ instance = AUTOSAR.getInstance()
279
+ old_ar_object = instance.getARObjectByUUID(ar_object.uuid)
280
+ if old_ar_object is not None:
281
+ self.logger.warning(Fore.YELLOW + "Duplicate UUID <%s> / type <%s>" % (ar_object.uuid, type(old_ar_object)) + Fore.WHITE)
282
+ else:
283
+ instance.addARObject(ar_object)
284
+ # self.logger.debug("UUID: %s" % ar_object.uuid)
278
285
 
279
286
  def getAUTOSARInfo(self, element: ET.Element, document: AUTOSAR):
280
287
  key = "{http://www.w3.org/2001/XMLSchema-instance}schemaLocation"
@@ -295,9 +302,9 @@ class AbstractARXMLParser:
295
302
  if item != "*" and item != ".":
296
303
  keys[idx] = "xmlns:%s" % item
297
304
  return "/".join(keys)
298
-
299
- def find(self, parent:ET.Element, key: str) -> ET.Element:
305
+
306
+ def find(self, parent: ET.Element, key: str) -> ET.Element:
300
307
  return parent.find(self.convert_find_key(key), self.nsmap)
301
308
 
302
309
  def findall(self, parent: ET.Element, key: str) -> List[ET.Element]:
303
- return parent.findall(self.convert_find_key(key), self.nsmap)
310
+ return parent.findall(self.convert_find_key(key), self.nsmap)