From f65ef3e7579e0de7b4d58bc0b8563e0bb7b8f123 Mon Sep 17 00:00:00 2001 From: allegroai <> Date: Fri, 10 Jan 2020 13:33:19 +0200 Subject: [PATCH] Support broken Jupyter version on some conda installations (SageMaker) --- .../backend_interface/task/repo/scriptinfo.py | 36 ++++++++++++++++--- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/trains/backend_interface/task/repo/scriptinfo.py b/trains/backend_interface/task/repo/scriptinfo.py index 8f5bf4ee..d3f7837a 100644 --- a/trains/backend_interface/task/repo/scriptinfo.py +++ b/trains/backend_interface/task/repo/scriptinfo.py @@ -326,10 +326,38 @@ class ScriptInfo(object): from notebook.notebookapp import list_running_servers import requests current_kernel = sys.argv[2].split(os.path.sep)[-1].replace('kernel-', '').replace('.json', '') - server_info = next(list_running_servers()) - r = requests.get( - url=server_info['url'] + 'api/sessions', - headers={'Authorization': 'token {}'.format(server_info.get('token', '')), }) + try: + server_info = next(list_running_servers()) + except Exception: + # on some jupyter notebook versions this function can crash on parsing the json file, + # we will parse it manually here + import ipykernel + from glob import glob + import json + for f in glob(os.path.join(os.path.dirname(ipykernel.get_connection_file()), 'nbserver-*.json')): + try: + with open(f, 'r') as json_data: + server_info = json.load(json_data) + except: + server_info = None + if server_info: + break + try: + r = requests.get( + url=server_info['url'] + 'api/sessions', + headers={'Authorization': 'token {}'.format(server_info.get('token', '')), }) + except requests.exceptions.SSLError: + # disable SSL check warning + from urllib3.exceptions import InsecureRequestWarning + requests.packages.urllib3.disable_warnings(category=InsecureRequestWarning) + # fire request + r = requests.get( + url=server_info['url'] + 'api/sessions', + headers={'Authorization': 'token {}'.format(server_info.get('token', '')), }, verify=False) + # enable SSL check warning + import warnings + warnings.simplefilter('default', InsecureRequestWarning) + r.raise_for_status() notebooks = r.json()