2424
2525from __future__ import annotations
2626from json import JSONDecodeError
27- from typing import Any , Callable , Generator , Union
27+ from typing import Any , cast , Callable , Generator , Union
2828
2929from ..json_utils .errors import JSONRPCError , NODE_UNKNOWN , RECEIVER_UNKNOWN
3030from ..json_utils .json_objects import Notification
@@ -60,14 +60,16 @@ def convert_data_message_to_messages(
6060 self , data_message : DataMessage , receivers : Union [set [Union [bytes , str ]], set [bytes ]],
6161 ) -> Generator [Message , Any , Any ]:
6262 cid = data_message .conversation_id
63- for receiver in receivers :
64- yield Message (
65- receiver = receiver ,
63+ raw_message = Message (
64+ receiver = "dummy" ,
6665 data = Notification ("add_subscription_message" ),
6766 conversation_id = cid ,
6867 additional_payload = data_message .payload ,
6968 message_type = MessageTypes .JSON ,
7069 )
70+ for receiver in receivers :
71+ raw_message .receiver = receiver .encode () if isinstance (receiver , str ) else receiver
72+ yield raw_message
7173
7274 def send_message (self , message : DataMessage ) -> None :
7375 super ().send_message (message )
@@ -78,7 +80,7 @@ def send_message(self, message: DataMessage) -> None:
7880 # TODO should unregister subscribers to which a message could not be forwarded
7981 def handle_json_error (self , message : Message ) -> None :
8082 """Unregister unavailable subscribers.
81-
83+
8284 Call this method from the message handler, for example.
8385 """
8486 try :
@@ -91,12 +93,12 @@ def handle_json_error(self, message: Message) -> None:
9193 except JSONRPCError as exc :
9294 error_code = exc .rpc_error .code
9395 try :
94- error_data = exc .rpc_error .data # type: ignore
96+ error_data = cast ( str , exc .rpc_error .data ) # type: ignore
9597 except AttributeError :
9698 return
97- if error_code == RECEIVER_UNKNOWN :
99+ if error_code == RECEIVER_UNKNOWN . code :
98100 self .unregister_subscriber (error_data )
99- if error_code == NODE_UNKNOWN :
101+ if error_code == NODE_UNKNOWN . code :
100102 if isinstance (error_data , str ):
101103 error_data = error_data .encode ()
102104 for subscriber in self .subscribers :
0 commit comments