Skip to content

Commit

Permalink
Fallback for sys.prefix not being returned by Python extension (#6053)
Browse files Browse the repository at this point in the history
  • Loading branch information
DonJayamanne authored Jun 2, 2021
1 parent b811554 commit e4e7261
Show file tree
Hide file tree
Showing 7 changed files with 28 additions and 11 deletions.
3 changes: 0 additions & 3 deletions .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -195,8 +195,6 @@ module.exports = {
'src/test/datascience/progress/decorators.unit.test.ts',
'src/test/datascience/kernel-launcher/kernelDaemonPool.unit.test.ts',
'src/test/datascience/kernel-launcher/kernelLauncherDaemon.unit.test.ts',
'src/test/datascience/ipywidgets/ipyWidgetScriptSourceProvider.unit.test.ts',
'src/test/datascience/ipywidgets/localWidgetScriptSourceProvider.unit.test.ts',
'src/test/datascience/ipywidgets/incompatibleWidgetHandler.unit.test.ts',
'src/test/datascience/datascienceSurveyBanner.unit.test.ts',
'src/test/datascience/intellisense.functional.test.tsx',
Expand Down Expand Up @@ -795,7 +793,6 @@ module.exports = {
'src/client/datascience/progress/decorator.ts',
'src/client/datascience/codeCssGenerator.ts',
'src/client/datascience/kernel-launcher/kernelDaemonPool.ts',
'src/client/datascience/ipywidgets/localWidgetScriptSourceProvider.ts',
'src/client/datascience/ipywidgets/rceProvider.ts',
'src/client/datascience/ipywidgets/types.ts',
'src/client/datascience/ipywidgets/remoteWidgetScriptSourceProvider.ts',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import { IApplicationShell, ICommandManager, IWorkspaceService } from '../../com
import { STANDARD_OUTPUT_CHANNEL } from '../../common/constants';
import { traceError, traceInfo } from '../../common/logger';
import { IFileSystem } from '../../common/platform/types';
import { IPythonExecutionFactory } from '../../common/process/types';
import {
IConfigurationService,
IDisposableRegistry,
Expand Down Expand Up @@ -224,7 +225,8 @@ export class CommonMessageCoordinator {
this.serviceContainer.get<IApplicationShell>(IApplicationShell),
this.serviceContainer.get<IWorkspaceService>(IWorkspaceService),
this.serviceContainer.get<IPersistentStateFactory>(IPersistentStateFactory),
this.serviceContainer.get<IExtensionContext>(IExtensionContext)
this.serviceContainer.get<IExtensionContext>(IExtensionContext),
this.serviceContainer.get<IPythonExecutionFactory>(IPythonExecutionFactory)
);
this.disposables.push(this.ipyWidgetScriptSource.postMessage(this.cacheOrSend, this));
}
Expand Down
7 changes: 5 additions & 2 deletions src/client/datascience/ipywidgets/ipyWidgetScriptSource.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import { Event, EventEmitter, Uri } from 'vscode';
import { IApplicationShell, IWorkspaceService } from '../../common/application/types';
import { traceError, traceInfo } from '../../common/logger';
import { IFileSystem } from '../../common/platform/types';
import { IPythonExecutionFactory } from '../../common/process/types';

import {
IConfigurationService,
Expand Down Expand Up @@ -70,7 +71,8 @@ export class IPyWidgetScriptSource implements ILocalResourceUriConverter {
private readonly appShell: IApplicationShell,
private readonly workspaceService: IWorkspaceService,
private readonly stateFactory: IPersistentStateFactory,
extensionContext: IExtensionContext
extensionContext: IExtensionContext,
private readonly factory: IPythonExecutionFactory
) {
this._rootScriptFolder = path.join(extensionContext.extensionPath, 'tmp', 'scripts');
this.targetWidgetScriptsFolder = path.join(this._rootScriptFolder, 'nbextensions');
Expand Down Expand Up @@ -195,7 +197,8 @@ export class IPyWidgetScriptSource implements ILocalResourceUriConverter {
this.configurationSettings,
this.workspaceService,
this.stateFactory,
this.httpClient
this.httpClient,
this.factory
);
this.initializeNotebook();
traceInfo('IPyWidgetScriptSource.initialize');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import { IApplicationShell, IWorkspaceService } from '../../common/application/t
import '../../common/extensions';
import { traceError } from '../../common/logger';
import { IFileSystem } from '../../common/platform/types';
import { IPythonExecutionFactory } from '../../common/process/types';

import {
IConfigurationService,
Expand Down Expand Up @@ -57,7 +58,8 @@ export class IPyWidgetScriptSourceProvider implements IWidgetScriptSourceProvide
private readonly configurationSettings: IConfigurationService,
private readonly workspaceService: IWorkspaceService,
private readonly stateFactory: IPersistentStateFactory,
private readonly httpClient: IHttpClient
private readonly httpClient: IHttpClient,
private readonly factory: IPythonExecutionFactory
) {
this.userConfiguredCDNAtLeastOnce = this.stateFactory.createGlobalPersistentState<boolean>(
GlobalStateKeyToTrackIfUserConfiguredCDNAtLeastOnce,
Expand Down Expand Up @@ -172,7 +174,8 @@ export class IPyWidgetScriptSourceProvider implements IWidgetScriptSourceProvide
this.notebook,
this.localResourceUriConverter,
this.fs,
this.interpreterService
this.interpreterService,
this.factory
)
);
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import * as path from 'path';
import { Uri } from 'vscode';
import { traceError } from '../../common/logger';
import { IFileSystem } from '../../common/platform/types';
import { IPythonExecutionFactory } from '../../common/process/types';

import { IInterpreterService } from '../../interpreter/contracts';
import { captureTelemetry } from '../../telemetry';
Expand All @@ -32,7 +33,8 @@ export class LocalWidgetScriptSourceProvider implements IWidgetScriptSourceProvi
private readonly notebook: INotebook,
private readonly localResourceUriConverter: ILocalResourceUriConverter,
private readonly fs: IFileSystem,
private readonly interpreterService: IInterpreterService
private readonly interpreterService: IInterpreterService,
private readonly factory: IPythonExecutionFactory
) {}
public async getWidgetScriptSource(moduleName: string): Promise<Readonly<WidgetScriptSource>> {
const sources = await this.getWidgetScriptSources();
Expand Down Expand Up @@ -106,6 +108,11 @@ export class LocalWidgetScriptSourceProvider implements IWidgetScriptSourceProvi
traceError.bind(`Failed to get interpreter details for Kernel/Interpreter ${interpreterOrKernelPath}`)
);

if (interpreterInfo && !interpreterInfo.sysPrefix) {
const pythonService = await this.factory.createActivatedEnvironment({ interpreter: interpreterInfo });
const info = await pythonService.getInterpreterInformation();
return info?.sysPrefix;
}
if (interpreterInfo) {
return interpreterInfo?.sysPrefix;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import { ConfigurationService } from '../../../client/common/configuration/servi
import { HttpClient } from '../../../client/common/net/httpClient';
import { PersistentState, PersistentStateFactory } from '../../../client/common/persistentState';
import { FileSystem } from '../../../client/common/platform/fileSystem';
import { IPythonExecutionFactory } from '../../../client/common/process/types';
import { IConfigurationService, IJupyterSettings } from '../../../client/common/types';
import { Common, DataScience } from '../../../client/common/utils/localize';
import { noop } from '../../../client/common/utils/misc';
Expand Down Expand Up @@ -46,6 +47,7 @@ suite('DataScience - ipywidget - Widget Script Source Provider', () => {
const fs = mock(FileSystem);
const interpreterService = mock<IInterpreterService>();
const stateFactory = mock(PersistentStateFactory);
const factory = mock<IPythonExecutionFactory>();
userSelectedOkOrDoNotShowAgainInPrompt = mock<PersistentState<boolean>>();

when(stateFactory.createGlobalPersistentState(anything(), anything())).thenReturn(
Expand All @@ -64,7 +66,8 @@ suite('DataScience - ipywidget - Widget Script Source Provider', () => {
instance(configService),
instance(workspaceService),
instance(stateFactory),
instance(httpClient)
instance(httpClient),
instance(factory)
);
});
teardown(() => sinon.restore());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import { Uri } from 'vscode';
import { PYTHON_LANGUAGE } from '../../../client/common/constants';
import { FileSystem } from '../../../client/common/platform/fileSystem';
import { IFileSystem } from '../../../client/common/platform/types';
import { IPythonExecutionFactory } from '../../../client/common/process/types';
import { LocalWidgetScriptSourceProvider } from '../../../client/datascience/ipywidgets/localWidgetScriptSourceProvider';
import { IWidgetScriptSourceProvider } from '../../../client/datascience/ipywidgets/types';
import { JupyterNotebookBase } from '../../../client/datascience/jupyter/jupyterNotebook';
Expand Down Expand Up @@ -34,7 +35,8 @@ suite('DataScience - ipywidget - Local Widget Script Source', () => {
instance(notebook),
instance(resourceConverter),
instance(fs),
instance(interpreterService)
instance(interpreterService),
instance(mock<IPythonExecutionFactory>())
);
});
test('No script source when there is no kernel associated with notebook', async () => {
Expand Down

0 comments on commit e4e7261

Please sign in to comment.