armodel 1.7.7__py3-none-any.whl → 1.7.9__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 (73) 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 +84 -28
  4. armodel/models/M2/AUTOSARTemplates/BswModuleTemplate/BswBehavior.py +410 -61
  5. armodel/models/M2/AUTOSARTemplates/BswModuleTemplate/BswInterfaces.py +80 -9
  6. armodel/models/M2/AUTOSARTemplates/BswModuleTemplate/BswOverview.py +141 -35
  7. armodel/models/M2/AUTOSARTemplates/CommonStructure/Implementation.py +10 -8
  8. armodel/models/M2/AUTOSARTemplates/CommonStructure/InternalBehavior.py +17 -6
  9. armodel/models/M2/AUTOSARTemplates/CommonStructure/ModeDeclaration.py +38 -3
  10. armodel/models/M2/AUTOSARTemplates/CommonStructure/ServiceNeeds.py +91 -18
  11. armodel/models/M2/AUTOSARTemplates/CommonStructure/StandardizationTemplate/BlueprintDedicated/PortPrototypeBlueprint.py +73 -0
  12. armodel/models/M2/AUTOSARTemplates/CommonStructure/StandardizationTemplate/BlueprintDedicated/__init__.py +0 -0
  13. armodel/models/M2/AUTOSARTemplates/CommonStructure/StandardizationTemplate/Keyword.py +45 -0
  14. armodel/models/M2/AUTOSARTemplates/CommonStructure/StandardizationTemplate/__init__.py +0 -0
  15. armodel/models/M2/AUTOSARTemplates/CommonStructure/TriggerDeclaration.py +45 -2
  16. armodel/models/M2/AUTOSARTemplates/ECUCDescriptionTemplate.py +20 -19
  17. armodel/models/M2/AUTOSARTemplates/EcuResourceTemplate/HwElementCategory.py +59 -0
  18. armodel/models/M2/AUTOSARTemplates/EcuResourceTemplate/__init__.py +145 -0
  19. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/ARPackage.py +243 -156
  20. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/ElementCollection.py +73 -0
  21. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/Identifiable.py +60 -32
  22. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/PrimitiveTypes.py +35 -14
  23. armodel/models/M2/AUTOSARTemplates/GenericStructure/LifeCycles.py +151 -1
  24. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Components/__init__.py +66 -42
  25. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Composition/__init__.py +1 -0
  26. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/EndToEndProtection.py +13 -6
  27. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/PortInterface/__init__.py +166 -50
  28. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SoftwareComponentDocumentation.py +80 -0
  29. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/AccessCount.py +9 -1
  30. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/ModeDeclarationGroup.py +5 -4
  31. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/RTEEvents.py +11 -1
  32. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/ServiceMapping.py +16 -2
  33. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/__init__.py +9 -1
  34. armodel/models/M2/AUTOSARTemplates/SystemTemplate/DataMapping.py +167 -5
  35. armodel/models/M2/AUTOSARTemplates/SystemTemplate/{ECUResourceMapping.py → EcuResourceMapping.py} +4 -3
  36. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Can/CanTopology.py +31 -21
  37. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Ethernet/EthernetFrame.py +5 -3
  38. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Ethernet/EthernetTopology.py +18 -6
  39. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Flexray/FlexrayCommunication.py +76 -0
  40. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Flexray/FlexrayTopology.py +654 -0
  41. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Flexray/__init__.py +0 -0
  42. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/CoreCommunication.py +64 -31
  43. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/CoreTopology.py +158 -40
  44. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/EcuInstance.py +19 -6
  45. armodel/models/M2/AUTOSARTemplates/SystemTemplate/InstanceRefs.py +2 -0
  46. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Transformer/__init__.py +524 -0
  47. armodel/models/M2/AUTOSARTemplates/SystemTemplate/__init__.py +15 -13
  48. armodel/models/M2/MSR/DataDictionary/DataDefProperties.py +10 -1
  49. armodel/models/M2/MSR/Documentation/BlockElements/Figure.py +163 -0
  50. armodel/models/M2/MSR/Documentation/BlockElements/__init__.py +0 -0
  51. armodel/models/M2/MSR/Documentation/TextModel/BlockElements/ListElements.py +5 -3
  52. armodel/models/M2/MSR/Documentation/TextModel/BlockElements/PaginationAndView.py +22 -1
  53. armodel/models/M2/MSR/Documentation/TextModel/BlockElements/__init__.py +94 -9
  54. armodel/models/__init__.py +7 -1
  55. armodel/parser/abstract_arxml_parser.py +39 -32
  56. armodel/parser/arxml_parser.py +1439 -551
  57. armodel/parser/file_parser.py +5 -3
  58. armodel/tests/test_armodel/models/test_ar_package.py +6 -11
  59. armodel/tests/test_armodel/models/test_port_interface.py +116 -117
  60. armodel/tests/test_armodel/parser/test_bsw_module_descriiption.py +109 -109
  61. armodel/tests/test_armodel/parser/test_sw_components.py +301 -28
  62. armodel/tests/test_armodel/parser/test_system.py +2 -8
  63. armodel/transformer/__init__.py +0 -0
  64. armodel/transformer/abstract.py +6 -0
  65. armodel/transformer/admin_data.py +31 -0
  66. armodel/writer/abstract_arxml_writer.py +22 -29
  67. armodel/writer/arxml_writer.py +1500 -526
  68. {armodel-1.7.7.dist-info → armodel-1.7.9.dist-info}/METADATA +61 -1
  69. {armodel-1.7.7.dist-info → armodel-1.7.9.dist-info}/RECORD +73 -57
  70. {armodel-1.7.7.dist-info → armodel-1.7.9.dist-info}/LICENSE +0 -0
  71. {armodel-1.7.7.dist-info → armodel-1.7.9.dist-info}/WHEEL +0 -0
  72. {armodel-1.7.7.dist-info → armodel-1.7.9.dist-info}/entry_points.txt +0 -0
  73. {armodel-1.7.7.dist-info → armodel-1.7.9.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,163 @@
1
+ from typing import List
2
+
3
+ from .....M2.MSR.Documentation.TextModel.LanguageDataModel import LanguageSpecific
4
+ from .....M2.MSR.Documentation.TextModel.BlockElements.PaginationAndView import Paginateable
5
+ from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
6
+ from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.EngineeringObject import EngineeringObject
7
+ from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import AREnum, String
8
+
9
+
10
+ class GraphicFitEnum(AREnum):
11
+ def __init__(self, enum_values):
12
+ super().__init__([
13
+
14
+ ])
15
+
16
+
17
+ class Graphic(EngineeringObject):
18
+ def __init__(self):
19
+ super().__init__()
20
+
21
+ self.editfit = None # type: GraphicFitEnum
22
+ self.editHeight = None # type: String
23
+ self.editscale = None # type: String
24
+ self.editWidth = None # type: String
25
+ self.filename = None # type: String
26
+ self.fit = None # type: GraphicFitEnum
27
+
28
+ def getEditfit(self):
29
+ return self.editfit
30
+
31
+ def setEditfit(self, value):
32
+ if value is not None:
33
+ self.editfit = value
34
+ return self
35
+
36
+ def getEditHeight(self):
37
+ return self.editHeight
38
+
39
+ def setEditHeight(self, value):
40
+ if value is not None:
41
+ self.editHeight = value
42
+ return self
43
+
44
+ def getEditscale(self):
45
+ return self.editscale
46
+
47
+ def setEditscale(self, value):
48
+ if value is not None:
49
+ self.editscale = value
50
+ return self
51
+
52
+ def getEditWidth(self):
53
+ return self.editWidth
54
+
55
+ def setEditWidth(self, value):
56
+ if value is not None:
57
+ self.editWidth = value
58
+ return self
59
+
60
+ def getFilename(self):
61
+ return self.filename
62
+
63
+ def setFilename(self, value):
64
+ if value is not None:
65
+ self.filename = value
66
+ return self
67
+
68
+ def getFit(self):
69
+ return self.fit
70
+
71
+ def setFit(self, value):
72
+ if value is not None:
73
+ self.fit = value
74
+ return self
75
+
76
+
77
+ class Map(ARObject):
78
+ def __init__(self):
79
+ super().__init__()
80
+
81
+
82
+ class LGraphic(LanguageSpecific):
83
+ def __init__(self):
84
+ super().__init__()
85
+
86
+ self.l = None # type: str # noqa E741
87
+ self.graphic = None # type: Graphic
88
+ self.map = None # type: Map
89
+
90
+ def getL(self):
91
+ return self.l
92
+
93
+ def setL(self, value):
94
+ if value is not None:
95
+ self.l = value # noqa E741
96
+ return self
97
+
98
+ def getGraphic(self):
99
+ return self.graphic
100
+
101
+ def setGraphic(self, value):
102
+ if value is not None:
103
+ self.graphic = value
104
+ return self
105
+
106
+ def getMap(self):
107
+ return self.map
108
+
109
+ def setMap(self, value):
110
+ if value is not None:
111
+ self.map = value
112
+ return self
113
+
114
+
115
+ class MlFigure(Paginateable):
116
+ def __init__(self):
117
+ super().__init__()
118
+
119
+ self.figureCaption = None # type: Caption
120
+ self.helpEntry = None # type: String
121
+ self.lGraphics = [] # type: List[LGraphic]
122
+ self.pgwide = None # type: PgwideEnum
123
+ self.verbatim = None # type: MultiLanguageVerbatim
124
+
125
+ def getFigureCaption(self):
126
+ return self.figureCaption
127
+
128
+ def setFigureCaption(self, value):
129
+ if value is not None:
130
+ self.figureCaption = value
131
+ return self
132
+
133
+ def getHelpEntry(self):
134
+ return self.helpEntry
135
+
136
+ def setHelpEntry(self, value):
137
+ if value is not None:
138
+ self.helpEntry = value
139
+ return self
140
+
141
+ def getLGraphics(self):
142
+ return self.lGraphics
143
+
144
+ def addLGraphics(self, value):
145
+ if value is not None:
146
+ self.lGraphics.append(value)
147
+ return self
148
+
149
+ def getPgwide(self):
150
+ return self.pgwide
151
+
152
+ def setPgwide(self, value):
153
+ if value is not None:
154
+ self.pgwide = value
155
+ return self
156
+
157
+ def getVerbatim(self):
158
+ return self.verbatim
159
+
160
+ def setVerbatim(self, value):
161
+ if value is not None:
162
+ self.verbatim = value
163
+ return self
@@ -3,6 +3,7 @@ from typing import List
3
3
  from ......M2.MSR.Documentation.TextModel.BlockElements.PaginationAndView import Paginateable
4
4
  from ......M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import AREnum
5
5
 
6
+
6
7
  class ListEnum(AREnum):
7
8
 
8
9
  NUMBER = 'number'
@@ -14,6 +15,7 @@ class ListEnum(AREnum):
14
15
  ListEnum.UNNUMBER
15
16
  ))
16
17
 
18
+
17
19
  class Item(Paginateable):
18
20
  def __init__(self):
19
21
  super().__init__()
@@ -27,10 +29,11 @@ class Item(Paginateable):
27
29
  self.itemContents = value
28
30
  return self
29
31
 
30
- class ListElement(Paginateable):
32
+
33
+ class ARList(Paginateable):
31
34
  '''
32
35
  This meta-class represents the ability to express a list. The kind of list is specified in the attribute.
33
- In AUTOSAR standard class name shall be List, but it is conflict with Python List and renamed to ListElement
36
+ In AUTOSAR standard class name shall be List, but it is conflict with Python List and renamed to ARList
34
37
  '''
35
38
  def __init__(self):
36
39
  super().__init__()
@@ -51,4 +54,3 @@ class ListElement(Paginateable):
51
54
  def setType(self, value):
52
55
  self.type = value
53
56
  return self
54
-
@@ -1,9 +1,30 @@
1
1
  from ......M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
2
2
 
3
+
3
4
  class DocumentViewSelectable(ARObject):
4
5
  def __init__(self):
5
6
  super().__init__()
6
7
 
8
+
7
9
  class Paginateable(DocumentViewSelectable):
8
10
  def __init__(self):
9
- super().__init__()
11
+ super().__init__()
12
+
13
+ self.chapterBreak = None # type: ChapterEnumBreak
14
+ self.keepWithPrevious = None # type: KeepWithPreviousEnum
15
+
16
+ def getBreak(self):
17
+ return self.chapterBreak
18
+
19
+ def setBreak(self, value):
20
+ if value is not None:
21
+ self.chapterBreak = value
22
+ return self
23
+
24
+ def getKeepWithPrevious(self):
25
+ return self.keepWithPrevious
26
+
27
+ def setKeepWithPrevious(self, value):
28
+ if value is not None:
29
+ self.keepWithPrevious = value
30
+ return self
@@ -1,25 +1,110 @@
1
- from ......M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
2
- from ......M2.MSR.Documentation.TextModel.BlockElements.ListElements import ListElement
1
+ from ......M2.MSR.Documentation.BlockElements.Figure import MlFigure
2
+ from ......M2.MSR.Documentation.TextModel.BlockElements.ListElements import ARList
3
3
  from ......M2.MSR.Documentation.TextModel.MultilanguageData import MultiLanguageParagraph
4
+ from ......M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
4
5
  from typing import List
5
6
 
7
+
6
8
  class DocumentationBlock(ARObject):
7
9
  def __init__(self):
8
10
  super().__init__()
9
11
 
12
+ self.defList = None # type: DefList
13
+ self.figures = [] # type: List[MlFigure]
14
+ self.formula = None # type:MlFormula
15
+ self.labeledList = None # type: LabeledList
16
+ self.lists = [] # type: List[ARList]
17
+ self.msrQueryP2 = None # type: MsrQueryP2
18
+ self.note = None # type: Note
10
19
  self.ps = [] # type: List[MultiLanguageParagraph]
11
- self.lists = [] # type: List[ListElement]
20
+ self.structuredReq = None # type: StructuredReq
21
+ self.trace = None # type: TraceableText
22
+ self.verbatim = None # type: MultiLanguageVerbatim
12
23
 
13
- def addP(self, p: MultiLanguageParagraph):
14
- self.ps.append(p)
24
+ def getDefList(self):
25
+ return self.defList
26
+
27
+ def setDefList(self, value):
28
+ if value is not None:
29
+ self.defList = value
30
+ return self
31
+
32
+ def getFigures(self):
33
+ return self.figures
34
+
35
+ def addFigure(self, value):
36
+ if value is not None:
37
+ self.figures.append(value)
38
+ return self
39
+
40
+ def getFormula(self):
41
+ return self.formula
42
+
43
+ def setFormula(self, value):
44
+ if value is not None:
45
+ self.formula = value
46
+ return self
47
+
48
+ def getLabeledList(self):
49
+ return self.labeledList
50
+
51
+ def setLabeledList(self, value):
52
+ if value is not None:
53
+ self.labeledList = value
15
54
  return self
16
55
 
17
- def getPs(self) -> List[MultiLanguageParagraph]:
18
- return self.ps
19
-
20
56
  def getLists(self):
21
57
  return self.lists
22
58
 
23
59
  def addList(self, value):
24
- self.lists.append(value)
60
+ if value is not None:
61
+ self.lists.append(value)
62
+ return self
63
+
64
+ def getMsrQueryP2(self):
65
+ return self.msrQueryP2
66
+
67
+ def setMsrQueryP2(self, value):
68
+ if value is not None:
69
+ self.msrQueryP2 = value
70
+ return self
71
+
72
+ def getNote(self):
73
+ return self.note
74
+
75
+ def setNote(self, value):
76
+ if value is not None:
77
+ self.note = value
78
+ return self
79
+
80
+ def getPs(self) -> List[MultiLanguageParagraph]:
81
+ return self.ps
82
+
83
+ def addP(self, value):
84
+ if value is not None:
85
+ self.ps.append(value)
86
+ return self
87
+
88
+ def getStructuredReq(self):
89
+ return self.structuredReq
90
+
91
+ def setStructuredReq(self, value):
92
+ if value is not None:
93
+ self.structuredReq = value
94
+ return self
95
+
96
+ def getTrace(self):
97
+ return self.trace
98
+
99
+ def setTrace(self, value):
100
+ if value is not None:
101
+ self.trace = value
102
+ return self
103
+
104
+ def getVerbatim(self):
105
+ return self.verbatim
106
+
107
+ def setVerbatim(self, value):
108
+ if value is not None:
109
+ self.verbatim = value
25
110
  return self
@@ -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 *
@@ -33,6 +36,8 @@ from .M2.AUTOSARTemplates.CommonStructure.ResourceConsumption.StackUsage import
33
36
  from .M2.AUTOSARTemplates.CommonStructure.ResourceConsumption.MemorySectionUsage import *
34
37
  from .M2.AUTOSARTemplates.CommonStructure.ServiceNeeds import *
35
38
  from .M2.AUTOSARTemplates.CommonStructure.SwcBswMapping import *
39
+ from .M2.AUTOSARTemplates.CommonStructure.StandardizationTemplate.Keyword import *
40
+ from .M2.AUTOSARTemplates.CommonStructure.StandardizationTemplate.BlueprintDedicated.PortPrototypeBlueprint import *
36
41
  from .M2.AUTOSARTemplates.CommonStructure.TriggerDeclaration import *
37
42
  from .M2.AUTOSARTemplates.DiagnosticExtract.DiagnosticContribution import *
38
43
  from .M2.AUTOSARTemplates.SWComponentTemplate import *
@@ -56,7 +61,7 @@ from .M2.AUTOSARTemplates.SystemTemplate import *
56
61
  from .M2.AUTOSARTemplates.SystemTemplate.DoIp import *
57
62
  from .M2.AUTOSARTemplates.SystemTemplate.DataMapping import *
58
63
  from .M2.AUTOSARTemplates.SystemTemplate.DiagnosticConnection import *
59
- from .M2.AUTOSARTemplates.SystemTemplate.ECUResourceMapping import *
64
+ from .M2.AUTOSARTemplates.SystemTemplate.EcuResourceMapping import *
60
65
  from .M2.AUTOSARTemplates.SystemTemplate.InstanceRefs import *
61
66
  from .M2.AUTOSARTemplates.SystemTemplate.NetworkManagement import *
62
67
  from .M2.AUTOSARTemplates.SystemTemplate.TransportProtocols import *
@@ -71,6 +76,7 @@ from .M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetTopology i
71
76
  from .M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.NetworkEndpoint import *
72
77
  from .M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetCommunication import *
73
78
  from .M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.ServiceInstances import *
79
+ from .M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Flexray.FlexrayCommunication import *
74
80
  from .M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreCommunication import *
75
81
  from .M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreTopology import *
76
82
  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)
@@ -257,8 +258,11 @@ class AbstractARXMLParser:
257
258
  results = []
258
259
  for child_element in child_elements:
259
260
  ref = RefType()
260
- ref.dest = child_element.attrib['DEST']
261
- ref.value = child_element.text
261
+ if 'BASE' in child_element.attrib:
262
+ ref.setBase(child_element.attrib['BASE'])
263
+ if 'DEST' in child_element.attrib:
264
+ ref.setDest(child_element.attrib['DEST'])
265
+ ref.setValue(child_element.text)
262
266
  results.append(ref)
263
267
  return results
264
268
 
@@ -268,13 +272,19 @@ class AbstractARXMLParser:
268
272
  return None
269
273
 
270
274
  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
275
+ ar_object.timestamp = self.readElementOptionalAttrib(element, "T") # read the timestamp
276
+ ar_object.uuid = self.readElementOptionalAttrib(element, "UUID") # read the uuid
273
277
 
274
- if ar_object.timestamp is not None:
275
- self.logger.debug("Timestamp: %s" % ar_object.timestamp)
278
+ # if ar_object.timestamp is not None:
279
+ # self.logger.debug("Timestamp: %s" % ar_object.timestamp)
276
280
  if ar_object.uuid is not None:
277
- self.logger.debug("UUID: %s" % ar_object.uuid)
281
+ instance = AUTOSAR.getInstance()
282
+ old_ar_object = instance.getARObjectByUUID(ar_object.uuid)
283
+ if old_ar_object is not None:
284
+ self.logger.warning(Fore.YELLOW + "Duplicate UUID <%s> / type <%s>" % (ar_object.uuid, type(old_ar_object)) + Fore.WHITE)
285
+ else:
286
+ instance.addARObject(ar_object)
287
+ # self.logger.debug("UUID: %s" % ar_object.uuid)
278
288
 
279
289
  def getAUTOSARInfo(self, element: ET.Element, document: AUTOSAR):
280
290
  key = "{http://www.w3.org/2001/XMLSchema-instance}schemaLocation"
@@ -295,12 +305,9 @@ class AbstractARXMLParser:
295
305
  if item != "*" and item != ".":
296
306
  keys[idx] = "xmlns:%s" % item
297
307
  return "/".join(keys)
298
-
299
- def findChild(self, parent:ET.Element, key: str) -> ET.Element:
300
- return parent.find("xmlns:./child::%s" % key, self.nsmap)
301
-
302
- def find(self, parent:ET.Element, key: str) -> ET.Element:
308
+
309
+ def find(self, parent: ET.Element, key: str) -> ET.Element:
303
310
  return parent.find(self.convert_find_key(key), self.nsmap)
304
311
 
305
312
  def findall(self, parent: ET.Element, key: str) -> List[ET.Element]:
306
- return parent.findall(self.convert_find_key(key), self.nsmap)
313
+ return parent.findall(self.convert_find_key(key), self.nsmap)