Files
aiturk-hermes-ide/tests/install_ps1_fake_uv.py

103 lines
3.8 KiB
Python

"""Fake uv executable used by behavioral Windows installer tests."""
from __future__ import annotations
from pathlib import Path
import subprocess
_FAKE_UV = r'''
using System;
using System.IO;
using System.Linq;
public static class FakeUv {
public static int Main(string[] args) {
if (Path.GetFileName(Environment.GetCommandLineArgs()[0]).Equals(
"python.exe", StringComparison.OrdinalIgnoreCase)) {
Console.WriteLine(Environment.GetEnvironmentVariable("FAKE_PYTHON_VERSION")
?? "Python 3.11.0");
return 0;
}
File.AppendAllText(Environment.GetEnvironmentVariable("FAKE_UV_LOG"),
string.Join(" ", args) + Environment.NewLine);
if (args.Length >= 2 && args[0] == "python" && args[1] == "find") {
string findDelayMs = Environment.GetEnvironmentVariable(
"FAKE_UV_FIND_DELAY_MS");
if (!string.IsNullOrEmpty(findDelayMs)) {
System.Threading.Thread.Sleep(int.Parse(findDelayMs));
}
string stderrBytes = Environment.GetEnvironmentVariable(
"FAKE_UV_FIND_STDERR_BYTES");
if (!string.IsNullOrEmpty(stderrBytes)) {
Console.Error.Write(new string('x', int.Parse(stderrBytes)));
}
bool managed = args.Contains("--managed-python");
string availableVersion = Environment.GetEnvironmentVariable(
"FAKE_MANAGED_PYTHON_VERSION");
if (managed && !string.IsNullOrEmpty(availableVersion)
&& (args.Length < 3 || args[2] != availableVersion)) {
return 1;
}
Console.WriteLine(Environment.GetEnvironmentVariable(
managed ? "FAKE_MANAGED_PYTHON" : "FAKE_THIRD_PARTY_PYTHON"));
return 0;
}
if (args.Length >= 2 && args[0] == "python" && args[1] == "install") {
return 0;
}
if (args.Length >= 2 && args[0] == "venv" && args[1] == "venv") {
string forcedExit = Environment.GetEnvironmentVariable("FAKE_UV_VENV_EXIT");
if (!string.IsNullOrEmpty(forcedExit)) {
return int.Parse(forcedExit);
}
string managedPython = Environment.GetEnvironmentVariable("FAKE_MANAGED_PYTHON");
int pythonAt = Array.IndexOf(args, "--python");
bool correctPython = pythonAt >= 0 && pythonAt + 1 < args.Length
&& string.Equals(args[pythonAt + 1], managedPython,
StringComparison.OrdinalIgnoreCase);
if (!correctPython || !args.Contains("--managed-python")
|| !args.Contains("--no-python-downloads")) {
return 42;
}
string scripts = Path.Combine(Environment.CurrentDirectory, "venv", "Scripts");
Directory.CreateDirectory(scripts);
File.Copy(managedPython, Path.Combine(scripts, "python.exe"), true);
return 0;
}
return 2;
}
}
'''
def compile_fake_uv(powershell: str, output: Path) -> None:
source = output.with_suffix(".cs")
source.write_text(_FAKE_UV, encoding="utf-8")
compile_script = output.with_name("compile-fake-uv.ps1")
compile_script.write_text(
"param([string]$Source, [string]$Output)\n"
"Add-Type -Path $Source -OutputAssembly $Output "
"-OutputType ConsoleApplication\n",
encoding="utf-8",
)
subprocess.run(
[
powershell,
"-NoProfile",
"-ExecutionPolicy",
"Bypass",
"-File",
str(compile_script),
"-Source",
str(source),
"-Output",
str(output),
],
check=True,
capture_output=True,
text=True,
)