def test_video_embedding(): """use a tempfile, with dummy-data, to ensure that video embedding doesn't crash""" v = display.Video("http://ignored") assert not v.embed html = v._repr_html_() nt.assert_not_in('src="data:', html) nt.assert_in('src="http://ignored"', html) with nt.assert_raises(ValueError): v = display.Video(b'abc') with NamedFileInTemporaryDirectory('test.mp4') as f: f.write(b'abc') f.close() v = display.Video(f.name) assert not v.embed html = v._repr_html_() nt.assert_not_in('src="data:', html) v = display.Video(f.name, embed=True) html = v._repr_html_() nt.assert_in('src="data:video/mp4;base64,YWJj"', html) v = display.Video(f.name, embed=True, mimetype='video/other') html = v._repr_html_() nt.assert_in('src="data:video/other;base64,YWJj"', html) v = display.Video(b'abc', embed=True, mimetype='video/mp4') html = v._repr_html_() nt.assert_in('src="data:video/mp4;base64,YWJj"', html) v = display.Video(u'YWJj', embed=True, mimetype='video/xyz') html = v._repr_html_() nt.assert_in('src="data:video/xyz;base64,YWJj"', html)
def test_ipython_embed(): """test that `IPython.embed()` works""" with NamedFileInTemporaryDirectory('file_with_embed.py') as f: f.write(_sample_embed) f.flush() f.close() # otherwise msft won't be able to read the file # run `python file_with_embed.py` cmd = [sys.executable, f.name] env = os.environ.copy() env['IPY_TEST_SIMPLE_PROMPT'] = '1' p = subprocess.Popen(cmd, env=env, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) out, err = p.communicate(_exit) std = out.decode('UTF-8') assert p.returncode == 0 assert "3 . 14" in std if os.name != "nt": # TODO: Fix up our different stdout references, see issue gh-14 assert "IPython" in std assert "bye!" in std
def test_named_file_in_temporary_directory(): with NamedFileInTemporaryDirectory('filename') as file: name = file.name assert not file.closed assert os.path.exists(name) file.write(b'test') assert file.closed assert not os.path.exists(name)
def handle_image_tempfile(self, data, mime): raw = base64.decodestring(data[mime].encode('ascii')) imageformat = self._imagemime[mime] filename = 'tmp.{0}'.format(imageformat) with NamedFileInTemporaryDirectory(filename) as f, \ open(os.devnull, 'w') as devnull: f.write(raw) f.flush() fmt = dict(file=f.name, format=imageformat) args = [s.format(**fmt) for s in self.tempfile_image_handler] subprocess.call(args, stdout=devnull, stderr=devnull)
def test_ipython_embed(): """test that `IPython.embed()` works""" with NamedFileInTemporaryDirectory('file_with_embed.py') as f: f.write(_sample_embed) f.flush() f.close() # otherwise msft won't be able to read the file # run `python file_with_embed.py` cmd = [sys.executable, f.name] out, p = process_handler(cmd, lambda p: (p.communicate(_exit), p)) std = out[0].decode('UTF-8') nt.assert_equal(p.returncode, 0) nt.assert_in('3 . 14', std) if os.name != 'nt': # TODO: Fix up our different stdout references, see issue gh-14 nt.assert_in('IPython', std) nt.assert_in('bye!', std)
def test_ipython_embed1(self): with NamedFileInTemporaryDirectory('file_with_embed.py') as f: f.write(_sample_embed_ips1) f.flush() f.close() # otherwise msft won't be able to read the file # run `python file_with_embed.py` cmd = [sys.executable, f.name] env = os.environ.copy() env['IPY_TEST_SIMPLE_PROMPT'] = '1' p = subprocess.Popen(cmd, env=env, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) out, err = p.communicate(_exit) std = out.decode('UTF-8') self.assertEqual(p.returncode, 0) self.assertIn('3 . 14', std) self.assertIn('IPython', std) self.assertIn('bye!', std)
def test_ipython_embed2(self): with NamedFileInTemporaryDirectory('file_with_embed.py') as f: f.write(_sample_embed_ips2) f.flush() f.close() # otherwise msft won't be able to read the file fname = f.name # run `python file_with_embed.py` cmd1 = [sys.executable, fname, "1.0"] env = os.environ.copy() env['IPY_TEST_SIMPLE_PROMPT'] = '1' p = subprocess.Popen(cmd1, env=env, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) # expected output (including control chars for colors etc) # noinspection PyPep8 eout1 = b"\n\x1b[1;32m/tmp/tmpdir/filename.py\x1b[0m in \x1b[0;36m<module>\x1b[1;34m\x1b[0m\n\x1b[1;32m---> 37\x1b[1;33m \x1b[0mf3\x1b[0m\x1b[1;33m(\x1b[0m\x1b[0marg\x1b[0m\x1b[1;33m)\x1b[0m\x1b[1;33m\x1b[0m\x1b[0m\n\x1b[0m\n\x1b[1;32m/tmp/tmpdir/filename.py\x1b[0m in \x1b[0;36mf3\x1b[1;34m(x)\x1b[0m\n\x1b[1;32m---> 31\x1b[1;33m \x1b[0mf2\x1b[0m\x1b[1;33m(\x1b[0m\x1b[0mx\x1b[0m\x1b[1;33m)\x1b[0m\x1b[1;33m\x1b[0m\x1b[0m\n\x1b[0m\n\x1b[1;32m/tmp/tmpdir/filename.py\x1b[0m in \x1b[0;36mf2\x1b[1;34m(x)\x1b[0m\n\x1b[1;32m---> 23\x1b[1;33m \x1b[0mf1\x1b[0m\x1b[1;33m(\x1b[0m\x1b[0mx\x1b[0m\x1b[1;33m+\x1b[0m\x1b[1;36m1\x1b[0m\x1b[1;33m)\x1b[0m\x1b[1;33m\x1b[0m\x1b[0m\n\x1b[0m\n\x1b[1;32m/tmp/tmpdir/filename.py\x1b[0m in \x1b[0;36mf1\x1b[1;34m(x)\x1b[0m\n\x1b[1;32m---> 18\x1b[1;33m \x1b[0mf2\x1b[0m\x1b[1;33m(\x1b[0m\x1b[0mx\x1b[0m\x1b[1;33m)\x1b[0m\x1b[1;33m\x1b[0m\x1b[0m\n\x1b[0m\n\x1b[1;32m/tmp/tmpdir/filename.py\x1b[0m in \x1b[0;36mf2\x1b[1;34m(x)\x1b[0m\n\x1b[1;32m---> 23\x1b[1;33m \x1b[0mf1\x1b[0m\x1b[1;33m(\x1b[0m\x1b[0mx\x1b[0m\x1b[1;33m+\x1b[0m\x1b[1;36m1\x1b[0m\x1b[1;33m)\x1b[0m\x1b[1;33m\x1b[0m\x1b[0m\n\x1b[0m\n\x1b[1;32m/tmp/tmpdir/filename.py\x1b[0m in \x1b[0;36mf1\x1b[1;34m(x)\x1b[0m\n\x1b[1;32m---> 18\x1b[1;33m \x1b[0mf2\x1b[0m\x1b[1;33m(\x1b[0m\x1b[0mx\x1b[0m\x1b[1;33m)\x1b[0m\x1b[1;33m\x1b[0m\x1b[0m\n\x1b[0m\n\x1b[1;32m/tmp/tmpdir/filename.py\x1b[0m in \x1b[0;36mf2\x1b[1;34m(x)\x1b[0m\n\x1b[1;32m---> 23\x1b[1;33m \x1b[0mf1\x1b[0m\x1b[1;33m(\x1b[0m\x1b[0mx\x1b[0m\x1b[1;33m+\x1b[0m\x1b[1;36m1\x1b[0m\x1b[1;33m)\x1b[0m\x1b[1;33m\x1b[0m\x1b[0m\n\x1b[0m\n\x1b[1;32m/tmp/tmpdir/filename.py\x1b[0m in \x1b[0;36mf1\x1b[1;34m(x)\x1b[0m\n\x1b[1;32m---> 18\x1b[1;33m \x1b[0mf2\x1b[0m\x1b[1;33m(\x1b[0m\x1b[0mx\x1b[0m\x1b[1;33m)\x1b[0m\x1b[1;33m\x1b[0m\x1b[0m\n\x1b[0m\n\x1b[1;32m/tmp/tmpdir/filename.py\x1b[0m in \x1b[0;36mf2\x1b[1;34m(x)\x1b[0m\n\x1b[1;32m---> 23\x1b[1;33m \x1b[0mf1\x1b[0m\x1b[1;33m(\x1b[0m\x1b[0mx\x1b[0m\x1b[1;33m+\x1b[0m\x1b[1;36m1\x1b[0m\x1b[1;33m)\x1b[0m\x1b[1;33m\x1b[0m\x1b[0m\n\x1b[0m\n\x1b[1;32m/tmp/tmpdir/filename.py\x1b[0m in \x1b[0;36mf1\x1b[1;34m(x)\x1b[0m\n\x1b[0;32m 13\x1b[0m \x1b[1;36m1\x1b[0m\x1b[1;33m/\x1b[0m\x1b[1;36m0\x1b[0m\x1b[1;33m\x1b[0m\x1b[0m\n\x1b[0;32m 14\x1b[0m \x1b[1;32melif\x1b[0m \x1b[0mx\x1b[0m \x1b[1;33m>\x1b[0m \x1b[1;36m4\x1b[0m\x1b[1;33m:\x1b[0m\x1b[1;33m\x1b[0m\x1b[0m\n\x1b[0;32m 15\x1b[0m \x1b[1;31m# call interactive IPython\x1b[0m\x1b[1;33m\x1b[0m\x1b[1;33m\x1b[0m\x1b[0m\n\x1b[1;32m---> 16\x1b[1;33m \x1b[0mIPS\x1b[0m\x1b[1;33m(\x1b[0m\x1b[1;33m)\x1b[0m\x1b[1;33m\x1b[0m\x1b[0m\n\x1b[0m\x1b[0;32m 17\x1b[0m \x1b[1;32melse\x1b[0m\x1b[1;33m:\x1b[0m\x1b[1;33m\x1b[0m\x1b[0m\n\x1b[0;32m 18\x1b[0m \x1b[0mf2\x1b[0m\x1b[1;33m(\x1b[0m\x1b[0mx\x1b[0m\x1b[1;33m)\x1b[0m\x1b[1;33m\x1b[0m\x1b[0m\n\x1b[0;32m 19\x1b[0m \x1b[1;33m\x1b[0m\x1b[0m" out, err = p.communicate(_exit) out_adapted = perform_replacements(out, fname) # hotfix for some compatibility problem !! self.assertIn(eout1[:140], out_adapted) cmd2 = [sys.executable, fname, "1.5"] p = pexpect.spawn(sys.executable, [fname, "1.5"], env=env) p.expect(ipy_prompt) out_a = get_adapted_out(p, fname) # this is good to get an overview over calling history # print(out_a.decode()) # here an ZeroDivision error is intentionally raised and provokes an IPython shell to start # we test, whether this shell displays all expected informations and behaves as we want eout = b'x= 2.5\r\nx= 3.5\r\n\r\n\r\n\x1b[1;31m---------------------------------------------------------------------------\x1b[0m\r\n\x1b[1;31mZeroDivisionError\x1b[0m Traceback (most recent call last)\r\n\x1b[1;32m/tmp/tmpdir/filename.py\x1b[0m in \x1b[0;36m<module>\x1b[1;34m\x1b[0m\r\n\x1b[0;32m 35\x1b[0m \x1b[1;31m# arg == 1.0 -> IPS\x1b[0m\x1b[1;33m\x1b[0m\x1b[1;33m\x1b[0m\x1b[0m\r\n\x1b[0;32m 36\x1b[0m \x1b[1;33m\x1b[0m\x1b[0m\r\n\x1b[1;32m---> 37\x1b[1;33m \x1b[0mf3\x1b[0m\x1b[1;33m(\x1b[0m\x1b[0marg\x1b[0m\x1b[1;33m)\x1b[0m\x1b[1;33m\x1b[0m\x1b[0m\r\n\x1b[0m\x1b[0;32m 38\x1b[0m \x1b[1;33m\x1b[0m\x1b[0m\r\n\r\n\x1b[1;32m/tmp/tmpdir/filename.py\x1b[0m in \x1b[0;36mf3\x1b[1;34m(x)\x1b[0m\r\n\x1b[0;32m 29\x1b[0m \x1b[0mb\x1b[0m \x1b[1;33m=\x1b[0m \x1b[1;33m[\x1b[0m\x1b[1;36m1\x1b[0m\x1b[1;33m,\x1b[0m \x1b[1;36m3\x1b[0m\x1b[1;33m]\x1b[0m\x1b[1;33m\x1b[0m\x1b[0m\r\n\x1b[0;32m 30\x1b[0m \x1b[1;33m\x1b[0m\x1b[0m\r\n\x1b[1;32m---> 31\x1b[1;33m \x1b[0mf2\x1b[0m\x1b[1;33m(\x1b[0m\x1b[0mx\x1b[0m\x1b[1;33m)\x1b[0m\x1b[1;33m\x1b[0m\x1b[0m\r\n\x1b[0m\x1b[0;32m 32\x1b[0m \x1b[1;33m\x1b[0m\x1b[0m\r\n\x1b[0;32m 33\x1b[0m \x1b[0marg\x1b[0m \x1b[1;33m=\x1b[0m \x1b[0mfloat\x1b[0m\x1b[1;33m(\x1b[0m\x1b[0msys\x1b[0m\x1b[1;33m.\x1b[0m\x1b[0margv\x1b[0m\x1b[1;33m[\x1b[0m\x1b[1;36m1\x1b[0m\x1b[1;33m]\x1b[0m\x1b[1;33m)\x1b[0m\x1b[1;33m\x1b[0m\x1b[0m\r\n\r\n\x1b[1;32m/tmp/tmpdir/filename.py\x1b[0m in \x1b[0;36mf2\x1b[1;34m(x)\x1b[0m\r\n\x1b[0;32m 21\x1b[0m \x1b[1;32mdef\x1b[0m \x1b[0mf2\x1b[0m\x1b[1;33m(\x1b[0m\x1b[0mx\x1b[0m\x1b[1;33m)\x1b[0m\x1b[1;33m:\x1b[0m\x1b[1;33m\x1b[0m\x1b[0m\r\n\x1b[0;32m 22\x1b[0m \x1b[0mname\x1b[0m \x1b[1;33m=\x1b[0m \x1b[1;34m"f2"\x1b[0m\x1b[1;33m\x1b[0m\x1b[0m\r\n\x1b[1;32m---> 23\x1b[1;33m \x1b[0mf1\x1b[0m\x1b[1;33m(\x1b[0m\x1b[0mx\x1b[0m\x1b[1;33m+\x1b[0m\x1b[1;36m1\x1b[0m\x1b[1;33m)\x1b[0m\x1b[1;33m\x1b[0m\x1b[0m\r\n\x1b[0m\x1b[0;32m 24\x1b[0m \x1b[1;33m\x1b[0m\x1b[0m\r\n\x1b[0;32m 25\x1b[0m \x1b[1;33m\x1b[0m\x1b[0m\r\n\r\n\x1b[1;32m/tmp/tmpdir/filename.py\x1b[0m in \x1b[0;36mf1\x1b[1;34m(x)\x1b[0m\r\n\x1b[0;32m 16\x1b[0m \x1b[0mIPS\x1b[0m\x1b[1;33m(\x1b[0m\x1b[1;33m)\x1b[0m\x1b[1;33m\x1b[0m\x1b[0m\r\n\x1b[0;32m 17\x1b[0m \x1b[1;32melse\x1b[0m\x1b[1;33m:\x1b[0m\x1b[1;33m\x1b[0m\x1b[0m\r\n\x1b[1;32m---> 18\x1b[1;33m \x1b[0mf2\x1b[0m\x1b[1;33m(\x1b[0m\x1b[0mx\x1b[0m\x1b[1;33m)\x1b[0m\x1b[1;33m\x1b[0m\x1b[0m\r\n\x1b[0m\x1b[0;32m 19\x1b[0m \x1b[1;33m\x1b[0m\x1b[0m\r\n\x1b[0;32m 20\x1b[0m \x1b[1;33m\x1b[0m\x1b[0m\r\n\r\n\x1b[1;32m/tmp/tmpdir/filename.py\x1b[0m in \x1b[0;36mf2\x1b[1;34m(x)\x1b[0m\r\n\x1b[0;32m 21\x1b[0m \x1b[1;32mdef\x1b[0m \x1b[0mf2\x1b[0m\x1b[1;33m(\x1b[0m\x1b[0mx\x1b[0m\x1b[1;33m)\x1b[0m\x1b[1;33m:\x1b[0m\x1b[1;33m\x1b[0m\x1b[0m\r\n\x1b[0;32m 22\x1b[0m \x1b[0mname\x1b[0m \x1b[1;33m=\x1b[0m \x1b[1;34m"f2"\x1b[0m\x1b[1;33m\x1b[0m\x1b[0m\r\n\x1b[1;32m---> 23\x1b[1;33m \x1b[0mf1\x1b[0m\x1b[1;33m(\x1b[0m\x1b[0mx\x1b[0m\x1b[1;33m+\x1b[0m\x1b[1;36m1\x1b[0m\x1b[1;33m)\x1b[0m\x1b[1;33m\x1b[0m\x1b[0m\r\n\x1b[0m\x1b[0;32m 24\x1b[0m \x1b[1;33m\x1b[0m\x1b[0m\r\n\x1b[0;32m 25\x1b[0m \x1b[1;33m\x1b[0m\x1b[0m\r\n\r\n\x1b[1;32m/tmp/tmpdir/filename.py\x1b[0m in \x1b[0;36mf1\x1b[1;34m(x)\x1b[0m\r\n\x1b[0;32m 11\x1b[0m \x1b[1;32mif\x1b[0m \x1b[0mx\x1b[0m \x1b[1;33m==\x1b[0m \x1b[1;36m3.5\x1b[0m\x1b[1;33m:\x1b[0m\x1b[1;33m\x1b[0m\x1b[0m\r\n\x1b[0;32m 12\x1b[0m \x1b[1;31m# provoke an exception\x1b[0m\x1b[1;33m\x1b[0m\x1b[1;33m\x1b[0m\x1b[0m\r\n\x1b[1;32m---> 13\x1b[1;33m \x1b[1;36m1\x1b[0m\x1b[1;33m/\x1b[0m\x1b[1;36m0\x1b[0m\x1b[1;33m\x1b[0m\x1b[0m\r\n\x1b[0m\x1b[0;32m 14\x1b[0m \x1b[1;32melif\x1b[0m \x1b[0mx\x1b[0m \x1b[1;33m>\x1b[0m \x1b[1;36m4\x1b[0m\x1b[1;33m:\x1b[0m\x1b[1;33m\x1b[0m\x1b[0m\r\n\x1b[0;32m 15\x1b[0m \x1b[1;31m# call interactive IPython\x1b[0m\x1b[1;33m\x1b[0m\x1b[1;33m\x1b[0m\x1b[0m\r\n\r\n\x1b[1;31mZeroDivisionError\x1b[0m: division by zero\r\n' # hotfix for some compatibility problem !! self.assertIn(eout[:330], out_a) out_a = ipy_io(p, fname, "print('func =', name)\n") self.assertIn(b"func = f1", out_a) out_a = ipy_io(p, fname, "print('x =', x)\n") self.assertIn(b"x = 3.5", out_a) # test to perform some variable definitions ipy_io(p, fname, "y = 23.1\n") out_a = ipy_io(p, fname, "print('y =', y)\n") self.assertIn(b"y = 23.1", out_a) ipy_io(p, fname, "y = -25.1\n") out_a = ipy_io(p, fname, "print('y =', y)\n") self.assertIn(b"y = -25.1", out_a) # move one frame up ipy_io(p, fname, "__mu = 1\n") out_a = ipy_io(p, fname, "exit()\n") out_a = ipy_io(p, fname, "print('func =', name)\n") self.assertIn(b"func = f2", out_a) out_a = ipy_io(p, fname, "print('x =', x)\n") self.assertIn(b"x = 2.5", out_a) # move one frame up -> again to f1 ipy_io(p, fname, "__mu = 1\n") out_a = ipy_io(p, fname, "exit()\n") out_a = ipy_io(p, fname, "print('func =', name)\n") self.assertIn(b"func = f1", out_a) ipy_io(p, fname, "z = 789\n") # move two frames up ipy_io(p, fname, "__mu = 2\n") out_a = ipy_io(p, fname, "exit()\n") out_a = ipy_io(p, fname, "print('func =', name)\n") self.assertIn(b"func = f3", out_a) # test of local variable in namespace of f3 out_a = ipy_io(p, fname, "print('b:', b == [1, 3])\n") self.assertIn(b"b: True", out_a) # move two frames down -> f1 with x = 2.5 ipy_io(p, fname, "__mu = -2\n") out_a = ipy_io(p, fname, "exit()\n") out_a = ipy_io(p, fname, "print('func =', name)\n") self.assertIn(b"func = f1", out_a) out_a = ipy_io(p, fname, "print('x =', x)\n") self.assertIn(b"x = 2.5", out_a) # check that this is the namespace which we had already visited above out_a = ipy_io(p, fname, "print('z =', z)\n") self.assertIn(b"z = 789", out_a)