From db76dcb755d8b9b848bfe551c5b26d72515d4132 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Thu, 2 Jan 2020 14:29:47 -0600 Subject: [PATCH 1/9] address todos and deprecations for 2.0 --- jupyterlab/commands.py | 106 +++++++----------- jupyterlab/extension.py | 3 +- jupyterlab/handlers/build_handler.py | 6 +- .../handlers/extension_manager_handler.py | 5 +- jupyterlab/labhubapp.py | 46 -------- jupyterlab/selenium_check.py | 8 -- packages/coreutils/src/pageconfig.ts | 11 -- packages/notebook/src/panel.ts | 19 ---- packages/rendermime/src/factories.ts | 2 +- packages/rendermime/src/widgets.ts | 2 +- packages/services/src/kernel/manager.ts | 2 - packages/services/src/kernel/messages.ts | 22 ---- packages/services/src/session/manager.ts | 2 - packages/services/src/terminal/manager.ts | 2 - packages/statusbar/src/deprecated.tsx | 52 --------- scripts/ci_script.sh | 3 - .../test-services/src/kernel/messages.spec.ts | 29 ----- 17 files changed, 48 insertions(+), 272 deletions(-) delete mode 100644 jupyterlab/labhubapp.py delete mode 100644 jupyterlab/selenium_check.py delete mode 100644 packages/statusbar/src/deprecated.tsx diff --git a/jupyterlab/commands.py b/jupyterlab/commands.py index 0de688edaac8..f8e1b610c504 100644 --- a/jupyterlab/commands.py +++ b/jupyterlab/commands.py @@ -344,27 +344,17 @@ def _default_registry(self): return config.get("registry", YARN_DEFAULT_REGISTRY) -def _ensure_options(options, **kwargs): +def _ensure_options(options): """Helper to use deprecated kwargs for AppOption""" - optClass = options.__class__ if issubclass(options.__class__, AppOptions) else AppOptions - - # Filter out default-value kwargs - kwargs = dict(filter(lambda item: item[1] is not None, kwargs.items())) - # Warn for deprecated kwargs usage - if kwargs: - warnings.warn( - "Direct keyword args to jupyterlab.commands functions are " - "deprecated, use the options argument instead: %r" % (kwargs,), - DeprecationWarning) if options is None: - return optClass(**kwargs) - # Also support mixed use of options and kwargs: - opt_args = {name: getattr(options, name) for name in options.trait_names()} - kwargs.update(**opt_args) - return optClass(**kwargs) + return AppOptions() + elif issubclass(options.__class__, AppOptions): + return options + else: + return AppOptions(**options) -def watch(app_dir=None, logger=None, core_config=None, app_options=None): +def watch(app_options=None): """Watch the application. Parameters @@ -378,35 +368,32 @@ def watch(app_dir=None, logger=None, core_config=None, app_options=None): ------- A list of processes to run asynchronously. """ - app_options = _ensure_options( - app_options, app_dir=app_dir, logger=logger, core_config=core_config) + app_options = _ensure_options(app_options) _node_check(app_options.logger) handler = _AppHandler(app_options) return handler.watch() -def install_extension(extension, app_dir=None, logger=None, core_config=None, pin=None, app_options=None): +def install_extension(extension, app_options=None): """Install an extension package into JupyterLab. The extension is first validated. Returns `True` if a rebuild is recommended, `False` otherwise. """ - app_options = _ensure_options( - app_options, app_dir=app_dir, logger=logger, core_config=core_config) + app_options = _ensure_options(app_options) _node_check(app_options.logger) handler = _AppHandler(app_options) return handler.install_extension(extension, pin=pin) -def uninstall_extension(name=None, app_dir=None, logger=None, all_=False, core_config=None, app_options=None): +def uninstall_extension(name=None, app_options=None): """Uninstall an extension by name or path. Returns `True` if a rebuild is recommended, `False` otherwise. """ - app_options = _ensure_options( - app_options, app_dir=app_dir, logger=logger, core_config=core_config) + app_options = _ensure_options(app_options) _node_check(app_options.logger) handler = _AppHandler(app_options) if all_ is True: @@ -414,14 +401,13 @@ def uninstall_extension(name=None, app_dir=None, logger=None, all_=False, core_c return handler.uninstall_extension(name) -def update_extension(name=None, all_=False, app_dir=None, logger=None, core_config=None, app_options=None): +def update_extension(name=None, all_=False, app_dir=None, app_options=None): """Update an extension by name, or all extensions. Either `name` must be given as a string, or `all_` must be `True`. If `all_` is `True`, the value of `name` is ignored. Returns `True` if a rebuild is recommended, `False` otherwise. """ - app_options = _ensure_options( - app_options, app_dir=app_dir, logger=logger, core_config=core_config) + app_options = _ensure_options(app_options) _node_check(app_options.logger) handler = _AppHandler(app_options) if all_ is True: @@ -429,10 +415,9 @@ def update_extension(name=None, all_=False, app_dir=None, logger=None, core_conf return handler.update_extension(name) -def clean(app_dir=None, logger=None, app_options=None): +def clean(app_options=None): """Clean the JupyterLab application directory.""" - app_options = _ensure_options( - app_options, app_dir=app_dir, logger=logger) + app_options = _ensure_options(app_options) handler = _AppHandler(app_options) logger = app_options.logger app_dir = app_options.app_dir @@ -463,82 +448,74 @@ def clean(app_dir=None, logger=None, app_options=None): logger.info('All of your extensions have been removed, and will need to be reinstalled') -def build(app_dir=None, name=None, version=None, static_url=None, - logger=None, command='build:prod', kill_event=None, - clean_staging=False, core_config=None, app_options=None): +def build(name=None, version=None, static_url=None, + command='build:prod', kill_event=None, + clean_staging=False, app_options=None): """Build the JupyterLab application. """ - app_options = _ensure_options( - app_options, app_dir=app_dir, logger=logger, core_config=core_config) + app_options = _ensure_options(app_options) _node_check(app_options.logger) handler = _AppHandler(app_options) return handler.build(name=name, version=version, static_url=static_url, command=command, clean_staging=clean_staging) -def get_app_info(app_dir=None, logger=None, core_config=None, app_options=None): +def get_app_info(app_options=None): """Get a dictionary of information about the app. """ - handler = _AppHandler(_ensure_options( - app_options, app_dir=app_dir, logger=logger, core_config=core_config)) + handler = _AppHandler(app_options) return handler.info -def enable_extension(extension, app_dir=None, logger=None, core_config=None, app_options=None): +def enable_extension(extension, app_options=None): """Enable a JupyterLab extension. Returns `True` if a rebuild is recommended, `False` otherwise. """ - handler = _AppHandler(_ensure_options( - app_options, app_dir=app_dir, logger=logger, core_config=core_config)) + handler = _AppHandler(app_options) return handler.toggle_extension(extension, False) -def disable_extension(extension, app_dir=None, logger=None, core_config=None, app_options=None): +def disable_extension(extension, app_options=None): """Disable a JupyterLab package. Returns `True` if a rebuild is recommended, `False` otherwise. """ - handler = _AppHandler(_ensure_options( - app_options, app_dir=app_dir, logger=logger, core_config=core_config)) + handler = _AppHandler(app_options) return handler.toggle_extension(extension, True) -def check_extension(extension, app_dir=None, installed=False, logger=None, core_config=None, app_options=None): +def check_extension(extension, installed=False, app_options=None): """Check if a JupyterLab extension is enabled or disabled. """ - handler = _AppHandler(_ensure_options( - app_options, app_dir=app_dir, logger=logger, core_config=core_config)) + handler = _AppHandler(app_options) return handler.check_extension(extension, installed) -def build_check(app_dir=None, logger=None, core_config=None, app_options=None): +def build_check(app_options=None): """Determine whether JupyterLab should be built. Returns a list of messages. """ - app_options = _ensure_options( - app_options, app_dir=app_dir, logger=logger, core_config=core_config) + app_options = _ensure_options(app_options) _node_check(app_options.logger) handler = _AppHandler(app_options) return handler.build_check() -def list_extensions(app_dir=None, logger=None, core_config=None, app_options=None): +def list_extensions(app_options=None): """List the extensions. """ - handler = _AppHandler(_ensure_options( - app_options, app_dir=app_dir, logger=logger, core_config=core_config)) + handler = _AppHandler(app_options) return handler.list_extensions() -def link_package(path, app_dir=None, logger=None, core_config=None, app_options=None): +def link_package(path, app_options=None): """Link a package against the JupyterLab build. Returns `True` if a rebuild is recommended, `False` otherwise. """ - handler = _AppHandler(_ensure_options( - app_options, app_dir=app_dir, logger=logger, core_config=core_config)) + handler = _AppHandler(app_options) return handler.link_package(path) @@ -552,18 +529,16 @@ def unlink_package(package, app_dir=None, logger=None, core_config=None, app_opt return handler.unlink_package(package) -def get_app_version(app_dir=None, core_config=None, app_options=None): +def get_app_version(app_options=None): """Get the application version.""" - handler = _AppHandler(_ensure_options( - app_options, app_dir=app_dir, core_config=core_config)) + handler = _AppHandler(app_options) return handler.info['version'] -def get_latest_compatible_package_versions(names, app_dir=None, logger=None, core_config=None, app_options=None): +def get_latest_compatible_package_versions(names, app_options=None): """Get the latest compatible version of a list of packages. """ - handler = _AppHandler(_ensure_options( - app_options, app_dir=app_dir, logger=logger, core_config=core_config)) + handler = _AppHandler(app_options) return handler.latest_compatible_package_versions(names) @@ -590,6 +565,7 @@ class _AppHandler(object): def __init__(self, options): """Create a new _AppHandler object """ + options = _ensure_options(options) self.app_dir = options.app_dir self.sys_dir = get_app_dir() if options.use_sys_dir else self.app_dir self.logger = options.logger @@ -1186,7 +1162,7 @@ def _populate_staging(self, name=None, version=None, static_url=None, json.dump(data, fid, indent=4) # copy known-good yarn.lock if missing - lock_path = pjoin(staging, 'yarn.lock') + lock_path = pjoin(staging, 'yarn.lock') lock_template = pjoin(HERE, 'staging', 'yarn.lock') if self.registry != YARN_DEFAULT_REGISTRY: # Replace on the fly the yarn repository see #3658 with open(lock_template, encoding='utf-8') as f: @@ -1774,7 +1750,7 @@ def _node_check(logger): def _yarn_config(logger): """Get the yarn configuration. - + Returns ------- {"yarn config": dict, "npm config": dict} if unsuccessfull the subdictionary are empty diff --git a/jupyterlab/extension.py b/jupyterlab/extension.py index e5c2a1eee889..3facac0d422f 100644 --- a/jupyterlab/extension.py +++ b/jupyterlab/extension.py @@ -145,7 +145,6 @@ def load_jupyter_server_extension(nbapp): page_config['token'] = nbapp.token # Client-side code assumes notebookVersion is a JSON-encoded string - # TODO: fix this when we can make such a change page_config['notebookVersion'] = dumps(version_info) if nbapp.file_to_run and type(nbapp).__name__ == "LabApp": @@ -159,7 +158,7 @@ def load_jupyter_server_extension(nbapp): logger.info('JupyterLab application directory is %s' % app_dir) build_url = ujoin(base_url, build_path) - builder = Builder(None, core_mode, None, app_options=build_handler_options) + builder = Builder(None, core_mode, app_options=build_handler_options) build_handler = (build_url, BuildHandler, {'builder': builder}) handlers = [build_handler] diff --git a/jupyterlab/handlers/build_handler.py b/jupyterlab/handlers/build_handler.py index bcac7ec88ffe..5ac2f76cfa3e 100644 --- a/jupyterlab/handlers/build_handler.py +++ b/jupyterlab/handlers/build_handler.py @@ -22,10 +22,8 @@ class Builder(object): _kill_event = None _future = None - # TODO 2.0: Clean up signature to (self, core_mode, app_options=None) - def __init__(self, log, core_mode, app_dir, core_config=None, app_options=None): - app_options = _ensure_options( - app_options, logger=log, app_dir=app_dir, core_config=core_config) + def __init__(self, core_mode, app_options=None): + app_options = _ensure_options(app_options) self.log = app_options.logger self.core_mode = core_mode self.app_dir = app_options.app_dir diff --git a/jupyterlab/handlers/extension_manager_handler.py b/jupyterlab/handlers/extension_manager_handler.py index 90c7f988aed6..ac33437b83a7 100644 --- a/jupyterlab/handlers/extension_manager_handler.py +++ b/jupyterlab/handlers/extension_manager_handler.py @@ -67,9 +67,8 @@ def _build_check_info(app_options): class ExtensionManager(object): executor = ThreadPoolExecutor(max_workers=1) - # TODO 2.0: Clean up signature to (self, app_options=None) - def __init__(self, log=None, app_dir=None, core_config=None, app_options=None): - app_options = _ensure_options(app_options, logger=log, app_dir=app_dir, core_config=core_config) + def __init__(self, app_options=None): + app_options = _ensure_options(app_options) self.log = app_options.logger self.app_dir = app_options.app_dir self.core_config = app_options.core_config diff --git a/jupyterlab/labhubapp.py b/jupyterlab/labhubapp.py deleted file mode 100644 index 78ad5c1d8e4b..000000000000 --- a/jupyterlab/labhubapp.py +++ /dev/null @@ -1,46 +0,0 @@ -import os -import warnings - -from traitlets import default - -from .labapp import LabApp - -try: - from jupyterhub.singleuser import SingleUserNotebookApp -except ImportError: - SingleUserLabApp = None - raise ImportError('You must have jupyterhub installed for this to work.') -else: - class SingleUserLabApp(SingleUserNotebookApp, LabApp): - """ - A sublcass of JupyterHub's SingleUserNotebookApp which includes LabApp - as a mixin. This makes the LabApp configurables available to the spawned - jupyter server. - - If you don't need to change any of the configurables from their default - values, then this class is not necessary, and you can deploy JupyterLab - by ensuring that its server extension is enabled and setting the - `Spawner.default_url` to '/lab'. - - If you do need to configure JupyterLab, then use this application by - setting `Spawner.cmd = ['jupyter-labhub']`. - """ - @default("default_url") - def _default_url(self): - """when using jupyter-labhub, jupyterlab is default ui""" - return "/lab" - - def init_webapp(self, *args, **kwargs): - warnings.warn( - "SingleUserLabApp is deprecated, use SingleUserNotebookApp and set " + \ - "c.Spawner.default_url = '/lab' in jupyterhub_config.py", DeprecationWarning - ) - super().init_webapp(*args, **kwargs) - - -def main(argv=None): - return SingleUserLabApp.launch_instance(argv) - - -if __name__ == "__main__": - main() diff --git a/jupyterlab/selenium_check.py b/jupyterlab/selenium_check.py deleted file mode 100644 index 23a19686cafb..000000000000 --- a/jupyterlab/selenium_check.py +++ /dev/null @@ -1,8 +0,0 @@ -import warnings - -from .browser_check import * - -warnings.warn("Should switch to using `browser_check.py` instead of `selenium_check.py`", DeprecationWarning) - -if __name__ == '__main__': - BrowserApp.launch_instance() diff --git a/packages/coreutils/src/pageconfig.ts b/packages/coreutils/src/pageconfig.ts index 3e9fe03605a8..49e18787080a 100644 --- a/packages/coreutils/src/pageconfig.ts +++ b/packages/coreutils/src/pageconfig.ts @@ -160,17 +160,6 @@ export namespace PageConfig { return getOption('token') || getBodyData('jupyterApiToken'); } - /** - * Get the Notebook version info [major, minor, patch]. - */ - export function getNotebookVersion(): [number, number, number] { - const notebookVersion = getOption('notebookVersion'); - if (notebookVersion === '') { - return [0, 0, 0]; - } - return JSON.parse(notebookVersion); - } - /** * Private page config data for the Jupyter application. */ diff --git a/packages/notebook/src/panel.ts b/packages/notebook/src/panel.ts index d9f9734ef957..0a321080119d 100644 --- a/packages/notebook/src/panel.ts +++ b/packages/notebook/src/panel.ts @@ -98,13 +98,6 @@ export class NotebookPanel extends DocumentWidget { } } - /** - * A signal emitted when the panel has been activated. - */ - get activated(): ISignal { - return this._activated; - } - /** * The session context used by the panel. */ @@ -157,16 +150,6 @@ export class NotebookPanel extends DocumentWidget { super.dispose(); } - /** - * Handle `'activate-request'` messages. - */ - protected onActivateRequest(msg: Message): void { - super.onActivateRequest(msg); - - // TODO: do we still need to emit this signal? Who is using it? - this._activated.emit(void 0); - } - /** * Prints the notebook by converting to HTML with nbconvert. */ @@ -256,8 +239,6 @@ export class NotebookPanel extends DocumentWidget { }); } - private _activated = new Signal(this); - /** * Whether we are currently in a series of autorestarts we have already * notified the user about. diff --git a/packages/rendermime/src/factories.ts b/packages/rendermime/src/factories.ts index 379817ee596a..7e6cb1cf6a13 100644 --- a/packages/rendermime/src/factories.ts +++ b/packages/rendermime/src/factories.ts @@ -71,7 +71,7 @@ export const textRendererFactory: IRenderMime.IRendererFactory = { }; /** - * A placeholder factory for deprecated rendered JavaScript. + * A placeholder factory for rendered JavaScript. */ export const javaScriptRendererFactory: IRenderMime.IRendererFactory = { safe: false, diff --git a/packages/rendermime/src/widgets.ts b/packages/rendermime/src/widgets.ts index 31273790bb53..4aa8c61f76e3 100644 --- a/packages/rendermime/src/widgets.ts +++ b/packages/rendermime/src/widgets.ts @@ -379,7 +379,7 @@ export class RenderedText extends RenderedCommon { } /** - * A widget for displaying deprecated JavaScript output. + * A widget for displaying JavaScript output. */ export class RenderedJavaScript extends RenderedCommon { /** diff --git a/packages/services/src/kernel/manager.ts b/packages/services/src/kernel/manager.ts index d0b4c86bd16d..0064d0b661d9 100644 --- a/packages/services/src/kernel/manager.ts +++ b/packages/services/src/kernel/manager.ts @@ -247,8 +247,6 @@ export class KernelManager extends BaseManager implements Kernel.IManager { err.response?.status === 503 ) { this._connectionFailure.emit(err); - // TODO: why do we care about resetting models if we are throwing right away? - models = []; } throw err; } diff --git a/packages/services/src/kernel/messages.ts b/packages/services/src/kernel/messages.ts index 128532d8a1b7..32acb0eb2144 100644 --- a/packages/services/src/kernel/messages.ts +++ b/packages/services/src/kernel/messages.ts @@ -132,18 +132,6 @@ export function createMessage( ): T; export function createMessage(options: IOptions): T { - // Backwards compatibility workaround for services 4.0 defining the wrong - // comm_info_request content. This should be removed with the deprecated - // `target` content option in services 5.0. See - // https://github.com/jupyterlab/jupyterlab/issues/6947 - if (options.msgType === 'comm_info_request') { - const content = options.content as ICommInfoRequestMsg['content']; - if (content.target_name === undefined) { - content.target_name = content.target; - } - delete content.target; - } - return { buffers: options.buffers ?? [], channel: options.channel, @@ -1108,16 +1096,6 @@ export interface ICommInfoRequestMsg * The comm target name to filter returned comms */ target_name?: string; - - /** - * Filter for returned comms - * - * @deprecated - this is a non-standard field. Use target_name instead - * - * #### Notes - * See https://github.com/jupyterlab/jupyterlab/issues/6947 - */ - target?: string; }; } diff --git a/packages/services/src/session/manager.ts b/packages/services/src/session/manager.ts index 7468c5f87495..8eeca6d559b7 100644 --- a/packages/services/src/session/manager.ts +++ b/packages/services/src/session/manager.ts @@ -257,8 +257,6 @@ export class SessionManager extends BaseManager implements Session.IManager { err.response?.status === 503 ) { this._connectionFailure.emit(err); - // TODO: why do we care about resetting models if we are throwing right away? - models = []; } throw err; } diff --git a/packages/services/src/terminal/manager.ts b/packages/services/src/terminal/manager.ts index 261664f8ac44..74840efe40f4 100644 --- a/packages/services/src/terminal/manager.ts +++ b/packages/services/src/terminal/manager.ts @@ -219,8 +219,6 @@ export class TerminalManager extends BaseManager implements Terminal.IManager { err.response?.status === 503 ) { this._connectionFailure.emit(err); - // TODO: why do we care about resetting models if we are throwing right away? - models = []; } throw err; } diff --git a/packages/statusbar/src/deprecated.tsx b/packages/statusbar/src/deprecated.tsx deleted file mode 100644 index 8be4627b2551..000000000000 --- a/packages/statusbar/src/deprecated.tsx +++ /dev/null @@ -1,52 +0,0 @@ -/*----------------------------------------------------------------------------- -| Copyright (c) Jupyter Development Team. -| Distributed under the terms of the Modified BSD License. -|----------------------------------------------------------------------------*/ - -/* This file is a workaround for 1.0.x versions of Jlab pulling in 1.1.x -versions of statusbar. -TODO: delete this file in Jlab 2.0 -*/ - -import * as React from 'react'; - -import { classes, style } from 'typestyle/lib'; - -import { NestedCSSProperties } from 'typestyle/lib/types'; - -const icon = (): NestedCSSProperties => { - return { - backgroundRepeat: 'no-repeat', - backgroundPosition: 'center', - backgroundSize: '18px', - minHeight: '24px', - width: '20px' - }; -}; - -/** - * (DEPRECATED) A namespace for IconItem statics. - */ -export namespace IconItem { - /** - * Props for an IconItem - */ - export interface IProps { - /** - * A CSS class name for the icon. - */ - source: string; - } -} - -/** - * (DEPRECATED) A functional tsx component for an icon. - */ -export function IconItem( - props: IconItem.IProps & React.HTMLAttributes -): React.ReactElement { - const { source, className, ...rest } = props; - return ( -
- ); -} diff --git a/scripts/ci_script.sh b/scripts/ci_script.sh index cc8df07a60c7..8cbea9045328 100644 --- a/scripts/ci_script.sh +++ b/scripts/ci_script.sh @@ -193,9 +193,6 @@ if [[ $GROUP == usage ]]; then python -m jupyterlab.browser_check jupyter labextension list --debug - # Make sure the deprecated `selenium_check` command still works - python -m jupyterlab.selenium_check - # Make sure we can non-dev install. virtualenv -p $(which python3) test_install ./test_install/bin/pip install -q ".[test]" # this populates /share/jupyter/lab diff --git a/tests/test-services/src/kernel/messages.spec.ts b/tests/test-services/src/kernel/messages.spec.ts index 9224380701f5..493951d4426a 100644 --- a/tests/test-services/src/kernel/messages.spec.ts +++ b/tests/test-services/src/kernel/messages.spec.ts @@ -168,33 +168,4 @@ describe('kernel/messages', () => { expect(KernelMessage.isInputRequestMsg(msg2)).to.equal(false); }); }); - - describe('KernelMessage.createMessage()', () => { - // Tests deprecated option workaround. Should be deleted in services 5.0. - // See https://github.com/jupyterlab/jupyterlab/pull/6949 - it('contains a backwards-compatibility workaround for services 4.0 for a deprecated comm_info_request content', () => { - let commRequest = KernelMessage.createMessage({ - msgType: 'comm_info_request', - channel: 'shell', - session: 'baz', - content: { - target: 'example' - } - }); - expect(commRequest.content.target_name).to.equal('example'); - expect(commRequest.content.target).to.be.undefined; - - commRequest = KernelMessage.createMessage({ - msgType: 'comm_info_request', - channel: 'shell', - session: 'baz', - content: { - target_name: 'real_target', - target: 'example' - } - }); - expect(commRequest.content.target_name).to.equal('real_target'); - expect(commRequest.content.target).to.be.undefined; - }); - }); }); From ec5d7a5db17915d38cfd90fee0bb98916bb98723 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Thu, 2 Jan 2020 14:34:35 -0600 Subject: [PATCH 2/9] revert unintended change --- packages/coreutils/src/pageconfig.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/packages/coreutils/src/pageconfig.ts b/packages/coreutils/src/pageconfig.ts index 49e18787080a..3e9fe03605a8 100644 --- a/packages/coreutils/src/pageconfig.ts +++ b/packages/coreutils/src/pageconfig.ts @@ -160,6 +160,17 @@ export namespace PageConfig { return getOption('token') || getBodyData('jupyterApiToken'); } + /** + * Get the Notebook version info [major, minor, patch]. + */ + export function getNotebookVersion(): [number, number, number] { + const notebookVersion = getOption('notebookVersion'); + if (notebookVersion === '') { + return [0, 0, 0]; + } + return JSON.parse(notebookVersion); + } + /** * Private page config data for the Jupyter application. */ From 44841bb354fb28e6c52d206d9ff96a99845752af Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Thu, 2 Jan 2020 14:48:42 -0600 Subject: [PATCH 3/9] remove deprecated import --- packages/statusbar/src/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/statusbar/src/index.ts b/packages/statusbar/src/index.ts index 60ebbd28c883..61a6aa1ae6f3 100644 --- a/packages/statusbar/src/index.ts +++ b/packages/statusbar/src/index.ts @@ -7,6 +7,5 @@ export * from './components'; export * from './defaults'; export * from './style/statusbar'; -export * from './deprecated'; export * from './statusbar'; export * from './tokens'; From 8b279140c474c845b4820f62365849b10049a012 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Thu, 2 Jan 2020 15:10:53 -0600 Subject: [PATCH 4/9] cleanup --- packages/notebook/src/panel.ts | 4 -- packages/statusbar/src/index.ts | 1 + packages/ui-components/src/deprecated.tsx | 52 +++++++++++++++++++++++ 3 files changed, 53 insertions(+), 4 deletions(-) create mode 100644 packages/ui-components/src/deprecated.tsx diff --git a/packages/notebook/src/panel.ts b/packages/notebook/src/panel.ts index 0a321080119d..8c039e48674b 100644 --- a/packages/notebook/src/panel.ts +++ b/packages/notebook/src/panel.ts @@ -9,10 +9,6 @@ import { each } from '@lumino/algorithm'; import { Token } from '@lumino/coreutils'; -import { Message } from '@lumino/messaging'; - -import { ISignal, Signal } from '@lumino/signaling'; - import { ISessionContext, Printing, diff --git a/packages/statusbar/src/index.ts b/packages/statusbar/src/index.ts index 61a6aa1ae6f3..60ebbd28c883 100644 --- a/packages/statusbar/src/index.ts +++ b/packages/statusbar/src/index.ts @@ -7,5 +7,6 @@ export * from './components'; export * from './defaults'; export * from './style/statusbar'; +export * from './deprecated'; export * from './statusbar'; export * from './tokens'; diff --git a/packages/ui-components/src/deprecated.tsx b/packages/ui-components/src/deprecated.tsx new file mode 100644 index 000000000000..8be4627b2551 --- /dev/null +++ b/packages/ui-components/src/deprecated.tsx @@ -0,0 +1,52 @@ +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/* This file is a workaround for 1.0.x versions of Jlab pulling in 1.1.x +versions of statusbar. +TODO: delete this file in Jlab 2.0 +*/ + +import * as React from 'react'; + +import { classes, style } from 'typestyle/lib'; + +import { NestedCSSProperties } from 'typestyle/lib/types'; + +const icon = (): NestedCSSProperties => { + return { + backgroundRepeat: 'no-repeat', + backgroundPosition: 'center', + backgroundSize: '18px', + minHeight: '24px', + width: '20px' + }; +}; + +/** + * (DEPRECATED) A namespace for IconItem statics. + */ +export namespace IconItem { + /** + * Props for an IconItem + */ + export interface IProps { + /** + * A CSS class name for the icon. + */ + source: string; + } +} + +/** + * (DEPRECATED) A functional tsx component for an icon. + */ +export function IconItem( + props: IconItem.IProps & React.HTMLAttributes +): React.ReactElement { + const { source, className, ...rest } = props; + return ( +
+ ); +} From 8ae13e6382c99470b6a53e8758e422f8fe11e3af Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Thu, 2 Jan 2020 15:39:22 -0600 Subject: [PATCH 5/9] fix module location --- packages/{ui-components => statusbar}/src/deprecated.tsx | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename packages/{ui-components => statusbar}/src/deprecated.tsx (100%) diff --git a/packages/ui-components/src/deprecated.tsx b/packages/statusbar/src/deprecated.tsx similarity index 100% rename from packages/ui-components/src/deprecated.tsx rename to packages/statusbar/src/deprecated.tsx From 1012d31606913d179eb18e569a89324f23c22aba Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Thu, 2 Jan 2020 15:51:45 -0600 Subject: [PATCH 6/9] update test --- tests/test-services/src/kernel/comm.spec.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test-services/src/kernel/comm.spec.ts b/tests/test-services/src/kernel/comm.spec.ts index bdbf325f3c02..bb9181e07d1c 100644 --- a/tests/test-services/src/kernel/comm.spec.ts +++ b/tests/test-services/src/kernel/comm.spec.ts @@ -188,9 +188,9 @@ describe('jupyter.services - Comm', () => { comm.dispose(); }); - it('should allow an optional target', async () => { + it('should allow an optional target name', async () => { await kernel.requestExecute({ code: SEND }, true).done; - const msg = await kernel.requestCommInfo({ target: 'test' }); + const msg = await kernel.requestCommInfo({ target_name: 'test' }); if (msg.content.status !== 'ok') { throw new Error('Message error'); } From c4fb2548f7a9dface7a8968a2b2fbab90fcd514e Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Thu, 2 Jan 2020 17:17:36 -0600 Subject: [PATCH 7/9] cleanup --- jupyterlab/commands.py | 5 ++--- jupyterlab/extension.py | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/jupyterlab/commands.py b/jupyterlab/commands.py index f8e1b610c504..ba9f5bf1123a 100644 --- a/jupyterlab/commands.py +++ b/jupyterlab/commands.py @@ -519,13 +519,12 @@ def link_package(path, app_options=None): return handler.link_package(path) -def unlink_package(package, app_dir=None, logger=None, core_config=None, app_options=None): +def unlink_package(package, app_options=None): """Unlink a package from JupyterLab by path or name. Returns `True` if a rebuild is recommended, `False` otherwise. """ - handler = _AppHandler(_ensure_options( - app_options, app_dir=app_dir, logger=logger, core_config=core_config)) + handler = _AppHandler(app_options) return handler.unlink_package(package) diff --git a/jupyterlab/extension.py b/jupyterlab/extension.py index 3facac0d422f..23bee4a86df4 100644 --- a/jupyterlab/extension.py +++ b/jupyterlab/extension.py @@ -158,7 +158,7 @@ def load_jupyter_server_extension(nbapp): logger.info('JupyterLab application directory is %s' % app_dir) build_url = ujoin(base_url, build_path) - builder = Builder(None, core_mode, app_options=build_handler_options) + builder = Builder(core_mode, app_options=build_handler_options) build_handler = (build_url, BuildHandler, {'builder': builder}) handlers = [build_handler] From 284014a05e6310bb073f5970c33bf919a53f9496 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Fri, 3 Jan 2020 09:41:05 -0600 Subject: [PATCH 8/9] Replace missing kwarg --- jupyterlab/commands.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jupyterlab/commands.py b/jupyterlab/commands.py index ba9f5bf1123a..fe98d3e3633b 100644 --- a/jupyterlab/commands.py +++ b/jupyterlab/commands.py @@ -375,7 +375,7 @@ def watch(app_options=None): -def install_extension(extension, app_options=None): +def install_extension(extension, app_options=None, pin=None): """Install an extension package into JupyterLab. The extension is first validated. From 139f3ff0bc7f3c84f2ab9b44c04496fbc10d1163 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Fri, 3 Jan 2020 09:51:49 -0600 Subject: [PATCH 9/9] Replace missing kwarg --- jupyterlab/commands.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jupyterlab/commands.py b/jupyterlab/commands.py index fe98d3e3633b..f86df31f18df 100644 --- a/jupyterlab/commands.py +++ b/jupyterlab/commands.py @@ -388,7 +388,7 @@ def install_extension(extension, app_options=None, pin=None): return handler.install_extension(extension, pin=pin) -def uninstall_extension(name=None, app_options=None): +def uninstall_extension(name=None, app_options=None, all_=False): """Uninstall an extension by name or path. Returns `True` if a rebuild is recommended, `False` otherwise.