X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/6c2a704b7a2d721087976b2b8ec4f22cdaf44178..72d24b26cac507988ba6583064451b81d1854d78:/sdk/python/arvados/events.py diff --git a/sdk/python/arvados/events.py b/sdk/python/arvados/events.py index e61b20c708..b7d610d66e 100644 --- a/sdk/python/arvados/events.py +++ b/sdk/python/arvados/events.py @@ -6,6 +6,9 @@ import time import ssl import re import config +import logging + +_logger = logging.getLogger('arvados.events') class EventClient(WebSocketClient): def __init__(self, url, filters, on_event): @@ -26,8 +29,21 @@ class EventClient(WebSocketClient): def received_message(self, m): self.on_event(json.loads(str(m))) + def close_connection(self): + try: + self.sock.shutdown(socket.SHUT_RDWR) + self.sock.close() + except: + pass + def subscribe(api, filters, on_event): - url = "{}?api_token={}".format(api._rootDesc['websocketUrl'], config.get('ARVADOS_API_TOKEN')) - ws = EventClient(url, filters, on_event) - ws.connect() - return ws + ws = None + try: + url = "{}?api_token={}".format(api._rootDesc['websocketUrl'], config.get('ARVADOS_API_TOKEN')) + ws = EventClient(url, filters, on_event) + ws.connect() + return ws + except Exception: + if (ws): + ws.close_connection() + raise