Excepcion por exception_handler nulo para WebSocket
Closed this issue · 4 comments
Describe the bug
Al enviar una nueva orden, cancelar una orden, o cambiarla, recibo una excepción con el seiguiente mensaje:
log:
Starting new HTTPS connection (1): api.remarkets.primary.com.ar:443
. . .
https://api.remarkets.primary.com.ar:443 "GET /rest/order/newSingleOrder?marketId=ROFX&symbol=GGALFeb21&orderQty=1.0&ordType=limit&side=buy&timeInForce=Day&account=REM5018&cancelPrevious=False&price=121.35 HTTP/1.1" 200 None
. . .
error from callback <bound method WebSocketClient.on_message of <pyRofex.clients.websocket_rfx.WebSocketClient object at 0x0000013F98581CA0>>: 'NoneType' object is not callable
Lo extraño es que no es por algun error en los parametros porque las ordenes se encaminan correctamente al mercado, se cambian y se cancelan como corresponde tambien.
Y ya venia usando el desarrollo sin que esto ocurriera, por lo que podria descartar una excepcion no manejada por nuestro desarrollo.
El mensaje que se imprime en consola es el siguiente:
File "C:\ProgramData\Anaconda3\lib\site-packages\websocket\_app.py", line 344, in _callback
callback(*args)
File "C:\ProgramData\Anaconda3\lib\site-packages\pyRofex\clients\websocket_rfx.py", line 175, in on_message
self.on_exception(e)
File "C:\ProgramData\Anaconda3\lib\site-packages\pyRofex\clients\websocket_rfx.py", line 192, in on_exception
self.exception_handler(exception)
Al evaluar el codigo de la libreria entiendo que es porque el exception_handler del WebSocket no esta correctamente inicializado, pero revise las definiciones y no encuentro un error, e insisto en que esta tal cual estaba antes que no aparecia esa excepcion.
Inicializacion del entorno
1. Definicion de mi propio exception_handler()
def exception_handler(self, exc_message):
"""
Handles Exception Messages received from server.
:param exc_message: Message received. Comes as a JSON.
:type exc_message: dict
"""
error_msg = f"\033[0;30;47mERROR: EXCEPTION OCCURED\nCheck log file " \
"for detailed error message.\033[1;37;40m"
print(error_msg)
logging.debug(f'EXCEPTION Handler: Received {exc_message.message}')
2. Conexion y seteo de handlers propios
# Initialize Environment
pyRofex.initialize(user=user,
password=password,
account=account,
environment=environment)
# Initialize WebSocket Connection with Handlers
pyRofex.init_websocket_connection(market_data_handler=self.market_data_handler,
order_report_handler=self.order_report_handler,
error_handler=self.error_handler,
exception_handler=self.exception_handler)
3. Envio de ordenes
def place_order(ticker, side, price, qty):
order = pyRofex.send_order(ticker=ticker,
side=side,
size=qty,
price=price,
order_type=pyRofex.OrderType.LIMIT,
cancel_previous=replace)
if order.get('status') == 'OK':
client_order_id = int(order.get('order').get('clientId'))
else:
client_order_id = 0
side_str = 'sell' if side == pyRofex.Side.SELL else 'buy'
return client_order_id
Todos funcionan correctamente, por lo que estoy un poco desorientado para encontrar en que momento se produce dicha excepcion.
Proba seteando tu propio exception handler
pyRofex.set_websocket_exception_handler(self.onException,pyRofex.Environment.REMARKETS)
Asi podes ver que error está sucediendo.
@matiasrivera Gracias por la sugerencia.
Funciono para mi, pero me llama la atencion que antes no recibia esa excepcion usandolo de la otra forma.
Sigo viendo una excepcion que idnica que alguno de los parametros que paso a la hora de colocar una orden es NoneType, pero no logroidentificar cual.
2021-01-29 16:49:42,480-Thread-3-ORHandler Exception: int() argument must be a string, a bytes-like object or a number, not 'NoneType'
Fede, ahí encontré el problema, es algo que se me paso. Primero, no se esta seteando correctamente el exception handler y al momento de ocurrir la exception intenta llamar a la función que no existe, por eso salta el error: 'NoneType' object is not callable
Aunque también me fije que no estoy validando que el exception handler exista, es decir, si no se lo seteas no tendria que intentar llamar a la funcion.
En fin, subo el fix en estos dias y cierro el issue.
Saludos y gracias!.
Fix en la versión 0.3.2
Igualmente cualquier cosa que falle me avisas.