launchnotebook.py
63 lines
| 1.9 KiB
| text/x-python
|
PythonLexer
|
r13038 | """Base class for notebook tests.""" | ||
import sys | ||||
import time | ||||
|
r13045 | import requests | ||
|
r13038 | from subprocess import Popen, PIPE | ||
from unittest import TestCase | ||||
from IPython.utils.tempdir import TemporaryDirectory | ||||
class NotebookTestBase(TestCase): | ||||
"""A base class for tests that need a running notebook. | ||||
This creates an empty profile in a temp ipython_dir | ||||
and then starts the notebook server with a separate temp notebook_dir. | ||||
""" | ||||
|
r13044 | port = 1234 | ||
|
r13038 | |||
|
r13045 | def wait_till_alive(self): | ||
url = 'http://localhost:%i/' % self.port | ||||
while True: | ||||
time.sleep(.1) | ||||
try: | ||||
r = requests.get(url + 'api/notebooks') | ||||
break | ||||
except requests.exceptions.ConnectionError: | ||||
pass | ||||
def wait_till_dead(self): | ||||
url = 'http://localhost:%i/' % self.port | ||||
while True: | ||||
time.sleep(.1) | ||||
try: | ||||
r = requests.get(url + 'api/notebooks') | ||||
continue | ||||
except requests.exceptions.ConnectionError: | ||||
break | ||||
|
r13038 | def setUp(self): | ||
self.ipython_dir = TemporaryDirectory() | ||||
self.notebook_dir = TemporaryDirectory() | ||||
notebook_args = [ | ||||
sys.executable, '-c', | ||||
'from IPython.html.notebookapp import launch_new_instance; launch_new_instance()', | ||||
'--port=%d' % self.port, | ||||
'--no-browser', | ||||
'--ipython-dir=%s' % self.ipython_dir.name, | ||||
'--notebook-dir=%s' % self.notebook_dir.name | ||||
|
r13045 | ] | ||
|
r13038 | self.notebook = Popen(notebook_args, stdout=PIPE, stderr=PIPE) | ||
|
r13045 | self.wait_till_alive() | ||
#time.sleep(3.0) | ||||
|
r13038 | |||
def tearDown(self): | ||||
self.notebook.terminate() | ||||
self.ipython_dir.cleanup() | ||||
self.notebook_dir.cleanup() | ||||
|
r13045 | self.wait_till_dead() | ||
|
r13038 | def base_url(self): | ||
return 'http://localhost:%i/' % self.port | ||||