Skip to content

Commit 9cd81ae

Browse files
committed
refactor: remove legacy ensureInstalled method and clean up environment management
This commit removes the deprecated `ensureInstalled` method from the `DeepnoteToolkitInstaller` class, streamlining the installation process by encouraging the use of `ensureVenvAndToolkit`. Additionally, the `logs.txt` file has been deleted as it is no longer necessary for the current implementation. Changes include: - Removal of the legacy method to enhance code clarity and maintainability. - Deletion of the logs file to reduce clutter in the repository. These changes contribute to a cleaner codebase and improved user experience when managing Deepnote environments. Signed-off-by: Tomas Kislan <tomas@kislan.sk>
1 parent 3455f33 commit 9cd81ae

20 files changed

+104
-355
lines changed

src/kernels/deepnote/deepnoteToolkitInstaller.node.ts

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -184,19 +184,6 @@ export class DeepnoteToolkitInstaller implements IDeepnoteToolkitInstaller {
184184
}
185185
}
186186

187-
/**
188-
* Legacy file-based method (for backward compatibility).
189-
* @deprecated Use ensureVenvAndToolkit instead
190-
*/
191-
public async ensureInstalled(
192-
baseInterpreter: PythonEnvironment,
193-
deepnoteFileUri: Uri,
194-
token?: CancellationToken
195-
): Promise<PythonEnvironment | undefined> {
196-
const venvPath = this.getVenvPath(deepnoteFileUri);
197-
return this.ensureVenvAndToolkit(baseInterpreter, venvPath, token);
198-
}
199-
200187
/**
201188
* Install venv and toolkit at a specific path (environment-based).
202189
*/

src/kernels/deepnote/environments/deepnoteEnvironment.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ export interface DeepnoteEnvironmentState {
7878
/**
7979
* Options for creating a new kernel environment
8080
*/
81-
export interface CreateEnvironmentOptions {
81+
export interface CreateDeepnoteEnvironmentOptions {
8282
name: string;
8383
pythonInterpreter: PythonEnvironment;
8484
packages?: string[];

src/kernels/deepnote/environments/deepnoteEnvironmentManager.ts renamed to src/kernels/deepnote/environments/deepnoteEnvironmentManager.node.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ import { generateUuid as uuid } from '../../../platform/common/uuid';
44
import { IExtensionContext } from '../../../platform/common/types';
55
import { IExtensionSyncActivationService } from '../../../platform/activation/types';
66
import { logger } from '../../../platform/logging';
7-
import { DeepnoteEnvironmentStorage } from './deepnoteEnvironmentStorage';
7+
import { DeepnoteEnvironmentStorage } from './deepnoteEnvironmentStorage.node';
88
import {
9-
CreateEnvironmentOptions,
9+
CreateDeepnoteEnvironmentOptions,
1010
DeepnoteEnvironment,
1111
DeepnoteEnvironmentWithStatus,
1212
EnvironmentStatus
@@ -74,7 +74,7 @@ export class DeepnoteEnvironmentManager implements IExtensionSyncActivationServi
7474
/**
7575
* Create a new kernel environment
7676
*/
77-
public async createEnvironment(options: CreateEnvironmentOptions): Promise<DeepnoteEnvironment> {
77+
public async createEnvironment(options: CreateDeepnoteEnvironmentOptions): Promise<DeepnoteEnvironment> {
7878
const id = uuid();
7979
const venvPath = Uri.joinPath(this.context.globalStorageUri, 'deepnote-venvs', id);
8080

src/kernels/deepnote/environments/deepnoteEnvironmentManager.unit.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { assert } from 'chai';
22
import { anything, instance, mock, when, verify, deepEqual } from 'ts-mockito';
33
import { Uri } from 'vscode';
4-
import { DeepnoteEnvironmentManager } from './deepnoteEnvironmentManager';
5-
import { DeepnoteEnvironmentStorage } from './deepnoteEnvironmentStorage';
4+
import { DeepnoteEnvironmentManager } from './deepnoteEnvironmentManager.node';
5+
import { DeepnoteEnvironmentStorage } from './deepnoteEnvironmentStorage.node';
66
import { IExtensionContext } from '../../../platform/common/types';
77
import { IDeepnoteServerStarter, IDeepnoteToolkitInstaller, DeepnoteServerInfo } from '../types';
88
import { PythonEnvironment } from '../../../platform/pythonEnvironments/info';

src/kernels/deepnote/environments/deepnoteEnvironmentPicker.ts

Lines changed: 52 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,58 @@
22
// Licensed under the MIT License.
33

44
import { inject, injectable } from 'inversify';
5-
import { QuickPickItem, window, Uri, commands } from 'vscode';
5+
import { QuickPickItem, window, Uri, commands, ThemeColor } from 'vscode';
66
import { logger } from '../../../platform/logging';
77
import { IDeepnoteEnvironmentManager } from '../types';
8-
import { DeepnoteEnvironment } from './deepnoteEnvironment';
8+
import { DeepnoteEnvironment, EnvironmentStatus } from './deepnoteEnvironment';
99
import { getDisplayPath } from '../../../platform/common/platform/fs-paths';
1010

11+
export function getDeepnoteEnvironmentStatusVisual(status: EnvironmentStatus): {
12+
icon: string;
13+
text: string;
14+
themeColor: ThemeColor;
15+
contextValue: string;
16+
} {
17+
switch (status) {
18+
case EnvironmentStatus.Running:
19+
return {
20+
icon: 'vm-running',
21+
text: 'Running',
22+
contextValue: 'deepnoteEnvironment.running',
23+
themeColor: { id: 'charts.green' }
24+
};
25+
case EnvironmentStatus.Starting:
26+
return {
27+
icon: 'vm-outline',
28+
text: 'Starting',
29+
contextValue: 'deepnoteEnvironment.starting',
30+
themeColor: { id: 'charts.yellow' }
31+
};
32+
case EnvironmentStatus.Stopped:
33+
return {
34+
icon: 'vm-outline',
35+
text: 'Stopped',
36+
contextValue: 'deepnoteEnvironment.stopped',
37+
themeColor: { id: 'charts.gray' }
38+
};
39+
case EnvironmentStatus.Error:
40+
return {
41+
icon: 'vm-outline',
42+
text: 'Error',
43+
contextValue: 'deepnoteEnvironment.stopped',
44+
themeColor: { id: 'charts.gray' }
45+
};
46+
default:
47+
status satisfies never;
48+
return {
49+
icon: 'vm-outline',
50+
text: 'Unknown',
51+
contextValue: 'deepnoteEnvironment.stopped',
52+
themeColor: { id: 'charts.gray' }
53+
};
54+
}
55+
}
56+
1157
/**
1258
* Handles showing environment picker UI for notebook selection
1359
*/
@@ -56,11 +102,12 @@ export class DeepnoteEnvironmentPicker {
56102
// Build quick pick items
57103
const items: (QuickPickItem & { environment?: DeepnoteEnvironment })[] = environments.map((env) => {
58104
const envWithStatus = this.environmentManager.getEnvironmentWithStatus(env.id);
59-
const statusIcon = envWithStatus?.status === 'running' ? '$(vm-running)' : '$(vm-outline)';
60-
const statusText = envWithStatus?.status === 'running' ? '[Running]' : '[Stopped]';
105+
const { icon, text } = getDeepnoteEnvironmentStatusVisual(
106+
envWithStatus?.status || EnvironmentStatus.Stopped
107+
);
61108

62109
return {
63-
label: `${statusIcon} ${env.name} ${statusText}`,
110+
label: `$(${icon}) ${env.name} [${text}]`,
64111
description: getDisplayPath(env.pythonInterpreter.uri),
65112
detail: env.packages?.length ? `Packages: ${env.packages.join(', ')}` : 'No additional packages',
66113
environment: env

src/kernels/deepnote/environments/deepnoteEnvironmentStorage.unit.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { assert } from 'chai';
22
import { anything, instance, mock, when, verify, deepEqual } from 'ts-mockito';
33
import { Memento, Uri } from 'vscode';
4-
import { DeepnoteEnvironmentStorage } from './deepnoteEnvironmentStorage';
4+
import { DeepnoteEnvironmentStorage } from './deepnoteEnvironmentStorage.node';
55
import { IExtensionContext } from '../../../platform/common/types';
66
import { IInterpreterService } from '../../../platform/interpreter/contracts';
77
import { PythonEnvironment } from '../../../platform/pythonEnvironments/info';

src/kernels/deepnote/environments/deepnoteEnvironmentTreeDataProvider.ts renamed to src/kernels/deepnote/environments/deepnoteEnvironmentTreeDataProvider.node.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
import { Event, EventEmitter, TreeDataProvider, TreeItem } from 'vscode';
55
import { IDeepnoteEnvironmentManager } from '../types';
6-
import { EnvironmentTreeItemType, DeepnoteEnvironmentTreeItem } from './deepnoteEnvironmentTreeItem';
6+
import { EnvironmentTreeItemType, DeepnoteEnvironmentTreeItem } from './deepnoteEnvironmentTreeItem.node';
77
import { EnvironmentStatus } from './deepnoteEnvironment';
88

99
/**
@@ -52,7 +52,12 @@ export class DeepnoteEnvironmentTreeDataProvider implements TreeDataProvider<Dee
5252
const statusInfo = this.environmentManager.getEnvironmentWithStatus(config.id);
5353
const status = statusInfo?.status || EnvironmentStatus.Stopped;
5454

55-
const item = new DeepnoteEnvironmentTreeItem(EnvironmentTreeItemType.Environment, config, status);
55+
const item = new DeepnoteEnvironmentTreeItem(
56+
EnvironmentTreeItemType.Environment,
57+
// deepnoteEnvironmentToView(config),
58+
config,
59+
status
60+
);
5661

5762
items.push(item);
5863
}

src/kernels/deepnote/environments/deepnoteEnvironmentTreeDataProvider.unit.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import { assert } from 'chai';
22
import { instance, mock, when } from 'ts-mockito';
33
import { Uri, EventEmitter } from 'vscode';
4-
import { DeepnoteEnvironmentTreeDataProvider } from './deepnoteEnvironmentTreeDataProvider';
4+
import { DeepnoteEnvironmentTreeDataProvider } from './deepnoteEnvironmentTreeDataProvider.node';
55
import { IDeepnoteEnvironmentManager } from '../types';
66
import { DeepnoteEnvironment, DeepnoteEnvironmentWithStatus, EnvironmentStatus } from './deepnoteEnvironment';
77
import { PythonEnvironment } from '../../../platform/pythonEnvironments/info';
8-
import { EnvironmentTreeItemType } from './deepnoteEnvironmentTreeItem';
8+
import { EnvironmentTreeItemType } from './deepnoteEnvironmentTreeItem.node';
99

1010
suite('DeepnoteEnvironmentTreeDataProvider', () => {
1111
let provider: DeepnoteEnvironmentTreeDataProvider;

src/kernels/deepnote/environments/deepnoteEnvironmentTreeItem.ts renamed to src/kernels/deepnote/environments/deepnoteEnvironmentTreeItem.node.ts

Lines changed: 7 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { ThemeIcon, TreeItem, TreeItemCollapsibleState } from 'vscode';
22
import { DeepnoteEnvironment, EnvironmentStatus } from './deepnoteEnvironment';
3+
import { getDeepnoteEnvironmentStatusVisual } from './deepnoteEnvironmentPicker';
34

45
/**
56
* Type of tree item in the environments view
@@ -37,28 +38,11 @@ export class DeepnoteEnvironmentTreeItem extends TreeItem {
3738
return;
3839
}
3940

40-
const isRunning = this.status === EnvironmentStatus.Running;
41-
const isStarting = this.status === EnvironmentStatus.Starting;
41+
const statusVisual = getDeepnoteEnvironmentStatusVisual(this.status);
4242

43-
// Set label with status indicator
44-
const statusText = isRunning ? '[Running]' : isStarting ? '[Starting...]' : '[Stopped]';
45-
this.label = `${this.environment.name} ${statusText}`;
46-
47-
// Set icon based on status
48-
if (isRunning) {
49-
this.iconPath = new ThemeIcon('vm-running', { id: 'charts.green' });
50-
} else if (isStarting) {
51-
this.iconPath = new ThemeIcon('loading~spin', { id: 'charts.yellow' });
52-
} else {
53-
this.iconPath = new ThemeIcon('vm-outline', { id: 'charts.gray' });
54-
}
55-
56-
// Set context value for command filtering
57-
this.contextValue = isRunning
58-
? 'deepnoteEnvironment.running'
59-
: isStarting
60-
? 'deepnoteEnvironment.starting'
61-
: 'deepnoteEnvironment.stopped';
43+
this.label = `${this.environment.name} [${statusVisual.text}]`;
44+
this.iconPath = new ThemeIcon(statusVisual.icon, { id: statusVisual.themeColor.id });
45+
this.contextValue = statusVisual.contextValue;
6246

6347
// Make it collapsible to show info items
6448
this.collapsibleState = TreeItemCollapsibleState.Collapsed;
@@ -99,6 +83,8 @@ export class DeepnoteEnvironmentTreeItem extends TreeItem {
9983
lines.push(`Status: ${this.status}`);
10084
lines.push(`Python: ${this.environment.pythonInterpreter.uri.fsPath}`);
10185
lines.push(`Venv: ${this.environment.venvPath.fsPath}`);
86+
// lines.push(`Python: ${this.environment.pythonInterpreter.uriFsPath}`);
87+
// lines.push(`Venv: ${this.environment.venvPathFsPath}`);
10288

10389
if (this.environment.packages && this.environment.packages.length > 0) {
10490
lines.push(`Packages: ${this.environment.packages.join(', ')}`);

0 commit comments

Comments
 (0)