29
29
ar_element .ModeSwitchReceiverComSpec ,
30
30
ar_element .ClientComSpec ]
31
31
32
+ RteEventElement = Union [ar_element .AsynchronousServerCallReturnsEvent ,
33
+ ar_element .BackgroundEvent ,
34
+ ar_element .DataReceivedEvent ,
35
+ ar_element .DataReceiveErrorEvent ,
36
+ ar_element .DataSendCompletedEvent ,
37
+ ar_element .DataWriteCompletedEvent ,
38
+ ar_element .ExternalTriggerOccurredEvent ,
39
+ ar_element .InitEvent ,
40
+ ar_element .InternalTriggerOccurredEvent ,
41
+ ar_element .ModeSwitchedAckEvent ,
42
+ ar_element .OperationInvokedEvent ,
43
+ ar_element .SwcModeManagerErrorEvent ,
44
+ ar_element .SwcModeSwitchEvent ,
45
+ ar_element .TimingEvent ,
46
+ ar_element .TransformerHardErrorEvent ]
47
+
32
48
# Helper classes
33
49
34
50
@@ -185,6 +201,23 @@ def __init__(self,
185
201
'MODE-SWITCH-RECEIVER-COM-SPEC' : self ._read_mode_switch_receiver_com_spec ,
186
202
'CLIENT-COM-SPEC' : self ._read_client_com_spec ,
187
203
}
204
+ self .switcher_rte_event = {
205
+ 'ASYNCHRONOUS-SERVER-CALL-RETURNS-EVENT' : self ._read_async_server_call_returns_event ,
206
+ 'BACKGROUND-EVENT' : self ._read_background_event ,
207
+ 'DATA-RECEIVE-ERROR-EVENT' : self ._read_data_receive_error_event ,
208
+ 'DATA-RECEIVED-EVENT' : self ._read_data_received_event ,
209
+ 'DATA-SEND-COMPLETED-EVENT' : self ._read_data_send_completed_event ,
210
+ 'DATA-WRITE-COMPLETED-EVENT' : self ._read_data_write_completed_event ,
211
+ 'EXTERNAL-TRIGGER-OCCURRED-EVENT' : self ._read_external_trigger_occured_event ,
212
+ 'INIT-EVENT' : self ._read_init_event ,
213
+ 'INTERNAL-TRIGGER-OCCURRED-EVENT' : self ._read_internal_trigger_occured_event ,
214
+ 'MODE-SWITCHED-ACK-EVENT' : self ._read_mode_switched_ack_event ,
215
+ 'OPERATION-INVOKED-EVENT' : self ._read_operation_invoked_event ,
216
+ 'SWC-MODE-MANAGER-ERROR-EVENT' : self ._read_swc_mode_manager_error_event ,
217
+ 'SWC-MODE-SWITCH-EVENT' : self ._read_swc_mode_switch_event ,
218
+ 'TIMING-EVENT' : self ._read_timing_event ,
219
+ 'TRANSFORMER-HARD-ERROR-EVENT' : self ._read_transformer_hard_error_event ,
220
+ }
188
221
self .switcher_non_collectable = { # Non-collectable, used only for unit testing
189
222
# Documentation elements
190
223
'ANNOTATION' : self ._read_annotation ,
@@ -273,7 +306,7 @@ def __init__(self,
273
306
'BACKGROUND-EVENT' : self ._read_background_event ,
274
307
'DATA-RECEIVE-ERROR-EVENT' : self ._read_data_receive_error_event ,
275
308
'DATA-RECEIVED-EVENT' : self ._read_data_received_event ,
276
- 'DATA-SEND-COMPLETED-EVENT' : self ._read_send_completed_event ,
309
+ 'DATA-SEND-COMPLETED-EVENT' : self ._read_data_send_completed_event ,
277
310
'DATA-WRITE-COMPLETED-EVENT' : self ._read_data_write_completed_event ,
278
311
'EXTERNAL-TRIGGER-OCCURRED-EVENT' : self ._read_external_trigger_occured_event ,
279
312
'INIT-EVENT' : self ._read_init_event ,
@@ -4713,7 +4746,7 @@ def _read_runnable_entity_group(self, child_elements: ChildElementMap, data: dic
4713
4746
child_elements .skip ("WRITTEN-LOCAL-VARIABLES" )
4714
4747
child_elements .skip ("VARIATION-POINT" )
4715
4748
4716
- def _read_rte_event (self , child_elements : ChildElementMap , data : dict ) -> None :
4749
+ def _read_rte_event_group (self , child_elements : ChildElementMap , data : dict ) -> None :
4717
4750
"""
4718
4751
Reads group AR:RTE-EVENT
4719
4752
"""
@@ -4740,7 +4773,7 @@ def _read_async_server_call_returns_event(self,
4740
4773
self ._read_referrable (child_elements , data )
4741
4774
self ._read_multi_language_referrable (child_elements , data )
4742
4775
self ._read_identifiable (child_elements , xml_element .attrib , data )
4743
- self ._read_rte_event (child_elements , data )
4776
+ self ._read_rte_event_group (child_elements , data )
4744
4777
xml_child = child_elements .get ("EVENT-SOURCE-REF" )
4745
4778
if xml_child is not None :
4746
4779
data ["event_source" ] = self ._read_async_server_call_result_point_ref (xml_child )
@@ -4759,7 +4792,7 @@ def _read_background_event(self,
4759
4792
self ._read_referrable (child_elements , data )
4760
4793
self ._read_multi_language_referrable (child_elements , data )
4761
4794
self ._read_identifiable (child_elements , xml_element .attrib , data )
4762
- self ._read_rte_event (child_elements , data )
4795
+ self ._read_rte_event_group (child_elements , data )
4763
4796
self ._report_unprocessed_elements (child_elements )
4764
4797
return ar_element .BackgroundEvent (** data )
4765
4798
@@ -4775,7 +4808,7 @@ def _read_data_receive_error_event(self,
4775
4808
self ._read_referrable (child_elements , data )
4776
4809
self ._read_multi_language_referrable (child_elements , data )
4777
4810
self ._read_identifiable (child_elements , xml_element .attrib , data )
4778
- self ._read_rte_event (child_elements , data )
4811
+ self ._read_rte_event_group (child_elements , data )
4779
4812
xml_child = child_elements .get ("DATA-IREF" )
4780
4813
if xml_child is not None :
4781
4814
data ["data" ] = self ._read_r_variable_in_atomic_swc_instance_ref (xml_child )
@@ -4794,16 +4827,16 @@ def _read_data_received_event(self,
4794
4827
self ._read_referrable (child_elements , data )
4795
4828
self ._read_multi_language_referrable (child_elements , data )
4796
4829
self ._read_identifiable (child_elements , xml_element .attrib , data )
4797
- self ._read_rte_event (child_elements , data )
4830
+ self ._read_rte_event_group (child_elements , data )
4798
4831
xml_child = child_elements .get ("DATA-IREF" )
4799
4832
if xml_child is not None :
4800
4833
data ["data" ] = self ._read_r_variable_in_atomic_swc_instance_ref (xml_child )
4801
4834
self ._report_unprocessed_elements (child_elements )
4802
4835
return ar_element .DataReceivedEvent (** data )
4803
4836
4804
- def _read_send_completed_event (self ,
4805
- xml_element : ElementTree .Element
4806
- ) -> ar_element .DataSendCompletedEvent :
4837
+ def _read_data_send_completed_event (self ,
4838
+ xml_element : ElementTree .Element
4839
+ ) -> ar_element .DataSendCompletedEvent :
4807
4840
"""
4808
4841
Reads complex Type AR:DATA-SEND-COMPLETED-EVENT
4809
4842
Tag variants: 'DATA-SEND-COMPLETED-EVENT'
@@ -4813,7 +4846,7 @@ def _read_send_completed_event(self,
4813
4846
self ._read_referrable (child_elements , data )
4814
4847
self ._read_multi_language_referrable (child_elements , data )
4815
4848
self ._read_identifiable (child_elements , xml_element .attrib , data )
4816
- self ._read_rte_event (child_elements , data )
4849
+ self ._read_rte_event_group (child_elements , data )
4817
4850
xml_child = child_elements .get ("EVENT-SOURCE-REF" )
4818
4851
if xml_child is not None :
4819
4852
data ["event_source" ] = self ._read_variable_access_ref (xml_child )
@@ -4832,7 +4865,7 @@ def _read_data_write_completed_event(self,
4832
4865
self ._read_referrable (child_elements , data )
4833
4866
self ._read_multi_language_referrable (child_elements , data )
4834
4867
self ._read_identifiable (child_elements , xml_element .attrib , data )
4835
- self ._read_rte_event (child_elements , data )
4868
+ self ._read_rte_event_group (child_elements , data )
4836
4869
xml_child = child_elements .get ("EVENT-SOURCE-REF" )
4837
4870
if xml_child is not None :
4838
4871
data ["event_source" ] = self ._read_variable_access_ref (xml_child )
@@ -4851,7 +4884,7 @@ def _read_external_trigger_occured_event(self,
4851
4884
self ._read_referrable (child_elements , data )
4852
4885
self ._read_multi_language_referrable (child_elements , data )
4853
4886
self ._read_identifiable (child_elements , xml_element .attrib , data )
4854
- self ._read_rte_event (child_elements , data )
4887
+ self ._read_rte_event_group (child_elements , data )
4855
4888
xml_child = child_elements .get ("TRIGGER-IREF" )
4856
4889
if xml_child is not None :
4857
4890
data ["trigger" ] = self ._read_r_trigger_in_atomic_swc_instance_ref (xml_child )
@@ -4870,7 +4903,7 @@ def _read_init_event(self,
4870
4903
self ._read_referrable (child_elements , data )
4871
4904
self ._read_multi_language_referrable (child_elements , data )
4872
4905
self ._read_identifiable (child_elements , xml_element .attrib , data )
4873
- self ._read_rte_event (child_elements , data )
4906
+ self ._read_rte_event_group (child_elements , data )
4874
4907
self ._report_unprocessed_elements (child_elements )
4875
4908
return ar_element .InitEvent (** data )
4876
4909
@@ -4886,7 +4919,7 @@ def _read_internal_trigger_occured_event(self,
4886
4919
self ._read_referrable (child_elements , data )
4887
4920
self ._read_multi_language_referrable (child_elements , data )
4888
4921
self ._read_identifiable (child_elements , xml_element .attrib , data )
4889
- self ._read_rte_event (child_elements , data )
4922
+ self ._read_rte_event_group (child_elements , data )
4890
4923
xml_child = child_elements .get ("EVENT-SOURCE-REF" )
4891
4924
if xml_child is not None :
4892
4925
data ["event_source" ] = self ._read_internal_triggering_point_ref (xml_child )
@@ -4905,7 +4938,7 @@ def _read_mode_switched_ack_event(self,
4905
4938
self ._read_referrable (child_elements , data )
4906
4939
self ._read_multi_language_referrable (child_elements , data )
4907
4940
self ._read_identifiable (child_elements , xml_element .attrib , data )
4908
- self ._read_rte_event (child_elements , data )
4941
+ self ._read_rte_event_group (child_elements , data )
4909
4942
xml_child = child_elements .get ("EVENT-SOURCE-REF" )
4910
4943
if xml_child is not None :
4911
4944
data ["event_source" ] = self ._read_mode_switch_point_ref (xml_child )
@@ -4924,7 +4957,7 @@ def _read_operation_invoked_event(self,
4924
4957
self ._read_referrable (child_elements , data )
4925
4958
self ._read_multi_language_referrable (child_elements , data )
4926
4959
self ._read_identifiable (child_elements , xml_element .attrib , data )
4927
- self ._read_rte_event (child_elements , data )
4960
+ self ._read_rte_event_group (child_elements , data )
4928
4961
xml_child = child_elements .get ("OPERATION-IREF" )
4929
4962
if xml_child is not None :
4930
4963
data ["operation" ] = self ._read_p_operation_in_atomic_swc_instance_ref (xml_child )
@@ -4943,7 +4976,7 @@ def _read_swc_mode_manager_error_event(self,
4943
4976
self ._read_referrable (child_elements , data )
4944
4977
self ._read_multi_language_referrable (child_elements , data )
4945
4978
self ._read_identifiable (child_elements , xml_element .attrib , data )
4946
- self ._read_rte_event (child_elements , data )
4979
+ self ._read_rte_event_group (child_elements , data )
4947
4980
xml_child = child_elements .get ("MODE-GROUP-IREF" )
4948
4981
if xml_child is not None :
4949
4982
data ["mode_group" ] = self ._read_p_mode_group_in_atomic_swc_instance_ref (xml_child )
@@ -4962,7 +4995,7 @@ def _read_swc_mode_switch_event(self,
4962
4995
self ._read_referrable (child_elements , data )
4963
4996
self ._read_multi_language_referrable (child_elements , data )
4964
4997
self ._read_identifiable (child_elements , xml_element .attrib , data )
4965
- self ._read_rte_event (child_elements , data )
4998
+ self ._read_rte_event_group (child_elements , data )
4966
4999
self ._read_swc_mode_switch_event_group (child_elements , data )
4967
5000
self ._report_unprocessed_elements (child_elements )
4968
5001
return ar_element .SwcModeSwitchEvent (** data )
@@ -5000,7 +5033,7 @@ def _read_timing_event(self,
5000
5033
self ._read_referrable (child_elements , data )
5001
5034
self ._read_multi_language_referrable (child_elements , data )
5002
5035
self ._read_identifiable (child_elements , xml_element .attrib , data )
5003
- self ._read_rte_event (child_elements , data )
5036
+ self ._read_rte_event_group (child_elements , data )
5004
5037
xml_child = child_elements .get ("OFFSET" )
5005
5038
if xml_child is not None :
5006
5039
data ["offset" ] = self ._read_number (xml_child .text )
@@ -5022,7 +5055,7 @@ def _read_transformer_hard_error_event(self,
5022
5055
self ._read_referrable (child_elements , data )
5023
5056
self ._read_multi_language_referrable (child_elements , data )
5024
5057
self ._read_identifiable (child_elements , xml_element .attrib , data )
5025
- self ._read_rte_event (child_elements , data )
5058
+ self ._read_rte_event_group (child_elements , data )
5026
5059
self ._read_transformer_hard_error_event_group (child_elements , data )
5027
5060
self ._report_unprocessed_elements (child_elements )
5028
5061
return ar_element .TransformerHardErrorEvent (** data )
@@ -5076,7 +5109,12 @@ def _read_swc_internal_behavior_group(self, child_elements: ChildElementMap, dat
5076
5109
Most of it will be implemented in a future version
5077
5110
"""
5078
5111
child_elements .skip ("AR-TYPED-PER-INSTANCE-MEMORYS" )
5079
- child_elements .skip ("EVENTS" )
5112
+ xml_child = child_elements .get ("EVENTS" )
5113
+ if xml_child is not None :
5114
+ events = []
5115
+ for xml_grand_child in xml_child .findall ("./*" ):
5116
+ events .append (self ._read_rte_event_element (xml_grand_child ))
5117
+ data ["events" ] = events
5080
5118
child_elements .skip ("EXCLUSIVE-AREA-POLICYS" )
5081
5119
child_elements .skip ("EXPLICIT-INTER-RUNNABLE-VARIABLES" )
5082
5120
child_elements .skip ("HANDLE-TERMINATION-AND-RESTART" )
@@ -5097,3 +5135,13 @@ def _read_swc_internal_behavior_group(self, child_elements: ChildElementMap, dat
5097
5135
child_elements .skip ("SUPPORTS-MULTIPLE-INSTANTIATION" )
5098
5136
child_elements .skip ("VARIATION-POINT-PROXYS" )
5099
5137
child_elements .skip ("VARIATION-POINT" )
5138
+
5139
+ def _read_rte_event_element (self , xml_element : ElementTree .Element ) -> RteEventElement :
5140
+ """
5141
+ Reads one RTE event element
5142
+ """
5143
+ read_method = self .switcher_rte_event .get (xml_element .tag , None )
5144
+ if read_method is not None :
5145
+ return read_method (xml_element )
5146
+ else :
5147
+ raise KeyError (f"Found no reader for '{ xml_element .tag } '" )
0 commit comments