drivendataorg/nbautoexport

Cells with cell magic output the contents as a really long string!

Opened this issue · 2 comments

  • nbautoexport version: 0.5.0
  • Python version: 3.9.13
  • Operating System: Linux

Description

The output of cell with cell magic is a function call with a very long string! For instance look at this example output from the corresponding cell (cell number 15) from the notebook. The generated python script is hard to navigate/review!

If calling the run_cell_magic function is unavoidable, can at least the third argument be formatted to read somewhat like normal python source code (maybe using triple quote string)?


Here is a small example of the above behavior. For a notebook with two cells:

# Cell 1
import sys
print(sys.version)

and

# Cell 2
%%time
x = 1
print(x)

the script output is:

#!/usr/bin/env python
# coding: utf-8

import sys
print(sys.version)


get_ipython().run_cell_magic('time', '', 'x = 1\nprint(x)')

It would be tremendously helpful if the timed cell content appeared like printed python code.

jayqi commented

I think this is standard nbconvert behavior, which reflects how IPython cell magics actually work under the hood. If you wanted to run the converted code with IPython and have it work (including doing whatever the cell magics are supposed to do), this would be the correct code.

Agreed though that this is not very good for humans reading the script files, which is the main use case we have for nbautoexport.

This thread seems like a good starting place for finding information to customize nbconvert to get us what we want. In particular, this recent comment seems like it's for recent versions of nbconvert.

The recent comment indeed looks like a nice way to get this to work! Nice find @jayqi ! Given that nbautoexport depends on nbconvert maybe the install procedure for nbautoexport can create this small customization (a python function + jinja template + conf.json) as a part of default install or a custom install option? I think the bulk of what is needed to be done is in that comment but some of the edge cases will have to be included in tests (just to be sure).

The only problem with this is that running the notebook and the generated script won't be running the same code, as far as I understand it. This too will need to be checked/tested.