jupyter / atom-notebook

[Deprecated] Jupyter Notebook, but inside Atom.
MIT License
306 stars 48 forks source link

jupyter-notebook

This project does not have any active maintainers. We recommend that you use nteract, a native notebook application built using Electron, React (like this project), Redux, and RxJS, or Hydrogen, a LightTable-inspired package for Atom that allows users to run code blocks and selections using Jupyter kernels.

A package that works like the Jupyter Notebook, but inside Atom. It's registered as an opener for .ipynb files — try opening one!

Sweet baby integration

Install

  1. Install dependencies:

    OS X
    • Python 3: brew install python3 (there are issues with pip2 and OS X 10.11)
    • Jupyter and Jupyter Kernel Gateway: pip3 install jupyter jupyter_kernel_gateway
    Linux (Debian)
    • Python: sudo apt-get install python python-pip
    • Jupyter and Jupyter Kernel Gateway: pip install jupyter jupyter_kernel_gateway
  2. apm install jupyter-notebook or search for jupyter-notebook inside of Atom

Usage

Developers

Install

  1. git clone https://github.com/jupyter/atom-notebook.git
  2. apm install
  3. apm link

Achitecture

This package is built on React and the Flux architecture.

Map

Flow

Rendering: NotebookEditor -> NotebookEditorView -> [child views]

Updating: [external action] -> Dispatcher.dispatch -> NotebookEditor.onAction ?-> NotebookEditor._onChange -> NotebookEditorView._onChange

Immutable state

The state returned by NotebookEditor.getState is an Immutable.js object.

Accessing its properties inside a view looks like this:

let executionCount = this.props.data.get('execution_count');

Changing it (in NotebookEditor) looks like this:

this.state = this.state.setIn(
    ['cells', cellIndex, 'source'],
    payload.source);

or this:

outputs = outputs.push(el.outerHTML);

Since React requires a view's state to be a regular JS object, the state of NotebookEditorView takes the form:

{
    data: <Immutable object>
}

No other views have state.

To do