Forked from soumyajit7038/python-tools
Project Files
src / utils / pythonConfig.ts
import { readFile, writeFile } from "node:fs/promises";
import path from "node:path";
export interface PythonToolsConfig {
pythonExecutablePath?: string;
}
const CONFIG_FILE_NAME = ".python-tools-config.json";
export function getPythonToolsConfigPath(): string {
return path.join(process.cwd(), CONFIG_FILE_NAME);
}
export async function readPythonToolsConfig(): Promise<PythonToolsConfig> {
try {
const rawConfig = await readFile(getPythonToolsConfigPath(), "utf8");
const parsedConfig: unknown = JSON.parse(rawConfig);
if (!isConfigObject(parsedConfig)) {
return {};
}
if (typeof parsedConfig.pythonExecutablePath !== "string") {
return {};
}
return {
pythonExecutablePath: parsedConfig.pythonExecutablePath,
};
} catch (error) {
if (isNodeError(error) && error.code === "ENOENT") {
return {};
}
return {};
}
}
export async function writePythonToolsConfig(config: PythonToolsConfig): Promise<void> {
const configJson = `${JSON.stringify(config, null, 2)}\n`;
await writeFile(getPythonToolsConfigPath(), configJson, "utf8");
}
function isConfigObject(value: unknown): value is { pythonExecutablePath?: unknown } {
return typeof value === "object" && value !== null && !Array.isArray(value);
}
function isNodeError(error: unknown): error is NodeJS.ErrnoException {
return error instanceof Error;
}