def test_app_dir_shadowing(self): app_dir = self.tempdir() sys_dir = self.app_dir if os.path.exists(sys_dir): os.removedirs(sys_dir) assert install_extension(self.mock_extension) is True sys_path = pjoin(sys_dir, 'extensions', '*.tgz') assert glob.glob(sys_path) app_path = pjoin(app_dir, 'extensions', '*.tgz') assert not glob.glob(app_path) extensions = get_app_info(app_dir)['extensions'] ext_name = self.pkg_names['extension'] assert ext_name in extensions assert check_extension(ext_name, app_dir) assert install_extension(self.mock_extension, app_dir) is True assert glob.glob(app_path) extensions = get_app_info(app_dir)['extensions'] assert ext_name in extensions assert check_extension(ext_name, app_dir) assert uninstall_extension(self.pkg_names['extension'], app_dir) is True assert not glob.glob(app_path) assert glob.glob(sys_path) extensions = get_app_info(app_dir)['extensions'] assert ext_name in extensions assert check_extension(ext_name, app_dir) assert uninstall_extension(self.pkg_names['extension'], app_dir) is True assert not glob.glob(app_path) assert not glob.glob(sys_path) extensions = get_app_info(app_dir)['extensions'] assert ext_name not in extensions assert not check_extension(ext_name, app_dir)
def test_app_dir(self): app_dir = self.tempdir() assert install_extension(self.mock_extension, app_dir) is True path = pjoin(app_dir, 'extensions', '*.tgz') assert glob.glob(path) extensions = get_app_info(app_dir)['extensions'] ext_name = self.pkg_names['extension'] assert ext_name in extensions assert check_extension(ext_name, app_dir) assert uninstall_extension(self.pkg_names['extension'], app_dir) is True path = pjoin(app_dir, 'extensions', '*.tgz') assert not glob.glob(path) extensions = get_app_info(app_dir)['extensions'] assert ext_name not in extensions assert not check_extension(ext_name, app_dir) assert link_package(self.mock_package, app_dir) is True linked = get_app_info(app_dir)['linked_packages'] pkg_name = self.pkg_names['package'] assert pkg_name in linked assert check_extension(pkg_name, app_dir) assert unlink_package(self.mock_package, app_dir) is True linked = get_app_info(app_dir)['linked_packages'] assert pkg_name not in linked assert not check_extension(pkg_name, app_dir)
def test_install_mime_renderer(self): install_extension(self.mock_mimeextension) name = self.pkg_names['mimeextension'] assert name in get_app_info(self.app_dir)['extensions'] assert check_extension(name) assert uninstall_extension(name) is True assert name not in get_app_info(self.app_dir)['extensions'] assert not check_extension(name)
def test_link_package(self): path = self.mock_package name = self.pkg_names['package'] assert link_package(path) is True app_dir = self.app_dir linked = get_app_info(app_dir)['linked_packages'] assert name in linked assert name not in get_app_info(app_dir)['extensions'] assert check_extension(name) assert unlink_package(path) linked = get_app_info(app_dir)['linked_packages'] assert name not in linked assert not check_extension(name)
def test_unlink_package(self): target = self.mock_package assert link_package(target) is True assert unlink_package(target) is True linked = get_app_info(self.app_dir)['linked_packages'] name = self.pkg_names['package'] assert name not in linked assert not check_extension(name)
def test_install_extension(self): assert install_extension(self.mock_extension) is True path = pjoin(self.app_dir, 'extensions', '*.tgz') assert glob.glob(path) extensions = get_app_info(self.app_dir)['extensions'] name = self.pkg_names['extension'] assert name in extensions assert check_extension(name)
def test_disable_extension(self): app_dir = self.tempdir() assert install_extension(self.mock_extension, app_dir) is True assert disable_extension(self.pkg_names['extension'], app_dir) is True info = get_app_info(app_dir) name = self.pkg_names['extension'] assert name in info['disabled'] assert not check_extension(name, app_dir) assert check_extension(name, app_dir, True) assert disable_extension('@jupyterlab/notebook-extension', app_dir) is True info = get_app_info(app_dir) assert '@jupyterlab/notebook-extension' in info['disabled'] assert not check_extension('@jupyterlab/notebook-extension', app_dir) assert check_extension('@jupyterlab/notebook-extension', app_dir, True) assert name in info['disabled'] assert not check_extension(name, app_dir) assert check_extension(name, app_dir, True)
def test_install_extension(self): assert install_extension(self.mock_extension) is True path = pjoin(self.app_dir, 'extensions', '*.tgz') assert glob.glob(path) extensions = get_app_info()['extensions'] name = self.pkg_names['extension'] assert name in extensions assert check_extension(name)
def test_install_twice(self): assert install_extension(self.mock_extension) is True path = pjoin(self.app_dir, "extensions", "*.tgz") assert install_extension(self.mock_extension) is True assert glob.glob(path) extensions = get_app_info()["extensions"] name = self.pkg_names["extension"] assert name in extensions assert check_extension(name)
def test_install_twice(self): install_extension(self.mock_extension) path = pjoin(commands.get_app_dir(), 'extensions', '*.tgz') install_extension(self.mock_extension) assert glob.glob(path) extensions = get_app_info(self.app_dir)['extensions'] name = self.pkg_names['extension'] assert name in extensions assert check_extension(name)
def test_install_twice(self): install_extension(self.mock_extension) path = pjoin(commands.get_app_dir(), 'extensions', '*.tgz') install_extension(self.mock_extension) assert glob.glob(path) extensions = get_app_info(self.app_dir)['extensions'] name = self.pkg_names['extension'] assert name in extensions assert check_extension(name)
def test_disable_extension(self): app_dir = self.tempdir() assert install_extension(self.mock_extension, app_dir) is True assert disable_extension(self.pkg_names['extension'], app_dir) is True info = get_app_info(app_dir) name = self.pkg_names['extension'] assert name in info['disabled'] assert not check_extension(name, app_dir) assert check_extension(name, app_dir, True) assert disable_extension('@jupyterlab/notebook-extension', app_dir) is True info = get_app_info(app_dir) assert '@jupyterlab/notebook-extension' in info['disabled'] assert not check_extension('@jupyterlab/notebook-extension', app_dir) assert check_extension('@jupyterlab/notebook-extension', app_dir, True) assert name in info['disabled'] assert not check_extension(name, app_dir) assert check_extension(name, app_dir, True)
def test_install_failed(self): path = self.mock_package with pytest.raises(ValueError): install_extension(path) with open(pjoin(path, 'package.json')) as fid: data = json.load(fid) extensions = get_app_info(self.app_dir)['extensions'] name = data['name'] assert name not in extensions assert not check_extension(name)
def test_uninstall_extension(self): install_extension(self.mock_extension) name = self.pkg_names['extension'] assert check_extension(name) uninstall_extension(self.pkg_names['extension']) path = pjoin(self.app_dir, 'extensions', '*.tgz') assert not glob.glob(path) extensions = get_app_info(self.app_dir)['extensions'] assert name not in extensions assert not check_extension(name)
def test_uninstall_extension(self): install_extension(self.mock_extension) name = self.pkg_names['extension'] assert check_extension(name) uninstall_extension(self.pkg_names['extension']) path = pjoin(self.app_dir, 'extensions', '*.tgz') assert not glob.glob(path) extensions = get_app_info(self.app_dir)['extensions'] assert name not in extensions assert not check_extension(name)
def test_enable_extension(self): app_dir = self.tempdir() install_extension(self.mock_extension, app_dir) disable_extension(self.pkg_names['extension'], app_dir) enable_extension(self.pkg_names['extension'], app_dir) info = get_app_info(app_dir) assert self.pkg_names['extension'] not in info['disabled'] disable_extension('@jupyterlab/notebook-extension', app_dir) assert self.pkg_names['extension'] not in info['disabled'] assert '@jupyterlab/notebook-extension' not in info['disabled']
def test_install_failed(self): path = self.mock_package with pytest.raises(ValueError): install_extension(path) with open(pjoin(path, 'package.json')) as fid: data = json.load(fid) extensions = get_app_info()['extensions'] name = data['name'] assert name not in extensions assert not check_extension(name)
def test_app_dir_use_sys_prefix(self): app_dir = self.tempdir() if os.path.exists(self.app_dir): os.removedirs(self.app_dir) install_extension(self.mock_extension) path = pjoin(app_dir, 'extensions', '*.tgz') assert not glob.glob(path) extensions = get_app_info(app_dir)['extensions'] assert self.pkg_names['extension'] in extensions
def test_uninstall_all_extensions(self): install_extension(self.mock_extension) install_extension(self.mock_mimeextension) ext_name = self.pkg_names['extension'] mime_ext_name = self.pkg_names['mimeextension'] assert check_extension(ext_name) is True assert check_extension(mime_ext_name) is True assert uninstall_extension(all_=True) is True extensions = get_app_info(self.app_dir)['extensions'] assert ext_name not in extensions assert mime_ext_name not in extensions
def test_uninstall_all_extensions(self): install_extension(self.mock_extension) install_extension(self.mock_mimeextension) ext_name = self.pkg_names['extension'] mime_ext_name = self.pkg_names['mimeextension'] assert check_extension(ext_name) is True assert check_extension(mime_ext_name) is True assert uninstall_extension(all_=True) is True extensions = get_app_info()['extensions'] assert ext_name not in extensions assert mime_ext_name not in extensions
def test_app_dir_use_sys_prefix(self): app_dir = self.tempdir() if os.path.exists(self.app_dir): os.removedirs(self.app_dir) assert install_extension(self.mock_extension) is True path = pjoin(app_dir, 'extensions', '*.tgz') assert not glob.glob(path) extensions = get_app_info(app_dir)['extensions'] ext_name = self.pkg_names['extension'] assert ext_name in extensions assert check_extension(ext_name, app_dir)
def test_app_dir(self): app_dir = self.tempdir() install_extension(self.mock_extension, app_dir) path = pjoin(app_dir, 'extensions', '*.tgz') assert glob.glob(path) extensions = get_app_info(app_dir)['extensions'] assert self.pkg_names['extension'] in extensions uninstall_extension(self.pkg_names['extension'], app_dir) path = pjoin(app_dir, 'extensions', '*.tgz') assert not glob.glob(path) extensions = get_app_info(app_dir)['extensions'] assert self.pkg_names['extension'] not in extensions link_package(self.mock_package, app_dir) linked = get_app_info(app_dir)['linked_packages'] assert self.pkg_names['package'] in linked unlink_package(self.mock_package, app_dir) linked = get_app_info(app_dir)['linked_packages'] assert self.pkg_names['package'] not in linked
def test_app_dir_disable_sys_prefix(self): app_dir = self.tempdir() options = AppOptions(app_dir=app_dir, use_sys_dir=False) if os.path.exists(self.app_dir): os.removedirs(self.app_dir) assert install_extension(self.mock_extension) is True path = pjoin(app_dir, 'extensions', '*.tgz') assert not glob.glob(path) extensions = get_app_info(app_options=options)['extensions'] ext_name = self.pkg_names['extension'] assert ext_name not in extensions assert not check_extension(ext_name, app_options=options)
def test_app_dir_shadowing(self): app_dir = self.tempdir() sys_dir = self.app_dir app_options = AppOptions(app_dir=app_dir) if os.path.exists(sys_dir): os.removedirs(sys_dir) assert install_extension(self.mock_extension) is True sys_path = pjoin(sys_dir, 'extensions', '*.tgz') assert glob.glob(sys_path) app_path = pjoin(app_dir, 'extensions', '*.tgz') assert not glob.glob(app_path) extensions = get_app_info(app_options=app_options)['extensions'] ext_name = self.pkg_names['extension'] assert ext_name in extensions assert check_extension(ext_name, app_options=app_options) assert install_extension(self.mock_extension, app_options=app_options) is True assert glob.glob(app_path) extensions = get_app_info(app_options=app_options)['extensions'] assert ext_name in extensions assert check_extension(ext_name, app_options=app_options) assert uninstall_extension(self.pkg_names['extension'], app_options=app_options) is True assert not glob.glob(app_path) assert glob.glob(sys_path) extensions = get_app_info(app_options=app_options)['extensions'] assert ext_name in extensions assert check_extension(ext_name, app_options=app_options) assert uninstall_extension(self.pkg_names['extension'], app_options=app_options) is True assert not glob.glob(app_path) assert not glob.glob(sys_path) extensions = get_app_info(app_options=app_options)['extensions'] assert ext_name not in extensions assert not check_extension(ext_name, app_options=app_options)
def test_enable_extension(self): options = AppOptions(app_dir=self.tempdir()) assert install_extension(self.mock_extension, app_options=options) is True assert disable_extension(self.pkg_names['extension'], app_options=options) is True assert enable_extension(self.pkg_names['extension'], app_options=options) is True info = get_app_info(app_options=options) assert '@jupyterlab/notebook-extension' not in info['disabled'] name = self.pkg_names['extension'] assert info['disabled'].get(name, False) is False assert check_extension(name, app_options=options) assert disable_extension('@jupyterlab/notebook-extension', app_options=options) is True assert check_extension(name, app_options=options) assert not check_extension('@jupyterlab/notebook-extension', app_options=options)
def test_app_dir_use_sys_prefix(self): app_dir = self.tempdir() options = AppOptions(app_dir=app_dir) if os.path.exists(self.app_dir): os.removedirs(self.app_dir) assert install_extension(self.mock_extension) is True path = pjoin(app_dir, "extensions", "*.tgz") assert not glob.glob(path) extensions = get_app_info(app_options=options)["extensions"] ext_name = self.pkg_names["extension"] assert ext_name in extensions assert check_extension(ext_name, app_options=options)
def test_disable_extension(self): options = AppOptions(app_dir=self.tempdir()) assert install_extension(self.mock_extension, app_options=options) is True assert disable_extension(self.pkg_names["extension"], app_options=options) is True info = get_app_info(app_options=options) name = self.pkg_names["extension"] assert info["disabled"].get(name) is True assert not check_extension(name, app_options=options) assert check_extension(name, installed=True, app_options=options) assert disable_extension("@jupyterlab/notebook-extension", app_options=options) is True info = get_app_info(app_options=options) assert info["disabled"].get("@jupyterlab/notebook-extension") is True assert not check_extension("@jupyterlab/notebook-extension", app_options=options) assert check_extension("@jupyterlab/notebook-extension", installed=True, app_options=options) assert info["disabled"].get(name) is True assert not check_extension(name, app_options=options) assert check_extension(name, installed=True, app_options=options)
def test_install_and_uninstall_pinned(self): """ You should be able to install different versions of the same extension with different pinned names and uninstall them with those names. """ NAMES = ['test-1', 'test-2'] assert install_extension(self.pinned_packages[0], pin=NAMES[0]) assert install_extension(self.pinned_packages[1], pin=NAMES[1]) extensions = get_app_info()['extensions'] assert NAMES[0] in extensions assert NAMES[1] in extensions assert check_extension(NAMES[0]) assert check_extension(NAMES[1]) # Uninstall assert uninstall_extension(NAMES[0]) assert uninstall_extension(NAMES[1]) extensions = get_app_info()['extensions'] assert NAMES[0] not in extensions assert NAMES[1] not in extensions assert not check_extension(NAMES[0]) assert not check_extension(NAMES[1])
def list_extensions(self): """Handle a request for all installed extensions""" info = get_app_info(app_dir=self.app_dir, logger=self.log) build_check_info = _build_check_info(self.app_dir, self.log) _ensure_compat_errors(info, self.app_dir, self.log) extensions = [] # TODO: Ensure loops can run in parallel for name, data in info['extensions'].items(): status = 'ok' pkg_info = yield self._get_pkg_info(name, data) if info['compat_errors'].get(name, None): status = 'error' else: for packages in build_check_info.values(): if name in packages: status = 'warning' extensions.append(_make_extension_entry( name=name, description=pkg_info['description'], enabled=(name not in info['disabled']), core=False, # Use wanted version to ensure we limit ourselves # within semver restrictions latest_version=pkg_info['latest_version'], installed_version=data['version'], status=status, )) for name in build_check_info['uninstall']: data = yield self._get_scheduled_uninstall_info(name) extensions.append(_make_extension_entry( name=name, description=data['description'], installed=False, enabled=False, core=False, latest_version=data['version'], installed_version=data['version'], status='warning', )) raise gen.Return(extensions)
def load_config(nbapp): app_url = '/' if nbapp.file_to_run else '/phoila' config = LabConfig(app_url=app_url, tree_url="/voila/tree") app_dir = getattr(nbapp, "app_dir", get_app_dir(default=APP_DIR_DEFAULT)) info = get_app_info(app_dir) static_url = info["staticUrl"] user_settings_dir = getattr( nbapp, "user_settings_dir", get_user_settings_dir(default=USER_SETTINGS_DIR_DEFAULT), ) workspaces_dir = getattr( nbapp, "workspaces_dir", get_workspaces_dir(default=WORKSPACES_DIR_DEFAULT)) config.app_dir = app_dir config.app_name = "Phoila" config.app_namespace = "phoila" config.app_settings_dir = os.path.join(app_dir, "settings") config.cache_files = True config.schemas_dir = os.path.join(app_dir, "schemas") config.templates_dir = os.path.join(app_dir, "static") config.themes_dir = os.path.join(app_dir, "themes") config.user_settings_dir = user_settings_dir config.workspaces_dir = workspaces_dir if getattr(nbapp, "override_static_url", ""): static_url = nbapp.override_static_url if getattr(nbapp, "override_theme_url", ""): config.themes_url = nbapp.override_theme_url config.themes_dir = "" if static_url: config.static_url = static_url else: config.static_dir = os.path.join(app_dir, "static") return config
import logging import sys from jupyterlab.commands import get_app_info from notebook.nbextensions import validate_nbextension from notebook.serverextensions import validate_serverextension # If there's a problem and we don't provide this, the validate function crashes :-( logger = logging.getLogger('') if validate_nbextension('pywwt/extension', logger=logger) != []: print("Issue detected with nbextension") sys.exit(1) info = get_app_info() if 'pywwt' not in info['extensions'] or 'pywwt' in info['disabled']: print("Issue detected with labextension") sys.exit(1) if validate_serverextension('pywwt', logger=logger) != []: print("Issue detected with serverextension") sys.exit(1)
def test_unlink_package(self): target = self.mock_package link_package(target) unlink_package(target) linked = get_app_info(self.app_dir)['linked_packages'] assert self.pkg_names['package'] not in linked
def test_install_extension(self): install_extension(self.mock_extension) path = pjoin(self.app_dir, 'extensions', '*.tgz') assert glob.glob(path) extensions = get_app_info(self.app_dir)['extensions'] assert self.pkg_names['extension'] in extensions