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

Ignore source packages when building or loading JupyterLab if there is a prebuilt package #9424

Merged
merged 1 commit into from Dec 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
32 changes: 20 additions & 12 deletions dev_mode/index.js
Expand Up @@ -37,11 +37,15 @@ export async function main() {
PageConfig.getOption('federated_extensions')
);

const queuedFederated = [];

extensions.forEach(data => {
if (data.extension) {
queuedFederated.push(data.name);
federatedExtensionPromises.push(createModule(data.name, data.extension));
}
if (data.mimeExtension) {
queuedFederated.push(data.name);
federatedMimeExtensionPromises.push(createModule(data.name, data.mimeExtension));
}
if (data.style) {
Expand Down Expand Up @@ -82,13 +86,15 @@ export async function main() {
// Handle the registered mime extensions.
const mimeExtensions = [];
{{#each jupyterlab_mime_extensions}}
try {
let ext = require('{{@key}}{{#if this}}/{{this}}{{/if}}');
for (let plugin of activePlugins(ext)) {
mimeExtensions.push(plugin);
if (queuedFederated.indexOf('{{@key}}') === -1) {
try {
let ext = require('{{@key}}{{#if this}}/{{this}}{{/if}}');
for (let plugin of activePlugins(ext)) {
mimeExtensions.push(plugin);
}
} catch (e) {
console.error(e);
}
} catch (e) {
console.error(e);
}
{{/each}}

Expand All @@ -106,13 +112,15 @@ export async function main() {

// Handled the registered standard extensions.
{{#each jupyterlab_extensions}}
try {
let ext = require('{{@key}}{{#if this}}/{{this}}{{/if}}');
for (let plugin of activePlugins(ext)) {
register.push(plugin);
if (queuedFederated.indexOf('{{@key}}') === -1) {
try {
let ext = require('{{@key}}{{#if this}}/{{this}}{{/if}}');
for (let plugin of activePlugins(ext)) {
register.push(plugin);
}
} catch (e) {
console.error(e);
}
} catch (e) {
console.error(e);
}
{{/each}}

Expand Down
28 changes: 26 additions & 2 deletions jupyterlab/commands.py
Expand Up @@ -735,6 +735,18 @@ def list_extensions(self):
logger.info('\nDisabled extensions:')
[logger.info(' %s' % item) for item in sorted(disabled)]

# Here check if modules are improperly shadowed
improper_shadowed = []
for ext_name in self.info['shadowed_exts']:
source_version = self.info['extensions'][ext_name]['version']
prebuilt_version = self.info['federated_extensions'][ext_name]['version']
if not gte(prebuilt_version, source_version, True):
improper_shadowed.append(ext_name)

if improper_shadowed:
logger.info('\nThe following source extensions are overshadowed by older prebuilt extensions:')
[logger.info(' %s' % name) for name in sorted(improper_shadowed)]

messages = self.build_check(fast=True)
if messages:
logger.info('\nBuild recommended, please run `jupyter lab build`:')
Expand Down Expand Up @@ -766,6 +778,8 @@ def build_check(self, fast=False):
msg = 'Version mismatch: %s (built), %s (current)'
return [msg % (static_version, core_version)]

shadowed_exts = self.info['shadowed_exts']

# Look for mismatched extensions.
new_package = self._get_package_template(silent=fast)
new_jlab = new_package['jupyterlab']
Expand All @@ -774,11 +788,15 @@ def build_check(self, fast=False):
for ext_type in ['extensions', 'mimeExtensions']:
# Extensions that were added.
for ext in new_jlab[ext_type]:
if ext in shadowed_exts:
continue
if ext not in old_jlab[ext_type]:
messages.append('%s needs to be included in build' % ext)

# Extensions that were removed.
for ext in old_jlab[ext_type]:
if ext in shadowed_exts:
continue
if ext not in new_jlab[ext_type]:
messages.append('%s needs to be removed from build' % ext)

Expand All @@ -795,15 +813,15 @@ def build_check(self, fast=False):

# Look for updated local extensions.
for (name, source) in local.items():
if fast:
if fast or name in shadowed_exts:
continue
dname = pjoin(app_dir, 'extensions')
if self._check_local(name, source, dname):
messages.append('%s content changed' % name)

# Look for updated linked packages.
for (name, item) in linked.items():
if fast:
if fast or name in shadowed_exts:
continue
dname = pjoin(app_dir, 'staging', 'linked_packages')
if self._check_local(name, item['source'], dname):
Expand Down Expand Up @@ -1090,6 +1108,7 @@ def _get_app_info(self):
info['core_extensions'] = _get_core_extensions(self.core_data)

info['federated_extensions'] = get_federated_extensions(self.labextensions_path)
info['shadowed_exts'] = [ext for ext in info['extensions'] if ext in info['federated_extensions']]
return info

def _ensure_disabled_info(self):
Expand Down Expand Up @@ -1229,6 +1248,7 @@ def _get_package_template(self, silent=False):
local = self.info['local_extensions']
linked = self.info['linked_packages']
extensions = self.info['extensions']
shadowed_exts = self.info['shadowed_exts']
jlab = data['jupyterlab']

def format_path(path):
Expand All @@ -1242,11 +1262,15 @@ def format_path(path):

# Handle local extensions.
for (key, source) in local.items():
if key in shadowed_exts:
continue
jlab['linkedPackages'][key] = source
data['resolutions'][key] = 'file:' + self.info['extensions'][key]['path']

# Handle linked packages.
for (key, item) in linked.items():
if key in shadowed_exts:
continue
path = pjoin(self.app_dir, 'staging', 'linked_packages')
path = pjoin(path, item['filename'])
data['dependencies'][key] = format_path(path)
Expand Down