-
-
Save chrisseto/8f7289497f40ad442a30 to your computer and use it in GitHub Desktop.
from IPython.core.magic import Magics, magics_class, line_magic | |
import asyncio | |
@magics_class | |
class AsyncMagics(Magics): | |
@line_magic | |
def await(self, line): | |
return asyncio.get_event_loop().run_until_complete(eval(line, self.shell.user_global_ns, self.shell.user_ns)) | |
def load_ipython_extension(ipython): | |
ipython.register_magics(AsyncMagics) |
I wanted to be able to use it with concurrent.futures as well, and ended up with the following:
from IPython.core.magic import Magics, magics_class, line_magic
import asyncio
from concurrent.futures import Future
@magics_class
class AsyncMagics(Magics):
@line_magic
def await(self, line):
value = eval(line, self.shell.user_global_ns, self.shell.user_ns)
if isinstance(value, Future):
value = asyncio.wrap_future(value)
return asyncio.get_event_loop().run_until_complete(value)
def load_ipython_extension(ipython):
ipython.register_magics(AsyncMagics)
Could we make this pip installable, say as package "ipython-await-magics" (analogous to https://pypi.python.org/pypi/ipython-pip-magics)?
The reason I'm asking is because IPython deprecated %install_ext (ipython/ipython#8601). The recommended way of doing things is pip, apparently.
I would volunteer to do it. In that case, I guess you'd have to attach a license to await.py so I can use it.
(update: @chrisseto and @rickardraysearch, did you get notified about this?)
My ipython does not have %install_ext
, I had to copy it into ~/.ipython/extensions/await.py
. To autoload it on every start, you can set the following in the config file (probably ~/.ipython/profile_default/ipython_config.py
):
c = get_config()
c.InteractiveShellApp.extensions = [
'await'
]
Usage: