[IPython-dev] Making custom converter/template with nbconvert

Rafał Skolasiński rjtskolasinski at gmail.com
Thu Dec 18 11:58:39 EST 2014


Hi guys,

Thanks for extensive response!

In my output there is not need to be any imports. Output files will be only
htmls to be put into edX course.

The need of splitting notebook into few output files comes from making it
as friendly as possible to creators of the course content.
In principle they could write every unit in a separate notebook - but,
because units together build a subsection of the course which describes one
topic, it's more convenient to write them in one notebooks and separate by
the largest headings.

I tested how converting to html, that is already provided in nbconvert, is
accepted by edX and it went quite well. I only needed to change two things
in the output file ( change path to the folders with figures and remove
'end of paragraph' symbol ) .


In this situation maybe what Matthias proposed is a way to go:


> that's up to how you want to design your exporter.
> You can either have a preprocessor that split the notebooks in chunks and
> do the conversion after.
> So virtually running nbconvert N times on n chucks of the notebook.
>


Then for example I could have in the notebook to export sth like that:

<Heading 1 cell> first_unit_name </Heading 1 cell>

Cells with stuff for first unit


<Heading 2 cell> second_unit_name </Heading 2 cell>

Cells with stuff for second unit

etc...

And with the output I would see first_unit_name.html and
second_unit_name.html
where content of each of them would look like it would be created only from
notebook
containing cells with corresponding content.


Later I would like for example kick out every cells with python code
leaving only their output (but this is for a later stage of development,
after having the splitting going well).





Oh, I have one question about the preprocessors. I found little old post
https://blog.safaribooksonline.com/2013/12/18/ipython-notebook-plugins/
about how to write custom plugins to nbconvert. Despite the fact that
Jonathan was using transformers instead of preprocessors it worked when I
changed config file only from:

C = get_config()
c.Exporter.transformers = [‘exclude_transformer.ExcludeTransformer’]

to:
c = get_config()
c.Exporter.preprocessors = ["exclude_transformer.ExcludeTransformer"]



But when I tried to change usage of Transformer into Preprocessor:
from http://pastebin.com/rQufqzUr into http://pastebin.com/Q8mgaYAJ

(correcting ofc line in config into c.Exporter.preprocessors =
["exclude_preprocessor.ExcludePreprocessor"])

I got the following error: http://pastebin.com/MSAHR2PP

Any idea why?


Oh... And one more question :). While writing some code I love to test
things interactively (this is why I loved ipython so much).
Is there any easy way to play in ipython notebook with other notebook that
goes as argument into all converter arguments?

Like I would like to see by hand what every worksheet in code like here
http://pastebin.com/rQufqzUr contains.


Best,
Rafal



> Should my custom exporter class inherit from a TemplateExporter? Or maybe
> separation into files should happen at this level?
>
>
> You are not obliged to, but I think you should at least inherit Exporter
> if you like your custom one to be accepted by nbconvert.
> The architecture is not really meant to export into many files, except
>  for the resources file (Png, Svg) that do into a separate folder.
>
> If you write your custom writer then your Exporter can most likely produce
> many file that would be written at once.
>
>
> And last, once I will have my exporter class will it be enough to specify
> which exporter should be used in config file and provide config to
> nbconvert via --config mycfg.py ?
>
>
> Yes that should be enough., any trait lets of your custom class should be
> automatically set to the value of the config.
>
>
> Thanks for all your help!
>
>
> Feel free to send us feedback on what you think of the APi or what
> limitation there is.
>
> Thanks !
>
> --
> M
>
>
>
> Best,
> Rafal
>
> P.S. If there are any useful guides or FAQs about writing custom
> converters that would be very helpful. I looked for some on my own but
> didn't have much luck.
>
> 2014-12-16 23:13 GMT+01:00 Thomas Kluyver <takowl at gmail.com>:
>>
>> Hi Rafał,
>>
>> On 16 December 2014 at 13:40, Rafał Skolasiński <rjtskolasinski at gmail.com
>> > wrote:
>>
>>> Unfortunately each unit must go into separate html file and here comes
>>> my first question: what is the easiest way to force nbconverter to export
>>> one notebook into few html files (let's say Heading 1 will start every unit
>>> and at the same time will be the name of it)?
>>
>>
>> I think you will need to make a custom exporter - nbconvert supports
>> different output formats with exporter classes, which you can find here:
>> https://github.com/ipython/ipython/tree/master/IPython/nbconvert/exporters
>>
>> Your case will be a bit trickier than most of those examples, because all
>> the TemplateExporter subclasses assume that they are writing a single main
>> output file. But there's no reason that an exporter class couldn't write
>> several files from one notebook.
>>
>> Thomas
>>
>> _______________________________________________
>> IPython-dev mailing list
>> IPython-dev at scipy.org
>> http://mail.scipy.org/mailman/listinfo/ipython-dev
>>
>> _______________________________________________
> IPython-dev mailing list
> IPython-dev at scipy.org
> http://mail.scipy.org/mailman/listinfo/ipython-dev
>
>
>
> _______________________________________________
> IPython-dev mailing list
> IPython-dev at scipy.org
> http://mail.scipy.org/mailman/listinfo/ipython-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/ipython-dev/attachments/20141218/40da4623/attachment.html>


More information about the IPython-dev mailing list