Coder Social home page Coder Social logo

jupyter-attic / dashboards Goto Github PK

View Code? Open in Web Editor NEW
980.0 74.0 214.0 10.1 MB

[RETIRED] See Voilà as a supported replacement

Home Page: https://github.com/voila-dashboards

License: Other

Makefile 0.41% Python 1.95% JavaScript 18.90% CSS 3.63% HTML 9.52% Shell 0.20% Jupyter Notebook 65.38%
dashboard jupyter jupyter-notebook

dashboards's Introduction

[RETIRED] Jupyter Dashboards - Layout Extension

This project has been retired and replaced by incorporating the Voilà ecosystem of dashboarding tools into Project Jupyter. See the Jupyter blog posts about Voilà and the proposal to make Voilà part of Jupyter for more details. voila-gridstack is an on-going project to support layouts created by this deprecated extension using Voilà.


Project Status: Inactive – The project has reached a stable, usable state but is no longer being actively developed; support/maintenance will be provided as time allows. PyPI version Build Status Google Group

Overview

The dashboards layout extension is an add-on for Jupyter Notebook. It lets you arrange your notebook outputs (text, plots, widgets, ...) in grid- or report-like layouts. It saves information about your layouts in your notebook document. Other people with the extension can open your notebook and view your layouts.

Dashboard layout screenshot

For a sample of what's possible with the dashboard layout extension, have a look at the demo dashboard-notebooks in this repository.

Installation

Detailed installation instructions appear in the Getting started page of the project docs. Here's a quickstart using pip or conda:

# install using pip from pypi and then activate the extension
pip install jupyter_dashboards
jupyter dashboards quick-setup --sys-prefix

# install using conda from conda-forge, no activation required
conda install jupyter_dashboards -c conda-forge

Contributing

The Development page includes information about setting up a dev environment and typical dev tasks.

dashboards's People

Contributors

aluu317 avatar carreau avatar dalogsdon avatar ellisonbg avatar ftao avatar gnestor avatar jakirkham avatar jhpedemonte avatar jtyberg avatar lbustelo avatar lull3rskat3r avatar minrk avatar parente avatar rs2 avatar sterlinm avatar willingc avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

dashboards's Issues

Deployed sibling polymer element can't find bower installed elements

For the Meetup Outreach demo, we moved some of our code out to HTML files which are siblings of the notebook file. We then import them like so:

%%html
<link rel="import" href="./dynamic-list.html">
<link rel="import" href="./upcoming-meetups.html">

The top of each of those HTML files has something like this:

<link rel="import" href="/urth_components/iron-list/iron-list.html"
    is="urth-core-import" package="PolymerElements/iron-list">
<link rel="import" href="/urth_components/paper-toggle-button/paper-toggle-button.html"
    is="urth-core-import" package="PolymerElements/paper-toggle-button#v1.0.10">
<link rel="import" href="/urth_components/paper-material/paper-material.html"
    is="urth-core-import" package="PolymerElements/paper-material">

<dom-module id="upcoming-meetups">
...

This works well in the Notebook, but doesn't when we deploy. We get the following error:

GET http://192.168.99.100:9500/files/local_dashboards/meetup-outreach/static/urth_components/iron-list/iron-list.html 404 (Not Found)

Multiple Instances of Dom Nodes In Dashboard View

When working with the Commnunity Sentiment Notebook multiple dom nodes are created for the urth-core-function elements in dashboard view. It appears there are multiple instances of the notebook represented in gridstack, as well as duplication of the cells within a given output area.

When I reference an element by its id, I see an array returned.
multiple dom nodes

The dom nodes are in the page in various places
One by itself:
first dom node

And two within the same output area
dom nodes within same output

The kicker is I can reproduce using the following code in that notebook:

%%html
<div id='baz'></div>
//i in dashboard mode
baz.length === 2 // true

However, if I start in a fresh notebook the problem doesn't happen.

Put cells at bottom of dashboard with full width when moving hidden -> showing

In Layout mode, when I 'Add' a cell from the Hidden Cells section, it moves to the top section, but the cell is automatically sized and positioned in this top section (to optimize space).

If my notebook has quite a few cells, I may add several of them from the Hidden Cells section. When I scroll up, I am disoriented by the lack of order of the newly added cells. I may add a couple of plots, along with some markdown or other output cells to go along with them, but they all become jumbled, and I have to mentally piece the cell puzzle back together.

Admittedly, this is probably only an issue for "dashboards" with quite a few cells. Still, I'd like the option of turning off the auto-layout. When I add a hidden cell, it just gets placed full-width below the existing shown cells. I think this would lend itself to less effort in attaining the final layout.

Tooltip or hint area for new users of dashboard layout

Need to document a few high-level suggestions somewhere:

  • Hover to see icons
  • Resize cells
  • Eyeball icons
  • Hotkey modifier for dragging cells by clicking anywhere (issue #52)
  • etc.

Ideas:

Tooltip / popover that shows on first visit to layout mode in a notebook (set a global), but requires a click on an icon near the Dashboard section of the toolbar thereafter.

Top level index.ipynb guide to all demo / test notebooks

We've got a slew of content. Users need a roadmap. This should be something like the index.ipynb we put on jupyter.cloudet.xyz but specific to all the notebooks in this repo. The guide should suggest a sequence of reading through them to learn about dashboards and give a brief description of each to avoid having the user open each one to learn what it is.

Notebook user can include local files in deployed dashboard

The notebook author may want to include external files (e.g. HTML & CSS) without having to write the entire contents in a notebook cell. This works locally, but when the notebook is converted (and deployed) any links to local files will not work. There should be some way of "marking" files for inclusion during conversion.

Example cell linking files:

    %%html
    <link rel="stylesheet" type="text/css" href="main.css">
    <link rel="import" href="elements.html">

Some ideas:

  1. Cell magics for including files

    %%converter include "elements.html", "main.css"
    
    • or -
    %%linkcss "main.css"
    %%linkhtml "elements.html"
    

    The %%link* magics automatically insert the correct html tag, as well as being used to notify the converter.

  2. UI component for manually selecting files to include

Support resizable elements within dashboard cells

The some urth widgets need to update their internal dimensions when their container is resized. This requires that we have some sort of event/notification other than window.onResize().

Our current idea is as follows: There exists PolymerElement/iron-resizable-behavior, which adds a notifyResize() method to the element. We can listen in dashboard for when a cell is resized, then find any polymer elements contained within, and if they implement this behavior, we notifyResize on them so that they can then resize appropriately.

The problem from the Dashboard side is how do we query for Polymer elements and find out if they implement/mixin the iron-resizable-behavior?

Single-column dashboard reorders DOM nodes

When in layout/view dashboard, decrease the window width so the layout becomes single-column and then to back to normal width. Switch back to notebook view and observe the cells are out of order.

It looks like gridstack is rearranging the DOM nodes at the smallest width breakpoint. We need to disable that.

This is related to a larger issue of how to do responsive dashboard layouts.

Report mode

I have a few lengthy notebooks, each with a large number of cells, and I want to surface more cells than would fit in a single screen dashboard view. So what I want to show is more like a report than a dashboard.

Say out of 100 cells, I want to select 20 to show up when I switch to View Dashboard. I don't really want to layout the cells, I just want to display them top to bottom, in the same order they show up in Notebook mode.

Ideally, I would be able to select which cells to display while in Notebook mode, by clicking something (icon?) in the top right corner of the cell. Then I could switch to View Dashboard mode to see the result. Layout Dashboard would not be necessary in this case.

Meetup outreach business dashboard scenario demo / tutorial

Goal: Have a demo based on a real business scenario that incorporates these key points:

  • Shows real-time processing
  • Surfaces insights
  • Allows the user to take action
  • Allows the user to see results of actions
  • Can apply to meetup.com topics
  • Can apply to other data sources / domains entirely (with coding)

Why: Demonstrate how notebooks can be used to prototype dashboards before further investment. Provide it as a tutorial / demo for the community to play with.

Scenario

I need to drive new sign-ups to my website. One way to do that is to increase attendance at meetups I organize at meetup.com. I want to try to entice people:

  1. Who are interested in relevant tech topics
  2. While they're thinking about meetups
  3. Who are likely to attend a meetup at a given location

To target these users specifically, I'd need to know:

  • What related meetups are upcoming? (meetup.com search API)
    • Where are the venues?
    • What's their current RSVP count?
    • UI: Columns or buckets or ... with meetup metadata at the top (name, location, number of RSVPs so far, ...)
  • Are there venues for which folks are RSVPing close to any of my meetups? (meetup.com stream API)
    • Close in location? (don't bother people that aren't coming near my meetup)
    • Close in time? (boost people that will be near my meetup when it is occurring)
    • Close in topic? (don't bother people not interested in topics related to my meetup + boost people that are interested in specific topics ...)
    • UI: maybe a widget to set the distance threshold (but not science-y widgets for setting topic relevancy ...)
    • Analytics: compute relevancy of RSVPer against all of my meetups (distance between other venue and my venue, distance between venue and where the person lives, topic of venue overlap with my venu, topic of interest to user overlap with my venue, ...)
  • Who are the people RSVPing nearby to my venues? (meetup.com member profile API + metadata from RSVP stream API)
    • What is the other meetup?
    • How close is the other venue to my venue?
    • How close is the other venue to the user?
    • What are their names?
    • What are their meetup topic interests?
    • UI: put users with above some threshold relevancy into appropriate buckets including info about the user and the other meetup (name, location, other meetup just RSVPed to, interests, link to member page to start a message to user, link to other meetup page to study details / contact meetup organizer)

Once I identify these users, I may want to:

  • Inform them soon that they might also be interested in one of my meetups nearby.
    • There is a "Start a discussion link" in the meet-up UI where humans can craft notes to other humans. not sure if "i saw you were attending X, you might also check out Y" in a personal note is abuse or not.
  • Contact the group offering the other meet-up to run a cross-post campaign (e.g., if I see lots of people also attending that meetup)
    • Same thing: can contact organizer via the meetup page

After I take these actions, I certainly want to:

  • See if any of the contacted users do indeed register for my meetup.
    • UI: Once user message link is clicked, user bucket entry shows an icon indicating the user was contacted
  • See if there is an uptick in my meetup RSVPs possibly due to my actions.
    • UI: if any user that I contacted appears in the RSVP stream as a "yes" for any of my meetups, that is called out in the UI (turn user gold, put it in a "win" bucket, whatever)

Make deployed dashboards secure, scalable

  • There's no API auth on the kernel provider at the moment (tmpnb, Jupyter)
  • There's no concept of authentication in the generated dashboard app
  • The original code is exposed in the dashboard frontend HTML and can be manipulated arbitrarily by any user

Long-term solution that probably involves:

  1. Using the jupyter-incubator/kernel-gateway remotely (or something like it) with proper API auth
  2. Writing a new kernel gateway client using jupyter-js-services
  3. Writing a new dashboard backend that acts as a proxy between the browser client that requests code execution and the kernel gateway.

Tutorial For Community Sentiment Notebook

Scenario: Create a notebook to give an overview of community sentiment about a project. This notebook should show the community sentiment for a open source project on github. This demo should be streaming.

  • Github project demo
    • Collect metrics for positive sentiment
      • Collect closed pull requests over x amount of time
      • Collect issues with activity over y amount of time
    • Collect metrics for negative sentiment
      • Pending pull requests over x amount of time
      • Collect issues with no activity over y amount of time
    • Calculate sentiment from the above metrics
    • Display the sentiment of the project visually
    • Add streaming support
    • Don't use red/green scheme (colorblindness)

Dashboard layout is reset when going from notebook view to layout view on new notebook

  1. Create a new notebook with a few cells
  2. Enter dashboard layout view and arrange the cells
  3. Switch back to notebook view
  4. Switch back to dashboard layout view
  5. Note that the layout has not been preserved
  6. Repeat steps 1-2 above with a new notebook
  7. Save the notebook
  8. Refresh the page
  9. Switch to dashboard layout view
  10. Note that the layout is correct

Upon initial investigation it looks like Gridstack is not using saved layout coordinates for steps 1-5 above but is using saved layout coordinates for steps 6-10.

Remove host dependency on bower

We already have the bower requirement within our dev docker container to support urth-widgets. We can piggy back on this to do the minimal bower install for our own dev purposes. Probably just involves a few swizzles in the Makefile. Pay off: you don't need node/bower installed on the host.

Contents can overflow dashboard cell boundaries, overlap other cells

In Layout mode,

  1. Add cells to be displayed in View mode.
  2. Resize one of the cells to a much larger size, such that it overlaps existing cells.
  3. The overlapped cells are now underneath the enlarged cell.
  4. I now have to reposition all the overlapped cells.

When I resize a cell to make it larger, I think I'd like any cells that are being overlapped to be pushed beneath the one I'm enlarging. Less work for me.

Dragging dashboard cells does not recompute page height

Resizing, hiding, and showing dashboard cells causes the page height to recompute, but moving a dashboard cell does not.

This could be as simple as calling the resize function after the Gridstack dragstop event as we do with the resizestop event.

Move to 4.x notebook as the minimum requirement

We put off moving the code in this repo to supporting the post-Big Split version of the notebook until we understood the future intersection of the work here with the future version of notebook based on Phosphor. After meeting with @sccolbert, @ellisonbg and others about that topic, we agreed that pushing the dashboard layout implementation into jupyter/notebook ahead of the phosphor port of notebook doesn't make much sense: it'll all need to be redesigned and reimplemented later in the context of the more pluggable notebook. That said, it looks like the jQuery-based notebook will be around for a while longer as work proceeds on the Phosphor-based UI encompassing all the current pieces of Jupyter Notebook.

In the interest of keeping the dashboard (and declarative widgets) concepts relevant along the way, we should invest the time in making them 4.x compatible. I suspect that by 4.x compatible, I really mean "any version post-Big Split compatible" since even if the notebook version numbers jump to 5.x, 6.x, etc. major UI changes aren't likely to land in the classic, jQuery impl, but rather in the PhosphorJS one. So, hopefully, migrating the extensions should be a one time cost.

All that said, we agreed that once there's some flavor of Phosphor in Jupyter Notebook, we will collaborate on how dashboards and other incubator features start to plug into that new foundation.

Create a boilerplate sentiment dashboard notebook

Once we've got one example under our belt in the form of the community sentiment dashboard (issue #14), create a new notebook that tears it down to the barebones widget definitions and layouts. Document the structure of the data required by these widgets and how it must be bound to them. Then fill in very simple "hello world" versions of functions / DataFrames that generate fake data just so the notebook runs top to bottom.

The notebook should be very tutorial-like and walk people through what bits they need to replace and what bits stay. The goal is to demonstrate how UI doesn't have to be rewritten again and again for very similar use cases where only the domain data differs.

Make Meetup Outreach demo more parallelizable (remove use of globals)

The Meetup Outreach demo (see issue #30) makes extensive use of globals in the Python code. While this works well when running the demo locally, it doesn't allow us to make good use of distributed nodes.

We need to replace the use of globals through the use of map/reduce and broadcast vars & accumulators.

Add toolbar buttons to select Dashboard view mode

We frequently use the menu items for selecting a Dashboard view mode ('notebook', 'layout dashboard', 'view dashboard'). It may be beneficial to add a button group to the notebook toolbar to more quickly select a view mode.

Outreach demo should filter tracked meetups

  1. Left-side upcoming meetups panel is tracking meetup A
  2. User 1 appears in the right-side meetup candidates because he/she RSVPs for meetup A (hmm ...)

To be more realistic, I think we'd want to filter user 1 from the candidate list. We don't want to bother a user who just registered for a meetup one of our meetups to register again for another meetup right away.

Converter should put converted files into "dot" folder

Currently, when doing File>Deploy as>Local Dashboard, the converted files are added to the notebook server at the top level, as siblings to existing files and folders. This makes things very confusing when looking at the Notebook tree.

A better solution would be to have a top level folder called "converted" or "local_dashboards", where all the files reside.

Local Install Without Docker

Hi all,

I have been playing with IBM's dashboard following the README, thus deploying within a docker image. I was wondering if it is at all possible to setup the dashboard system on a normal JupyterHub install. For instance, does the docker image use a special fork of jupiter?

Create a demo that uses other widget libraries in a dashboard

We need to show that dashboards don't only work with declarative widgets. Create a really simple demo that uses Bokeh or bqplot or ... whatever in a simple dashboard layout. Bonus: see if it can be deployed locally or if new, special hooks are required for the particular library.

Taxi demo no longer autoloads table data

The taxi demo notebook should autoload table data as it hooks up a paper-menu with pre-selected item to an urth-core-function with an auto attribute.

This used to load the table whose data is set by the auto function so that the data is initially visible without user interaction to pick a dataset.

Not sure if this is a dashboard or declarative widgets issue.

Deployed dashboard errors out when trying to use Urth widgets channel

To recreate:

  • Create a new dashboard with this code cell:
from urth.widgets.widget_channels import channel
channel('foobar').set('baz', 'awesome');
  • Run File > Deploy as > Local Dashboard.
  • Open browser error console and notice this error:
AttributeError                            Traceback (most recent call last)
<ipython-input-1-9054bc59971b> in <module>()
      1 from urth.widgets.widget_channels import channel
----> 2 channel('foobar').set('baz', 'awesome');

/opt/conda/lib/python3.4/site-packages/urth/widgets/widget_channels.py in set(self, key, value, **kwargs)
     75     def set(self, key, value, **kwargs):
     76         global the_channels
---> 77         the_channels.set(key, value, self.chan, **kwargs)
     78 
     79     def watch(self, key, handler):

AttributeError: 'NoneType' object has no attribute 'set'

@lbustelo says that the channel code is initialized when the notebook receives a kernel ready event. I think we may be executing all code cells before that can happen. Perhaps this is due to how we invoke executeAll in main.js -- need to wait for Urth widgets to fully initialize?

Gridstack: Fire onresizestop after CSS transition

gridstack/gridstack.js#159

When resizing a gridstack cell, the onresizestop event is fired on mouse up before the CSS transition to snap to the grid completes. This results in incorrect element dimensions when performing sizing calculations based on this event.

To work around this issue, we added a setTimeout to wait until a cell completes its CSS width/height transition before firing an iron-resize event to Polymer output elements.

500 error (sometimes) when converting to dashboard

The critical bit is in the render of the jinja template:

jinja2.exceptions.UndefinedError: \'IPython.nbformat.notebooknode.NotebookNode object\' has no attribute \'layout\

Best guess: the layout loop var is not defined on all iteration of the loop.

[E 17:47:53.751 NotebookApp] Uncaught exception GET /user/9RDX2WXLAjPc/bundle?type=dashboard&notebook=got_scotch_demo%2Fscotch_dashboard.ipynb (::ffff:45.37.178.151)
    HTTPServerRequest(protocol='http', host='jupyter.cloudet.xyz', method='GET', uri='/user/9RDX2WXLAjPc/bundle?type=dashboard&notebook=got_scotch_demo%2Fscotch_dashboard.ipynb', version='HTTP/1.1', remote_ip='::ffff:45.37.178.151', headers={'Accept-Encoding': 'gzip, deflate, sdch', 'Connection': 'close', 'X-Forwarded-For': '::ffff:45.37.178.151', 'Cookie': '_gat=1; _ga=GA1.2.1320566523.1442145202', 'X-Forwarded-Port': '80', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Referer': 'http://jupyter.cloudet.xyz/user/9RDX2WXLAjPc/notebooks/got_scotch_demo/scotch_dashboard.ipynb', 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36', 'Upgrade-Insecure-Requests': '1', 'X-Forwarded-Proto': 'http', 'Accept-Language': 'en-US,en;q=0.8', 'Host': 'jupyter.cloudet.xyz'})
    Traceback (most recent call last):
      File "/opt/conda/lib/python3.4/site-packages/tornado/web.py", line 1413, in _execute
        result = method(*self.path_args, **self.path_kwargs)
      File "/opt/conda/lib/python3.4/site-packages/tornado/web.py", line 2721, in wrapper
        return method(self, *args, **kwargs)
      File "/opt/conda/lib/python3.4/site-packages/urth/dashboard/nbexts/bundle_handler.py", line 58, in get
        self._get_local_app(abs_nb_path)
      File "/opt/conda/lib/python3.4/site-packages/urth/dashboard/nbexts/bundle_handler.py", line 251, in _get_local_app
        md = self._create_app_bundle(abs_nb_path, bundle_root=os.path.join(self.nb_dir, 'local_dashboards'), overwrite=True, template_fn='local.tpl')
      File "/opt/conda/lib/python3.4/site-packages/urth/dashboard/nbexts/bundle_handler.py", line 133, in _create_app_bundle
        converter.to_php_app(abs_nb_path, bundle_dir, template_fn)
      File "/opt/conda/lib/python3.4/site-packages/urth/dashboard/converter/__init__.py", line 48, in to_php_app
        full_output = to_thebe_html(notebook_fn, {}, 'html', os.getcwd(), template_fn)
      File "/opt/conda/lib/python3.4/site-packages/urth/dashboard/converter/__init__.py", line 235, in to_thebe_html
        raise RuntimeError('nbconvert wrote to stderr: {}'.format(stderr))
    RuntimeError: nbconvert wrote to stderr: b'Traceback (most recent call last):\n  File "/opt/conda/bin/ipython", line 6, in <module>\n    sys.exit(start_ipython())\n  File "/opt/conda/lib/python3.4/site-packages/IPython/__init__.py", line 120, in start_ipython\n    return launch_new_instance(argv=argv, **kwargs)\n  File "/opt/conda/lib/python3.4/site-packages/IPython/config/application.py", line 574, in launch_instance\n    app.start()\n  File "/opt/conda/lib/python3.4/site-packages/IPython/terminal/ipapp.py", line 367, in start\n    return self.subapp.start()\n  File "/opt/conda/lib/python3.4/site-packages/IPython/nbconvert/nbconvertapp.py", line 278, in start\n    self.convert_notebooks()\n  File "/opt/conda/lib/python3.4/site-packages/IPython/nbconvert/nbconvertapp.py", line 401, in convert_notebooks\n    self.convert_single_notebook(notebook_filename)\n  File "/opt/conda/lib/python3.4/site-packages/IPython/nbconvert/nbconvertapp.py", line 372, in convert_single_notebook\n    output, resources = self.export_single_notebook(notebook_filename, resources)\n  File "/opt/conda/lib/python3.4/site-packages/IPython/nbconvert/nbconvertapp.py", line 324, in export_single_notebook\n    output, resources = self.exporter.from_filename(notebook_filename, resources=resources)\n  File "/opt/conda/lib/python3.4/site-packages/IPython/nbconvert/exporters/exporter.py", line 156, in from_filename\n    return self.from_notebook_node(nbformat.read(f, as_version=4), resources=resources, **kw)\n  File "/opt/conda/lib/python3.4/site-packages/IPython/nbconvert/exporters/html.py", line 65, in from_notebook_node\n    return super(HTMLExporter, self).from_notebook_node(nb, resources, **kw)\n  File "/opt/conda/lib/python3.4/site-packages/IPython/nbconvert/exporters/templateexporter.py", line 214, in from_notebook_node\n    output = self.template.render(nb=nb_copy, resources=resources)\n  File "/opt/conda/lib/python3.4/site-packages/jinja2/environment.py", line 989, in render\n    return self.environment.handle_exception(exc_info, True)\n  File "/opt/conda/lib/python3.4/site-packages/jinja2/environment.py", line 754, in handle_exception\n    reraise(exc_type, exc_value, tb)\n  File "/opt/conda/lib/python3.4/site-packages/jinja2/_compat.py", line 37, in reraise\n    raise value.with_traceback(tb)\n  File "/opt/conda/lib/python3.4/site-packages/urth/dashboard/converter/jinja_templates/thebe.tpl", line 83, in top-level template code\n    data-gs-x={{layout.col}} data-gs-y={{layout.row}}\n  File "/opt/conda/lib/python3.4/site-packages/jinja2/environment.py", line 408, in getattr\n    return getattr(obj, attribute)\njinja2.exceptions.UndefinedError: \'IPython.nbformat.notebooknode.NotebookNode object\' has no attribute \'layout\'\n\nIf you suspect this is an IPython bug, please report it at:\n    https://github.com/ipython/ipython/issues\nor send an email to the mailing list at [email protected]\n\nYou can print a more detailed traceback right now with "%tb", or use "%debug"\nto interactively debug it.\n\nExtra-detailed tracebacks for bug-reporting purposes can be enabled via:\n    c.Application.verbose_crash=True\n\n'
[E 17:47:53.759 NotebookApp] {
      "Accept-Encoding": "gzip, deflate, sdch",
      "Connection": "close",
      "X-Forwarded-For": "::ffff:45.37.178.151",
      "Cookie": "_gat=1; _ga=GA1.2.1320566523.1442145202",
      "X-Forwarded-Port": "80",
      "X-Forwarded-Proto": "http",
      "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
      "Referer": "http://jupyter.cloudet.xyz/user/9RDX2WXLAjPc/notebooks/got_scotch_demo/scotch_dashboard.ipynb",
      "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36",
      "Upgrade-Insecure-Requests": "1",
      "Accept-Language": "en-US,en;q=0.8",
      "Host": "jupyter.cloudet.xyz"
    }
[E 17:47:53.759 NotebookApp] 500 GET /user/9RDX2WXLAjPc/bundle?type=dashboard&notebook=got_scotch_demo%2Fscotch_dashboard.ipynb (::ffff:45.37.178.151) 970.95ms referer=http://jupyter.cloudet.xyz/user/9RDX2WXLAjPc/notebooks/got_scotch_demo/scotch_dashboard.ipynb

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.