|
|
|
|
@ -23,32 +23,16 @@ import time
|
|
|
|
|
from io import BytesIO
|
|
|
|
|
from threading import Thread, Lock, Event
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
from unittest.mock import patch
|
|
|
|
|
except ImportError:
|
|
|
|
|
from mock import patch # py3
|
|
|
|
|
from unittest.mock import patch
|
|
|
|
|
|
|
|
|
|
from jupyter_core.paths import jupyter_runtime_dir
|
|
|
|
|
from ipython_genutils.py3compat import bytes_to_str, which
|
|
|
|
|
from notebook._sysinfo import get_sys_info
|
|
|
|
|
from ipython_genutils.tempdir import TemporaryDirectory
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
# Python >= 3.3
|
|
|
|
|
from subprocess import TimeoutExpired
|
|
|
|
|
def popen_wait(p, timeout):
|
|
|
|
|
return p.wait(timeout)
|
|
|
|
|
except ImportError:
|
|
|
|
|
class TimeoutExpired(Exception):
|
|
|
|
|
pass
|
|
|
|
|
def popen_wait(p, timeout):
|
|
|
|
|
"""backport of Popen.wait from Python 3"""
|
|
|
|
|
for i in range(int(10 * timeout)):
|
|
|
|
|
if p.poll() is not None:
|
|
|
|
|
return
|
|
|
|
|
time.sleep(0.1)
|
|
|
|
|
if p.poll() is None:
|
|
|
|
|
raise TimeoutExpired
|
|
|
|
|
from subprocess import TimeoutExpired
|
|
|
|
|
def popen_wait(p, timeout):
|
|
|
|
|
return p.wait(timeout)
|
|
|
|
|
|
|
|
|
|
NOTEBOOK_SHUTDOWN_TIMEOUT = 10
|
|
|
|
|
|
|
|
|
|
|