Skip to content

Commit 75b40f8

Browse files
committed
Fix how we get the python interpreter
1 parent d721d6e commit 75b40f8

File tree

10 files changed

+5438
-2083
lines changed

10 files changed

+5438
-2083
lines changed

package-lock.json

Lines changed: 4901 additions & 2073 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "python-dependencies-vscode",
33
"displayName": "Python Dependencies",
44
"description": "Utilities for managing Python dependencies",
5-
"version": "0.0.17",
5+
"version": "0.0.18",
66
"publisher": "patrick91",
77
"engines": {
88
"vscode": "^1.53.0"
@@ -48,6 +48,7 @@
4848
"dependencies": {
4949
"execa": "^5.0.0",
5050
"node-fetch": "^2.6.1",
51-
"vscode-cache": "^0.3.0"
51+
"vscode-cache": "^0.3.0",
52+
"vscode-jsonrpc": "^8.0.2"
5253
}
5354
}

src/common/log/fileLogger.ts

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// Licensed under the MIT License.
3+
4+
import { WriteStream } from 'fs-extra';
5+
import * as util from 'util';
6+
import { Disposable } from 'vscode-jsonrpc';
7+
import { Arguments, ILogging } from './types';
8+
import { getTimeForLogging } from '../utilities';
9+
10+
function formatMessage(level: string, ...data: Arguments): string {
11+
return `[${level.toUpperCase()} ${getTimeForLogging()}]: ${util.format(...data)}\r\n`;
12+
}
13+
14+
export class FileLogger implements ILogging, Disposable {
15+
constructor(private readonly stream: WriteStream) {}
16+
17+
public traceLog(...data: Arguments): void {
18+
this.stream.write(`${util.format(...data)}\r\n`);
19+
}
20+
21+
public traceError(...data: Arguments): void {
22+
this.stream.write(formatMessage('error', ...data));
23+
}
24+
25+
public traceWarn(...data: Arguments): void {
26+
this.stream.write(formatMessage('warn', ...data));
27+
}
28+
29+
public traceInfo(...data: Arguments): void {
30+
this.stream.write(formatMessage('info', ...data));
31+
}
32+
33+
public traceVerbose(...data: Arguments): void {
34+
this.stream.write(formatMessage('debug', ...data));
35+
}
36+
37+
public dispose(): void {
38+
try {
39+
this.stream.close();
40+
} catch (ex) {
41+
/** do nothing */
42+
}
43+
}
44+
}

src/common/log/logging.ts

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// Licensed under the MIT License.
3+
4+
import { createWriteStream } from 'fs-extra';
5+
import { Disposable } from 'vscode';
6+
import { FileLogger } from './fileLogger';
7+
import { Arguments, ILogging, LoggingLevelSettingType, LogLevel } from './types';
8+
9+
let loggers: ILogging[] = [];
10+
export function registerLogger(logger: ILogging): Disposable {
11+
loggers.push(logger);
12+
return {
13+
dispose: () => {
14+
loggers = loggers.filter((l) => l !== logger);
15+
},
16+
};
17+
}
18+
19+
const logLevelMap: Map<string | undefined, LogLevel> = new Map([
20+
['error', LogLevel.error],
21+
['warn', LogLevel.warn],
22+
['info', LogLevel.info],
23+
['debug', LogLevel.debug],
24+
['none', LogLevel.off],
25+
['off', LogLevel.off],
26+
[undefined, LogLevel.error],
27+
]);
28+
29+
let globalLoggingLevel: LogLevel;
30+
export function setLoggingLevel(level?: LoggingLevelSettingType): void {
31+
globalLoggingLevel = logLevelMap.get(level) ?? LogLevel.error;
32+
}
33+
34+
export function initializeFileLogging(filePath: string, disposables: Disposable[]): unknown {
35+
try {
36+
const fileLogger = new FileLogger(createWriteStream(filePath));
37+
disposables.push(fileLogger);
38+
disposables.push(registerLogger(fileLogger));
39+
return undefined;
40+
} catch (ex) {
41+
return ex;
42+
}
43+
}
44+
45+
export function traceLog(...args: Arguments): void {
46+
loggers.forEach((l) => l.traceLog(...args));
47+
}
48+
49+
export function traceError(...args: Arguments): void {
50+
if (globalLoggingLevel >= LogLevel.error) {
51+
loggers.forEach((l) => l.traceError(...args));
52+
}
53+
}
54+
55+
export function traceWarn(...args: Arguments): void {
56+
if (globalLoggingLevel >= LogLevel.warn) {
57+
loggers.forEach((l) => l.traceWarn(...args));
58+
}
59+
}
60+
61+
export function traceInfo(...args: Arguments): void {
62+
if (globalLoggingLevel >= LogLevel.info) {
63+
loggers.forEach((l) => l.traceInfo(...args));
64+
}
65+
}
66+
67+
export function traceVerbose(...args: Arguments): void {
68+
if (globalLoggingLevel >= LogLevel.debug) {
69+
loggers.forEach((l) => l.traceVerbose(...args));
70+
}
71+
}

src/common/log/outputChannelLogger.ts

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// Licensed under the MIT License.
3+
4+
import * as util from 'util';
5+
import { OutputChannel } from 'vscode';
6+
import { Arguments, ILogging } from './types';
7+
import { getTimeForLogging } from '../utilities';
8+
9+
function formatMessage(level: string, ...data: Arguments): string {
10+
return `[${level.toUpperCase()} ${getTimeForLogging()}]: ${util.format(...data)}`;
11+
}
12+
13+
export class OutputChannelLogger implements ILogging {
14+
constructor(private readonly channel: OutputChannel) {}
15+
16+
public traceLog(...data: Arguments): void {
17+
this.channel.appendLine(util.format(...data));
18+
}
19+
20+
public traceError(...data: Arguments): void {
21+
this.channel.appendLine(formatMessage('error', ...data));
22+
}
23+
24+
public traceWarn(...data: Arguments): void {
25+
this.channel.appendLine(formatMessage('warn', ...data));
26+
}
27+
28+
public traceInfo(...data: Arguments): void {
29+
this.channel.appendLine(formatMessage('info', ...data));
30+
}
31+
32+
public traceVerbose(...data: Arguments): void {
33+
this.channel.appendLine(formatMessage('debug', ...data));
34+
}
35+
}

src/common/log/types.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// Licensed under the MIT License.
3+
4+
export type Arguments = unknown[];
5+
6+
export interface ILogging {
7+
traceLog(...data: Arguments): void;
8+
traceError(...data: Arguments): void;
9+
traceWarn(...data: Arguments): void;
10+
traceInfo(...data: Arguments): void;
11+
traceVerbose(...data: Arguments): void;
12+
}
13+
14+
export type LoggingLevelSettingType = 'off' | 'error' | 'warn' | 'info' | 'debug';
15+
export enum LogLevel {
16+
off = 0,
17+
error = 10,
18+
warn = 20,
19+
info = 30,
20+
debug = 40,
21+
}

0 commit comments

Comments
 (0)