Closed jcosentino1 closed 3 years ago
Yo estoy teniendo el mismo problema cuando envio el web socket: websocket ERROR error from callback <bound method WebSocketClient.on_error of <lib.marketdata.brokers.Primary.pyRofex.clients.websocket_rfx_class.WebSocketClient object at 0x0000026D49DCAB80>>: 'NoneType' object is not callable File "C:\Users\fplan\Anaconda3\envs\ArgyBondsBAF\lib\site-packages\websocket_app.py", line 344, in _callback callback(*args) File "C:/Users/fplan/OneDrive/Documentos/Python Scripts/Proyectos/ArgyBondsBAF\lib\marketdata\brokers\Primary\pyRofex\clients\websocket_rfx_class.py", line 183, in on_error self.on_exception(exception) File "C:/Users/fplan/OneDrive/Documentos/Python Scripts/Proyectos/ArgyBondsBAF\lib\marketdata\brokers\Primary\pyRofex\clients\websocket_rfx_class.py", line 191, in on_exception self.exception_handler(exception) MarketDataPrimary.MarketData ERROR Error 'NoneType' object has no attribute 'connected' ocurred when trying to initiate a websocket connection
Hola, gracias por la info recien hoy me pude poner a ver este tema.
Por lo que estuve viendo el error ocurre en una de las validaciones que estoy haciendo al iniciar la conexion websocket en el metodo connect
del client WebSocketClient. Al parecer si al iniciar la conexion ws por alguna razon falla el Thread que inicia la funcion run_forever
o se demora mas de un segundo entonces tira la excepcion "Error 'NoneType' object has no attribute 'connected' " cuando quiero validar si el socket se conecto al server.
Entiendo que este error no les pasa siempre, porque no logre reproducirlo localmente, solo cuando hice que fallara el metodo run_forever
fue cuando obtuve el mismo error. Si les ocurre permanentemente por favor diganme y lo vemos.
Por lo pronto, voy a actualizar esta validacion para que no ocurra de vuelta.
En cuanto este listo el fix, lo subo y genero la version 0.4.1.
Gracias!
Version 0.4.1 subida.
Hola, inicialmente me daba ese error y ahora el error que recibo es:
Enviado desde un dispositivo móvil
El 8 oct 2021, a la(s) 19:09, Franco Zanuso @.***> escribió:
Hola, gracias por la info recien hoy me pude poner a ver este tema.
Por lo que estuve viendo el error ocurre en una de las validaciones que estoy haciendo al iniciar la conexion websocket en el metodo connect del client WebSocketClient. Al parecer si al iniciar la conexion ws por alguna razon falla el Thread que inicia la funcion run_forever o se demora mas de un segundo entonces tira la excepcion "Error 'NoneType' object has no attribute 'connected' " cuando quiero validar si el socket se conecto al server.
Entiendo que este error no les pasa siempre, porque no logre reproducirlo localmente, solo cuando hice que fallara el metodo run_forever fue cuando obtuve el mismo error. Si les ocurre permanentemente por favor diganme y lo vemos.
Por lo pronto, voy a actualizar esta validacion para que no ocurra de vuelta.
En cuanto este listo el fix, lo subo y genero la version 0.4.1.
Gracias!
— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.
a mi me da siempre:
import time
import pyRofex
pyRofex.initialize(user="fplanas5506", password="nralwT8&", account="REM5506", environment=pyRofex.Environment.REMARKET)
def order_report_handler(message): print("Order Report Message Received: {0}".format(message))
def error_handler(message): print("Error Message Received: {0}".format(message))
def exception_handler(e): print("Exception Occurred: {0}".format(e.message))
pyRofex.init_websocket_connection(order_report_handler=order_report_handler, error_handler=error_handler, exception_handler=exception_handler) Traceback (most recent call last):
File "
File "C:\Users\fplan\Anaconda3\envs\ArgyBondsBAF\lib\site-packages\pyRofex\service.py", line 443, in init_websocket_connection client.connect()
File "C:\Users\fplan\Anaconda3\envs\ArgyBondsBAF\lib\site-packages\pyRofex\clients\websocket_rfx.py", line 134, in connect while not self.ws_connection.sock.connected and conn_timeout:
AttributeError: 'NoneType' object has no attribute 'connected'
Al querer hacer la conexion por websocket no arroja el error pero al sbscribir al order_report dice que la conexion ya esta cerrada.
import time
import pyRofex
pyRofex.initialize(user="xxxxxxx", password="xxxxxxx", account="xxxxxxxx", environment=pyRofex.Environment.REMARKET)
def order_report_handler(message): print("Order Report Message Received: {0}".format(message))
def error_handler(message): print("Error Message Received: {0}".format(message))
""" def exception_handler(e): print("Exception Occurred: {0}".format(e.message)) """
pyRofex.init_websocket_connection(order_report_handler=order_report_handler, error_handler=error_handler)
pyRofex.order_report_subscription() Traceback (most recent call last):
File "
File "C:\Users\fplan\Anaconda3\envs\ArgyBondsBAF\lib\site-packages\pyRofex\service.py", line 574, in order_report_subscription client.order_report_subscription(account, snapshot)
File "C:\Users\fplan\Anaconda3\envs\ArgyBondsBAF\lib\site-packages\pyRofex\clients\websocket_rfx.py", line 262, in order_report_subscription self.ws_connection.send(message)
File "C:\Users\fplan\Anaconda3\envs\ArgyBondsBAF\lib\site-packages\websocket_app.py", line 155, in send raise WebSocketConnectionClosedException(
WebSocketConnectionClosedException: Connection is already closed.
Hola fplanas27 ,
No estoy pudiendo reproducir el issue de mi lado. Entiendo por lo que decis que no te tira mas el error: "AttributeError: 'NoneType' object has no attribute 'connected'" pero ahora te esta tirando "WebSocketConnectionClosedException: Connection is already closed."
Ese error lo esta tirando porque esta intentando enviar un msj por la conexion websocket pero esta cerrada.
Que version de la libreria estas utilizando? podrias hacer: pip show pyRofex
La versión es: pyRofex 0.4.1
Federico Planas @.***
El sáb, 9 oct 2021 a las 17:06, Franco Zanuso @.***>) escribió:
Hola fplanas27 ,
No estoy pudiendo reproducir el issue de mi lado. Entiendo por lo que decis que no te tira mas el error: "AttributeError: 'NoneType' object has no attribute 'connected'" pero ahora te esta tirando "WebSocketConnectionClosedException: Connection is already closed."
Ese error lo esta tirando porque esta intentando enviar un msj por la conexion websocket pero esta cerrada.
Que version de la libreria estas utilizando? podrias hacer: pip show pyRofex
— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/matbarofex/pyRofex/issues/21#issuecomment-939355074, or unsubscribe https://github.com/notifications/unsubscribe-auth/ANMKY6QN7DJ4YV26OLB757TUGCOETANCNFSM5FEWMXXA . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.
Buenas, dos cosas que me pasaron a ver si ayuda para el fix.
Primero que nada, al exception_handler(e), le tuve que sacar el ".message" porque el error que recibo no tiene un atributo "message".
Hecho esto, el error que recibo tiene que ver con un problema de certificados:
Exception Occurred: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:1129) Exception Occurred: Connection could not be established. Exception Occurred: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:1129) Exception Occurred: Connection could not be established.
Esto seguramente tiene que ver con el vencimiento global de certificados que hubo el 30/09/2021.
Esto lo podes corregir desde la librería o es un tema de cada uno?
Si correcto yo lo tenia como e.message y luego comente eso para concentrarme en el problema pero no funciona como antes.
Puede ser que sea un problema solo de remarkets. Pude conectar configurando el metodo run_forever() del websocket configurando el parametro sslopt=None como:
sslopt={"cert_reqs": ssl.CERT_NONE}
previamente hay que hacer import ssl
Hola, me podras dar una mano, donde se pone esa configuración?
Enviado desde un dispositivo móvil
El 13 oct 2021, a la(s) 17:28, Aonik10 @.***> escribió:
Puede ser que sea un problema solo de remarkets. Pude conectar configurando el metodo run_forever() del websocket configurando el parametro sslopt=None como:
sslopt={"cert_reqs": ssl.CERT_NONE}
previamente hay que hacer import ssl
— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.
Busca dentro de la libreria pyRofex el archivo _app.py tiene una clase creada que se llama WebSocketApp(object). Ahi adentro tiene definido el metodo run_forever(), lo deje configurado asi:
def run_forever(self, sockopt=None, sslopt={"cert_reqs": ssl.CERT_NONE}, ping_interval=0, ping_timeout=None, http_proxy_host=None, http_proxy_port=None, http_no_proxy=None, http_proxy_auth=None, skip_utf8_validation=False, host=None, origin=None, dispatcher=None, suppress_origin=False, proxy_type=None)
Supongo que también podes buscar en donde es invocado el método y aclarar que corra con ese parámetro especifico, pero a mi me resulto mas rápido asi.
Abrz
Buenas,
Voy comentando algunas cosas:
1- Aonik10, fplanas27: por el problema del exception_handler(e)
, es correcto el objeto e no tiene un atributo message
, eso esta mal en uno de los ejemplos pero ya lo arregle. La forma correcta de la funcion seria:
def exception_handler(e):
print("Exception Occurred: {0}".format(e.msg))
2- Por el tema del error SSL: CERTIFICATE_VERIFY_FAILED, esto se debe a que al intentar establecer la conexion websocket el cliente entiende que el certificado del servidor esta vencido y falla. Me fije y el certificado de ese server es valido, lo que si vi es que lo renovaron el 28/09 por lo que por algun motivo desde donde estan ejecutando el codigo entiende que el certificado es el viejo y ya expiro. La verdad que no estoy seguro porque pasa esto pero entiendo que esa es la razon por la que desde mi computadora si me funciona y no me tira ese error.
Puedo pedirles que entren desde su navegador a: https://api.remarkets.primary.com.ar/
y me digan si les aparece como que el certificado del sitio esta vencido. Si les aparece como que el certificado esta vencido entonces hay que ver porque esta tomando el certificado viejo en sus computadoras. Por otro lado, lo que yo puedo hacer mientras es agregar una opcion en pyRofex para que te permita indicar si queres que valide el certificado o no al establecer la conexion websocket. Utilizando lo que comento Aonik10 sslopt={"cert_reqs": ssl.CERT_NONE}
Ahi probe y el certificado es valido: [image: image.png]
Federico Planas @.***
El mié, 20 oct 2021 a las 20:18, Franco Zanuso @.***>) escribió:
Buenas,
Voy comentando algunas cosas:
1- Aonik10, fplanas27: por el problema del exception_handler(e), es correcto el objeto e no tiene un atributo message, eso esta mal en uno de los ejemplos pero ya lo arregle. La forma correcta de la funcion seria:
def exception_handler(e): print("Exception Occurred: {0}".format(e.msg))
2- Por el tema del error SSL: CERTIFICATE_VERIFY_FAILED, esto se debe a que al intentar establecer la conexion websocket el cliente entiende que el certificado del servidor esta vencido y falla. Me fije y el certificado de ese server es valido, lo que si vi es que lo renovaron el 28/09 por lo que por algun motivo desde donde estan ejecutando el codigo entiende que el certificado es el viejo y ya expiro. La verdad que no estoy seguro porque pasa esto pero entiendo que esa es la razon por la que desde mi computadora si me funciona y no me tira ese error.
Puedo pedirles que entren desde su navegador a: https://api.remarkets.primary.com.ar/ y me digan si les aparece como que el certificado del sitio esta vencido. Si les aparece como que el certificado esta vencido entonces hay que ver porque esta tomando el certificado viejo en sus computadoras. Por otro lado, lo que yo puedo hacer mientras es agregar una opcion en pyRofex para que te permita indicar si queres que valide el certificado o no al establecer la conexion websocket. Utilizando lo que comento Aonik10 sslopt={"cert_reqs": ssl.CERT_NONE}
— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/matbarofex/pyRofex/issues/21#issuecomment-948106891, or unsubscribe https://github.com/notifications/unsubscribe-auth/ANMKY6QVCB53HMEHES3CVSLUH5E6FANCNFSM5FEWMXXA . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.
adjunto la imagen de mi comentario anterior.
En el codigo que estas ejecutando donde te tira el error. Podrias agregar al comienzo:
import ssl
import os
print(os.environ.get('WEBSOCKET_CLIENT_CA_BUNDLE'))
print(ssl.get_default_verify_paths())
Y me decis que te muestra.
fplanas27, ahi subi una version nueva para que pruebes con el cambio que te comente para poder indicar que no valide el certificado.
Tendrias que hacer:
pip install -U pyRofex==0.4.2rc1
y luego en el codigo:
pyRofex.initialize(user="fplanas5506",
password="XXXXXXX",
account="XXXXXXX",
environment=pyRofex.Environment.REMARKET,
ssl_opt={"cert_reqs": ssl.CERT_NONE})
Cuando puedas probalo y si te funciona, subo la version 0.4.2.
Abz
Ahi lo probe y me arroja el siguiente error:
import time
import pyRofex
pyRofex.initialize(user="fplanas5506", password="nralwT8&", account="REM5506", environment=pyRofex.Environment.REMARKET, ssl_opt={"cert_reqs": ssl.CERT_NONE})
def order_report_handler(message): print("Order Report Message Received: {0}".format(message))
def error_handler(message): print("Error Message Received: {0}".format(message))
""" def exception_handler(e): print("Exception Occurred: {0}".format(e.message)) """
pyRofex.init_websocket_connection(order_report_handler=order_report_handler, error_handler=error_handler) """ , exception_handler=exception_handler) """
pyRofex.order_report_subscription() Traceback (most recent call last):
File "
NameError: name 'ssl' is not defined
Federico Planas @.***
El mié, 20 oct 2021 a las 21:17, Franco Zanuso @.***>) escribió:
fplanas27, ahi subi una version nueva para que pruebes con el cambio que te comente para poder indicar que no valide el certificado.
Tendrias que hacer:
pip install -U pyRofex==0.4.2rc1
y luego en el codigo:
pyRofex.initialize(user="fplanas5506", password="XXXXXXX", account="XXXXXXX", environment=pyRofex.Environment.REMARKET, ssl_opt={"cert_reqs": ssl.CERT_NONE})
Cuando puedas probalo y si te funciona, subo la version 0.4.2.
Abz
— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/matbarofex/pyRofex/issues/21#issuecomment-948129477, or unsubscribe https://github.com/notifications/unsubscribe-auth/ANMKY6SAM2YNWVW4WFNEKDLUH5LYJANCNFSM5FEWMXXA . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.
fplanas27 hay que importar el paquete ssl al inicio
import ssl
Ahi anduvo perfecto.
Te agradezco.
Federico Planas @.***
El mié, 20 oct 2021 a las 22:53, Franco Zanuso @.***>) escribió:
fplanas27 hay que importar el paquete ssl al inicio
import ssl
— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/matbarofex/pyRofex/issues/21#issuecomment-948184580, or unsubscribe https://github.com/notifications/unsubscribe-auth/ANMKY6RT5KT3XW3XPX5FJR3UH5XARANCNFSM5FEWMXXA . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.
Hola, ahi probe con la version nueva incluyendo el parametro para evitar la validación, pero en el entorno LIVE no me toma ese parametro. Esto solo es para REMARKET?
Enviado desde un dispositivo móvil
El 20 oct 2021, a la(s) 21:17, Franco Zanuso @.***> escribió:
fplanas27, ahi subi una version nueva para que pruebes con el cambio que te comente para poder indicar que no valide el certificado.
Tendrias que hacer:
pip install -U pyRofex==0.4.2rc1
y luego en el codigo:
pyRofex.initialize(user="fplanas5506", password="XXXXXXX", account="XXXXXXX", environment=pyRofex.Environment.REMARKET, ssl_opt={"cert_reqs": ssl.CERT_NONE}) Cuando puedas probalo y si te funciona, subo la version 0.4.2.
Abz
— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.
Me faltaba actualizar el kernel, pero sigo recibiendo el error de certificado vencido...
Enviado desde un dispositivo móvil
El 20 oct 2021, a la(s) 23:27, fplanas27 @.***> escribió:
Ahi anduvo perfecto.
Te agradezco.
Federico Planas @.***
El mié, 20 oct 2021 a las 22:53, Franco Zanuso @.***>) escribió:
fplanas27 hay que importar el paquete ssl al inicio
import ssl
— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/matbarofex/pyRofex/issues/21#issuecomment-948184580, or unsubscribe https://github.com/notifications/unsubscribe-auth/ANMKY6RT5KT3XW3XPX5FJR3UH5XARANCNFSM5FEWMXXA . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.
— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.
Hola fzanuso, como estas? estoy volviendo a tener el mismo problema desde varias maquinas:
DefaultVerifyPaths(cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='C:\Program Files\Common Files\SSL/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='C:\Program Files\Common Files\SSL/certs') Traceback (most recent call last):
File "C:\Users\fplan\OneDrive\Documentos\Python Scripts\APIRofex\pyRofexWebsocketOrderReport.py", line 60, in
File "C:\Users\fplan\Anaconda3\envs\ISM\lib\site-packages\pyRofex\service.py", line 579, in order_report_subscription client.order_report_subscription(account, snapshot)
File "C:\Users\fplan\Anaconda3\envs\ISM\lib\site-packages\pyRofex\clients\websocket_rfx.py", line 264, in order_report_subscription self.ws_connection.send(message)
File "C:\Users\fplan\Anaconda3\envs\ISM\lib\site-packages\websocket_app.py", line 155, in send raise WebSocketConnectionClosedException(
WebSocketConnectionClosedException: Connection is already closed.
pip show pyRofex Name: pyRofex Version: 0.4.2rc1 Summary: Python connector for ROFEX's Rest and Websocket APIs. Home-page: https://github.com/gruporofex/pyRofex Author: Franco Zanuso Author-email: francozanuso89@gmail.com License: UNKNOWN Location: c:\users\fplan\anaconda3\envs\ism\lib\site-packages Requires: enum34, requests, simplejson, websocket-client Required-by: Note: you may need to restart the kernel to use updated packages.
Recibo el error ‘NoneType’ object has no attributte ‘connected’ al intentar suscribirme al websocket hasta el 29/09 anda perfectamente.