armodel 1.1.0__py3-none-any.whl → 1.3.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.
@@ -17,16 +17,16 @@ def show_variable_access(indent:int, variable_access: VariableAccess):
17
17
  print("%s: %s" % (" " * indent, autosar_variable_in_impl_datatype.port_prototype.value))
18
18
  print("%s: %s" % (" " * indent, autosar_variable_in_impl_datatype.target_data_prototype.value))
19
19
 
20
- def show_port(indent:int, port_portotype: PortPrototype):
21
- if (isinstance(port_portotype, RPortPrototype)):
22
- print("%s-RPort: %s (%s)" % (" " * indent, port_portotype.short_name, port_portotype.required_interface_tref.value))
23
- for client_com_spec in port_portotype.getClientComSpecs():
20
+ def show_port(indent:int, port_prototype: PortPrototype):
21
+ if (isinstance(port_prototype, RPortPrototype)):
22
+ print("%s-RPort: %s (%s)" % (" " * indent, port_prototype.short_name, port_prototype.required_interface_tref.value))
23
+ for client_com_spec in port_prototype.getClientComSpecs():
24
24
  print("%s : %s (ClientComSpec)" % (" " * (indent + 2), client_com_spec.operation_ref.value))
25
- for com_spec in port_portotype.getNonqueuedReceiverComSpecs():
25
+ for com_spec in port_prototype.getNonqueuedReceiverComSpecs():
26
26
  print("%s : %s (NonqueuedReceiverComSpec)" % (" " * (indent + 2), com_spec.data_element_ref.value))
27
- elif (isinstance(port_portotype, PPortPrototype)):
28
- print("%s-PPort: %s (%s)" % (" " * indent, port_portotype.short_name, port_portotype.provided_interface_tref.value))
29
- for com_spec in port_portotype.getNonqueuedSenderComSpecs():
27
+ elif (isinstance(port_prototype, PPortPrototype)):
28
+ print("%s-PPort: %s (%s)" % (" " * indent, port_prototype.short_name, port_prototype.provided_interface_tref.value))
29
+ for com_spec in port_prototype.getNonqueuedSenderComSpecs():
30
30
  print("%s : %s (NonqueuedSenderComSpec)" % (" " * (indent + 2), com_spec.data_element_ref.value))
31
31
  else:
32
32
  raise ValueError("Unsupported Port prototype")
@@ -0,0 +1,81 @@
1
+ import argparse
2
+ import pkg_resources
3
+ import logging
4
+ import sys
5
+ import os.path
6
+
7
+ from armodel import AUTOSAR, ARPackage
8
+ from armodel.parser import ARXMLParser
9
+
10
+ from ..lib import InputFileParser, SwComponentAnalyzer
11
+
12
+ def main():
13
+ version = pkg_resources.require("armodel")[0].version
14
+
15
+ ap = argparse.ArgumentParser()
16
+ ap.add_argument("-v", "--verbose", required= False, help= "Print debug information", action= "store_true")
17
+ ap.add_argument("-f", "--format", required= False, help= "Specify the short or long name of Sw-C. [short|long]")
18
+ ap.add_argument("--filter", required= False, help = "Set the filter condition. [CompositionSwComponent]")
19
+ ap.add_argument("Input", help = "The path of AUTOSAR XML", nargs='+')
20
+
21
+ args = ap.parse_args()
22
+
23
+ logger = logging.getLogger()
24
+
25
+ formatter = logging.Formatter('[%(levelname)s] : %(message)s')
26
+
27
+ stdout_handler = logging.StreamHandler(sys.stderr)
28
+ stdout_handler.setFormatter(formatter)
29
+
30
+ #base_path = os.path.dirname(args.Output)
31
+ log_file = os.path.join(".", 'swc-list.log')
32
+
33
+ if os.path.exists(log_file):
34
+ os.remove(log_file)
35
+
36
+ file_handler = logging.FileHandler(log_file)
37
+ file_handler.setFormatter(formatter)
38
+
39
+ logger.setLevel(logging.DEBUG)
40
+ file_handler.setLevel(logging.DEBUG)
41
+
42
+ if args.verbose:
43
+ stdout_handler.setLevel(logging.DEBUG)
44
+
45
+ else:
46
+ stdout_handler.setLevel(logging.INFO)
47
+
48
+ logger.addHandler(file_handler)
49
+ logger.addHandler(stdout_handler)
50
+
51
+ try:
52
+ parser = InputFileParser(args.Input)
53
+ filenames = parser.parse()
54
+
55
+ document = AUTOSAR().getInstance()
56
+ parser = ARXMLParser({'warning': True})
57
+
58
+ format = "short"
59
+ if args.format is not None and args.format.lower() == "long":
60
+ format = "long"
61
+
62
+ for filename in filenames:
63
+ parser.load(filename, document)
64
+
65
+ filter = ""
66
+ if args.filter is not None and args.filter.lower() == "compositionswcomponent":
67
+ filter = "CompositionSwComponent"
68
+
69
+ analyzer = SwComponentAnalyzer()
70
+ analyzer.import_data(document)
71
+ analyzer.print_out({
72
+ 'format': format,
73
+ 'filter': filter,
74
+ })
75
+
76
+ except Exception as e:
77
+ #print(e)
78
+ raise e
79
+
80
+ if __name__ == "__main__":
81
+ main()
@@ -0,0 +1,3 @@
1
+
2
+ from .cli_args_parser import InputFileParser
3
+ from .data_analyzer import SwComponentAnalyzer
@@ -0,0 +1,36 @@
1
+ from typing import List
2
+
3
+ import logging
4
+ import os, re
5
+
6
+ class InputFileParser:
7
+ def __init__(self, args: List[str]) -> None:
8
+ self._args = args
9
+ self._filenames = [] # type: List[str]
10
+ self._logger = logging.getLogger()
11
+
12
+ def _parse_file_list(self, file):
13
+ with open(file) as f_in:
14
+ for line in f_in:
15
+ self._filenames.append(line.strip())
16
+
17
+ def _parse_dir_files(self, dir_name):
18
+ for (root, _, files) in os.walk(dir_name, topdown=False):
19
+ for file in files:
20
+ m = re.match(r'.*\.arxml$', file, re.I)
21
+
22
+ if m:
23
+ self._filenames.append(os.path.join(root, file))
24
+
25
+ def parse(self) -> List[str]:
26
+ for input_file in self._args:
27
+ if os.path.isdir(input_file):
28
+ self._parse_dir_files(input_file)
29
+ else:
30
+ if input_file[0] == "@":
31
+ self._logger.debug("Parse ARXML list file %s " % input_file)
32
+ self._parse_file_list(input_file[1:])
33
+ else:
34
+ self._filenames.append(input_file)
35
+
36
+ return self._filenames
@@ -0,0 +1,34 @@
1
+ import logging
2
+
3
+ from typing import List
4
+ from ..models import AUTOSAR, ARPackage, AtomicSwComponentType, CompositionSwComponentType
5
+
6
+ class SwComponentAnalyzer:
7
+ def __init__(self) -> None:
8
+ self.swcs = [] # type: List[AtomicSwComponentType]
9
+
10
+ def parse_pkg(self, parent: ARPackage):
11
+ for pkg in parent.getARPackages():
12
+ self.parse_pkg(pkg)
13
+ for swc in parent.getSwComponentTypes():
14
+ self.swcs.append(swc)
15
+
16
+ def import_data(self, document: AUTOSAR):
17
+ for pkg in document.getARPackages():
18
+ self.parse_pkg(pkg)
19
+
20
+ def print_out(self, option = {}):
21
+ logger = logging.getLogger()
22
+
23
+ logger.info("== SW-C LIST ==")
24
+
25
+ if option['filter'] == 'CompositionSwComponent':
26
+ swc_list = filter(lambda o: isinstance(o, CompositionSwComponentType), self.swcs)
27
+ else:
28
+ swc_list = self.swcs
29
+
30
+ for swc in sorted(swc_list, key = lambda o: o.short_name):
31
+ if option['format'] == 'long':
32
+ logger.info("%s" % swc.full_name)
33
+ else:
34
+ logger.info("%s" % swc.short_name)
@@ -5,6 +5,6 @@ class ARObject(metaclass=ABCMeta):
5
5
  if type(self) == ARObject:
6
6
  raise NotImplementedError("ARObject is an abstract class.")
7
7
 
8
- self.parent = None
8
+ self.parent = None # type: ARObject
9
9
  self.checksum = None # type: str
10
10
  self.timestamp = None # type: str
@@ -1,10 +1,10 @@
1
1
  from typing import List
2
2
  from .general_structure import Identifiable, ARObject, Referrable, CollectableElement, SwcBswMapping
3
3
  from .port_interface import SenderReceiverInterface, ClientServerInterface
4
- from .sw_component import SwComponentType, EcuAbstractionSwComponentType, AtomicSwComponentType, ApplicationSwComponentType, ServiceSwComponentType, CompositionSwComponentType
4
+ from .sw_component import SwComponentType, EcuAbstractionSwComponentType, AtomicSwComponentType, ApplicationSwComponentType, ServiceSwComponentType, CompositionSwComponentType, SensorActuatorSwComponentType
5
5
  from .datatype import ImplementationDataType, ApplicationDataType, DataTypeMappingSet, DataTypeMap, SwBaseType, ApplicationPrimitiveDataType, ApplicationRecordDataType
6
6
  from .m2_msr import CompuMethod
7
- from .implementation import BswImplementation
7
+ from .implementation import BswImplementation, SwcImplementation, Implementation
8
8
  from .bsw_module_template import BswModuleDescription, BswModuleEntry
9
9
 
10
10
  class ARPackage(Identifiable, CollectableElement):
@@ -38,6 +38,12 @@ class ARPackage(Identifiable, CollectableElement):
38
38
  sw_component = ServiceSwComponentType(self, short_name)
39
39
  self.elements[short_name] = sw_component
40
40
  return self.elements[short_name]
41
+
42
+ def createSensorActuatorSwComponentType(self, short_name: str) -> SensorActuatorSwComponentType:
43
+ if (short_name not in self.elements):
44
+ sw_component = SensorActuatorSwComponentType(self, short_name)
45
+ self.elements[short_name] = sw_component
46
+ return self.elements[short_name]
41
47
 
42
48
  def createCompositionSwComponentType(self, short_name: str) -> CompositionSwComponentType:
43
49
  if (short_name not in self.elements):
@@ -110,6 +116,12 @@ class ARPackage(Identifiable, CollectableElement):
110
116
  sw_component = BswImplementation(self, short_name)
111
117
  self.elements[short_name] = sw_component
112
118
  return self.elements[short_name]
119
+
120
+ def createSwcImplementation(self, short_name: str) -> SwcImplementation:
121
+ if (short_name not in self.elements):
122
+ sw_component = SwcImplementation(self, short_name)
123
+ self.elements[short_name] = sw_component
124
+ return self.elements[short_name]
113
125
 
114
126
  def createSwcBswMapping(self, short_name: str) -> SwcBswMapping:
115
127
  if (short_name not in self.elements):
@@ -128,6 +140,9 @@ class ARPackage(Identifiable, CollectableElement):
128
140
 
129
141
  def getSwComponentTypes(self) -> List[SwComponentType]:
130
142
  return list(filter(lambda a : isinstance(a, SwComponentType), self.elements.values()))
143
+
144
+ def getSensorActuatorSwComponentType(self) -> List[SensorActuatorSwComponentType]:
145
+ return list(filter(lambda a : isinstance(a, SensorActuatorSwComponentType), self.elements.values()))
131
146
 
132
147
  def getAtomicSwComponentTypes(self) -> List[AtomicSwComponentType]:
133
148
  return list(filter(lambda a : isinstance(a, AtomicSwComponentType), self.elements.values()))
@@ -155,6 +170,12 @@ class ARPackage(Identifiable, CollectableElement):
155
170
 
156
171
  def getBswImplementations(self) -> List[BswImplementation]:
157
172
  return list(filter(lambda a: isinstance(a, BswImplementation), self.elements.values()))
173
+
174
+ def getSwcImplementations(self) -> List[SwcImplementation]:
175
+ return list(filter(lambda a: isinstance(a, SwcImplementation), self.elements.values()))
176
+
177
+ def getImplementations(self) -> List[Implementation]:
178
+ return list(filter(lambda a: isinstance(a, Implementation), self.elements.values()))
158
179
 
159
180
  def getSwcBswMappings(self) -> List[SwcBswMapping]:
160
181
  return list(filter(lambda a: isinstance(a, SwcBswMapping), self.elements.values()))
@@ -220,6 +241,8 @@ class AUTOSAR (ARObject, CollectableElement):
220
241
  raise ValueError("%s is not ImplementationDataType." % data_type)
221
242
 
222
243
  def addDataTypeMap(self, data_type_map: DataTypeMap):
244
+ if (data_type_map.application_data_type_ref is None) or (data_type_map.implementation_data_type_ref is None):
245
+ return
223
246
  self._appl_impl_type_maps[data_type_map.application_data_type_ref.value] = data_type_map.implementation_data_type_ref.value
224
247
  self._impl_appl_type_maps[data_type_map.implementation_data_type_ref.value] = data_type_map.application_data_type_ref.value
225
248
 
@@ -1,4 +1,5 @@
1
- import re
1
+ #from __future__ import annotations
2
+
2
3
  from abc import ABCMeta
3
4
  from typing import List
4
5
 
@@ -6,6 +7,8 @@ from .general_structure import ARObject, ARElement, Identifiable
6
7
  from .data_dictionary import SwDataDefProps
7
8
  from .ar_ref import RefType
8
9
 
10
+ import re
11
+
9
12
  class ValueSpecification(ARObject, metaclass=ABCMeta):
10
13
  def __init__(self):
11
14
  if type(self) == ValueSpecification:
@@ -139,11 +142,17 @@ class MemorySection(Identifiable):
139
142
 
140
143
  @alignment.setter
141
144
  def alignment(self, value:str):
142
- if value in ("UNKNOWN", "UNSPECIFIED", "BOOLEAN", "PTR"):
143
- self._alignment = value
144
- elif re.match(r'\d+', value):
145
+ match = False
146
+ if value in ("UNKNOWN", "UNSPECIFIED", "BOOLEAN", "PTR"):
145
147
  self._alignment = value
148
+ match = True
146
149
  else:
150
+ m = re.match(r'^\d+', value)
151
+ if m:
152
+ self._alignment = value
153
+ match = True
154
+
155
+ if not match:
147
156
  raise ValueError("Invalid alignment <%s> of memory section <%s>" % (value, self.short_name))
148
157
 
149
158
 
@@ -74,14 +74,15 @@ class BswImplementation(Implementation):
74
74
  self.ar_release_version = ""
75
75
  self.revision_label_string = "" # 1
76
76
  self.behavior_ref = None # type: RefType
77
- self.preconfigured_configuration_refs = [] # type: List[RefType]
78
- self.recommended_configuration_refs = [] # type: List[RefType]
77
+ self.preconfigured_configuration_ref = None # *
78
+ self.recommended_configuration_ref = None # *
79
79
  self.vendor_api_infix = "" # 0..1
80
- self.vendor_specific_module_def_refs = [] # List[RefType]
80
+ self.vendor_specific_module_def_ref = None # *
81
81
 
82
- def addVendorSpecificModuleDefRef(self, vendor_specific_module_def_ref: RefType):
83
- self.vendor_specific_module_def_refs.append(vendor_specific_module_def_ref)
84
-
85
- def getVendorSpecificModuleDefRefs(self) -> List[RefType]:
86
- return self.vendor_specific_module_def_refs
82
+ class SwcImplementation(Implementation):
83
+ def __init__(self, parent: ARObject, short_name: str) -> None:
84
+ super().__init__(parent, short_name)
87
85
 
86
+ self.behavior_ref = None # type: RefType
87
+ self.per_instance_memory_size = None
88
+ self.required_rte_vendor = ""
@@ -11,6 +11,8 @@ class VariableAccess(Identifiable):
11
11
  def __init__(self, parent: ARObject, short_name):
12
12
  super().__init__(parent, short_name)
13
13
  self.accessed_variable_ref = AutosarVariableRef()
14
+ self.accessed_variable_ref.parent = self
15
+ self.parent = parent
14
16
  self.local_variable_ref = None # type: RefType
15
17
 
16
18
  class ExecutableEntity(Identifiable):
@@ -15,6 +15,7 @@ from ..models import Implementation, Code, AutosarEngineeringObject, ResourceCon
15
15
  from ..models import BswImplementation, BswModuleDescription, BswInternalBehavior, BswCalledEntity, BswModuleEntity, BswScheduleEvent, SwcBswMapping, SwcBswRunnableMapping
16
16
 
17
17
  from typing import List
18
+ from colorama import Fore
18
19
  import xml.etree.ElementTree as ET
19
20
  import re
20
21
  import logging
@@ -24,6 +25,7 @@ class ARXMLParser:
24
25
  self.nsmap = {"xmlns": "http://autosar.org/schema/r4.0"}
25
26
  self.options = {}
26
27
  self.options['warning'] = False
28
+ self.logger = logging.getLogger()
27
29
 
28
30
  self._processOptions(options=options)
29
31
 
@@ -35,7 +37,7 @@ class ARXMLParser:
35
37
 
36
38
  def _raiseError(self, error_msg):
37
39
  if (self.options['warning'] == True):
38
- logging.error(error_msg)
40
+ self.logger.error(Fore.RED + error_msg + Fore.WHITE)
39
41
  else:
40
42
  raise ValueError(error_msg)
41
43
 
@@ -125,24 +127,25 @@ class ARXMLParser:
125
127
  return None
126
128
 
127
129
  def readChildRefElementList(self, element, key) -> List[RefType]:
128
- list_element = element.find("./xmlns:%sS" % key, self.nsmap)
130
+ child_elements = element.findall("./xmlns:%s" % key, self.nsmap)
129
131
  results = []
130
- if list_element != None:
131
- child_elements = list_element.findall("./xmlns:%s" % key, self.nsmap)
132
- for child_element in child_elements:
133
- ref = RefType()
134
- ref.dest = child_element.attrib['DEST']
135
- ref.value = child_element.text
136
- results.append(ref)
137
-
132
+ for child_element in child_elements:
133
+ ref = RefType()
134
+ ref.dest = child_element.attrib['DEST']
135
+ ref.value = child_element.text
136
+ results.append(ref)
138
137
  return results
139
138
 
140
- def readAutosarVariableInImplDatatype(self, element, accessed_variable_ref: AutosarVariableRef):
139
+ def readAutosarVariableInImplDatatype(self, element: ET.Element, accessed_variable_ref: AutosarVariableRef):
141
140
  child_element = element.find("./xmlns:ACCESSED-VARIABLE/xmlns:AUTOSAR-VARIABLE-IREF", self.nsmap)
142
141
  if (child_element != None):
143
142
  autosar_variable_in_impl_datatype = ArVariableInImplementationDataInstanceRef()
144
143
  autosar_variable_in_impl_datatype.port_prototype_ref = self.readChildOptionalRefElement(child_element, "PORT-PROTOTYPE-REF")
145
- autosar_variable_in_impl_datatype.target_data_prototype_ref = self.readChildRefElement("", child_element, "TARGET-DATA-PROTOTYPE-REF")
144
+ if autosar_variable_in_impl_datatype.port_prototype_ref is None:
145
+ self._raiseError("PORT-PROTOTYPE-REF of <%s> is empty." % accessed_variable_ref.parent.short_name)
146
+ autosar_variable_in_impl_datatype.target_data_prototype_ref = self.readChildOptionalRefElement(child_element, "TARGET-DATA-PROTOTYPE-REF")
147
+ if autosar_variable_in_impl_datatype.target_data_prototype_ref is None:
148
+ self._raiseError("TARGET-DATA-PROTOTYPE-REF of <%s> is empty." % accessed_variable_ref.parent.short_name)
146
149
  accessed_variable_ref.autosar_variable_in_impl_datatype = autosar_variable_in_impl_datatype
147
150
 
148
151
  def readLocalVariableRef(self, element, accessed_variable_ref: AutosarVariableRef):
@@ -153,6 +156,8 @@ class ARXMLParser:
153
156
  def _readVariableAccesses(self, element, parent: RunnableEntity, key: str):
154
157
  for child_element in element.findall("./xmlns:%s/xmlns:VARIABLE-ACCESS" % key, self.nsmap):
155
158
  short_name = self.readShortName(child_element)
159
+ self.logger.debug("readVariableAccesses %s" % short_name)
160
+
156
161
  if (key == "DATA-RECEIVE-POINT-BY-ARGUMENTS"):
157
162
  variable_access = parent.createDataReceivePointByArgument(short_name)
158
163
  self.readAutosarVariableInImplDatatype(child_element, variable_access.accessed_variable_ref)
@@ -179,12 +184,12 @@ class ARXMLParser:
179
184
  ref = self.readChildOptionalRefElement(child_element, "BSW-MODULE-ENTRY-REF")
180
185
  if (ref != None):
181
186
  parent.implemented_entry_refs.append(ref)
182
- logging.debug("ImplementedEntry <%s> of BswModuleDescription <%s> has been added", ref.value, parent.short_name)
187
+ self.logger.debug("ImplementedEntry <%s> of BswModuleDescription <%s> has been added", ref.value, parent.short_name)
183
188
 
184
189
  def readProvidedModeGroup(self, element, parent: BswModuleDescription):
185
190
  for child_element in element.findall("./xmlns:PROVIDED-MODE-GROUPS/xmlns:MODE-DECLARATION-GROUP-PROTOTYPE", self.nsmap):
186
191
  short_name = self.readShortName(child_element)
187
- logging.debug("readProvidedModeGroup %s" % short_name)
192
+ self.logger.debug("readProvidedModeGroup %s" % short_name)
188
193
 
189
194
  mode_group = parent.createProvidedModeGroup(short_name)
190
195
  mode_group.type_tref = self.readChildRefElement(parent.short_name, child_element, "TYPE-TREF")
@@ -192,13 +197,15 @@ class ARXMLParser:
192
197
  def readRequiredModeGroup(self, element, parent: BswModuleDescription):
193
198
  for child_element in element.findall("./xmlns:REQUIRED-MODE-GROUPS/xmlns:MODE-DECLARATION-GROUP-PROTOTYPE", self.nsmap):
194
199
  short_name = self.readShortName(child_element)
195
- logging.debug("readRequiredModeGroup %s" % short_name)
200
+ self.logger.debug("readRequiredModeGroup %s" % short_name)
196
201
  mode_group = parent.createProvidedModeGroup(short_name)
197
202
  mode_group.type_tref = self.readChildRefElement(parent.short_name, child_element, "TYPE-TREF")
198
203
 
199
204
  def readCanEnterExclusiveAreaRefs(self, element, entity: ExecutableEntity):
200
- for ref in self.readChildRefElementList(element, "CAN-ENTER-EXCLUSIVE-AREA-REF"):
201
- entity.addCanEnterExclusiveAreaRef(ref)
205
+ child_element = element.find("./xmlns:CAN-ENTER-EXCLUSIVE-AREA-REFS", self.nsmap)
206
+ if child_element != None:
207
+ for ref in self.readChildRefElementList(child_element, "CAN-ENTER-EXCLUSIVE-AREA-REF"):
208
+ entity.addCanEnterExclusiveAreaRef(ref)
202
209
 
203
210
  def readExecutableEntity(self, element, entity: ExecutableEntity):
204
211
  self.readCanEnterExclusiveAreaRefs(element, entity)
@@ -211,7 +218,7 @@ class ARXMLParser:
211
218
  def readBswCalledEntity(self, element, parent: BswInternalBehavior):
212
219
  for child_element in element.findall("./xmlns:ENTITYS/xmlns:BSW-CALLED-ENTITY", self.nsmap):
213
220
  short_name = self.readShortName(child_element)
214
- logging.debug("readBswCalledEntity %s" % short_name)
221
+ self.logger.debug("readBswCalledEntity %s" % short_name)
215
222
  entity = parent.createBswCalledEntity(short_name)
216
223
 
217
224
  self.readBswModuleEntity(child_element, entity)
@@ -219,7 +226,7 @@ class ARXMLParser:
219
226
  def readBswSchedulableEntity(self, element, parent: BswInternalBehavior):
220
227
  for child_element in element.findall("./xmlns:ENTITYS/xmlns:BSW-SCHEDULABLE-ENTITY", self.nsmap):
221
228
  short_name = self.readShortName(child_element)
222
- logging.debug("readBswSchedulableEntity %s" % short_name)
229
+ self.logger.debug("readBswSchedulableEntity %s" % short_name)
223
230
  entity = parent.createBswSchedulableEntity(short_name)
224
231
 
225
232
  self.readBswModuleEntity(child_element, entity)
@@ -233,7 +240,7 @@ class ARXMLParser:
233
240
  def readBswModeSwitchEvent(self, element, parent: BswInternalBehavior):
234
241
  for child_element in element.findall("./xmlns:EVENTS/xmlns:BSW-MODE-SWITCH-EVENT", self.nsmap):
235
242
  short_name = self.readShortName(child_element)
236
- logging.debug("readBswModeSwitchEvent %s" % short_name)
243
+ self.logger.debug("readBswModeSwitchEvent %s" % short_name)
237
244
  event = parent.createBswModeSwitchEvent(short_name)
238
245
 
239
246
  self.readBswScheduleEvent(child_element, event)
@@ -241,7 +248,7 @@ class ARXMLParser:
241
248
  def readBswTimingEvent(self, element, parent: BswInternalBehavior):
242
249
  for child_element in element.findall("./xmlns:EVENTS/xmlns:BSW-TIMING-EVENT", self.nsmap):
243
250
  short_name = self.readShortName(child_element)
244
- logging.debug("readBswTimingEvent %s" % short_name)
251
+ self.logger.debug("readBswTimingEvent %s" % short_name)
245
252
  event = parent.createBswTimingEvent(short_name)
246
253
  event.period = self.readChildElementFloatValue(short_name, child_element, "PERIOD")
247
254
 
@@ -250,7 +257,7 @@ class ARXMLParser:
250
257
  def readBswDataReceivedEvent(self, element, parent: BswInternalBehavior):
251
258
  for child_element in element.findall("./xmlns:EVENTS/xmlns:BSW-DATA-RECEIVED-EVENT", self.nsmap):
252
259
  short_name = self.readShortName(child_element)
253
- logging.debug("readBswDataReceivedEvent %s" % short_name)
260
+ self.logger.debug("readBswDataReceivedEvent %s" % short_name)
254
261
  event = parent.createBswDataReceivedEvent(short_name)
255
262
  event.data_ref = self.readChildRefElement(parent.short_name, child_element, "DATA-REF")
256
263
 
@@ -259,15 +266,17 @@ class ARXMLParser:
259
266
  def readBswInternalTriggerOccurredEvent(self, element, parent: BswInternalBehavior):
260
267
  for child_element in element.findall("./xmlns:EVENTS/xmlns:BSW-INTERNAL-TRIGGER-OCCURRED-EVENT", self.nsmap):
261
268
  short_name = self.readShortName(child_element)
262
- logging.debug("readBswInternalTriggerOccurredEvent %s" % short_name)
269
+ self.logger.debug("readBswInternalTriggerOccurredEvent %s" % short_name)
263
270
  event = parent.createBswInternalTriggerOccurredEvent(short_name)
264
271
  event.event_source_ref = self.readChildRefElement(parent.short_name, child_element, "EVENT-SOURCE-REF")
265
272
 
266
273
  self.readBswScheduleEvent(child_element, event)
267
274
 
268
275
  def readDataTypeMappingRefs(self, element, behavior: InternalBehavior):
269
- for ref in self.readChildRefElementList(element, "DATA-TYPE-MAPPING-REF"):
270
- behavior.addDataTypeMappingRef(ref)
276
+ child_element = element.find("./xmlns:DATA-TYPE-MAPPING-REFS", self.nsmap)
277
+ if child_element != None:
278
+ for ref in self.readChildRefElementList(child_element, "DATA-TYPE-MAPPING-REF"):
279
+ behavior.addDataTypeMappingRef(ref)
271
280
 
272
281
  def readInternalBehavior(self, element, behavior: InternalBehavior):
273
282
  for child_element in element.findall("./xmlns:EXCLUSIVE-AREAS/xmlns:EXCLUSIVE-AREA", self.nsmap):
@@ -280,17 +289,14 @@ class ARXMLParser:
280
289
  for child_element in element.findall("./xmlns:INTERNAL-BEHAVIORS/xmlns:SWC-INTERNAL-BEHAVIOR", self.nsmap):
281
290
  short_name = self.readShortName(child_element)
282
291
  behavior = parent.createSwcInternalBehavior(short_name)
283
- logging.debug("readSwInternalBehavior %s" % behavior.full_name)
292
+ self.logger.debug("readSwInternalBehavior %s" % behavior.full_name)
284
293
 
285
294
  # read the internal behavior
286
295
  self.readInternalBehavior(child_element, behavior)
287
296
 
288
297
  self.readRunnableEntities(child_element, behavior)
289
298
  self.readOperationInvokedEvents(child_element, behavior)
290
- self.readInitEvents(child_element, behavior)
291
299
  self.readTimingEvents(child_element, behavior)
292
- self.readDataReceivedEvent(child_element, behavior)
293
- self.readSwcModeSwitchEvent(child_element, behavior)
294
300
  self.readInternalTriggerOccurredEvent(child_element, behavior)
295
301
  self.readExplicitInterRunnableVariables(child_element, behavior)
296
302
 
@@ -298,7 +304,7 @@ class ARXMLParser:
298
304
  for child_element in element.findall("./xmlns:INTERNAL-BEHAVIORS/xmlns:BSW-INTERNAL-BEHAVIOR", self.nsmap):
299
305
  short_name = self.readShortName(child_element)
300
306
  behavior = parent.createBswInternalBehavior(short_name)
301
- logging.debug("readBswInternalBehavior %s" % behavior.full_name)
307
+ self.logger.debug("readBswInternalBehavior %s" % behavior.full_name)
302
308
 
303
309
  # read the internal behavior
304
310
  self.readInternalBehavior(child_element, behavior)
@@ -316,7 +322,7 @@ class ARXMLParser:
316
322
  bsw_module_description = parent.createBswModuleDescription(short_name)
317
323
  bsw_module_description.module_id = self.readChildElementNumberValue(short_name, child_element, "MODULE-ID")
318
324
 
319
- logging.debug("readBswModuleDescription %s" % bsw_module_description.full_name)
325
+ self.logger.debug("readBswModuleDescription %s" % bsw_module_description.full_name)
320
326
 
321
327
  self.readBswModuleDescriptionImplementedEntry(child_element, bsw_module_description)
322
328
  self.readProvidedModeGroup(child_element, bsw_module_description)
@@ -334,8 +340,8 @@ class ARXMLParser:
334
340
  entry.execution_context = self.readChildOptionalElement(child_element, "EXECUTION-CONTEXT")
335
341
  entry.sw_service_impl_policy = self.readChildOptionalElement(child_element, "SW-SERVICE-IMPL-POLICY")
336
342
 
337
- #logging.debug("readBswModuleEntry \n%s" % entry)
338
- logging.debug("readBswModuleEntry %s" % entry.short_name)
343
+ #self.logger.debug("readBswModuleEntry \n%s" % entry)
344
+ self.logger.debug("readBswModuleEntry %s" % entry.short_name)
339
345
 
340
346
  def readArtifactDescriptor(self, element, code_desc: Code):
341
347
  for child_element in element.findall("./xmlns:ARTIFACT-DESCRIPTORS/xmlns:AUTOSAR-ENGINEERING-OBJECT", self.nsmap):
@@ -344,12 +350,12 @@ class ARXMLParser:
344
350
  artifact_desc.category = self.readChildElement(code_desc.short_name, child_element, "CATEGORY")
345
351
  code_desc.addArtifactDescriptor(artifact_desc)
346
352
 
347
- logging.debug("readArtifactDescriptor %s", artifact_desc.short_label)
353
+ self.logger.debug("readArtifactDescriptor %s", artifact_desc.short_label)
348
354
 
349
355
  def readCodeDescriptor(self, element, impl: Implementation):
350
356
  for child_element in element.findall("./xmlns:CODE-DESCRIPTORS/xmlns:CODE", self.nsmap):
351
357
  short_name = self.readShortName(child_element)
352
- logging.debug("readCodeDescriptor %s" % short_name)
358
+ self.logger.debug("readCodeDescriptor %s" % short_name)
353
359
  code_desc = impl.createCodeDescriptor(short_name)
354
360
  self.readArtifactDescriptor(child_element, code_desc)
355
361
 
@@ -361,7 +367,7 @@ class ARXMLParser:
361
367
  if (alignment != None):
362
368
  memory_section.alignment = alignment
363
369
  memory_section.sw_addr_method_ref = self.readChildRefElement(consumption.short_name, child_element, "SW-ADDRMETHOD-REF")
364
- logging.debug("readMemorySections %s" % memory_section.short_name)
370
+ self.logger.debug("readMemorySections %s" % memory_section.short_name)
365
371
 
366
372
  def readResourceConsumption(self, element, impl: Implementation):
367
373
  child_element = element.find("./xmlns:RESOURCE-CONSUMPTION", self.nsmap)
@@ -374,28 +380,32 @@ class ARXMLParser:
374
380
 
375
381
  def readImplementation(self, element, impl: Implementation):
376
382
  self.readCodeDescriptor(element, impl)
377
- impl.programming_language = self.readChildElement(impl.short_name, element, "PROGRAMMING-LANGUAGE")
383
+ impl.programming_language = self.readChildOptionalElement(element, "PROGRAMMING-LANGUAGE")
378
384
  self.readResourceConsumption(element, impl)
379
- impl.sw_version = self.readChildElement(impl.short_name, element, "SW-VERSION")
385
+ impl.sw_version = self.readChildOptionalElement(element, "SW-VERSION")
380
386
  impl.swc_bsw_mapping_ref = self.readChildOptionalRefElement(element, "SWC-BSW-MAPPING-REF")
381
387
  impl.vendor_id = self.readChildOptionalElementNumberValue(element, "VENDOR-ID")
382
- if (impl.vendor_id == None):
383
- self._raiseError("Vendor id of <%s> is required" % impl.short_name)
384
-
385
- def readVendorSpecificModuleDefs(self, element, impl: BswImplementation):
386
- for ref in self.readChildRefElementList(element, "VENDOR-SPECIFIC-MODULE-DEF-REF"):
387
- impl.addVendorSpecificModuleDefRef(ref)
388
388
 
389
389
  def readBswImplementation(self, element, parent: ARPackage):
390
390
  for child_element in element.findall("./xmlns:ELEMENTS/xmlns:BSW-IMPLEMENTATION", self.nsmap):
391
391
  short_name = self.readShortName(child_element)
392
- impl = parent.createBswImplementation(short_name)
393
- logging.debug("readImplementation %s" % impl.short_name)
392
+ impl = parent.createBswImplementation(short_name)
393
+ self.logger.debug("readBswImplementation %s" % impl.short_name)
394
394
 
395
395
  self.readImplementation(child_element, impl)
396
+
396
397
  impl.ar_release_version = self.readChildElement(parent.short_name, child_element, "AR-RELEASE-VERSION")
397
398
  impl.behavior_ref = self.readChildRefElement(parent.short_name, child_element, "BEHAVIOR-REF")
398
- self.readVendorSpecificModuleDefs(child_element, impl)
399
+
400
+ def readSwcImplementation(self, element, parent: ARPackage):
401
+ for child_element in element.findall("./xmlns:ELEMENTS/xmlns:SWC-IMPLEMENTATION", self.nsmap):
402
+ short_name = self.readShortName(child_element)
403
+ impl = parent.createSwcImplementation(short_name)
404
+ self.logger.debug("readSwcImplementation %s" % impl.short_name)
405
+
406
+ self.readImplementation(child_element, impl)
407
+
408
+ impl.behavior_ref = self.readChildRefElement(parent.short_name, child_element, "BEHAVIOR-REF")
399
409
 
400
410
  def readDataReceivePointByArguments(self, element, parent: RunnableEntity):
401
411
  self._readVariableAccesses(element, parent, "DATA-RECEIVE-POINT-BY-ARGUMENTS")
@@ -463,9 +473,11 @@ class ARXMLParser:
463
473
  for child_element in element.findall("./xmlns:RUNNABLES/xmlns:RUNNABLE-ENTITY", self.nsmap):
464
474
  short_name = self.readShortName(child_element)
465
475
  runnable = parent.createRunnableEntity(short_name)
466
- runnable.can_be_invoked_concurrently = self.readChildElement(short_name, child_element, "CAN-BE-INVOKED-CONCURRENTLY")
476
+ runnable.can_be_invoked_concurrently = self.readChildOptionalElement(child_element, "CAN-BE-INVOKED-CONCURRENTLY")
467
477
  runnable.symbol = self.readChildElement(short_name, child_element, "SYMBOL")
468
478
 
479
+ self.logger.debug("readRunnableEntities %s" % short_name)
480
+
469
481
  self.readDataReceivePointByArguments(child_element, runnable)
470
482
  self.readDataReceivePointByValues(child_element, runnable)
471
483
  self.readDataReadAccesses(child_element, runnable)
@@ -477,7 +489,7 @@ class ARXMLParser:
477
489
  self.readInternalTriggeringPoint(child_element, runnable)
478
490
 
479
491
  def readRTEEvent(self, element, event: RTEEvent):
480
- event.start_on_event_ref = self.readChildRefElement(event.short_name, element, "START-ON-EVENT-REF")
492
+ event.start_on_event_ref = self.readChildOptionalRefElement(element, "START-ON-EVENT-REF")
481
493
 
482
494
  def readOperationIRef(self, element, parent: OperationInvokedEvent):
483
495
  child_element = element.find("./xmlns:OPERATION-IREF", self.nsmap)
@@ -504,7 +516,7 @@ class ARXMLParser:
504
516
  for child_element in element.findall("./xmlns:EVENTS/xmlns:INIT-EVENT", self.nsmap):
505
517
  short_name = self.readShortName(child_element)
506
518
  event = parent.createInitEvent(short_name)
507
- logging.debug("readInitEvents %s" % event.short_name)
519
+
508
520
  self.readRTEEvent(child_element, event)
509
521
 
510
522
  def readTimingEvents(self, element, parent: SwcInternalBehavior):
@@ -523,7 +535,7 @@ class ARXMLParser:
523
535
  for child_element in element.findall("./xmlns:EVENTS/xmlns:DATA-RECEIVED-EVENT", self.nsmap):
524
536
  short_name = self.readShortName(child_element)
525
537
  event = parent.createDataReceivedEvent(short_name)
526
- logging.debug("DataReceivedEvent %s" % event.short_name)
538
+
527
539
  self.readRTEEvent(child_element, event)
528
540
  self.readRVariableInAtomicSwcInstanceRef(child_element, event)
529
541
 
@@ -605,8 +617,10 @@ class ARXMLParser:
605
617
  array_sub_element = data_type.getImplementationDataTypeElements()[0]
606
618
  if (array_sub_element.category == ImplementationDataType.CATEGORY_TYPE_REFERENCE):
607
619
  data_type.setArrayElementType(array_sub_element.sw_data_def_props.implementation_data_type_ref.value)
620
+ elif (array_sub_element.category == ImplementationDataType.CATEGORY_TYPE_VALUE): # TODO: fix
621
+ continue
608
622
  else:
609
- self._raiseError("The catetory <%s> of array sub-element does not support." % array_sub_element.category)
623
+ self._raiseError("The category <%s> of array sub-element <%s> does not support." % (array_sub_element.category, data_type.short_name))
610
624
 
611
625
  def readSwDataTypes(self, element, parent: ARPackage):
612
626
  for child_element in element.findall("./xmlns:ELEMENTS/xmlns:SW-BASE-TYPE", self.nsmap):
@@ -620,12 +634,12 @@ class ARXMLParser:
620
634
  com_spec.operation_ref = self.readChildRefElement(parent.short_name, child_element, "OPERATION-REF")
621
635
  parent.addRequiredComSpec(com_spec)
622
636
  except ValueError as err:
623
- print(parent.short_name + ": " + str(err))
637
+ self.logger.error(parent.short_name + ": " + str(err))
624
638
 
625
639
  def readReceiverComSpec(self, element, com_spec: ReceiverComSpec):
626
640
  #FIXME: readchildElement
627
641
  com_spec.data_element_ref = self.readChildOptionalRefElement(element, "DATA-ELEMENT-REF")
628
- com_spec.handle_out_of_range = self.readChildElement("", element, "HANDLE-OUT-OF-RANGE")
642
+ com_spec.handle_out_of_range = self.readChildOptionalElement(element, "HANDLE-OUT-OF-RANGE")
629
643
  com_spec.uses_end_to_end_protection = self.readChildOptionalElementBooleanValue(element, "USES-END-TO-END-PROTECTION")
630
644
 
631
645
  def readNonqueuedReceiverComSpec(self, element, parent: RPortPrototype):
@@ -640,14 +654,14 @@ class ARXMLParser:
640
654
  com_spec.handle_never_received = self.readChildElementBooleanValue("", child_element, "HANDLE-NEVER-RECEIVED")
641
655
  com_spec.handel_timeout_type = self.readChildElement("", child_element, "HANDLE-TIMEOUT-TYPE")
642
656
  except ValueError as err:
643
- print(parent.short_name + ": " + str(err))
657
+ self.logger.error(parent.short_name + ": " + str(err))
644
658
 
645
659
  parent.addRequiredComSpec(com_spec)
646
660
 
647
661
  def readRPortPrototype(self, element, parent: AtomicSwComponentType):
648
662
  for child_element in element.findall("./xmlns:PORTS/xmlns:R-PORT-PROTOTYPE", self.nsmap):
649
663
  short_name = self.readShortName(child_element)
650
- logging.debug("readRPortPrototype %s" % short_name)
664
+ self.logger.debug("readRPortPrototype %s" % short_name)
651
665
 
652
666
  prototype = parent.createRPortPrototype(short_name)
653
667
  prototype.required_interface_tref = self.readChildOptionalRefElement(child_element, "REQUIRED-INTERFACE-TREF")
@@ -658,7 +672,7 @@ class ARXMLParser:
658
672
  def readSenderComSpec(self, element, com_spec: SenderComSpec):
659
673
  # FIXME:
660
674
  com_spec.data_element_ref = self.readChildOptionalRefElement(element, "DATA-ELEMENT-REF")
661
- com_spec.handle_out_of_range = self.readChildElement("", element, "HANDLE-OUT-OF-RANGE")
675
+ com_spec.handle_out_of_range = self.readChildOptionalElement(element, "HANDLE-OUT-OF-RANGE")
662
676
  com_spec.uses_end_to_end_protection = self.readChildOptionalElementBooleanValue(element, "USES-END-TO-END-PROTECTION")
663
677
 
664
678
  def readNonqueuedSenderComSpec(self, element, parent: PPortPrototype):
@@ -670,7 +684,7 @@ class ARXMLParser:
670
684
  def readPPortPrototype(self, element, parent: AtomicSwComponentType):
671
685
  for child_element in element.findall("./xmlns:PORTS/xmlns:P-PORT-PROTOTYPE", self.nsmap):
672
686
  short_name = self.readShortName(child_element)
673
- logging.debug("readPPortPrototype %s" % short_name)
687
+ self.logger.debug("readPPortPrototype %s" % short_name)
674
688
 
675
689
  prototype = parent.createPPortPrototype(short_name)
676
690
  prototype.provided_interface_tref = self.readChildOptionalRefElement(child_element, "PROVIDED-INTERFACE-TREF")
@@ -695,7 +709,6 @@ class ARXMLParser:
695
709
  for child_element in element.findall("./xmlns:ELEMENTS/xmlns:APPLICATION-SW-COMPONENT-TYPE", self.nsmap):
696
710
  short_name = self.readShortName(child_element)
697
711
  sw_component = parent.createApplicationSwComponentType(short_name)
698
- logging.debug("Read ApplicationSwComponentTypes <%s>" % sw_component.short_name)
699
712
  self.readAtomicSwComponentType(child_element, sw_component)
700
713
 
701
714
  def readComplexDeviceDriverSwComponentTypes(self, element, parent: ARPackage):
@@ -704,6 +717,12 @@ class ARXMLParser:
704
717
  sw_component = parent.createApplicationSwComponentType(short_name)
705
718
  self.readAtomicSwComponentType(child_element, sw_component)
706
719
 
720
+ def readSensorActuatorSwComponentType(self, element, parent: ARPackage):
721
+ for child_element in element.findall("./xmlns:ELEMENTS/xmlns:SENSOR-ACTUATOR-SW-COMPONENT-TYPE", self.nsmap):
722
+ short_name = self.readShortName(child_element)
723
+ sw_component = parent.createSensorActuatorSwComponentType(short_name)
724
+ self.readAtomicSwComponentType(child_element, sw_component)
725
+
707
726
  def readServiceSwComponentTypes(self, element, parent: ARPackage):
708
727
  for child_element in element.findall("./xmlns:ELEMENTS/xmlns:SERVICE-SW-COMPONENT-TYPE", self.nsmap):
709
728
  short_name = self.readShortName(child_element)
@@ -729,7 +748,7 @@ class ARXMLParser:
729
748
  def readAssemblySwConnectors(self, element, parent: CompositionSwComponentType):
730
749
  for child_element in element.findall("./xmlns:CONNECTORS/xmlns:ASSEMBLY-SW-CONNECTOR", self.nsmap):
731
750
  short_name = self.readShortName(child_element)
732
- logging.debug("readAssemblySwConnectors %s" % short_name)
751
+ self.logger.debug("readAssemblySwConnectors %s" % short_name)
733
752
 
734
753
  connector = parent.createAssemblySwConnector(short_name)
735
754
  self.readAssemblySwConnectorProviderIRef(child_element, connector)
@@ -738,7 +757,7 @@ class ARXMLParser:
738
757
  def readSwComponentPrototypes(self, element, parent: CompositionSwComponentType):
739
758
  for child_element in element.findall("./xmlns:COMPONENTS/xmlns:SW-COMPONENT-PROTOTYPE", self.nsmap):
740
759
  short_name = self.readShortName(child_element)
741
- logging.debug("readSwComponentPrototypes %s" % short_name)
760
+ self.logger.debug("readSwComponentPrototypes %s" % short_name)
742
761
 
743
762
  prototype = parent.createSwComponentPrototype(short_name)
744
763
  prototype.type_tref = self.readChildOptionalRefElement(child_element, "TYPE-TREF")
@@ -746,7 +765,7 @@ class ARXMLParser:
746
765
  def readCompositionSwComponentTypes(self, element, parent: ARPackage):
747
766
  for child_element in element.findall("./xmlns:ELEMENTS/xmlns:COMPOSITION-SW-COMPONENT-TYPE", self.nsmap):
748
767
  short_name = self.readShortName(child_element)
749
- logging.debug("readCompositionSwComponentTypes: <%s>" % short_name)
768
+ self.logger.debug("readCompositionSwComponentTypes: <%s>" % short_name)
750
769
 
751
770
  sw_component = parent.createCompositionSwComponentType(short_name)
752
771
  self.readSwComponentType(child_element, sw_component)
@@ -790,8 +809,10 @@ class ARXMLParser:
790
809
  parent.addArgumentDataPrototype(prototype)
791
810
 
792
811
  def readPossibleErrorRefs(self, element, parent: ClientServerOperation):
793
- for ref in self.readChildRefElementList(element, "POSSIBLE-ERROR-REF"):
794
- parent.addPossibleErrorRef(ref)
812
+ child_element = element.find("./xmlns:POSSIBLE-ERROR-REFS", self.nsmap)
813
+ if child_element != None:
814
+ for ref in self.readChildRefElementList(child_element, "POSSIBLE-ERROR-REF"):
815
+ parent.addPossibleErrorRef(ref)
795
816
 
796
817
  def readOperations(self, element, parent: ClientServerInterface):
797
818
  for child_element in element.findall("./xmlns:OPERATIONS/xmlns:CLIENT-SERVER-OPERATION", self.nsmap):
@@ -839,7 +860,7 @@ class ARXMLParser:
839
860
  for child_element in element.findall("./xmlns:ELEMENTS/xmlns:COMPU-METHOD", self.nsmap):
840
861
  short_name = self.readShortName(child_element)
841
862
  compu_method = parent.createCompuMethod(short_name)
842
- compu_method.category = self.readChildElement(short_name, child_element, "CATEGORY")
863
+ compu_method.category = self.readChildOptionalElement(child_element, "CATEGORY")
843
864
  self.readCompuInternalToPhys(child_element, compu_method)
844
865
 
845
866
  def readSwcBswRunnableMappings(self, element, parent: SwcBswMapping):
@@ -863,7 +884,7 @@ class ARXMLParser:
863
884
  short_name = self.readShortName(child_element)
864
885
  ar_package = parent.createARPackage(short_name)
865
886
 
866
- logging.debug("readARPackages %s" % ar_package.full_name)
887
+ self.logger.debug("readARPackages %s" % ar_package.full_name)
867
888
 
868
889
  self.readSenderReceiverInterfaces(child_element, ar_package)
869
890
  self.readClientServerInterfaces(child_element, ar_package)
@@ -877,20 +898,23 @@ class ARXMLParser:
877
898
  self.readEcuAbstractionSwComponents(child_element, ar_package)
878
899
  self.readApplicationSwComponentTypes(child_element, ar_package)
879
900
  self.readComplexDeviceDriverSwComponentTypes(child_element, ar_package)
901
+ self.readSensorActuatorSwComponentType(child_element, ar_package)
880
902
  self.readServiceSwComponentTypes(child_element, ar_package)
881
903
  self.readCompositionSwComponentTypes(child_element, ar_package)
882
904
  self.readBswModuleDescription(child_element, ar_package)
883
905
  self.readBswModuleEntry(child_element, ar_package)
884
906
  self.readSwcBswMappings(child_element, ar_package)
885
907
  self.readBswImplementation(child_element, ar_package)
886
-
908
+ self.readSwcImplementation(child_element, ar_package)
887
909
 
888
910
  def load(self, filename, document: AUTOSAR):
911
+ self.logger.info("Load %s ..." % filename)
912
+
889
913
  tree = ET.parse(filename)
890
914
  root = tree.getroot()
891
915
  if (self.getPureTagName(root.tag) != "AUTOSAR"):
892
916
  self._raiseError("Invalid ARXML file <%s>" % filename)
893
917
 
894
- print("Load %s ..." % filename)
918
+
895
919
 
896
920
  self.readARPackages(root, document)
@@ -1,145 +1,185 @@
1
- Metadata-Version: 2.1
2
- Name: armodel
3
- Version: 1.1.0
4
- Summary: the python arxml parser
5
- Home-page: http://github.com/melodypapa/py-armodel
6
- Author: melodypapa
7
- Author-email: melodypapa@outlook.com
8
- License: MIT
9
- Keywords: AUTOSAR ARXML
10
- Platform: UNKNOWN
11
- Classifier: Development Status :: 1 - Planning
12
- Classifier: Environment :: Console
13
- Classifier: Programming Language :: Python :: 3
14
- Classifier: License :: OSI Approved :: MIT License
15
- Classifier: Operating System :: OS Independent
16
- Requires-Python: >=3.5
17
- Description-Content-Type: text/markdown
18
- Provides-Extra: pytest
19
- Requires-Dist: pytest-cov ; extra == 'pytest'
20
-
21
- # 1. py-armodel
22
-
23
- ## 1.1. Purpose
24
-
25
- To support AUTOSAR model with python
26
-
27
- ## 1.2. Reference Documents
28
- 1. AUTOSAR_TPS_XMLSchemaProductionRules.pdf
29
- 2. AUTOSAR_TPS_ARXMLSerializationRules.pdf
30
-
31
- |Version|Documentation|Travis CI|Coverage Status|Pypi|
32
- |--|--|--|--|--|
33
- |[![GitHub version](https://badge.fury.io/gh/melodypapa%2Fpy-armodel.svg)](https://badge.fury.io/gh/melodypapa%2Fpy-armodel)|[![Documentation Status](https://readthedocs.org/projects/py-armodel/badge/?version=latest)](https://py-armodel.readthedocs.io/en/latest)|[![](https://www.travis-ci.com/melodypapa/py-armodel.svg?branch=main)](https://www.travis-ci.com/melodypapa/py-armodel)|[![Coverage Status](https://coveralls.io/repos/github/melodypapa/py-armodel/badge.svg?branch=main)](https://coveralls.io/github/melodypapa/py-armodel?branch=main)|[![PyPI version](https://badge.fury.io/py/armodel.svg)](https://badge.fury.io/py/armodel)|
34
-
35
- ## 1.3. How to create the distribution and upload to pypi
36
- 1. Run `python setup.py bdist_wheel` to generate distribution
37
- 2. Run `twine check dist/*` to check the validation of distribution
38
- 3. Run `twine upload dist/*` to upload to pypi repository
39
- 4. Check the website https://pypi.org/project/armodel/ to find out it works or not
40
-
41
- And more details can be found at https://packaging.python.org/
42
-
43
- ## 1.4. How to perform Unit test
44
-
45
- * Run `pip install pytest pytest-cov` to install pytest.
46
- * Run `pytest --cov=armodel --cov-report term-missing` to verify all the functionality.
47
-
48
- ## 1.5. How to create a distribution and wheel
49
-
50
- * Run `python setup.py sdist bdist_wheel --universal`
51
-
52
- ## 1.6. How to create the document
53
-
54
- 1. Run `pip install sphinx` to install the necessary document
55
-
56
- ## 1.7. Heritage
57
-
58
- ```
59
- - ARObject
60
- - Referrable
61
- - MultilanguageReferrable
62
- - Identifiable
63
- - PackageableElement
64
- - ARElement
65
- - AtpType
66
- - AutosarDataType
67
- - PortInterface
68
- - DataInterface
69
- - NvDataInterface
70
- - ParameterInterface
71
- - SenderReceiverInterface
72
- - BswModuleEntry
73
- - Implementation
74
- - BswImplementation
75
- - AtpFeature
76
- - AtpPrototype
77
- - AtpPrototype
78
- - DataPrototype
79
- - AutosarDataPrototype
80
- - VariableDataPrototype
81
- - ApplicationCompositeElementDataPrototype
82
- - ApplicationArrayElement
83
- - ApplicationRecordElement
84
- - AtpStructureElement
85
- - BswModuleDescription
86
- - ExecutableEntity
87
- - SwcBswMapping
88
- - ValueSpecification
89
- - ConstantReference
90
- ```
91
-
92
- ## 1.8. CLI usages
93
-
94
- ### 1.8.1. arxml-dump
95
-
96
- **Dump all the arxml data to screen**
97
-
98
- `arxml-dump --arxml arg -h`
99
-
100
- --arxml arg The file name of arxml data
101
-
102
- -h show the help information
103
-
104
- ### 1.8.2. Example for arxml-dump
105
-
106
- **Dump the arxml data from test1.arxml and test2.arxml**
107
-
108
- `arxml-dump --arxml test1.arxml --arxml test2.arxml`
109
-
110
- ## 1.9. API
111
-
112
- ### 1.9.1. Constructor
113
-
114
- ```
115
- ARXMLParser(options={"warning": True})
116
- ```
117
-
118
- ## 1.10. Change notes:
119
-
120
- **Version 0.1.1**
121
-
122
- Add the ARRAY category support for ImplementationDataType
123
-
124
- **Version 0.1.2**
125
-
126
- Add the AsynchronousServerCallPoint support for ARXML
127
-
128
- **Version 0.1.3**
129
-
130
- Fix the attribute intervalType of **Limit** is empty issue.
131
-
132
- **Version 1.0.0**
133
-
134
- 1. Add the logging support
135
- 2. Add the <warning> option to disable exception raised.
136
- 3. Add the BswMD support
137
-
138
- **Version 1.1.0**
139
-
140
- 1. Add the InitEvent support. (Issue #5)
141
- 2. Add the DataReceiveEvent support. (Issue #5)
142
- 3. Add the SwcModeSwitchEvent support. (Issue #5)
143
- 4. Add the number format alignment supporting for MemorySection
144
- 5. Add the more features supporting for BswImplementation
145
-
1
+ Metadata-Version: 2.1
2
+ Name: armodel
3
+ Version: 1.3.0
4
+ Summary: the python arxml parser
5
+ Home-page: http://github.com/melodypapa/py-armodel
6
+ Author: melodypapa
7
+ Author-email: melodypapa@outlook.com
8
+ License: MIT
9
+ Keywords: AUTOSAR ARXML
10
+ Platform: UNKNOWN
11
+ Classifier: Development Status :: 1 - Planning
12
+ Classifier: Environment :: Console
13
+ Classifier: Programming Language :: Python :: 3
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Operating System :: OS Independent
16
+ Requires-Python: >=3.5
17
+ Description-Content-Type: text/markdown
18
+ Requires-Dist: colorama
19
+ Provides-Extra: pytest
20
+ Requires-Dist: pytest-cov ; extra == 'pytest'
21
+
22
+ # 1. py-armodel
23
+
24
+ ## 1.1. Purpose
25
+
26
+ To support AUTOSAR model with python
27
+
28
+ ## 1.2. Reference Documents
29
+ 1. AUTOSAR_TPS_XMLSchemaProductionRules.pdf
30
+ 2. AUTOSAR_TPS_ARXMLSerializationRules.pdf
31
+
32
+ |Version|Documentation|Travis CI|Coverage Status|Pypi|
33
+ |--|--|--|--|--|
34
+ |[![GitHub version](https://badge.fury.io/gh/melodypapa%2Fpy-armodel.svg)](https://badge.fury.io/gh/melodypapa%2Fpy-armodel)|[![Documentation Status](https://readthedocs.org/projects/py-armodel/badge/?version=latest)](https://py-armodel.readthedocs.io/en/latest)|[![](https://www.travis-ci.com/melodypapa/py-armodel.svg?branch=main)](https://www.travis-ci.com/melodypapa/py-armodel)|[![Coverage Status](https://coveralls.io/repos/github/melodypapa/py-armodel/badge.svg?branch=main)](https://coveralls.io/github/melodypapa/py-armodel?branch=main)|[![PyPI version](https://badge.fury.io/py/armodel.svg)](https://badge.fury.io/py/armodel)|
35
+
36
+ ## 1.3. How to create the distribution and upload to pypi
37
+ 1. Run `python setup.py bdist_wheel` to generate distribution
38
+ 2. Run `twine check dist/*` to check the validation of distribution
39
+ 3. Run `twine upload dist/*` to upload to pypi repository
40
+ 4. Check the website https://pypi.org/project/armodel/ to find out it works or not
41
+
42
+ And more details can be found at https://packaging.python.org/
43
+
44
+ ## 1.4. How to perform Unit test
45
+
46
+ * Run `pip install pytest pytest-cov` to install pytest.
47
+ * Run `pytest --cov=armodel --cov-report term-missing` to verify all the functionality.
48
+
49
+ ## 1.5. How to create a distribution and wheel
50
+
51
+ * Run `python setup.py sdist bdist_wheel --universal`
52
+
53
+ ## 1.6. How to create the document
54
+
55
+ 1. Run `pip install sphinx` to install the necessary document
56
+
57
+ ## 1.7. Heritage
58
+
59
+ ```
60
+ - ARObject
61
+ - Referrable
62
+ - MultilanguageReferrable
63
+ - Identifiable
64
+ - PackageableElement
65
+ - ARElement
66
+ - AtpType
67
+ - AutosarDataType
68
+ - PortInterface
69
+ - DataInterface
70
+ - NvDataInterface
71
+ - ParameterInterface
72
+ - SenderReceiverInterface
73
+ - BswModuleEntry
74
+ - Implementation
75
+ - BswImplementation
76
+ - AtpFeature
77
+ - AtpPrototype
78
+ - AtpPrototype
79
+ - DataPrototype
80
+ - AutosarDataPrototype
81
+ - VariableDataPrototype
82
+ - ApplicationCompositeElementDataPrototype
83
+ - ApplicationArrayElement
84
+ - ApplicationRecordElement
85
+ - AtpStructureElement
86
+ - BswModuleDescription
87
+ - ExecutableEntity
88
+ - SwcBswMapping
89
+ - ValueSpecification
90
+ - ConstantReference
91
+ ```
92
+
93
+ ## 1.8. CLI usages
94
+
95
+ ### 1.8.1. arxml-dump
96
+
97
+ **Dump all the arxml data to screen**
98
+
99
+
100
+ `arxml-dump --arxml arg -h`
101
+
102
+ --arxml arg The file name of arxml data
103
+ -h show the help information
104
+
105
+ #### 1.8.1.1. arxml-dump usage
106
+
107
+ **Dump the arxml data from test1.arxml and test2.arxml**
108
+
109
+ ```
110
+ $arxml-dump --arxml test1.arxml --arxml test2.arxml
111
+ ```
112
+
113
+ ### 1.8.2. swc-list
114
+
115
+ **List all the SwComponentType in the autosar model**
116
+
117
+ usage: swc-list [-h] [-v] [-f FORMAT] [--filter FILTER] Input [Input ...]
118
+
119
+ -h, --help show the help message and exit
120
+ -v, --verbose Print debug information
121
+ -f FORMAT, --format FORMAT
122
+ Specify the short or long name of Sw-C.
123
+ *short* : only print the short name of SWComponentType
124
+ *long* : print the SWComponentType with ARPackage names
125
+ --filter FILTER Set the filter condition.
126
+ *CompositionSwComponent* : Print the CompositionSwComponent only.
127
+
128
+
129
+ #### 1.8.2.1. List all the SW-Components in the specific path
130
+
131
+ ```
132
+ $swc-list <arxml_folder>
133
+ ```
134
+
135
+ #### 1.8.2.2. List all the CompositionSwComponent with the long name
136
+
137
+ ```
138
+ $swc-list --format long --filter CompositionSwComponent <arxml_folder>
139
+ ```
140
+
141
+ ## 1.9. API
142
+
143
+ ### 1.9.1. Constructor
144
+
145
+ ```
146
+ ARXMLParser(options={"warning": True})
147
+ ```
148
+
149
+ ## 1.10. Change notes:
150
+
151
+ **Version 0.1.1**
152
+
153
+ Add the ARRAY category support for ImplementationDataType
154
+
155
+ **Version 0.1.2**
156
+
157
+ Add the AsynchronousServerCallPoint support for ARXML
158
+
159
+ **Version 0.1.3**
160
+
161
+ Fix the attribute intervalType of **Limit** is empty issue.
162
+
163
+ **Version 1.0.0**
164
+
165
+ 1. Add the logging support
166
+ 2. Add the <warning> option to disable exception raised.
167
+ 3. Add the BswMD support
168
+
169
+ **Version 1.1.0**
170
+
171
+ 1. Add the InitEvent support. (Issue #5)
172
+ 2. Add the DataReceiveEvent support. (Issue #5)
173
+ 3. Add the SwcModeSwitchEvent support. (Issue #5)
174
+
175
+ **Version 1.2.0**
176
+
177
+ 1. Add the SwcImplementation support (Issue #9)
178
+ 2. Add the integer value for memory section alignment (Issue #9)
179
+ 3. Remove the required attributes for the Implementation according to the AUTOSAR standard 23R-11. (Issue #9)
180
+ 4. Change the START-ON-EVENT-REF to optional according to the AUTOSAR standard 23R-11. (Issue #9)
181
+ 5. Change the HANDLE-OUT-OF-RANGE to optional according to the AUTOSAR standard 23R-11. (Issue #9)
182
+ 6. Add the SensorActuatorSwComponentType support (Issue #9)
183
+ 7. Change the CATEGORY of COMPU-METHOD to optional.
184
+ 8. Change the CAN-BE-INVOKED-CONCURRENTLY to optional.
185
+
@@ -0,0 +1,31 @@
1
+ armodel/__init__.py,sha256=K_KHb3O2T21uteIe0wac-tb3kI2xWHTnwV9ShaXesAU,54
2
+ armodel/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
+ armodel/cli/arxml_dump_cli.py,sha256=SELbIKJMN65Lzfuze-q_XPBme-KTPrpb2yDl3fLctc8,9932
4
+ armodel/cli/swc_list_cli.py,sha256=9dgW-5Gn1TFqbq5wQd_EFpe9IDLJhPBlYcWRi3m5x84,2414
5
+ armodel/lib/__init__.py,sha256=1i7vjCwcVMUrTrN7mRgQsIN6eP-8gsIKSLDh6YXjNe8,94
6
+ armodel/lib/cli_args_parser.py,sha256=WiTC3wy_fZYloA1AjPqCvvOA_26V_y5toun0qfV51cw,1207
7
+ armodel/lib/data_analyzer.py,sha256=y4ViEGPi_xRKD7hw1ptkGl0_UfhnNdgNzf2YjbOhpjM,1159
8
+ armodel/models/__init__.py,sha256=ijDu-Ra2ZjEJNy88Y5ZsPqxAt05_reQsQti-_X4gD3o,402
9
+ armodel/models/ar_object.py,sha256=-XM0LFxXJovY7ANh-enGmAFu8yhkj9YzFFyCY7ffO8U,371
10
+ armodel/models/ar_package.py,sha256=OPoNGaAhTBf30elxc1dvJMyU6CpMUmvs0SUwaYoEtVs,13275
11
+ armodel/models/ar_ref.py,sha256=RZT6URQ91YgmRk1oUTC-0UPnwn61MgEzmII7UKwQXUM,3548
12
+ armodel/models/bsw_module_template.py,sha256=k_CZWtTipKtVFjIx08uRqadSubVtBJ-NhUlocfoA0a0,11778
13
+ armodel/models/common_structure.py,sha256=DSnuhhYdpDW-klOCZNg8zULuhFBdk7k601YQsPg5IT4,6745
14
+ armodel/models/data_dictionary.py,sha256=xSQzXkLQyOJiLIsczlAzGBnrrvHFVv2_-OfVyN6_MSE,867
15
+ armodel/models/data_prototype.py,sha256=pyIahyJh4KaikMfHikHiKzbGai1JnkrzDZpkVLvb6iU,2096
16
+ armodel/models/datatype.py,sha256=BEc8y3mcQZEvwteFUtJyPYBIwnHJcs9fIyxLgnMK5rk,5802
17
+ armodel/models/ecuc_parameter_def_template.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
+ armodel/models/general_structure.py,sha256=syJTAAo3DIBE6O0nB8Whm4OEnNyN4uVIAJZPA8t3ukY,4480
19
+ armodel/models/implementation.py,sha256=jfatA90Ww51kMqnUsbx6q4JRRRIRFCQXVg88J44RNoA,3850
20
+ armodel/models/m2_msr.py,sha256=Gk-h-4jSnOkWlfJJcI1-1YvSQvBqkUJZxlzikwgAsec,2165
21
+ armodel/models/port_interface.py,sha256=UDCvj78k3sfG4IJX4FWQj6LUV2mWw6Nt0plMnLsQfZk,6026
22
+ armodel/models/port_prototype.py,sha256=Pqp5euv_RDfTlsEqvBkpAreBFMJlovuU49cJsYD4d3Q,7215
23
+ armodel/models/sw_component.py,sha256=ix6LP1-TLN1r7YEl3CrUoo_ZGfvNGj5q8p3XNPUbabU,20583
24
+ armodel/parser/__init__.py,sha256=whzCLvAstuSlm6scgcCId7AUxSX8z8PV8AIKSNWMkGo,37
25
+ armodel/parser/arxml_parser.py,sha256=LPSj4BxO9fV9pIXVhzMjJmOIC4YUSbDi3H6I11McXOM,56759
26
+ armodel-1.3.0.dist-info/LICENSE,sha256=rceTpGhsmmN1M0k1KO0HRS11iCjen-2y56ZEqgo43wo,1088
27
+ armodel-1.3.0.dist-info/METADATA,sha256=eael0JbJhlKXRebYA2EHb83ccoqjtCd-Z6zVzx51SJk,5932
28
+ armodel-1.3.0.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
29
+ armodel-1.3.0.dist-info/entry_points.txt,sha256=U-GD6do9I0ZRKENiIdmJMbsLHbtBX2Q7CWIldbNFrc0,109
30
+ armodel-1.3.0.dist-info/top_level.txt,sha256=AEATYsqAuRpr0XGa_ThW7-o4WLlA5e3PEgD0QJhzmoA,8
31
+ armodel-1.3.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.37.1)
2
+ Generator: bdist_wheel (0.41.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,3 +1,4 @@
1
1
  [console_scripts]
2
2
  arxml-dump = armodel.cli.arxml_dump_cli:cli_main
3
+ swc-list = armodel.cli.swc_list_cli:main
3
4
 
@@ -1,27 +0,0 @@
1
- armodel/__init__.py,sha256=K_KHb3O2T21uteIe0wac-tb3kI2xWHTnwV9ShaXesAU,54
2
- armodel/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
- armodel/cli/arxml_dump_cli.py,sha256=VBOTkrpj59kt2hM62iNVcDYGch_A2WL5_vFpbmC9ucI,9932
4
- armodel/models/__init__.py,sha256=ijDu-Ra2ZjEJNy88Y5ZsPqxAt05_reQsQti-_X4gD3o,402
5
- armodel/models/ar_object.py,sha256=gbo71ZPQ61-OhiPpHFbKtE2JA-8vOzXrd9T_0hh4GfA,341
6
- armodel/models/ar_package.py,sha256=Z_tcjcJ6lAqp4yDjFkaYFZAuVbXSxoe1cPNBPN4zt4o,11921
7
- armodel/models/ar_ref.py,sha256=RZT6URQ91YgmRk1oUTC-0UPnwn61MgEzmII7UKwQXUM,3548
8
- armodel/models/bsw_module_template.py,sha256=k_CZWtTipKtVFjIx08uRqadSubVtBJ-NhUlocfoA0a0,11778
9
- armodel/models/common_structure.py,sha256=GJFTTwvAZgt9aLY63A3Vynp-tZt65-8Oy4k5YBMYfB8,6559
10
- armodel/models/data_dictionary.py,sha256=xSQzXkLQyOJiLIsczlAzGBnrrvHFVv2_-OfVyN6_MSE,867
11
- armodel/models/data_prototype.py,sha256=pyIahyJh4KaikMfHikHiKzbGai1JnkrzDZpkVLvb6iU,2096
12
- armodel/models/datatype.py,sha256=BEc8y3mcQZEvwteFUtJyPYBIwnHJcs9fIyxLgnMK5rk,5802
13
- armodel/models/ecuc_parameter_def_template.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
- armodel/models/general_structure.py,sha256=syJTAAo3DIBE6O0nB8Whm4OEnNyN4uVIAJZPA8t3ukY,4480
15
- armodel/models/implementation.py,sha256=iGm5aS1L2sA9eP0jeDFkkIURvr6zzHOCaTtL59G48Yg,3875
16
- armodel/models/m2_msr.py,sha256=Gk-h-4jSnOkWlfJJcI1-1YvSQvBqkUJZxlzikwgAsec,2165
17
- armodel/models/port_interface.py,sha256=UDCvj78k3sfG4IJX4FWQj6LUV2mWw6Nt0plMnLsQfZk,6026
18
- armodel/models/port_prototype.py,sha256=Pqp5euv_RDfTlsEqvBkpAreBFMJlovuU49cJsYD4d3Q,7215
19
- armodel/models/sw_component.py,sha256=LUmof9nZnN7krpIScS72R6YqTzzpkIFkIvHJoklYXgw,20503
20
- armodel/parser/__init__.py,sha256=whzCLvAstuSlm6scgcCId7AUxSX8z8PV8AIKSNWMkGo,37
21
- armodel/parser/arxml_parser.py,sha256=qjzZ9eeG6dGo5yt4Si007PVmaRlI6D8ulZthH5JjUFk,55261
22
- armodel-1.1.0.dist-info/LICENSE,sha256=rceTpGhsmmN1M0k1KO0HRS11iCjen-2y56ZEqgo43wo,1088
23
- armodel-1.1.0.dist-info/METADATA,sha256=zTaCxzE_4Cb1THE3btuz04QuzRNaJw6bjVMcAUhDqlU,4359
24
- armodel-1.1.0.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
25
- armodel-1.1.0.dist-info/entry_points.txt,sha256=ofkww3HejFuRvGlQSANqFbTEcf0LUXX2FmXZovba9m0,68
26
- armodel-1.1.0.dist-info/top_level.txt,sha256=AEATYsqAuRpr0XGa_ThW7-o4WLlA5e3PEgD0QJhzmoA,8
27
- armodel-1.1.0.dist-info/RECORD,,