Accessing get_ipython() within an embedded shell

Jacob Vanderplas <[email protected]> Tue, 10 Apr 2018 01:41:58 -0400
Newsgroups gmane.comp.python.ipython.devel
Message-ID <CACpqBg3CiYqt=LqtgZrg_MJNsKOztA4ojYKcexOcfECJ8DMkQg@mail.gmail.com>
--===============1804793092768605126==
Content-Type: multipart/alternative; boundary="94eb2c0e40962885bb056977fbb8"

--94eb2c0e40962885bb056977fbb8
Content-Type: text/plain; charset="UTF-8"

I'm trying to create automated tests for some magic functions within a
pytest framework. I've figured out how to do part of what I need using an
embedded interactive shell; briefly, I do something like this:

from IPython.terminal.embed import InteractiveShellEmbed
ipshell = InteractiveShellEmbed()
out = ipshell.run_cell("%my_magic_command")
assert out.result == expected_result

The problem I encounter is that my magic function optionally uses IPython
.get_ipython().user_ns to access variables in the user namespace, and
IPython.get_ipython() returns None when run within an embedded shell in
this way.

Is there a way to create a simple embedded shell like this one that will
behave as if it is an actual IPython shell, with IPython.get_ipython()
defined?

Thanks,

  Jake

--94eb2c0e40962885bb056977fbb8
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div><div style=3D"color:rgb(34,34,34);font-family:arial,s=
ans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;=
font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:s=
tart;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0p=
x;background-color:rgb(255,255,255);text-decoration-style:initial;text-deco=
ration-color:initial"><span style=3D"font-size:12.8px">I&#39;m trying to cr=
eate automated tests for some magic functions within a pytest framework</sp=
an><span style=3D"font-size:12.8px">. I&#39;ve figured out how to do part o=
f what I need using an embedded interactive shell; briefly, I do something =
like this:</span></div><div style=3D"color:rgb(34,34,34);font-family:arial,=
sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal=
;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:=
start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0=
px;background-color:rgb(255,255,255);text-decoration-style:initial;text-dec=
oration-color:initial"><br></div><div style=3D"color:rgb(34,34,34);font-fam=
ily:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatu=
res:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;t=
ext-align:start;text-indent:0px;text-transform:none;white-space:normal;word=
-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initia=
l;text-decoration-color:initial"><div><font face=3D"monospace, monospace">f=
rom<span>=C2=A0</span><span class=3D"gmail-il">IPython</span>.terminal.embe=
d import InteractiveShellEmbed</font></div><div><font face=3D"monospace, mo=
nospace">ipshell =3D InteractiveShellEmbed()</font></div><div><font face=3D=
"monospace, monospace">out =3D ipshell.run_cell(&quot;%my_magic_<wbr>comman=
d&quot;)</font></div><div><font face=3D"monospace, monospace">assert out.re=
sult =3D=3D expected_result</font></div></div><div style=3D"color:rgb(34,34=
,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-v=
ariant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spa=
cing:normal;text-align:start;text-indent:0px;text-transform:none;white-spac=
e:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration=
-style:initial;text-decoration-color:initial"><font face=3D"monospace, mono=
space"><br></font></div><div style=3D"color:rgb(34,34,34);font-family:arial=
,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:norma=
l;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align=
:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:=
0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-de=
coration-color:initial"><font face=3D"arial, helvetica, sans-serif">The pro=
blem I encounter is that my magic function optionally uses=C2=A0</font><fon=
t face=3D"monospace, monospace"><span class=3D"gmail-il">IPython</span>.get=
_ipython().<wbr>user_ns</font><font face=3D"arial, helvetica, sans-serif"><=
span>=C2=A0</span>to access variables in the user namespace, and<span>=C2=
=A0</span></font><font face=3D"monospace, monospace"><span class=3D"gmail-i=
l">IPython</span>.get_ipython()</font><font face=3D"arial, helvetica, sans-=
serif"><span>=C2=A0</span>returns<span>=C2=A0</span></font><font face=3D"mo=
nospace, monospace">None=C2=A0</font><font face=3D"arial, helvetica, sans-s=
erif">when run within an embedded shell in this way.</font></div><div style=
=3D"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-=
style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-we=
ight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transf=
orm:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,2=
55);text-decoration-style:initial;text-decoration-color:initial"><font face=
=3D"arial, helvetica, sans-serif"><br></font></div><div style=3D"color:rgb(=
34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;f=
ont-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;lette=
r-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white=
-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decor=
ation-style:initial;text-decoration-color:initial"><font face=3D"arial, hel=
vetica, sans-serif">Is there a way to create a simple embedded shell like t=
his one that will behave as if it is an actual<span>=C2=A0</span><span clas=
s=3D"gmail-il">IPython</span><span>=C2=A0</span>shell, with<span>=C2=A0</sp=
an></font><font face=3D"monospace, monospace"><span class=3D"gmail-il">IPyt=
hon</span>.get_ipython()</font><font face=3D"arial, helvetica, sans-serif">=
<span>=C2=A0</span>defined?</font></div><div style=3D"color:rgb(34,34,34);f=
ont-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant=
-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:n=
ormal;text-align:start;text-indent:0px;text-transform:none;white-space:norm=
al;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style=
:initial;text-decoration-color:initial"><font face=3D"arial, helvetica, san=
s-serif"><br></font></div><div style=3D"color:rgb(34,34,34);font-family:ari=
al,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:nor=
mal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-ali=
gn:start;text-indent:0px;text-transform:none;white-space:normal;word-spacin=
g:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-=
decoration-color:initial"><font face=3D"arial, helvetica, sans-serif">Thank=
s,</font></div><div style=3D"color:rgb(34,34,34);font-family:arial,sans-ser=
if;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-va=
riant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;te=
xt-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;backg=
round-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-=
color:initial"><font face=3D"arial, helvetica, sans-serif"><br></font></div=
><div style=3D"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:1=
2.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:nor=
mal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;=
text-transform:none;white-space:normal;word-spacing:0px;background-color:rg=
b(255,255,255);text-decoration-style:initial;text-decoration-color:initial"=
><font face=3D"arial, helvetica, sans-serif">=C2=A0 Jake</font></div></div>
</div>

--94eb2c0e40962885bb056977fbb8--

--===============1804793092768605126==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
IPython-dev mailing list
[email protected]
https://mail.python.org/mailman/listinfo/ipython-dev

--===============1804793092768605126==--