"""Base class for notebook tests.""" import sys import time import requests 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. """ port = 12341 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 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 ] self.notebook = Popen(notebook_args, stdout=PIPE, stderr=PIPE) self.wait_till_alive() def tearDown(self): self.notebook.terminate() self.ipython_dir.cleanup() self.notebook_dir.cleanup() self.wait_till_dead() def base_url(self): return 'http://localhost:%i/' % self.port