From 7cc430d199466e9c05dec73fa55882b6d04d2a33 Mon Sep 17 00:00:00 2001 From: Maddy <12754347+MaddyDev@users.noreply.github.com> Date: Thu, 31 Oct 2019 17:57:26 -0700 Subject: [PATCH] =?UTF-8?q?added=20try=20catch=20aroud=20the=20json=20pars?= =?UTF-8?q?e=20and=20bypassing=20the=20err=20by=20logging=E2=80=A6=20(#816?= =?UTF-8?q?6)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * added try catch aroud the json parse and bypassing the err by logging to console * updated error message with package info * updates to address PR comments * added package info and refactored the err logging * backslash update * refactored error method and added try for the entire method --- .../src/jupyter/jupyterServerInstallation.ts | 46 ++++++++++++------- 1 file changed, 29 insertions(+), 17 deletions(-) diff --git a/extensions/notebook/src/jupyter/jupyterServerInstallation.ts b/extensions/notebook/src/jupyter/jupyterServerInstallation.ts index 87fb95d589..22830b1188 100644 --- a/extensions/notebook/src/jupyter/jupyterServerInstallation.ts +++ b/extensions/notebook/src/jupyter/jupyterServerInstallation.ts @@ -36,6 +36,7 @@ const msgSkipPythonInstall = localize('msgSkipPythonInstall', "Python already ex const msgWaitingForInstall = localize('msgWaitingForInstall', "Another Python installation is currently in progress. Waiting for it to complete."); function msgDependenciesInstallationFailed(errorMessage: string): string { return localize('msgDependenciesInstallationFailed', "Installing Notebook dependencies failed with error: {0}", errorMessage); } function msgDownloadPython(platform: string, pythonDownloadUrl: string): string { return localize('msgDownloadPython', "Downloading local python for platform: {0} to {1}", platform, pythonDownloadUrl); } +function msgPackageRetrievalFailed(errorMessage: string): string { return localize('msgPackageRetrievalFailed', "Encountered an error when trying to retrieve list of installed packages: {0}", errorMessage); } export class JupyterServerInstallation { public apiWrapper: ApiWrapper; @@ -519,14 +520,19 @@ export class JupyterServerInstallation { } public async getInstalledPipPackages(): Promise { - let cmd = `"${this.pythonExecutable}" -m pip list --format=json`; - let packagesInfo = await this.executeBufferedCommand(cmd); - - let packagesResult: PythonPkgDetails[] = []; - if (packagesInfo) { - packagesResult = JSON.parse(packagesInfo); + try { + let cmd = `"${this.pythonExecutable}" -m pip list --format=json`; + let packagesInfo = await this.executeBufferedCommand(cmd); + let packagesResult: PythonPkgDetails[] = []; + if (packagesInfo) { + packagesResult = JSON.parse(packagesInfo); + } + return packagesResult; + } + catch (err) { + this.outputChannel.appendLine(msgPackageRetrievalFailed(utils.getErrorMessage(err))); + return []; } - return packagesResult; } public installPipPackages(packages: PythonPkgDetails[], useMinVersion: boolean): Promise { @@ -549,19 +555,25 @@ export class JupyterServerInstallation { } public async getInstalledCondaPackages(): Promise { - let condaExe = this.getCondaExePath(); - let cmd = `"${condaExe}" list --json`; - let packagesInfo = await this.executeBufferedCommand(cmd); + try { + let condaExe = this.getCondaExePath(); + let cmd = `"${condaExe}" list --json`; + let packagesInfo = await this.executeBufferedCommand(cmd); - if (packagesInfo) { - let packagesResult = JSON.parse(packagesInfo); - if (Array.isArray(packagesResult)) { - return packagesResult - .filter(pkg => pkg && pkg.channel && pkg.channel !== 'pypi') - .map(pkg => { name: pkg.name, version: pkg.version }); + if (packagesInfo) { + let packagesResult = JSON.parse(packagesInfo); + if (Array.isArray(packagesResult)) { + return packagesResult + .filter(pkg => pkg && pkg.channel && pkg.channel !== 'pypi') + .map(pkg => { name: pkg.name, version: pkg.version }); + } } + return []; + } + catch (err) { + this.outputChannel.appendLine(msgPackageRetrievalFailed(utils.getErrorMessage(err))); + return []; } - return []; } public installCondaPackages(packages: PythonPkgDetails[], useMinVersion: boolean): Promise {