Skip to main content

Auto run certain cells upon notebook start - if trusted

Project description

notebook-autorun
================

| This is a Python package to allow auto-run of certains cells in a
`Jupyter
notebook <http://jupyter-notebook-beginner-guide.readthedocs.io/en/latest/what_is_jupyter.html>`__
at kernel start.
| For security reasons it only works in `**trusted**
notebooks <http://jupyter-notebook.readthedocs.io/en/stable/security.html#security-in-notebook-documents>`__.

1 - Install
-----------

From terminal:

.. code:: bash

pip install notebook_autorun

2 - User Guide
--------------

In a notebook cell:

.. code:: python

from notebook_autorun import Autorun
# example
cells = [2, 3]
Autorun(cells=cells).add_js()
# (0-indexed) cells 2, 3 will be run at notebook start

| This will inject javascript code (in the output cell) which will react
on the next ``kernel_ready.Kernel`` event (i.e. at notebook start or
kernel restart) to execute the selected cells.
| This event is described in `Jupyter Javascript Events documentation
page <http://jupyter.readthedocs.io/en/latest/development_guide/js_events.html>`__.
While this page is outdated in some respects, it appears still valid
about the ``kernel_ready.Kernel`` event.

To rid the notebook of the autorun features just clear the output cell.

For more complete examples, see the + `sample notebook -
trusted <http://nbviewer.jupyter.org/github/oscar6echo/notebook-autorun/blob/master/demo_autorun_trusted.ipynb>`__
+ `sample notebook -
untrusted <http://nbviewer.jupyter.org/github/oscar6echo/notebook-autorun/blob/master/demo_autorun_untrusted.ipynb>`__

Also, to get a better understanding of what's going on under the hood,
open the console and examine the log.

2.1 - How to select cells for autorun
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

| The cells to autorun can be determined by one of the 3 args below.
| Only one of them must be specified:
| + ``cells``: List of 0-indexed cells or String representing a list of
cells. `Python list
slices <https://docs.python.org/2.3/whatsnew/section-slices.html>`__
are allowed. Default is ``None``. ``cells`` is stringified to
``str_cells`` before passing to javascript. Invalid cell numbers (e.g.
greater than the notebook number of cells) are ignored.

::

Examples:
```Python
# Assuming a notebook of 10 cells

cells = [5, 7, 8]
Autorun(cells=cells).add_js()
# cells 5, 7, 8 will be run

cells = '2, 25 , 26, -1'
Autorun(cells=cells).add_js()
# cells 2 and 9 will be run

cells = '2:'
Autorun(cells=cells).add_js()
# all cells from 2 to 9 included will be run

cells = ':-3'
Autorun(cells=cells).add_js()
# cells 7, 8, 9 will be run

cells = '4:8'
Autorun(cells=cells).add_js()
# cells 4, 5, 6, 7 will be run

cells = '4:8:2'
Autorun(cells=cells).add_js()
# cells 4, 6 will be run

cells = '::-1'
Autorun(cells=cells).add_js()
# all cells will be run in reverse order

cells = '-2:-6:-2'
Autorun(cells=cells).add_js()
# cells 8, 7, 6, 5 will be run
```

- ``metadata``: Boolean (default is ``False``). If ``True``, all cells
with medatada ``"autorun": true`` are concerned.

Example:

.. code:: python

Autorun(metadata=True).add_js()
# all cells with metadata "autorun: true" will be run

- ``comment``: Boolean (default is ``False``). If ``True``, all cells
containing a string ``comment_flag`` in a comment line (default is
``AUTORUN``) are concerned.

Example:

.. code:: python

Autorun(comment=True).add_js()
# all cells including string "AUTORUN" in a comment line will be run

Autorun(comment=True, comment_flag='MYCUSTOMFLAG').add_js()
# all cells including string "MYCUSTOMFLAG" in a comment line will be run

2.2 - Focus on Cell
~~~~~~~~~~~~~~~~~~~

| If you want to focus on a specific cell after autorun, you can use arg
``focus``.
| By default ``focus=None``.

Examples:

.. code:: python

Autorun(metadata=True, focus=5).add_js()
# cell 5 will focus after autorun

Autorun(metadata=True, focus=-2).add_js()
# cell 6 will focus after autorun

Autorun(metadata=True).add_js()
# cell 0 will focus after autorun

2.3 - Status message
~~~~~~~~~~~~~~~~~~~~

| By default ``verbose=True``.
| It displays a warnnig message then status info:

.. code:: python

Autorun(metadata=True).add_js()

# will display the following warning:
If you see <IPython.core.display.Javascript object> below, this notebook is not trusted.
As a consequence Autorun cannot work.
Run "from notebook_autorun import Autorun; Autorun.info()" for more info.

# then status info
This output cell contains notebook-autorun settings:
{"str_cells": null, "metadata": true, "comment": false, "comment_flag": "# AUTORUN"}

You can remove these messages:

.. code:: python

Autorun(metadata=True).add_js()
# no visible output - but the js code is injected

2.4 - Security
~~~~~~~~~~~~~~

Because a notebook is designed to allow the user to write arbitrary
code, it has full access to many resources.

| The typical risks are the following: + A notebook has access to your
file system and can therefore potentially read/modify/delete any of
your files or send them to an attacker, or write a new file (virus).
| + A notebook may contain javascript in output cells which can read you
cookies and local storage and potentially send them to an attacker.

See the `Security in notebook
documents <https://jupyter-notebook.readthedocs.io/en/stable/security.html#security-in-notebook-documents>`__
section of the official `Jupyter Notebook
documentation <https://jupyter-notebook.readthedocs.io/en/stable/index.html>`__
for more info.

Therefore you **should review** and **must trust** the notebook before
you can use **notebook-autorun**.

Example in the case of an untrusted notebook:

.. code:: python

# notebook is not trusted
Autorun(metadata=True).add_js()

# will display the following warning:
If you see <IPython.core.display.Javascript object> below, this notebook is not trusted.
As a consequence Autorun cannot work.
Run "from notebook_autorun import Autorun; Autorun.info()" for more info.

# then the Javascript object - un-executed
<IPython.core.display.Javascript object>

# then the Markdown object - un-executed
<IPython.core.display.Markdown object>

As the warning message indicates you can get this section info with:

.. code:: python

from notebook_autorun import Autorun
Autorun.info()

.. raw:: html

<!-- pandoc --from=markdown --to=rst --output=README.rst README.md -->

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

notebook_autorun-0.1.4.tar.gz (8.6 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page