There is a problem with python Refinitiv-Data package 1.0.0b20, there are multiple ' " ' double quote scopes on timeout message (I think it is a bug on Refinitiv Server Side)
Malformed JSON received during token refresh: '{"error":"server_error" ,"error_description":"Request "xxxxxx-yyyyy-zzzz-tttt-sssssssss" has failed on backend call timeout" } '. Status code: 500
I managed to workaround this error removing the inner scope:
workarround
- try:
- json_content=None
- if response and response.text and "\"error\":\"server_error\"" in response.text:
- print("[REFINITIV HACK ORI] fixing Malformed JSON", end=" ")
- json_content=json.loads((''.join(response.text.split('\"'))).replace(":","\":\"").replace(" ,","\" ,\"").replace("{","{\"").replace("}","\"}"))
- print(json_content)
- else:
- json_content = response.json()
- except json.decoder.JSONDecodeError:
- message = (
- f"Malformed JSON received during token refresh: '{response.text}'. "
- f"Status code: {response.status_code}")
- self.error(message)
- self._callback(UpdateEvent.REFRESH_TOKEN_FAILED, message, {})
- return
now I try to close and restart the session once I get this error message.
but the second attempt to open a stream under the new session fails stating "Session is not open".
track_last_position_before_exception="refinitiv on position 01" if os.name == 'nt': track_last_position_before_exception="refinitiv on position 02" # on "okatz" user on the office desktop win computer # rd.load_config('C:/work/py38/MRMTWebSocketPyKx/configurations/refinitiv-data.config.json') # on "srv" user on the office desktop win computer refinitiv-data_1.config.json rd.load_config('E:/work/enigmajupiter/KFCMR/Configuration/refinitiv-data_1.config.json') # rd.load_config('C:/work/py38/jwt/NathansProject/KxProjectCode/Configuration/refinitiv-data.config.json') track_last_position_before_exception="refinitiv on position 03" else: track_last_position_before_exception="refinitiv on position 04" #print("[REFINITIV]: LOADING CONFIG FILE FOR Dev SERVER") #rd.load_config('/home/ubuntu/data_enigma_x_server/distribution_server/RefinitivConf/refinitiv-data_1.config.json') print("[REFINITIV]: LOADING CONFIG FILE FOR DEPLOY SERVER") rd.load_config('/home/ubuntu/enigmajupiter/pyScripts/refinitivdataclient/Configuration/refinitiv-data.config.json') track_last_position_before_exception="refinitiv on position 05" track_last_position_before_exception="refinitiv on position 06" # FIXME: ORI KOVACSI KATZ 13/10/2022 got an error [REFINITIV ## startListening() function ## ## Generic Exception ##][2022-10-12 15:37:43.125112]: Caught error: Session must be open self.current_rd_session = rd.open_session() track_last_position_before_exception="refinitiv on position 07" #self.current_rd_session = rd.session.get_default() # self.current_rd_session.on_event(self.on_event) # , 'CF_LAST', 'TRDPRC_1' #self.theWebSocket = rd.content.pricing.Definition(['BTCc1','BTCc2','BTCc3','BTCc4','BTCc5','BTCc6','BTCc7','BTCc8','BTCc9','QBTCu.TO','QETHu.TO','EUR=','GBP=','CADUSD=R','AUD=','CHFUSD=R'], fields=['BID', 'ASK', 'QUOTIM', 'QUOTIM_MS', 'ORDER_SIDE', 'ORDER_PRC', 'ORDER_SIZE', 'BID_SIZE', 'ASK_SIZE', 'CF_LAST']).get_stream() self.theWebSocket = rd.content.pricing.Definition([ 'BTC=', 'ETH=', 'HTEc1','HTEc2','HTEc3','HTEc4','HTEc5','HTEc6','HTEc7','HTEc8','HTEc9','BTCc1','BTCc2','BTCc3','BTCc4','BTCc5','BTCc6','BTCc7','BTCc8','BTCc9','QBTCu.TO','QETHu.TO','EUR=','GBP=','CADUSD=R','AUD=','CHFUSD=R'], fields=['MID_1','PRIMACT_1','CLOSE_ASK','CLOSE_BID','PRIM_CLOSE','HST_CLOSE','HSTCLSDATE','MID_PRICE','BID', 'ASK', 'QUOTIM', 'QUOTIM_MS', 'ORDER_SIDE', 'ORDER_PRC', 'ORDER_SIZE']).get_stream() track_last_position_before_exception="refinitiv on position 08" self.theWebSocket.on_refresh(self.handle_refresh_wrapper) track_last_position_before_exception="refinitiv on position 09" self.theWebSocket.on_update(self.handle_update_wrapper) track_last_position_before_exception="refinitiv on position 10" self.theWebSocket.on_status(self.handle_status_wrapper) track_last_position_before_exception="refinitiv on position 11" self.theWebSocket.on_complete(self.on_complete_wrapper) track_last_position_before_exception="refinitiv on position 12" self.theWebSocket.on_error(self.on_error_wrapper) track_last_position_before_exception="refinitiv on position 13" self.theWebSocket.open() track_last_position_before_exception="refinitiv on position 14" . . . track_last_position_before_exception="refinitiv on position 17" # mark this websocket is running self.isRunning = True track_last_position_before_exception="refinitiv on position 18"
I can Identify failure with exception on
self.theWebSocket.open()
by setting the
track_last_position_before_exception="refinitiv on position 13"
when accepting exception with message:
[REFINITIV ## startListening() function ## ## Generic Exception ##][2022-10-15 01:26:22.798371]: Caught error: Session must be open refinitiv on position 13
I need help with two things:
1. can I change timeout (HTTP request time out) to a very short one to get this scenario reproduced fast?
it takes a day until I catch it, I need it fast for debugging.
2. how can I troubleshoot the delete and create a new session and a new stream to find out what is wrong with the session when I try open() the stream after I closed it once?
Thanks
Ori Kovacsi Katz