Remove unnecessary OutputChannel reference from PythonPathLookup class. (#13970)

This commit is contained in:
Cory Rivera
2021-01-15 16:51:42 -08:00
committed by GitHub
parent 462d4137d5
commit 94b697340d
6 changed files with 25 additions and 28 deletions

View File

@@ -8,7 +8,6 @@ import * as azdata from 'azdata';
import { BasePage } from './basePage';
import * as nls from 'vscode-nls';
import { JupyterServerInstallation } from '../../jupyter/jupyterServerInstallation';
import { PythonPathInfo } from '../pythonPathLookup';
import * as utils from '../../common/utils';
const localize = nls.loadMessageBundle();
@@ -160,10 +159,9 @@ export class ConfigurePathPage extends BasePage {
this.instance.wizard.nextButton.enabled = false;
this.pythonDropdownLoader.loading = true;
try {
let pythonPaths: PythonPathInfo[];
let dropdownValues: azdata.CategoryValue[];
if (useExistingPython) {
pythonPaths = await this.model.pythonPathsPromise;
let pythonPaths = await this.model.pythonPathLookup.getSuggestions();
if (pythonPaths && pythonPaths.length > 0) {
dropdownValues = pythonPaths.map(path => {
return {

View File

@@ -5,7 +5,6 @@
import * as nls from 'vscode-nls';
import * as azdata from 'azdata';
import * as vscode from 'vscode';
import { BasePage } from './basePage';
import { ConfigurePathPage } from './configurePathPage';
import { PickPackagesPage } from './pickPackagesPage';
@@ -13,7 +12,7 @@ import { JupyterServerInstallation, PythonPkgDetails, PythonInstallSettings } fr
import * as utils from '../../common/utils';
import { promises as fs } from 'fs';
import { Deferred } from '../../common/promise';
import { PythonPathInfo, PythonPathLookup } from '../pythonPathLookup';
import { PythonPathLookup } from '../pythonPathLookup';
const localize = nls.loadMessageBundle();
@@ -21,7 +20,7 @@ export interface ConfigurePythonModel {
kernelName: string;
pythonLocation: string;
useExistingPython: boolean;
pythonPathsPromise: Promise<PythonPathInfo[]>;
pythonPathLookup: PythonPathLookup;
packagesToInstall: PythonPkgDetails[];
installation: JupyterServerInstallation;
}
@@ -35,11 +34,9 @@ export class ConfigurePythonWizard {
private model: ConfigurePythonModel;
private _setupComplete: Deferred<void>;
private pythonPathsPromise: Promise<PythonPathInfo[]>;
constructor(private jupyterInstallation: JupyterServerInstallation, private readonly _outputChannel: vscode.OutputChannel) {
constructor(private jupyterInstallation: JupyterServerInstallation) {
this._setupComplete = new Deferred<void>();
this.pythonPathsPromise = (new PythonPathLookup(this._outputChannel)).getSuggestions();
}
public get wizard(): azdata.window.Wizard {
@@ -53,7 +50,7 @@ export class ConfigurePythonWizard {
public async start(kernelName?: string, rejectOnCancel?: boolean): Promise<void> {
this.model = <ConfigurePythonModel>{
kernelName: kernelName,
pythonPathsPromise: this.pythonPathsPromise,
pythonPathLookup: new PythonPathLookup(),
installation: this.jupyterInstallation,
pythonLocation: JupyterServerInstallation.getPythonPathSetting(),
useExistingPython: JupyterServerInstallation.getExistingPythonSetting()

View File

@@ -4,7 +4,6 @@
*--------------------------------------------------------------------------------------------*/
import * as glob from 'glob';
import * as vscode from 'vscode';
import * as utils from '../common/utils';
import * as constants from '../common/constants';
@@ -16,7 +15,7 @@ export interface PythonPathInfo {
export class PythonPathLookup {
private condaLocations: string[];
constructor(private readonly _outputChannel: vscode.OutputChannel) {
constructor() {
if (process.platform !== constants.winPlatform) {
let userFolder = process.env['HOME'];
this.condaLocations = [
@@ -57,7 +56,7 @@ export class PythonPathLookup {
let condaFiles = condaResults.reduce((first, second) => first.concat(second));
return condaFiles.filter(condaPath => condaPath && condaPath.length > 0);
} catch (err) {
this._outputChannel.appendLine(`Problem encountered getting Conda installations: ${err}`);
console.log(`Problem encountered getting Conda installations: ${err}`);
}
return [];
}
@@ -86,7 +85,7 @@ export class PythonPathLookup {
return results;
}
private async getPythonPath(options: { command: string; args?: string[] }): Promise<string> {
private async getPythonPath(options: { command: string; args?: string[] }): Promise<string | undefined> {
try {
let args = Array.isArray(options.args) ? options.args : [];
args = args.concat(['-c', '"import sys;print(sys.executable)"']);
@@ -97,7 +96,7 @@ export class PythonPathLookup {
return value;
}
} catch (err) {
this._outputChannel.appendLine(`Problem encountered getting Python path: ${err}`);
// Ignoring this error since it's probably from trying to run a non-existent python executable.
}
return undefined;
@@ -141,7 +140,7 @@ export class PythonPathLookup {
});
}
private async getInfoForPath(pythonPath: string): Promise<PythonPathInfo> {
private async getInfoForPath(pythonPath: string): Promise<PythonPathInfo | undefined> {
try {
// "python --version" returns nothing from executeBufferedCommand with Python 2.X,
// so use sys.version_info here instead.
@@ -160,7 +159,7 @@ export class PythonPathLookup {
};
}
} catch (err) {
this._outputChannel.appendLine(`Problem encountered getting Python info for path: ${err}`);
console.log(`Problem encountered getting Python info for path: ${err}`);
}
return undefined;
}

View File

@@ -234,7 +234,7 @@ export class JupyterController {
}
public doConfigurePython(jupyterInstaller: JupyterServerInstallation): void {
let pythonWizard = new ConfigurePythonWizard(jupyterInstaller, this.appContext.outputChannel);
let pythonWizard = new ConfigurePythonWizard(jupyterInstaller);
pythonWizard.start().catch((err: any) => {
vscode.window.showErrorMessage(utils.getErrorMessage(err));
});

View File

@@ -435,7 +435,7 @@ export class JupyterServerInstallation implements IJupyterServerInstallation {
let isPythonInstalled = JupyterServerInstallation.isPythonInstalled();
let areRequiredPackagesInstalled = await this.areRequiredPackagesInstalled(kernelDisplayName);
if (!isPythonInstalled || !areRequiredPackagesInstalled) {
let pythonWizard = new ConfigurePythonWizard(this, this.outputChannel);
let pythonWizard = new ConfigurePythonWizard(this);
await pythonWizard.start(kernelDisplayName, true);
return pythonWizard.setupComplete.then(() => {
this._kernelSetupCache.set(kernelDisplayName, true);

View File

@@ -13,16 +13,14 @@ import { PickPackagesPage } from '../../dialog/configurePython/pickPackagesPage'
import { python3DisplayName, allKernelsName } from '../../common/constants';
import { TestContext, createViewContext, TestButton } from '../common';
import { EventEmitter } from 'vscode';
import { MockOutputChannel } from '../common/stubs';
import { PythonPathLookup } from '../../dialog/pythonPathLookup';
describe('Configure Python Wizard', function () {
let testWizard: ConfigurePythonWizard;
let viewContext: TestContext;
let testInstallation: JupyterServerInstallation;
let mockOutputChannel: TypeMoq.IMock<MockOutputChannel>;
beforeEach(() => {
mockOutputChannel = TypeMoq.Mock.ofType(MockOutputChannel);
let mockInstall = TypeMoq.Mock.ofType(JupyterServerInstallation);
mockInstall.setup(i => i.getInstalledPipPackages(TypeMoq.It.isAnyString())).returns(() => Promise.resolve([]));
mockInstall.setup(i => i.getRequiredPackagesForKernel(TypeMoq.It.isAnyString())).returns(() => [{ name: 'TestPkg', version: '1.0.0'}]);
@@ -44,21 +42,21 @@ describe('Configure Python Wizard', function () {
});
it('Start wizard test', async () => {
let wizard = new ConfigurePythonWizard(testInstallation, mockOutputChannel.object);
let wizard = new ConfigurePythonWizard(testInstallation);
await wizard.start();
await wizard.close();
await should(wizard.setupComplete).be.resolved();
});
it('Reject setup on cancel test', async () => {
let wizard = new ConfigurePythonWizard(testInstallation, mockOutputChannel.object);
let wizard = new ConfigurePythonWizard(testInstallation);
await wizard.start(undefined, true);
await wizard.close();
await should(wizard.setupComplete).be.rejected();
});
it('Error message test', async () => {
let wizard = new ConfigurePythonWizard(testInstallation, mockOutputChannel.object);
let wizard = new ConfigurePythonWizard(testInstallation);
await wizard.start();
should(wizard.wizard.message).be.undefined();
@@ -72,16 +70,21 @@ describe('Configure Python Wizard', function () {
should(wizard.wizard.message).be.undefined();
await wizard.close();
await should(wizard.setupComplete).be.resolved();
});
it('Configure Path Page test', async () => {
let testPythonLocation = '/not/a/real/path';
let model = <ConfigurePythonModel>{
useExistingPython: true,
pythonPathsPromise: Promise.resolve([{
let mockPathLookup = TypeMoq.Mock.ofType(PythonPathLookup);
mockPathLookup.setup(p => p.getSuggestions()).returns(() =>
Promise.resolve([{
installDir: testPythonLocation,
version: '4000'
}])
);
let model = <ConfigurePythonModel>{
useExistingPython: true,
pythonPathLookup: mockPathLookup.object
};
let page = azdata.window.createWizardPage('Page 1');