armodel 1.3.0__py3-none-any.whl → 1.4.3__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 (75) hide show
  1. armodel/__init__.py +2 -1
  2. armodel/cli/arxml_dump_cli.py +8 -6
  3. armodel/cli/arxml_format_cli.py +72 -0
  4. armodel/cli/connector2xlsx_cli.py +75 -0
  5. armodel/cli/connector_update_cli.py +77 -0
  6. armodel/cli/swc_list_cli.py +2 -2
  7. armodel/data_models/__init__.py +0 -0
  8. armodel/data_models/sw_connector.py +22 -0
  9. armodel/lib/__init__.py +1 -1
  10. armodel/lib/sw_component.py +34 -0
  11. armodel/models/__init__.py +8 -2
  12. armodel/models/annotation.py +20 -0
  13. armodel/models/ar_object.py +184 -0
  14. armodel/models/ar_package.py +144 -14
  15. armodel/models/ar_ref.py +74 -8
  16. armodel/models/bsw_module_template.py +97 -25
  17. armodel/models/calibration.py +119 -0
  18. armodel/models/common_structure.py +203 -36
  19. armodel/models/communication.py +17 -0
  20. armodel/models/data_def_properties.py +16 -0
  21. armodel/models/data_dictionary.py +46 -9
  22. armodel/models/data_prototype.py +24 -5
  23. armodel/models/datatype.py +86 -19
  24. armodel/models/end_to_end_protection.py +67 -0
  25. armodel/models/general_structure.py +72 -17
  26. armodel/models/global_constraints.py +40 -0
  27. armodel/models/implementation.py +80 -32
  28. armodel/models/m2_msr.py +82 -6
  29. armodel/models/multilanguage_data.py +42 -0
  30. armodel/models/per_instance_memory.py +14 -0
  31. armodel/models/port_interface.py +27 -4
  32. armodel/models/port_prototype.py +48 -23
  33. armodel/models/record_layout.py +118 -0
  34. armodel/models/service_mapping.py +11 -0
  35. armodel/models/service_needs.py +48 -0
  36. armodel/models/sw_component.py +257 -43
  37. armodel/models/unit.py +14 -0
  38. armodel/parser/abstract_arxml_parser.py +248 -0
  39. armodel/parser/arxml_parser.py +1550 -648
  40. armodel/parser/connector_xlsx_parser.py +190 -0
  41. armodel/parser/excel_parser.py +18 -0
  42. armodel/report/__init__.py +1 -0
  43. armodel/report/connector_xls_report.py +76 -0
  44. armodel/report/excel_report.py +42 -0
  45. armodel/tests/__init__.py +0 -0
  46. armodel/tests/test_armodel/__init__.py +0 -0
  47. armodel/tests/test_armodel/models/__init__.py +0 -0
  48. armodel/tests/test_armodel/models/test_ar_object.py +152 -0
  49. armodel/tests/test_armodel/models/test_ar_package.py +294 -0
  50. armodel/tests/test_armodel/models/test_ar_ref.py +74 -0
  51. armodel/tests/test_armodel/models/test_bsw_module_template.py +46 -0
  52. armodel/tests/test_armodel/models/test_common_structure.py +73 -0
  53. armodel/tests/test_armodel/models/test_data_dictionary.py +29 -0
  54. armodel/tests/test_armodel/models/test_data_prototype.py +86 -0
  55. armodel/tests/test_armodel/models/test_datatype.py +239 -0
  56. armodel/tests/test_armodel/models/test_general_structure.py +50 -0
  57. armodel/tests/test_armodel/models/test_implementation.py +26 -0
  58. armodel/tests/test_armodel/models/test_m2_msr.py +77 -0
  59. armodel/tests/test_armodel/models/test_port_interface.py +198 -0
  60. armodel/tests/test_armodel/models/test_port_prototype.py +14 -0
  61. armodel/tests/test_armodel/parser/__init__.py +0 -0
  62. armodel/tests/test_armodel/parser/test_arxml_parser.py +15 -0
  63. armodel/tests/test_armodel/parser/test_parse_bswmd.py +192 -0
  64. armodel/tests/test_armodel/parser/test_sw_components.py +93 -0
  65. armodel/writer/__init__.py +1 -0
  66. armodel/writer/abstract_arxml_writer.py +123 -0
  67. armodel/writer/arxml_writer.py +1755 -0
  68. {armodel-1.3.0.dist-info → armodel-1.4.3.dist-info}/METADATA +124 -4
  69. armodel-1.4.3.dist-info/RECORD +78 -0
  70. armodel-1.4.3.dist-info/entry_points.txt +7 -0
  71. armodel-1.3.0.dist-info/RECORD +0 -31
  72. armodel-1.3.0.dist-info/entry_points.txt +0 -4
  73. {armodel-1.3.0.dist-info → armodel-1.4.3.dist-info}/LICENSE +0 -0
  74. {armodel-1.3.0.dist-info → armodel-1.4.3.dist-info}/WHEEL +0 -0
  75. {armodel-1.3.0.dist-info → armodel-1.4.3.dist-info}/top_level.txt +0 -0
@@ -1,11 +1,17 @@
1
1
  from typing import List, Dict
2
2
  from abc import ABCMeta
3
+
4
+ from .service_mapping import RoleBasedPortAssignment
5
+ from .per_instance_memory import PerInstanceMemory
6
+ from .service_needs import NvBlockNeeds, RoleBasedDataAssignment, ServiceNeeds
7
+ from .ar_object import ARBoolean, ARLiteral
3
8
  from .general_structure import ARElement, Identifiable, ARObject
4
- from .ar_ref import AutosarVariableRef, RefType, POperationInAtomicSwcInstanceRef, ROperationInAtomicSwcInstanceRef, ProvidedPortPrototypeInstanceRef
5
- from .ar_ref import RequiredPortPrototypeInstanceRef, RVariableInAtomicSwcInstanceRef, RModeInAtomicSwcInstanceRef
6
- from .port_prototype import RPortPrototype, PPortPrototype
7
- from .data_prototype import VariableDataPrototype
8
- from .common_structure import ExecutableEntity, InternalBehavior
9
+ from .ar_ref import AutosarParameterRef, AutosarVariableRef, InnerPortGroupInCompositionInstanceRef, ParameterInAtomicSWCTypeInstanceRef, POperationInAtomicSwcInstanceRef, ROperationInAtomicSwcInstanceRef, TRefType
10
+ from .ar_ref import RefType, PortInCompositionTypeInstanceRef, PPortInCompositionInstanceRef, RPortInCompositionInstanceRef
11
+ from .ar_ref import RVariableInAtomicSwcInstanceRef, RModeInAtomicSwcInstanceRef
12
+ from .port_prototype import RPortPrototype, PPortPrototype, PortPrototype
13
+ from .data_prototype import ParameterDataPrototype, VariableDataPrototype
14
+ from .common_structure import ExecutableEntity, InternalBehavior, ValueSpecification
9
15
 
10
16
  class VariableAccess(Identifiable):
11
17
  def __init__(self, parent: ARObject, short_name):
@@ -15,15 +21,23 @@ class VariableAccess(Identifiable):
15
21
  self.parent = parent
16
22
  self.local_variable_ref = None # type: RefType
17
23
 
18
- class ExecutableEntity(Identifiable):
24
+ class AbstractAccessPoint(Identifiable):
25
+ __metaclass__ = ABCMeta
26
+
19
27
  def __init__(self, parent: ARObject, short_name: str):
28
+ if type(self) == AbstractAccessPoint:
29
+ raise NotImplementedError("ARObject is an abstract class.")
30
+
20
31
  super().__init__(parent, short_name)
21
32
 
22
- class AbstractAccessPoint(Identifiable):
23
- __metaclass__ = ABCMeta
33
+ self.return_value_provision = None
24
34
 
35
+ class ParameterAccess(AbstractAccessPoint):
25
36
  def __init__(self, parent: ARObject, short_name: str):
26
- super().__init__(parent, short_name)
37
+ super().__init__(parent, short_name)
38
+
39
+ self.accessed_parameter = None # type: AutosarParameterRef
40
+ self.sw_data_def_props = None #
27
41
 
28
42
  class ServerCallPoint(AbstractAccessPoint):
29
43
  __metaclass__ = ABCMeta
@@ -31,7 +45,7 @@ class ServerCallPoint(AbstractAccessPoint):
31
45
  def __init__(self, parent: ARObject, short_name: str):
32
46
  super().__init__(parent, short_name)
33
47
  self.operation_iref = None # type: ROperationInAtomicSwcInstanceRef
34
- self.timeout = 0
48
+ self.timeout = None # type: float
35
49
 
36
50
  class SynchronousServerCallPoint(ServerCallPoint):
37
51
  def __init__(self, parent: ARObject, short_name: str):
@@ -58,21 +72,21 @@ class InternalTriggeringPoint(AbstractAccessPoint):
58
72
  class RunnableEntity(ExecutableEntity):
59
73
  def __init__(self, parent: ARObject, short_name: str):
60
74
  super().__init__(parent, short_name)
61
- self.can_be_invoked_concurrently = False # Type: bool
62
- self.data_read_accesses = {} # Type: Dict[VariableAccess]
63
- self.data_received_point_by_arguments = {} # Type: Dict[VariableAccess]
64
- self.data_received_point_by_values = {} # Type: Dict[VariableAccess]
65
- self.data_send_points = {} # Type: Dict[VariableAccess]
66
- self.data_write_accesses = {} # Type: Dict[VariableAccess]
67
- self.written_local_variables = {} # Type: Dict[VariableAccess]
68
- self.read_local_variables = {} # Type: Dict[VariableAccess]
75
+ self.can_be_invoked_concurrently = None # Type: ARBoolean
76
+ self.data_read_accesses = {} # Type: Dict[str, VariableAccess]
77
+ self.data_received_point_by_arguments = {} # Type: Dict[str, VariableAccess]
78
+ self.data_received_point_by_values = {} # Type: Dict[str, VariableAccess]
79
+ self.data_send_points = {} # Type: Dict[str, VariableAccess]
80
+ self.data_write_accesses = {} # Type: Dict[str, VariableAccess]
81
+ self.written_local_variables = {} # Type: Dict[str, VariableAccess]
82
+ self.read_local_variables = {} # Type: Dict[str, VariableAccess]
69
83
  self.external_triggering_points = {} # Type: Dict[InternalTriggeringPoint]
70
84
  self.internal_triggering_points = {}
71
85
  self.mode_access_points = {}
72
86
  self.mode_switch_points = {}
73
- self.parameter_accesses = {}
74
- self.server_call_points = {} # Type: Dict[ServerCallPoint]
75
- self.wait_points = {} # Type: Dict[WaitPoint]
87
+ self.parameter_accesses = {} # Type: Dict[str, ParameterAccess]
88
+ self.server_call_points = {} # Type: Dict[str, ServerCallPoint]
89
+ self.wait_points = {} # Type: Dict[str, WaitPoint]
76
90
  self.symbol = ""
77
91
 
78
92
  def _createVariableAccess(self, short_name, variable_accesses: Dict[str, VariableAccess]):
@@ -86,6 +100,12 @@ class RunnableEntity(ExecutableEntity):
86
100
 
87
101
  def getDataReadAccesses(self) -> List[VariableAccess]:
88
102
  return sorted(self.data_read_accesses.values(), key=lambda v: v.short_name)
103
+
104
+ def createDataWriteAccess(self, short_name: str) -> VariableAccess:
105
+ return self._createVariableAccess(short_name, self.data_write_accesses)
106
+
107
+ def getDataWriteAccesses(self) -> List[VariableAccess]:
108
+ return sorted(self.data_write_accesses.values(), key=lambda v: v.short_name)
89
109
 
90
110
  def createDataReceivePointByArgument(self, short_name: str) -> VariableAccess:
91
111
  return self._createVariableAccess(short_name, self.data_received_point_by_arguments)
@@ -117,6 +137,15 @@ class RunnableEntity(ExecutableEntity):
117
137
  def getWrittenLocalVariables(self) -> List[VariableAccess]:
118
138
  return sorted(self.written_local_variables.values(), key=lambda v: v.short_name)
119
139
 
140
+ def createParameterAccess(self, short_name: str) -> ParameterAccess:
141
+ if (short_name not in self.server_call_points):
142
+ parameter_access = ParameterAccess(self, short_name)
143
+ self.parameter_accesses[short_name] = parameter_access
144
+ return self.parameter_accesses[short_name]
145
+
146
+ def getParameterAccesses(self) -> List[ParameterAccess]:
147
+ return sorted(self.parameter_accesses.values(), key= lambda o: o.short_name)
148
+
120
149
  def createSynchronousServerCallPoint(self, short_name: str) -> SynchronousServerCallPoint:
121
150
  if (short_name not in self.server_call_points):
122
151
  server_call_point = SynchronousServerCallPoint(self, short_name)
@@ -154,7 +183,15 @@ class AbstractEvent(Identifiable):
154
183
  class RTEEvent(AbstractEvent):
155
184
  def __init__(self, parent: ARObject, short_name: str):
156
185
  super().__init__(parent, short_name)
157
- self.start_on_event_ref = None # type: RefType
186
+
187
+ self.start_on_event_ref = None # type: RefType
188
+ self.disabled_mode_irefs = [] # type: List[RModeInAtomicSwcInstanceRef]
189
+
190
+ def addDisabledModeIRef(self, iref: RModeInAtomicSwcInstanceRef):
191
+ self.disabled_mode_irefs.append(iref)
192
+
193
+ def getDisabledModeIRefs(self) -> List[RModeInAtomicSwcInstanceRef]:
194
+ return self.disabled_mode_irefs
158
195
 
159
196
  class AsynchronousServerCallReturnsEvent(RTEEvent):
160
197
  def __init__(self, parent: ARObject, short_name: str):
@@ -178,16 +215,22 @@ class SwcModeSwitchEvent(RTEEvent):
178
215
  def __init__(self, parent: ARObject, short_name: str):
179
216
  super().__init__(parent, short_name)
180
217
 
181
- self._activation = ""
182
- self.mode_irefs = [] # type: List[RModeInAtomicSwcInstanceRef]
218
+ self._activation = None # type: ARLiteral
219
+ self.mode_irefs = [] # type: List[RModeInAtomicSwcInstanceRef]
220
+
221
+ def addModeIRef(self, iref: RModeInAtomicSwcInstanceRef):
222
+ self.mode_irefs.append(iref)
223
+
224
+ def getModeIRefs(self) -> List[RModeInAtomicSwcInstanceRef]:
225
+ return self.mode_irefs
183
226
 
184
227
  @property
185
- def activation(self) -> str:
228
+ def activation(self) -> ARLiteral:
186
229
  return self._activation
187
230
 
188
231
  @activation.setter
189
- def activation(self, value: str):
190
- if value not in ("ON-ENTRY", "ON-EXIT", "ON-TRANSITION"):
232
+ def activation(self, value: ARLiteral):
233
+ if value.getValue() not in ("ON-ENTRY", "ON-EXIT", "ON-TRANSITION"):
191
234
  raise ValueError("Invalid activation <%s> of SwcModeSwitchEvent <%s>" % (value, self.short_name))
192
235
  self._activation = value
193
236
 
@@ -228,10 +271,93 @@ class InternalTriggerOccurredEvent(RTEEvent):
228
271
 
229
272
  self.event_source_ref = None # type: RefType
230
273
 
274
+ class PortDefinedArgumentValue(ARObject):
275
+ def __init__(self):
276
+ super().__init__()
277
+
278
+ self.value = None # type: ValueSpecification
279
+ self.value_type = None # type: TRefType
280
+
281
+ class PortAPIOption(ARObject):
282
+ def __init__(self):
283
+ super().__init__()
284
+
285
+ self.enable_take_address = None # type: ARBoolean
286
+ self.indirect_api = None # type: ARBoolean
287
+ self.port_ref = None # type: RefType
288
+ self._port_arg_values = [] # type: List[PortDefinedArgumentValue]
289
+
290
+ def addPortArgValue(self, value:PortDefinedArgumentValue):
291
+ self._port_arg_values.append(value)
292
+
293
+ def getPortArgValues(self) -> List[PortDefinedArgumentValue]:
294
+ return self._port_arg_values
295
+
296
+ class ServiceDependency(Identifiable):
297
+ def __init__(self, parent: ARObject, short_name: str):
298
+ super().__init__(parent, short_name)
299
+
300
+ class SwcServiceDependency(ServiceDependency):
301
+ def __init__(self, parent: ARObject, short_name: str):
302
+ super().__init__(parent, short_name)
303
+
304
+ self._assigned_data = []
305
+ self._assigned_ports = []
306
+
307
+ def AddAssignedData(self, data: RoleBasedDataAssignment):
308
+ self._assigned_data.append(data)
309
+
310
+ def getAssignedData(self) -> List[RoleBasedDataAssignment]:
311
+ return self._assigned_data
312
+
313
+ def AddAssignedPort(self, data: RoleBasedPortAssignment):
314
+ self._assigned_ports.append(data)
315
+
316
+ def getAssignedPorts(self) -> List[RoleBasedPortAssignment]:
317
+ return self._assigned_ports
318
+
319
+ def createNvBlockNeeds(self, short_name: str) -> NvBlockNeeds:
320
+ if (short_name not in self.elements):
321
+ event = NvBlockNeeds(self, short_name)
322
+ self.elements[short_name] = event
323
+ return self.elements[short_name]
324
+
325
+ def getNvBlockNeeds(self) -> List[NvBlockNeeds]:
326
+ return sorted(filter(lambda c: isinstance(c, NvBlockNeeds), self.elements.values()), key=lambda e: e.short_name)
327
+
328
+ def getServiceNeeds(self) -> List[ServiceNeeds]:
329
+ return sorted(filter(lambda c: isinstance(c, ServiceNeeds), self.elements.values()), key=lambda e: e.short_name)
330
+
231
331
  class SwcInternalBehavior(InternalBehavior):
232
332
  def __init__(self, parent: ARObject, short_name: str):
233
333
  super().__init__(parent, short_name)
234
334
 
335
+ self.handle_termination_and_restart = None # type: str
336
+ self.supports_multiple_instantiation = None # type: ARBoolean
337
+ self._explicit_inter_runnable_variables = [] # type: List[VariableDataPrototype]
338
+ self._implicit_inter_runnable_variables = [] # type: List[VariableDataPrototype]
339
+ self._per_instance_memories = [] # type: List[PerInstanceMemory]
340
+ self._per_instance_parameters = [] # type: List[ParameterDataPrototype]
341
+ self._port_api_options = [] # type: List[PortAPIOption]
342
+
343
+ def getExplicitInterRunnableVariables(self) -> List[VariableDataPrototype]:
344
+ return self._explicit_inter_runnable_variables
345
+
346
+ def getImplicitInterRunnableVariables(self) -> List[VariableDataPrototype]:
347
+ return self._implicit_inter_runnable_variables
348
+
349
+ def getPerInstanceMemories(self) -> List[PerInstanceMemory]:
350
+ return self._per_instance_memories
351
+
352
+ def getParameterDataPrototypes(self) -> List[ParameterDataPrototype]:
353
+ return self._per_instance_parameters
354
+
355
+ def addPortAPIOption(self, option: PortAPIOption):
356
+ self._port_api_options.append(option)
357
+
358
+ def getPortAPIOptions(self) -> List[PortAPIOption]:
359
+ return self._port_api_options
360
+
235
361
  def createOperationInvokedEvent(self, short_name: str) -> OperationInvokedEvent:
236
362
  if (short_name not in self.elements):
237
363
  event = OperationInvokedEvent(self, short_name)
@@ -267,8 +393,14 @@ class SwcInternalBehavior(InternalBehavior):
267
393
  event = InternalTriggerOccurredEvent(self, short_name)
268
394
  self.elements[short_name] = event
269
395
  return self.elements[short_name]
396
+
397
+ def createSwcServiceDependency(self, short_name: str) -> SwcServiceDependency:
398
+ if (short_name not in self.elements):
399
+ event = SwcServiceDependency(self, short_name)
400
+ self.elements[short_name] = event
401
+ return self.elements[short_name]
270
402
 
271
- def getEvents(self) -> List[RTEEvent]:
403
+ def getRteEvents(self) -> List[RTEEvent]:
272
404
  return sorted(filter(lambda c: isinstance(c, RTEEvent), self.elements.values()), key=lambda e: e.short_name)
273
405
 
274
406
  def getOperationInvokedEvents(self) -> List[OperationInvokedEvent]:
@@ -289,6 +421,9 @@ class SwcInternalBehavior(InternalBehavior):
289
421
  def getInternalTriggerOccurredEvents(self) -> List[InternalTriggerOccurredEvent]:
290
422
  return sorted(filter(lambda c: isinstance(c, InternalTriggerOccurredEvent), self.elements.values()), key= lambda e: e.short_name)
291
423
 
424
+ def getSwcServiceDependencies(self) -> List[SwcServiceDependency]:
425
+ return sorted(filter(lambda c: isinstance(c, SwcServiceDependency), self.elements.values()), key= lambda e: e.short_name)
426
+
292
427
  def getEvent(self, short_name: str) -> RTEEvent:
293
428
  if (not isinstance(self.elements[short_name], RTEEvent)):
294
429
  raise ValueError("Invalid Event Type <%s> of <%s>" % type(self.elements[short_name]), short_name)
@@ -298,6 +433,28 @@ class SwcInternalBehavior(InternalBehavior):
298
433
  if (short_name not in self.elements):
299
434
  prototype = VariableDataPrototype(self, short_name)
300
435
  self.elements[short_name] = prototype
436
+ self._explicit_inter_runnable_variables.append(prototype)
437
+ return self.elements[short_name]
438
+
439
+ def createImplicitInterRunnableVariable(self, short_name: str) -> VariableDataPrototype:
440
+ if (short_name not in self.elements):
441
+ prototype = VariableDataPrototype(self, short_name)
442
+ self.elements[short_name] = prototype
443
+ self._implicit_inter_runnable_variables.append(prototype)
444
+ return self.elements[short_name]
445
+
446
+ def createPerInstanceMemory(self, short_name: str) -> PerInstanceMemory:
447
+ if (short_name not in self.elements):
448
+ memory = PerInstanceMemory(self, short_name)
449
+ self.elements[short_name] = memory
450
+ self._per_instance_memories.append(memory)
451
+ return self.elements[short_name]
452
+
453
+ def createParameterDataPrototype(self, short_name: str) -> ParameterDataPrototype:
454
+ if (short_name not in self.elements):
455
+ prototype = ParameterDataPrototype(self, short_name)
456
+ self.elements[short_name] = prototype
457
+ self._per_instance_parameters.append(prototype)
301
458
  return self.elements[short_name]
302
459
 
303
460
  def getVariableDataPrototypes(self) -> List[VariableDataPrototype]:
@@ -314,6 +471,25 @@ class SwcInternalBehavior(InternalBehavior):
314
471
 
315
472
  def getRunnableEntity(self, short_name) -> RunnableEntity:
316
473
  return self.elements[short_name]
474
+
475
+ class PortGroup(Identifiable):
476
+ def __init__(self, parent: ARObject, short_name: str):
477
+ super().__init__(parent, short_name)
478
+
479
+ self._inner_group_iref = [] # type: List[InnerPortGroupInCompositionInstanceRef]
480
+ self._outer_port_ref = [] # type: List[RefType]
481
+
482
+ def addInnerGroupIRef(self, iref: InnerPortGroupInCompositionInstanceRef):
483
+ self._inner_group_iref.append(iref)
484
+
485
+ def getInnerGroupIRefs(self) -> List[InnerPortGroupInCompositionInstanceRef]:
486
+ return self._inner_group_iref
487
+
488
+ def addOuterPortRef(self, ref: RefType):
489
+ self._outer_port_ref.append(ref)
490
+
491
+ def getOuterPortRefs(self) -> List[RefType]:
492
+ return self._outer_port_ref
317
493
 
318
494
  class SwComponentType(ARElement):
319
495
  __metaclass__ = ABCMeta
@@ -322,22 +498,34 @@ class SwComponentType(ARElement):
322
498
  super().__init__(parent, short_name)
323
499
 
324
500
  def createPPortPrototype(self, short_name: str) -> PPortPrototype:
501
+ prototype = PPortPrototype(self, short_name)
325
502
  if (short_name not in self.elements):
326
- prototype = PPortPrototype(self, short_name)
327
503
  self.elements[short_name] = prototype
328
504
  return self.elements[short_name]
329
505
 
330
506
  def createRPortPrototype(self, short_name) -> RPortPrototype:
507
+ prototype = RPortPrototype(self, short_name)
331
508
  if (short_name not in self.elements):
332
- prototype = RPortPrototype(self, short_name)
333
509
  self.elements[short_name] = prototype
334
510
  return self.elements[short_name]
511
+
512
+ def createPortGroup(self, short_name) -> PortGroup:
513
+ port_group = PortGroup(self, short_name)
514
+ if (short_name not in self.elements):
515
+ self.elements[short_name] = port_group
516
+ return self.elements[short_name]
335
517
 
336
518
  def getPPortPrototypes(self) -> List[PPortPrototype]:
337
- return list(filter(lambda c: isinstance(c, PPortPrototype), self.elements.values()))
519
+ return list(sorted(filter(lambda c: isinstance(c, PPortPrototype), self.elements.values()), key= lambda o: o.short_name))
338
520
 
339
521
  def getRPortPrototypes(self) -> List[RPortPrototype]:
340
- return list(filter(lambda c: isinstance(c, RPortPrototype), self.elements.values()))
522
+ return list(sorted(filter(lambda c: isinstance(c, RPortPrototype), self.elements.values()), key= lambda o: o.short_name))
523
+
524
+ def getPortPrototypes(self) -> List[PortPrototype]:
525
+ return list(sorted(filter(lambda c: isinstance(c, PortPrototype), self.elements.values()), key= lambda o: o.short_name))
526
+
527
+ def getPortGroups(self) -> List[PortGroup]:
528
+ return list(sorted(filter(lambda c: isinstance(c, PortGroup), self.elements.values()), key= lambda o: o.short_name))
341
529
 
342
530
  class AtomicSwComponentType(SwComponentType):
343
531
  __metaclass__ = ABCMeta
@@ -397,22 +585,22 @@ class AssemblySwConnector(SwConnector):
397
585
  def __init__(self, parent: ARObject, short_name: str):
398
586
  super().__init__(parent, short_name)
399
587
 
400
- self.provider_iref = None # type: ProvidedPortPrototypeInstanceRef
401
- self.requester_iref = None # type: RequiredPortPrototypeInstanceRef
588
+ self.provider_iref = None # type: PPortInCompositionInstanceRef
589
+ self.requester_iref = None # type: RPortInCompositionInstanceRef
402
590
 
403
591
  class DelegationSwConnector(SwConnector):
404
592
  def __init__(self, parent: ARObject, short_name: str):
405
593
  super().__init__(parent, short_name)
406
594
 
407
- self.inner_port_iref = None # type: RefType
408
- self.outer_port_iref = None # type: RefType
595
+ self.inner_port_iref = None # type: PortInCompositionTypeInstanceRef
596
+ self.outer_port_ref = None # type: RefType
409
597
 
410
598
  class PassThroughSwConnector(SwConnector):
411
599
  def __init__(self, parent: ARObject, short_name: str):
412
600
  super().__init__(parent, short_name)
413
601
 
414
- self.provided_outer_port_iref = None # type: RefType
415
- self.required_outer_port_iref = None # type: RefType
602
+ self.provided_outer_port_ref = None # type: RefType
603
+ self.required_outer_port_ref = None # type: RefType
416
604
 
417
605
  class SwComponentPrototype(Identifiable):
418
606
  def __init__(self, parent: ARObject, short_name: str):
@@ -425,18 +613,38 @@ class CompositionSwComponentType(SwComponentType):
425
613
  super().__init__(parent, short_name)
426
614
 
427
615
  self.constant_value_mapping_refs = [] # type: List[RefType]
428
- self.data_type_mapping_refs = [] # type: List[RefType]
616
+ self._data_type_mapping_refs = [] # type: List[RefType]
429
617
  self.instantiation_rte_event_props = [] # type: List[InstantiationRTEEventProps]
430
618
 
619
+ def removeAllAssemblySwConnector(self):
620
+ for sw_connector in self.getAssemblySwConnectors():
621
+ self.elements.pop(sw_connector.short_name)
622
+
623
+ def removeAllDelegationSwConnector(self):
624
+ for sw_connector in self.getDelegationSwConnectors():
625
+ self.elements.pop(sw_connector.short_name)
626
+
431
627
  def createAssemblySwConnector(self, short_name: str) -> AssemblySwConnector:
432
628
  if (short_name not in self.elements):
433
629
  connector = AssemblySwConnector(self, short_name)
434
630
  self.elements[short_name] = connector
435
- return self.elements[short_name]
631
+ return self.elements[short_name]
632
+
633
+ def createDelegationSwConnector(self, short_name: str) -> DelegationSwConnector:
634
+ if short_name not in self.elements:
635
+ connector = DelegationSwConnector(self, short_name)
636
+ self.elements[short_name] = connector
637
+ return self.elements[short_name]
436
638
 
437
639
  def getAssemblySwConnectors(self) -> List[AssemblySwConnector]:
438
- return list(filter(lambda e: isinstance(e, AssemblySwConnector), self.elements.values()))
439
-
640
+ return list(sorted(filter(lambda e: isinstance(e, AssemblySwConnector), self.elements.values()), key = lambda c: c.short_name))
641
+
642
+ def getDelegationSwConnectors(self) -> List[DelegationSwConnector]:
643
+ return list(sorted(filter(lambda e: isinstance(e, DelegationSwConnector), self.elements.values()), key = lambda c: c.short_name))
644
+
645
+ def getSwConnectors(self) -> List[SwConnector]:
646
+ return list(sorted(filter(lambda e: isinstance(e, SwConnector), self.elements.values()), key = lambda c: c.short_name))
647
+
440
648
  def createSwComponentPrototype(self, short_name: str) -> SwComponentPrototype:
441
649
  if (short_name not in self.elements):
442
650
  connector = SwComponentPrototype(self, short_name)
@@ -444,4 +652,10 @@ class CompositionSwComponentType(SwComponentType):
444
652
  return self.elements[short_name]
445
653
 
446
654
  def getSwComponentPrototypes(self) -> List[SwComponentPrototype]:
447
- return list(filter(lambda e: isinstance(e, SwComponentPrototype), self.elements.values()))
655
+ return list(filter(lambda e: isinstance(e, SwComponentPrototype), self.elements.values()))
656
+
657
+ def addDataTypeMapping(self, data_type_mapping_ref: RefType):
658
+ self._data_type_mapping_refs.append(data_type_mapping_ref)
659
+
660
+ def getDataTypeMappings(self) -> List[RefType]:
661
+ return self._data_type_mapping_refs
armodel/models/unit.py ADDED
@@ -0,0 +1,14 @@
1
+
2
+ from .ar_object import ARLiteral, ARObject
3
+ from .general_structure import ARElement
4
+
5
+
6
+ class SingleLanguageUnitNames(ARLiteral):
7
+ def __init__(self) -> None:
8
+ super().__init__()
9
+
10
+ class Unit(ARElement):
11
+ def __init__(self, parent: ARObject, short_name: str):
12
+ super().__init__(parent, short_name)
13
+
14
+ self.display_name = None # type: SingleLanguageUnitNames