Compare commits
114 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
2530a940c9 | 9 years ago |
|
|
85aedbf5c0 | 9 years ago |
|
|
d0c955388a | 10 years ago |
|
|
b55157282a | 10 years ago |
|
|
6efb1145da | 10 years ago |
|
|
1c47294bcf | 10 years ago |
|
|
f5e3844787 | 10 years ago |
|
|
de0360d7d9 | 10 years ago |
|
|
729f9bb54e | 10 years ago |
|
|
131bdd55cf | 10 years ago |
|
|
0350c7f124 | 10 years ago |
|
|
3ccd254907 | 10 years ago |
|
|
c9937f8b38 | 10 years ago |
|
|
bf19b3cd0b | 10 years ago |
|
|
ce8ccf168c | 10 years ago |
|
|
9e63dd89b6 | 10 years ago |
|
|
9ed5848e82 | 11 years ago |
|
|
b05293408a | 11 years ago |
|
|
1bec1b9808 | 11 years ago |
|
|
0259d3df08 | 11 years ago |
|
|
dd9876381f | 11 years ago |
|
|
0600d6a5e6 | 11 years ago |
|
|
caea335a73 | 11 years ago |
|
|
930415df3b | 11 years ago |
|
|
d055356ebe | 11 years ago |
|
|
3e2bde6472 | 11 years ago |
|
|
c1c66c0021 | 11 years ago |
|
|
8080a798e0 | 11 years ago |
|
|
42bea203dc | 11 years ago |
|
|
8ef21fc474 | 11 years ago |
|
|
d404af9d16 | 11 years ago |
|
|
68759c84d0 | 11 years ago |
|
|
4cb2b78828 | 11 years ago |
|
|
735bd7ee36 | 11 years ago |
|
|
d2b3aa314d | 11 years ago |
|
|
4d4fed2e98 | 11 years ago |
|
|
0cde7269a5 | 11 years ago |
|
|
eb5e82f295 | 11 years ago |
|
|
dcd676d499 | 11 years ago |
|
|
92e266f4e2 | 11 years ago |
|
|
792f928578 | 11 years ago |
|
|
450597d754 | 11 years ago |
|
|
89c4defaf2 | 11 years ago |
|
|
b9c88fdf84 | 11 years ago |
|
|
6992965967 | 11 years ago |
|
|
3bcce96dd8 | 11 years ago |
|
|
482906e76d | 11 years ago |
|
|
dde3c3cc75 | 11 years ago |
|
|
6bd84b9df0 | 11 years ago |
|
|
3a9493bcab | 11 years ago |
|
|
2f3789fb95 | 11 years ago |
|
|
1c839f686b | 11 years ago |
|
|
5b507019e6 | 11 years ago |
|
|
496289e441 | 11 years ago |
|
|
cf4341ac0d | 11 years ago |
|
|
0afe9d2b1a | 11 years ago |
|
|
ff191ae630 | 11 years ago |
|
|
a36dcf2f98 | 11 years ago |
|
|
7e4354fbd9 | 11 years ago |
|
|
9c2fdb7c30 | 11 years ago |
|
|
26334946f9 | 11 years ago |
|
|
89124554f4 | 11 years ago |
|
|
e47a7e4fbe | 11 years ago |
|
|
3bd961b492 | 11 years ago |
|
|
42d4529703 | 11 years ago |
|
|
2218d7df95 | 11 years ago |
|
|
4eda5e57ad | 11 years ago |
|
|
884ef1dc28 | 11 years ago |
|
|
72fa817fab | 11 years ago |
|
|
6ef2d6a995 | 11 years ago |
|
|
30c235def1 | 11 years ago |
|
|
2806cb2da8 | 11 years ago |
|
|
4288dc1c6d | 11 years ago |
|
|
a394579b84 | 11 years ago |
|
|
e76548a96a | 11 years ago |
|
|
0d70a84ef1 | 11 years ago |
|
|
7e720ab22b | 11 years ago |
|
|
9e13c3b0cd | 11 years ago |
|
|
22aad2fcb7 | 11 years ago |
|
|
86ab103195 | 11 years ago |
|
|
96032f7ec1 | 11 years ago |
|
|
788c16d1d5 | 11 years ago |
|
|
f2c5e6ba98 | 11 years ago |
|
|
c03a564655 | 11 years ago |
|
|
5ad3fd19f6 | 11 years ago |
|
|
406a57d70d | 11 years ago |
|
|
854aa1af8e | 11 years ago |
|
|
ca2a539617 | 11 years ago |
|
|
5714cabb26 | 11 years ago |
|
|
f64dec096f | 11 years ago |
|
|
2b5ba10ce9 | 11 years ago |
|
|
b0cae1f51b | 11 years ago |
|
|
c0f3b0abed | 11 years ago |
|
|
3029212849 | 11 years ago |
|
|
e5ec203028 | 11 years ago |
|
|
454a581830 | 11 years ago |
|
|
c41df91b10 | 11 years ago |
|
|
fddd29f63a | 11 years ago |
|
|
ecdb1091d7 | 11 years ago |
|
|
715e87afc2 | 11 years ago |
|
|
0a93cc6c6a | 11 years ago |
|
|
db86515621 | 11 years ago |
|
|
c42869c3b8 | 11 years ago |
|
|
a425ed30ef | 11 years ago |
|
|
cf69ab7428 | 11 years ago |
|
|
00bb47fb24 | 11 years ago |
|
|
095e77dfd7 | 11 years ago |
|
|
c21debfc4a | 11 years ago |
|
|
ff9f36e7f0 | 11 years ago |
|
|
29fabd3c16 | 11 years ago |
|
|
688dc2c6e8 | 11 years ago |
|
|
9a924963b1 | 11 years ago |
|
|
01be52894d | 11 years ago |
|
|
32fd103bad | 11 years ago |
@ -0,0 +1,20 @@
|
||||
# Add this into the info.plist file of an application
|
||||
# and the icns icon in Contents/Resources
|
||||
# then move the application twice :
|
||||
# http://superuser.com/questions/178316/how-to-set-an-icon-for-a-file-type-on-mac
|
||||
|
||||
<key>CFBundleDocumentTypes</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>CFBundleTypeExtensions</key>
|
||||
<array>
|
||||
<string>ipynb</string>
|
||||
</array>
|
||||
<key>CFBundleTypeIconFile</key>
|
||||
<string>ipynb_mac_icon</string>
|
||||
<key>CFBundleTypeName</key>
|
||||
<string>IPython notebook file</string>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>None</string>
|
||||
</dict>
|
||||
<array>
|
||||
@ -0,0 +1,16 @@
|
||||
#!/bin/bash
|
||||
INKSCAPE=inkscape
|
||||
|
||||
${INKSCAPE} -z -C --file=ipynb_icon_16x16.svg --export-png=ipynb_icon_16x16_uncrush.png
|
||||
${INKSCAPE} -z -C --file=ipynb_icon_24x24.svg --export-png=ipynb_icon_24x24_uncrush.png
|
||||
${INKSCAPE} -z -C --file=ipynb_icon_32x32.svg --export-png=ipynb_icon_32x32_uncrush.png
|
||||
${INKSCAPE} -z -C --file=ipynb_icon_512x512.svg --export-png=ipynb_icon_64x64_uncrush.png -w 64 -h 64
|
||||
${INKSCAPE} -z -C --file=ipynb_icon_512x512.svg --export-png=ipynb_icon_128x128_uncrush.png -w 128 -h 128
|
||||
${INKSCAPE} -z -C --file=ipynb_icon_512x512.svg --export-png=ipynb_icon_256x256_uncrush.png -w 256 -h 256
|
||||
${INKSCAPE} -z -C --file=ipynb_icon_512x512.svg --export-png=ipynb_icon_512x512_uncrush.png -w 512 -h 512
|
||||
|
||||
|
||||
for file in `ls *_uncrush.png`; do
|
||||
pngcrush -brute -l 9 -reduce -rem alla -rem text -rem time -rem gAMA -rem cHRM -rem iCCP -rem sRGB $file `basename $file _uncrush.png`.png
|
||||
rm $file
|
||||
done
|
||||
|
After Width: | Height: | Size: 7.0 KiB |
|
After Width: | Height: | Size: 7.2 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 9.8 KiB |
|
After Width: | Height: | Size: 99 KiB |
|
After Width: | Height: | Size: 7.8 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 541 B |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 770 B |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 2.2 KiB |
|
After Width: | Height: | Size: 2.4 KiB |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 86 KiB |
|
After Width: | Height: | Size: 3.4 KiB |
|
After Width: | Height: | Size: 7.8 KiB |
@ -0,0 +1,46 @@
|
||||
.. _changelog:
|
||||
|
||||
Jupyter notebook changelog
|
||||
==========================
|
||||
|
||||
A summary of changes in the Jupyter notebook.
|
||||
For more detailed information, see `GitHub <https://github.com/jupyter/notebook>`__.
|
||||
|
||||
4.0.x
|
||||
-----
|
||||
|
||||
4.0.6
|
||||
*****
|
||||
|
||||
- fix installation of mathjax support files
|
||||
- fix some double-escape regressions in 4.0.5
|
||||
- fix a couple of cases where errors could prevent opening a notebook
|
||||
|
||||
4.0.5
|
||||
*****
|
||||
|
||||
Security fixes for maliciously crafted files.
|
||||
|
||||
- `CVE-2015-6938 <http://www.openwall.com/lists/oss-security/2015/09/02/3>`__: malicious filenames
|
||||
- `CVE-2015-7337 <http://www.openwall.com/lists/oss-security/2015/09/16/3>`__: malicious binary files in text editor.
|
||||
|
||||
Thanks to Jonathan Kamens at Quantopian and Juan Broullón for the reports.
|
||||
|
||||
|
||||
4.0.4
|
||||
*****
|
||||
|
||||
- Fix inclusion of mathjax-safe extension
|
||||
|
||||
4.0.2
|
||||
*****
|
||||
|
||||
- Fix launching the notebook on Windows
|
||||
- Fix the path searched for frontend config
|
||||
- Fix nbextension-install on Python 2
|
||||
|
||||
|
||||
4.0.0
|
||||
*****
|
||||
|
||||
First release of the notebook as a standalone package.
|
||||
@ -0,0 +1,218 @@
|
||||
.. _contents_api:
|
||||
|
||||
Contents API
|
||||
============
|
||||
|
||||
.. currentmodule:: notebook.services.contents
|
||||
|
||||
The Jupyter Notebook web application provides a graphical interface for
|
||||
creating, opening, renaming, and deleting files in a virtual filesystem.
|
||||
|
||||
The :class:`~manager.ContentsManager` class defines an abstract
|
||||
API for translating these interactions into operations on a particular storage
|
||||
medium. The default implementation,
|
||||
:class:`~filemanager.FileContentsManager`, uses the local
|
||||
filesystem of the server for storage and straightforwardly serializes notebooks
|
||||
into JSON. Users can override these behaviors by supplying custom subclasses
|
||||
of ContentsManager.
|
||||
|
||||
This section describes the interface implemented by ContentsManager subclasses.
|
||||
We refer to this interface as the **Contents API**.
|
||||
|
||||
Data Model
|
||||
----------
|
||||
|
||||
.. currentmodule:: notebook.services.contents.manager
|
||||
|
||||
Filesystem Entities
|
||||
~~~~~~~~~~~~~~~~~~~
|
||||
.. _notebook models:
|
||||
|
||||
ContentsManager methods represent virtual filesystem entities as dictionaries,
|
||||
which we refer to as **models**.
|
||||
|
||||
Models may contain the following entries:
|
||||
|
||||
+--------------------+-----------+------------------------------+
|
||||
| Key | Type |Info |
|
||||
+====================+===========+==============================+
|
||||
|**name** |unicode |Basename of the entity. |
|
||||
+--------------------+-----------+------------------------------+
|
||||
|**path** |unicode |Full |
|
||||
| | |(:ref:`API-style<apipaths>`) |
|
||||
| | |path to the entity. |
|
||||
+--------------------+-----------+------------------------------+
|
||||
|**type** |unicode |The entity type. One of |
|
||||
| | |``"notebook"``, ``"file"`` or |
|
||||
| | |``"directory"``. |
|
||||
+--------------------+-----------+------------------------------+
|
||||
|**created** |datetime |Creation date of the entity. |
|
||||
+--------------------+-----------+------------------------------+
|
||||
|**last_modified** |datetime |Last modified date of the |
|
||||
| | |entity. |
|
||||
+--------------------+-----------+------------------------------+
|
||||
|**content** |variable |The "content" of the entity. |
|
||||
| | |(:ref:`See |
|
||||
| | |Below<modelcontent>`) |
|
||||
+--------------------+-----------+------------------------------+
|
||||
|**mimetype** |unicode or |The mimetype of ``content``, |
|
||||
| |``None`` |if any. (:ref:`See |
|
||||
| | |Below<modelcontent>`) |
|
||||
+--------------------+-----------+------------------------------+
|
||||
|**format** |unicode or |The format of ``content``, |
|
||||
| |``None`` |if any. (:ref:`See |
|
||||
| | |Below<modelcontent>`) |
|
||||
+--------------------+-----------+------------------------------+
|
||||
|
||||
.. _modelcontent:
|
||||
Certain model fields vary in structure depending on the ``type`` field of the
|
||||
model. There are three model types: **notebook**, **file**, and **directory** .
|
||||
|
||||
- ``notebook`` models
|
||||
- The ``format`` field is always ``"json"``.
|
||||
- The ``mimetype`` field is always ``None``.
|
||||
- The ``content`` field contains a
|
||||
:class:`nbformat.notebooknode.NotebookNode` representing the .ipynb file
|
||||
represented by the model. See the `NBFormat`_ documentation for a full
|
||||
description.
|
||||
|
||||
- ``file`` models
|
||||
- The ``format`` field is either ``"text"`` or ``"base64"``.
|
||||
- The ``mimetype`` field is ``text/plain`` for text-format models and
|
||||
``application/octet-stream`` for base64-format models.
|
||||
- The ``content`` field is always of type ``unicode``. For text-format
|
||||
file models, ``content`` simply contains the file's bytes after decoding
|
||||
as UTF-8. Non-text (``base64``) files are read as bytes, base64 encoded,
|
||||
and then decoded as UTF-8.
|
||||
|
||||
- ``directory`` models
|
||||
- The ``format`` field is always ``"json"``.
|
||||
- The ``mimetype`` field is always ``None``.
|
||||
- The ``content`` field contains a list of :ref:`content-free<contentfree>`
|
||||
models representing the entities in the directory.
|
||||
|
||||
.. note::
|
||||
|
||||
.. _contentfree:
|
||||
|
||||
In certain circumstances, we don't need the full content of an entity to
|
||||
complete a Contents API request. In such cases, we omit the ``mimetype``,
|
||||
``content``, and ``format`` keys from the model. This most commonly occurs
|
||||
when listing a directory, in which circumstance we represent files within
|
||||
the directory as content-less models to avoid having to recursively traverse
|
||||
and serialize the entire filesystem.
|
||||
|
||||
**Sample Models**
|
||||
|
||||
.. sourcecode:: python
|
||||
|
||||
# Notebook Model with Content
|
||||
{
|
||||
'content': {
|
||||
'metadata': {},
|
||||
'nbformat': 4,
|
||||
'nbformat_minor': 0,
|
||||
'cells': [
|
||||
{
|
||||
'cell_type': 'markdown',
|
||||
'metadata': {},
|
||||
'source': 'Some **Markdown**',
|
||||
},
|
||||
],
|
||||
},
|
||||
'created': datetime(2015, 7, 25, 19, 50, 19, 19865),
|
||||
'format': 'json',
|
||||
'last_modified': datetime(2015, 7, 25, 19, 50, 19, 19865),
|
||||
'mimetype': None,
|
||||
'name': 'a.ipynb',
|
||||
'path': 'foo/a.ipynb',
|
||||
'type': 'notebook',
|
||||
'writable': True,
|
||||
}
|
||||
|
||||
# Notebook Model without Content
|
||||
{
|
||||
'content': None,
|
||||
'created': datetime.datetime(2015, 7, 25, 20, 17, 33, 271931),
|
||||
'format': None,
|
||||
'last_modified': datetime.datetime(2015, 7, 25, 20, 17, 33, 271931),
|
||||
'mimetype': None,
|
||||
'name': 'a.ipynb',
|
||||
'path': 'foo/a.ipynb',
|
||||
'type': 'notebook',
|
||||
'writable': True
|
||||
}
|
||||
|
||||
|
||||
API Paths
|
||||
~~~~~~~~~
|
||||
.. _apipaths:
|
||||
|
||||
ContentsManager methods represent the locations of filesystem resources as
|
||||
**API-style paths**. Such paths are interpreted as relative to the root
|
||||
directory of the notebook server. For compatibility across systems, the
|
||||
following guarantees are made:
|
||||
|
||||
* Paths are always ``unicode``, not ``bytes``.
|
||||
* Paths are not URL-escaped.
|
||||
* Paths are always forward-slash (/) delimited, even on Windows.
|
||||
* Leading and trailing slashes are stripped. For example, ``/foo/bar/buzz/``
|
||||
becomes ``foo/bar/buzz``.
|
||||
* The empty string (``""``) represents the root directory.
|
||||
|
||||
|
||||
Writing a Custom ContentsManager
|
||||
--------------------------------
|
||||
|
||||
The default ContentsManager is designed for users running the notebook as an
|
||||
application on a personal computer. It stores notebooks as .ipynb files on the
|
||||
local filesystem, and it maps files and directories in the Notebook UI to files
|
||||
and directories on disk. It is possible to override how notebooks are stored
|
||||
by implementing your own custom subclass of ``ContentsManager``. For example,
|
||||
if you deploy the notebook in a context where you don't trust or don't have
|
||||
access to the filesystem of the notebook server, it's possible to write your
|
||||
own ContentsManager that stores notebooks and files in a database.
|
||||
|
||||
|
||||
Required Methods
|
||||
~~~~~~~~~~~~~~~~
|
||||
|
||||
A minimal complete implementation of a custom
|
||||
:class:`~manager.ContentsManager` must implement the following
|
||||
methods:
|
||||
|
||||
.. autosummary::
|
||||
ContentsManager.get
|
||||
ContentsManager.save
|
||||
ContentsManager.delete_file
|
||||
ContentsManager.rename_file
|
||||
ContentsManager.file_exists
|
||||
ContentsManager.dir_exists
|
||||
ContentsManager.is_hidden
|
||||
|
||||
|
||||
Customizing Checkpoints
|
||||
-----------------------
|
||||
|
||||
TODO:
|
||||
|
||||
|
||||
Testing
|
||||
-------
|
||||
.. currentmodule:: notebook.services.contents.tests
|
||||
|
||||
:mod:`notebook.services.contents.tests` includes several test suites written
|
||||
against the abstract Contents API. This means that an excellent way to test a
|
||||
new ContentsManager subclass is to subclass our tests to make them use your
|
||||
ContentsManager.
|
||||
|
||||
.. note::
|
||||
|
||||
PGContents_ is an example of a complete implementation of a custom
|
||||
``ContentsManager``. It stores notebooks and files in PostgreSQL_ and encodes
|
||||
directories as SQL relations. PGContents also provides an example of how to
|
||||
re-use the notebook's tests.
|
||||
|
||||
.. _NBFormat: http://nbformat.readthedocs.org/en/latest/index.html
|
||||
.. _PGContents: https://github.com/quantopian/pgcontents
|
||||
.. _PostgreSQL: http://www.postgresql.org/
|
||||
@ -0,0 +1,12 @@
|
||||
======================
|
||||
Extending the Notebook
|
||||
======================
|
||||
|
||||
Certain subsystems of the notebook server are designed to be extended or
|
||||
overridden by users. These documents explain these systems, and show how to
|
||||
override the notebook's defaults with your own custom behavior.
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
contents
|
||||
@ -1,114 +0,0 @@
|
||||
var fork = require('child_process').fork;
|
||||
var fs = require('fs');
|
||||
var path = require('path');
|
||||
|
||||
var through = require('through');
|
||||
var gulp = require('gulp');
|
||||
var less = require('gulp-less');
|
||||
var newer = require('gulp-newer');
|
||||
var rename = require('gulp-rename');
|
||||
var sourcemaps = require('gulp-sourcemaps');
|
||||
|
||||
// now some dev nice utilities.
|
||||
var livereload = require('gulp-livereload');
|
||||
|
||||
gulp.task('css', function () {
|
||||
return gulp.src('./notebook/static/style/*.less')
|
||||
.pipe(sourcemaps.init())
|
||||
.pipe(less({
|
||||
paths: [ path.join(__dirname, 'less', 'includes') ]
|
||||
}))
|
||||
// we don't minify on purpose as it removes rules
|
||||
.pipe(rename({
|
||||
suffix: '.min'
|
||||
}))
|
||||
.pipe(sourcemaps.write('./'))
|
||||
.pipe(gulp.dest('./notebook/static/style'))
|
||||
.pipe(livereload());
|
||||
});
|
||||
|
||||
function build_main(name, callback) {
|
||||
// build main.min.js for a given application name
|
||||
// run in a subprocess to allow parallel builds
|
||||
// clone requirejs config
|
||||
var p = fork('./build-main.js', [name]);
|
||||
p.on('exit', function (code, status) {
|
||||
if (code) {
|
||||
callback(new Error("Build failed"));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
// build notebook-js, edit-js, etc. tasks
|
||||
// which enables parallelism
|
||||
var apps = ['notebook', 'tree', 'edit', 'terminal', 'auth'];
|
||||
|
||||
apps.map(function (name) {
|
||||
gulp.task(name + '-js', function (finish) {
|
||||
var s = path.join('notebook', 'static');
|
||||
var src = path.join(s, name, 'js', 'main.js');
|
||||
var rel_dest = path.join(name, 'js', 'main.min.js');
|
||||
var dest = path.join(s, rel_dest);
|
||||
|
||||
var sources = [
|
||||
path.join(s, name, 'js', '*.js'),
|
||||
path.join(s, "base", 'js', '*.js'),
|
||||
path.join(s, "auth", 'js', '*.js'),
|
||||
path.join(s, "services", 'config.js'),
|
||||
];
|
||||
|
||||
// for required_components
|
||||
if (name === 'notebook') {
|
||||
sources.push(path.join(s, "services", '**', '*.js'));
|
||||
}
|
||||
|
||||
fs.readdirSync(path.join(s, 'components')).map(function (c) {
|
||||
if (c !== 'MathJax') {
|
||||
// skip MathJax because it has tons of files and makes everything super slow
|
||||
sources.push(path.join(s, 'components', c, '**', '*.js'));
|
||||
}
|
||||
});
|
||||
|
||||
// sources is a greedy list, containing all dependencies plus some for simplicity.
|
||||
gulp.src(sources, {base: s})
|
||||
.pipe(newer(dest))
|
||||
.pipe(through(function(file) {
|
||||
// if any dependency changed, update main.min.js
|
||||
console.log("A dependency has changed, updating " + rel_dest);
|
||||
// pause halts the pipeline
|
||||
this.pause();
|
||||
build_main(name, finish);
|
||||
return;
|
||||
}))
|
||||
.on('end', function () {
|
||||
// if we get here, no dependency is newer than the target
|
||||
console.log(rel_dest + " up to date");
|
||||
finish();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
gulp.task('js', apps.map(function (name) { return name + '-js'; }));
|
||||
|
||||
gulp.task('watch', function() {
|
||||
livereload.listen();
|
||||
gulp.watch('notebook/static/**/*.less', ['css']);
|
||||
|
||||
var s = path.join('notebook', 'static');
|
||||
|
||||
function alljs(name) {
|
||||
return path.join(s, name, '**', '*.js');
|
||||
}
|
||||
var common_js = ['components', 'base', 'auth', 'services'].map(alljs);
|
||||
|
||||
gulp.watch(common_js, ['js']);
|
||||
apps.map(function (name) {
|
||||
gulp.watch([
|
||||
alljs(name),
|
||||
'!' + path.join(s, name, 'js', 'main.min.js'),
|
||||
], [name + '-js']);
|
||||
});
|
||||
});
|
||||
@ -1,2 +1,2 @@
|
||||
version_info = (4, 0, 0, 'dev')
|
||||
version_info = (4, 0, 7, 'dev')
|
||||
__version__ = '.'.join(map(str, version_info))
|
||||
|
||||
@ -1,7 +0,0 @@
|
||||
-e git+https://github.com/ipython/traitlets.git#egg=traitlets
|
||||
-e git+https://github.com/jupyter/jupyter_core.git#egg=jupyter_core
|
||||
-e git+https://github.com/jupyter/nbformat.git#egg=nbformat
|
||||
-e git+https://github.com/jupyter/jupyter_client.git#egg=jupyter_client
|
||||
-e git+https://github.com/ipython/ipython.git#egg=ipython
|
||||
-e git+https://github.com/ipython/ipykernel.git#egg=ipykernel
|
||||
-e git+https://github.com/jupyter/nbconvert.git#egg=nbconvert
|
||||