Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update for JupyterLab 0.3.0 #727

Merged
merged 16 commits into from Sep 13, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
8 changes: 4 additions & 4 deletions jupyter-js-widgets/package.json
@@ -1,6 +1,6 @@
{
"name": "jupyter-js-widgets",
"version": "2.0.0-dev.17",
"version": "2.0.0-dev.19",
"description": "Jupyter interactive widgets",
"author": "Project Jupyter",
"license": "BSD-3-Clause",
Expand Down Expand Up @@ -44,7 +44,6 @@
"es6-promise": "^3.1.2",
"expect.js": "^0.3.1",
"file-loader": "^0.8.5",
"font-awesome": "^4.5.0",
"istanbul-instrumenter-loader": "^0.2.0",
"json-loader": "^0.5.4",
"karma": "^0.13.15",
Expand All @@ -71,11 +70,12 @@
"backbone": "1.2.0",
"bootstrap": "^3.3.5",
"d3-format": "^0.5.1",
"font-awesome": "^4.5.0",
"jquery": "^2.1.4",
"jquery-ui": "1.10.4",
"jupyter-js-services": "^0.15.1",
"jupyter-js-services": "^0.18.0",
"lolex": "^1.4.0",
"phosphor": "^0.5.0",
"phosphor": "^0.6.1",
"scriptjs": "^2.5.8",
"semver": "^5.1.0",
"underscore": "^1.8.3"
Expand Down
3 changes: 3 additions & 0 deletions labextension/MANIFEST.in
@@ -0,0 +1,3 @@
graft widgetslabextension/static
graft src
include package.json
6 changes: 6 additions & 0 deletions labextension/externals.js
@@ -0,0 +1,6 @@
// Copyright (c) Jupyter Development Team.
// Distributed under the terms of the Modified BSD License.

var helpers = require('jupyterlab/scripts/extension_helpers');
console.log('providing jupyter-js-widgets shim handler');
module.exports = helpers.createShimHandler('jupyter-js-widgets');
28 changes: 12 additions & 16 deletions labextension/package.json
@@ -1,41 +1,37 @@
{
"name": "jupyter-js-widgets-labextension",
"private": true,
"name": "widgetslabextension",
"version": "0.1.0",
"description": "The JupyterLab extension providing Jupyter widgets.",
"main": "lib/index.js",
"typings": "lib/index.d.ts",
"dependencies": {
"jupyter-js-widgets": "2.0.0-dev.17",
"jupyterlab": "^0.1.0",
"phosphor": "0.5.0",
"phosphor-disposable": "^1.0.5",
"phosphor-panel": "^1.0.0-rc.1",
"phosphor-widget": "^1.0.0-rc.1"
"jupyter-js-widgets": "file:../jupyter-js-widgets",
"jupyterlab": "^0.3.0",
"phosphor": "^0.6.1"
},
"devDependencies": {
"css-loader": "^0.23.1",
"expect.js": "^0.3.1",
"istanbul": "^0.3.18",
"json-loader": "^0.5.4",
"jupyter-js-services": "^0.15.1",
"jupyter-js-services": "^0.18.1",
"jupyterlab-extension-builder": "^0.3.0",
"mocha": "^2.2.5",
"requirejs": "^2.2.0",
"rimraf": "^2.4.2",
"style-loader": "^0.13.1",
"text-encoding": "^0.5.2",
"typedoc": "^0.4.4",
"typescript": "^1.8.0",
"webpack": "^1.13.1"
"typescript": "^1.8.0"
},
"scripts": {
"clean": "rimraf docs && rimraf lib && rimraf dist",
"clean": "rimraf docs && rimraf lib && rimraf widgetslabextension/static",
"build:src": "tsc --project src",
"build": "npm run build:src",
"build:extension": "node scripts/buildExtension.js",
"build": "npm run build:src && npm run build:extension",
"example:browser": "cd examples/browser && npm run update && npm run build",
"example:node": "cd examples/node && npm install",
"build:examples": "npm run example:browser && npm run example:node",
"docs": "typedoc --mode file --module commonjs --excludeNotExported --target es5 --moduleResolution node --out docs/ src",
"prepublish": "npm run build && webpack"
"prepublish": "npm run build"
},
"repository": {
"type": "git",
Expand Down
17 changes: 17 additions & 0 deletions labextension/scripts/buildExtension.js
@@ -0,0 +1,17 @@
// Copyright (c) Jupyter Development Team.
// Distributed under the terms of the Modified BSD License.

var path = require('path');

var buildExtension = require('jupyterlab-extension-builder').buildExtension;

buildExtension({
name: 'widgetslabextension',
entryPath: './lib/plugin.js',
extractCSS: true,
config: {
output: {
path: path.join(process.cwd(), 'widgetslabextension', 'static'),
}
}
});
2 changes: 2 additions & 0 deletions labextension/setup.cfg
@@ -0,0 +1,2 @@
[bdist_wheel]
universal=1
232 changes: 232 additions & 0 deletions labextension/setup.py
@@ -0,0 +1,232 @@
#!/usr/bin/env python
# coding: utf-8

# Copyright (c) IPython Development Team.
# Distributed under the terms of the Modified BSD License.

from __future__ import print_function

# the name of the package
name = 'widgetslabextension'

DESCRIPTION = 'JupyterLab extension providing HTML widgets'
LONG_DESCRIPTION = """
.. image:: https://img.shields.io/pypi/v/widgetslabextension.svg
:target: https://pypi.python.org/pypi/widgetslabextension/
:alt: Version Number

.. image:: https://img.shields.io/pypi/dm/widgetslabextension.svg
:target: https://pypi.python.org/pypi/widgetslabextension/
:alt: Number of PyPI downloads

Interactive HTML Widgets
========================

Interactive HTML widgets for JupyterLab notebooks.

Usage
=====

Install the corresponding package for your kernel (i.e. Python users would also
install `ipywidgets`). Refer to that package's documentation for usage
instructions.
"""

#-----------------------------------------------------------------------------
# Minimal Python version sanity check
#-----------------------------------------------------------------------------

import sys

v = sys.version_info
if v[:2] < (2,7) or (v[0] >= 3 and v[:2] < (3,3)):
error = "ERROR: %s requires Python version 2.7 or 3.3 or above." % name
print(error, file=sys.stderr)
sys.exit(1)

PY3 = (sys.version_info[0] >= 3)

#-----------------------------------------------------------------------------
# get on with it
#-----------------------------------------------------------------------------

import os
from distutils import log
from setuptools import setup, Command
from setuptools.command.build_py import build_py
from setuptools.command.sdist import sdist
from glob import glob
from os.path import join as pjoin, isfile
from subprocess import check_call

log.set_verbosity(log.DEBUG)
log.info('setup.py entered')
log.info('$PATH=%s' % os.environ['PATH'])

repo_root = os.path.dirname(os.path.abspath(__file__))
is_repo = os.path.exists(pjoin(repo_root, '.git'))

npm_path = os.pathsep.join([
pjoin(repo_root, 'node_modules', '.bin'),
os.environ.get("PATH", os.defpath),
])

def mtime(path):
"""shorthand for mtime"""
return os.stat(path).st_mtime

def js_prerelease(command, strict=False):
"""decorator for building minified js/css prior to another command"""
class DecoratedCommand(command):
def run(self):
jsdeps = self.distribution.get_command_obj('jsdeps')
if not is_repo and all(os.path.exists(t) for t in jsdeps.targets):
# sdist, nothing to do
command.run(self)
return

try:
self.distribution.run_command('jsdeps')
except Exception as e:
missing = [t for t in jsdeps.targets if not os.path.exists(t)]
if strict or missing:
log.warn("rebuilding js and css failed")
if missing:
log.error("missing files: %s" % missing)
raise e
else:
log.warn("rebuilding js and css failed (not a problem)")
log.warn(str(e))
command.run(self)
update_package_data(self.distribution)
return DecoratedCommand


def update_package_data(distribution):
"""update package_data to catch changes during setup"""
build_py = distribution.get_command_obj('build_py')
# distribution.package_data = find_package_data()
# re-init build_py options which load package_data
build_py.finalize_options()


class NPM(Command):
description = "install package,json dependencies using npm"

user_options = []

node_modules = pjoin(repo_root, 'node_modules')

targets = [
pjoin(repo_root, 'widgetslabextension', 'static', 'widgetslabextension.bundle.js')
]

def initialize_options(self):
pass

def finalize_options(self):
pass

def has_npm(self):
try:
check_call(['npm', '--version'])
return True
except:
return False

def should_run_npm_install(self):
package_json = pjoin(repo_root, 'package.json')
node_modules_exists = os.path.exists(self.node_modules)
return self.has_npm()

def run(self):
has_npm = self.has_npm()
if not has_npm:
log.error("`npm` unavailable. If you're running this command using sudo, make sure `npm` is available to sudo")

env = os.environ.copy()
env['PATH'] = npm_path

if self.should_run_npm_install():
log.info("Installing build dependencies with npm. This may take a while...")
check_call(['npm', 'install'], cwd=repo_root, stdout=sys.stdout, stderr=sys.stderr)
os.utime(self.node_modules, None)

for t in self.targets:
if not os.path.exists(t):
msg = "Missing file: %s" % t
if not has_npm:
msg += '\nnpm is required to build a development version of widgetslabextension'
raise ValueError(msg)


# update package data in case this created new files
update_package_data(self.distribution)

pjoin = os.path.join
here = os.path.abspath(os.path.dirname(__file__))
pkg_root = pjoin(here, name)

version_ns = {}
with open(pjoin(here, name, '_version.py')) as f:
exec(f.read(), {}, version_ns)

#STATIC_DIR = './widgetslabextension/static/'
#STATIC_FILES = [pjoin(STATIC_DIR, f) for f in os.listdir(STATIC_DIR)]
#print(STATIC_FILES)

setup_args = dict(
name = name,
version = version_ns['__version__'],
scripts = [],
packages = ['widgetslabextension'],
description = DESCRIPTION,
long_description = LONG_DESCRIPTION,
author = 'Jupyter Development Team',
author_email = 'jupyter@googlegroups.com',
url = 'https://github.com/ipython/ipywidgets',
license = 'BSD',
platforms = "Linux, Mac OS X, Windows",
keywords = ['Interactive', 'Interpreter', 'Shell', 'Web'],
classifiers = [
'Intended Audience :: Developers',
'Intended Audience :: System Administrators',
'Intended Audience :: Science/Research',
'License :: OSI Approved :: BSD License',
'Programming Language :: Python',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.3',
],
cmdclass = {
'build_py': js_prerelease(build_py),
'sdist': js_prerelease(sdist, strict=True),
'jsdeps': NPM,
},
zip_safe=False,
include_package_data = True,
)

if 'develop' in sys.argv or any(a.startswith('bdist') for a in sys.argv):
import setuptools

if 'setuptools' in sys.modules:
# setup.py develop should check for submodules
from setuptools.command.develop import develop
setup_args['cmdclass']['develop'] = js_prerelease(develop, strict=True)

setuptools_args = {}
install_requires = setuptools_args['install_requires'] = [
'notebook>=4.2.0',
]

extras_require = setuptools_args['extras_require'] = {
'test:python_version=="2.7"': ['mock'],
'test': ['nose'],
}

if 'setuptools' in sys.modules:
setup_args.update(setuptools_args)

if __name__ == '__main__':
setup(**setup_args)