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

Address todos and deprecations for 2.0 #7724

Merged
merged 9 commits into from Jan 4, 2020
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
111 changes: 43 additions & 68 deletions jupyterlab/commands.py
Expand Up @@ -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
Expand All @@ -378,61 +368,56 @@ 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, pin=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, all_=False):
"""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:
return handler.uninstall_all_extensions()
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:
return handler.update_all_extensions()
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
Expand Down Expand Up @@ -463,107 +448,96 @@ 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)


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)


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)


Expand All @@ -590,6 +564,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
Expand Down Expand Up @@ -1186,7 +1161,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:
Expand Down Expand Up @@ -1774,7 +1749,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
Expand Down
3 changes: 1 addition & 2 deletions jupyterlab/extension.py
Expand Up @@ -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":
Expand All @@ -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(core_mode, app_options=build_handler_options)
build_handler = (build_url, BuildHandler, {'builder': builder})
handlers = [build_handler]

Expand Down
6 changes: 2 additions & 4 deletions jupyterlab/handlers/build_handler.py
Expand Up @@ -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
Expand Down
5 changes: 2 additions & 3 deletions jupyterlab/handlers/extension_manager_handler.py
Expand Up @@ -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
Expand Down
46 changes: 0 additions & 46 deletions jupyterlab/labhubapp.py

This file was deleted.

8 changes: 0 additions & 8 deletions jupyterlab/selenium_check.py

This file was deleted.