Skip to content

Commit 6b3b152

Browse files
committed
fix: coderabbit feedback
1 parent b12b775 commit 6b3b152

File tree

6 files changed

+47
-13
lines changed

6 files changed

+47
-13
lines changed

src/extension.common.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import {
3737
import { Common } from './platform/common/utils/localize';
3838
import { IServiceContainer, IServiceManager } from './platform/ioc/types';
3939
import { initializeLoggers as init, logger } from './platform/logging';
40+
import { ILogger } from './platform/logging/types';
4041
import { getJupyterOutputChannel } from './standalone/devTools/jupyterOutputChannel';
4142
import { isUsingPylance } from './standalone/intellisense/notebookPythonPathService';
4243
import { noop } from './platform/common/utils/misc';
@@ -127,6 +128,7 @@ export function initializeGlobals(
127128
getJupyterOutputChannel(context.subscriptions),
128129
JUPYTER_OUTPUT_CHANNEL
129130
);
131+
serviceManager.addSingletonInstance<ILogger>(ILogger, logger);
130132

131133
return [serviceManager, serviceContainer];
132134
}

src/notebooks/deepnote/deepnoteInitNotebookRunner.node.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,6 @@ export class DeepnoteInitNotebookRunner {
7575
} catch (error) {
7676
// Log error but don't throw - we want to let user continue anyway
7777
logger.error(`Error running init notebook for project ${projectId}:`, error);
78-
console.error(`Failed to run init notebook:`, error);
7978
// Still mark as run to avoid retrying on every notebook open
8079
this.notebookManager.markInitNotebookAsRun(projectId);
8180
}
@@ -206,7 +205,6 @@ export class DeepnoteInitNotebookRunner {
206205
} catch (blockError) {
207206
// Log error but continue with next block
208207
logger.error(`Error executing init notebook block ${i + 1}:`, blockError);
209-
console.error(`Error in init notebook block ${i + 1}:`, blockError);
210208
}
211209
}
212210

src/notebooks/deepnote/deepnoteKernelAutoSelector.node.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ import { IConfigurationService } from '../../platform/common/types';
3636
import { disposeAsync } from '../../platform/common/utils';
3737
import { IDeepnoteInitNotebookRunner } from './deepnoteInitNotebookRunner.node';
3838
import { IDeepnoteNotebookManager } from '../types';
39-
import { DeepnoteRequirementsHelper } from './deepnoteRequirementsHelper.node';
39+
import { IDeepnoteRequirementsHelper } from './deepnoteRequirementsHelper.node';
4040
import { DeepnoteProject } from './deepnoteTypes';
4141
import { IKernelProvider, IKernel } from '../../kernels/types';
4242

@@ -74,7 +74,8 @@ export class DeepnoteKernelAutoSelector implements IDeepnoteKernelAutoSelector,
7474
@inject(IConfigurationService) private readonly configService: IConfigurationService,
7575
@inject(IDeepnoteInitNotebookRunner) private readonly initNotebookRunner: IDeepnoteInitNotebookRunner,
7676
@inject(IDeepnoteNotebookManager) private readonly notebookManager: IDeepnoteNotebookManager,
77-
@inject(IKernelProvider) private readonly kernelProvider: IKernelProvider
77+
@inject(IKernelProvider) private readonly kernelProvider: IKernelProvider,
78+
@inject(IDeepnoteRequirementsHelper) private readonly requirementsHelper: IDeepnoteRequirementsHelper
7879
) {}
7980

8081
public activate() {
@@ -470,7 +471,7 @@ export class DeepnoteKernelAutoSelector implements IDeepnoteKernelAutoSelector,
470471
if (project) {
471472
// Create requirements.txt first (needs to be ready for init notebook)
472473
progress.report({ message: 'Creating requirements.txt...' });
473-
await DeepnoteRequirementsHelper.createRequirementsFile(project);
474+
await this.requirementsHelper.createRequirementsFile(project, progressToken);
474475

475476
// Check if project has an init notebook
476477
if (project.project.initNotebookId && !this.notebookManager.hasInitNotebookRun(projectId)) {
Lines changed: 38 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,47 @@
11
// Copyright (c) Microsoft Corporation.
22
// Licensed under the MIT License.
33

4-
import { workspace } from 'vscode';
4+
import { inject, injectable } from 'inversify';
5+
import { workspace, CancellationToken } from 'vscode';
56
import * as fs from 'fs';
6-
import * as path from 'path';
7+
import * as path from '../../platform/vscode-path/path';
78
import type { DeepnoteProject } from './deepnoteTypes';
9+
import { ILogger } from '../../platform/logging/types';
810

911
/**
1012
* Helper class for creating requirements.txt files from Deepnote project settings.
1113
*/
14+
@injectable()
1215
export class DeepnoteRequirementsHelper {
16+
constructor(@inject(ILogger) private readonly logger: ILogger) {}
17+
1318
/**
1419
* Extracts requirements from project settings and creates a local requirements.txt file.
1520
* @param project The Deepnote project data containing requirements in settings
21+
* @param token Cancellation token to abort the operation if needed
1622
*/
17-
static async createRequirementsFile(project: DeepnoteProject): Promise<void> {
23+
async createRequirementsFile(project: DeepnoteProject, token: CancellationToken): Promise<void> {
1824
try {
19-
const requirements = project.project.settings?.requirements;
25+
// Check if the operation has been cancelled
26+
if (token.isCancellationRequested) {
27+
return;
28+
}
29+
30+
const requirements = project.project.settings.requirements;
2031
if (!requirements || !Array.isArray(requirements) || requirements.length === 0) {
21-
console.log(`No requirements found in project ${project.project.id}`);
32+
this.logger.info(`No requirements found in project ${project.project.id}`);
2233
return;
2334
}
2435

2536
// Get the workspace folder to determine where to create the requirements.txt file
2637
const workspaceFolders = workspace.workspaceFolders;
2738
if (!workspaceFolders || workspaceFolders.length === 0) {
28-
console.log('No workspace folder found, cannot create requirements.txt');
39+
this.logger.info('No workspace folder found, cannot create requirements.txt');
40+
return;
41+
}
42+
43+
// Check cancellation before performing I/O
44+
if (token.isCancellationRequested) {
2945
return;
3046
}
3147

@@ -37,9 +53,23 @@ export class DeepnoteRequirementsHelper {
3753

3854
// Write the requirements.txt file
3955
await fs.promises.writeFile(requirementsPath, requirementsText, 'utf8');
40-
console.log(`Created requirements.txt with ${requirements.length} dependencies at ${requirementsPath}`);
56+
57+
// Check cancellation after I/O operation
58+
if (token.isCancellationRequested) {
59+
this.logger.info('Requirements file creation was cancelled after write');
60+
return;
61+
}
62+
63+
this.logger.info(
64+
`Created requirements.txt with ${requirements.length} dependencies at ${requirementsPath}`
65+
);
4166
} catch (error) {
42-
console.error(`Error creating requirements.txt:`, error);
67+
this.logger.error(`Error creating requirements.txt:`, error);
4368
}
4469
}
4570
}
71+
72+
export const IDeepnoteRequirementsHelper = Symbol('IDeepnoteRequirementsHelper');
73+
export interface IDeepnoteRequirementsHelper {
74+
createRequirementsFile(project: DeepnoteProject, token: CancellationToken): Promise<void>;
75+
}

src/notebooks/serviceRegistry.node.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ import { DeepnoteServerStarter } from '../kernels/deepnote/deepnoteServerStarter
5454
import { DeepnoteKernelAutoSelector } from './deepnote/deepnoteKernelAutoSelector.node';
5555
import { DeepnoteServerProvider } from '../kernels/deepnote/deepnoteServerProvider.node';
5656
import { DeepnoteInitNotebookRunner, IDeepnoteInitNotebookRunner } from './deepnote/deepnoteInitNotebookRunner.node';
57+
import { DeepnoteRequirementsHelper, IDeepnoteRequirementsHelper } from './deepnote/deepnoteRequirementsHelper.node';
5758

5859
export function registerTypes(serviceManager: IServiceManager, isDevMode: boolean) {
5960
registerControllerTypes(serviceManager, isDevMode);
@@ -137,6 +138,7 @@ export function registerTypes(serviceManager: IServiceManager, isDevMode: boolea
137138
serviceManager.addSingleton<IDeepnoteKernelAutoSelector>(IDeepnoteKernelAutoSelector, DeepnoteKernelAutoSelector);
138139
serviceManager.addBinding(IDeepnoteKernelAutoSelector, IExtensionSyncActivationService);
139140
serviceManager.addSingleton<IDeepnoteInitNotebookRunner>(IDeepnoteInitNotebookRunner, DeepnoteInitNotebookRunner);
141+
serviceManager.addSingleton<IDeepnoteRequirementsHelper>(IDeepnoteRequirementsHelper, DeepnoteRequirementsHelper);
140142

141143
// File export/import
142144
serviceManager.addSingleton<IFileConverter>(IFileConverter, FileConverter);

src/platform/logging/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
export type Arguments = unknown[];
88

9+
export const ILogger = Symbol('ILogger');
910
export interface ILogger {
1011
error(message: string, ...data: Arguments): void;
1112
warn(message: string, ...data: Arguments): void;

0 commit comments

Comments
 (0)