gedankenstuecke/jupyter-gallery

View on GitHub
README.md

Summary

Maintainability
Test Coverage
# A Jupiter Notebook Gallery: Juno's Exploratory

[![Build Status](https://travis-ci.org/gedankenstuecke/jupyter-gallery.svg?branch=master)](https://travis-ci.org/gedankenstuecke/jupyter-gallery)
[![Maintainability](https://api.codeclimate.com/v1/badges/65c9247d5e7293dc94da/maintainability)](https://codeclimate.com/github/gedankenstuecke/jupyter-gallery/maintainability)
[![Test Coverage](https://api.codeclimate.com/v1/badges/65c9247d5e7293dc94da/test_coverage)](https://codeclimate.com/github/gedankenstuecke/jupyter-gallery/test_coverage)

This `django` app creates a website that interfaces with an external API (right now only with the one of Open Humans) to import Jupyter Notebooks.

Through the app:
- users can import their own `.ipynb` Notebook files
- Imported Notebooks are rendered right in the app and
  - can be liked
  - commented
- Notebooks in the gallery can be exported with a one-click solution into an existing Jupyter Hub installation.

That way it's easy to build a community around sharing and re-using notebooks. See below for some GIF examples:

![](/static/aboutgifs/sharing.gif)
**Sharing a notebook right from the Jupyter Notebook**

![](/static/aboutgifs/open.gif)
**Opening a notebook right from the Gallery**

## Requirements
For the whole setup to work your singleuser `JupyterHub` image needs to install & activate 3 extensions to Jupyter:

### custom bundler
A custom bundler is needed to add the `Share Notebook` menu item. It can be found at [gedankenstuecke/jupyter-bundler-openhumans](https://github.com/gedankenstuecke/jupyter-bundler-openhumans). An easy way to install the `bundler` and `nbextension` provided by this python package is:

```
git clone https://github.com/gedankenstuecke/jupyter-bundler-openhumans.git
cd jupyter-bundler-openhumans
pip install -e .
jupyter bundlerextension enable --py oh_bundler
jupyter nbextension install --py oh_bundler --sys-prefix
jupyter nbextension enable --py oh_bundler --sys-prefix
```

Per default the post-sharing redirect will lead to `http://127.0.0.1:5000/shared`. See the [repository](https://github.com/gedankenstuecke/jupyter-bundler-openhumans) for more details on the settings.

### custom URL handler
This handler is needed for accepting a file in the Jupyter setup when being pushed from the gallery app. The handler Python module is in [gedankenstuecke/jupyter-notebook-importer](https://github.com/gedankenstuecke/jupyter-notebook-importer). The easiest way to install it locally is:

```
git clone https://github.com/gedankenstuecke/jupyter-notebook-importer.git
cd jupyter-notebook-importer
pip install -e .
jupyter serverextension enable --py oh_notebook_importer
```

## Deployment
This app was build with the idea to be deployed to `heroku`. If you already have the `heroku` CLI installed all you should need to do to start the application locally is:

```
pipenv install --dev
pipenv shell
heroku local:run ./manage.py migrate
heroku local
```

Now your local heroku app should run and be accessible from `127.0.0.1:5000`

Most likely it will not work completely unless you have set up some `.env` file in this directory with the following settings:

### settings
what should be in the `.env` file:

```
# the usual stuff for a django app that interfaces with open humans:
SECRET_KEY='secret_key_here'
OH_ACTIVITY_PAGE='https://www.openhumans.org/activity/your-project-name-should-be-here/'
OH_CLIENT_ID='id'
OH_CLIENT_SECRET='secret'
APP_BASE_URL='http://127.0.0.1:5000'

# the only UNusual stuff:
# the JUPYTERHUB_BASE_URL should be the local
# jupyter notebook url if running in dev
# or https://notebooks.openhumans.org/hub/user-redirect
# for production
JUPYTERHUB_BASE_URL = http://localhost:8888