diff --git a/src/CSnakes.Runtime.Tests/CSnakes.Runtime.Tests.csproj b/src/CSnakes.Runtime.Tests/CSnakes.Runtime.Tests.csproj index e846b385..81dfbfce 100644 --- a/src/CSnakes.Runtime.Tests/CSnakes.Runtime.Tests.csproj +++ b/src/CSnakes.Runtime.Tests/CSnakes.Runtime.Tests.csproj @@ -32,8 +32,4 @@ <Using Include="Xunit" /> </ItemGroup> - <ItemGroup> - <Folder Include="Locators\" /> - </ItemGroup> - </Project> diff --git a/src/CSnakes.Runtime.Tests/RuntimeTestBase.cs b/src/CSnakes.Runtime.Tests/RuntimeTestBase.cs index ad64f579..5d33a236 100644 --- a/src/CSnakes.Runtime.Tests/RuntimeTestBase.cs +++ b/src/CSnakes.Runtime.Tests/RuntimeTestBase.cs @@ -10,7 +10,7 @@ public class RuntimeTestBase : IDisposable public RuntimeTestBase() { - string pythonVersionWindows = "3.12.4"; + string pythonVersionWindows = Environment.GetEnvironmentVariable("PYTHON_VERSION") ?? "3.12.4"; string pythonVersionMacOS = Environment.GetEnvironmentVariable("PYTHON_VERSION") ?? "3.12"; string pythonVersionLinux = Environment.GetEnvironmentVariable("PYTHON_VERSION") ?? "3.12"; diff --git a/src/CSnakes.Runtime/IServiceCollectionExtensions.cs b/src/CSnakes.Runtime/IServiceCollectionExtensions.cs index 0cc121d7..e69ab4a7 100644 --- a/src/CSnakes.Runtime/IServiceCollectionExtensions.cs +++ b/src/CSnakes.Runtime/IServiceCollectionExtensions.cs @@ -56,7 +56,16 @@ public static Version ParsePythonVersion(string version) /// <returns>The modified <see cref="IPythonEnvironmentBuilder"/>.</returns> public static IPythonEnvironmentBuilder FromNuGet(this IPythonEnvironmentBuilder builder, string version) { - builder.Services.AddSingleton<PythonLocator>(new NuGetLocator(ParsePythonVersion(version))); + // See https://github.com/tonybaloney/CSnakes/issues/154#issuecomment-2352116849 + version = version.Replace("alpha.", "a").Replace("beta.", "b").Replace("rc.", "rc"); + + // If a supplied version only consists of 2 tokens - e.g., 1.10 or 2.14 - then append an extra token + if (version.Count(c => c == '.') < 2) + { + version = $"{version}.0"; + } + + builder.Services.AddSingleton<PythonLocator>(new NuGetLocator(version, ParsePythonVersion(version))); return builder; } diff --git a/src/CSnakes.Runtime/Locators/EnvironmentVariableLocator.cs b/src/CSnakes.Runtime/Locators/EnvironmentVariableLocator.cs index b47832b9..5b7c6dcb 100644 --- a/src/CSnakes.Runtime/Locators/EnvironmentVariableLocator.cs +++ b/src/CSnakes.Runtime/Locators/EnvironmentVariableLocator.cs @@ -1,4 +1,5 @@ namespace CSnakes.Runtime.Locators; + internal class EnvironmentVariableLocator(string variable, Version version) : PythonLocator(version) { public override PythonLocationMetadata LocatePython() @@ -11,4 +12,4 @@ public override PythonLocationMetadata LocatePython() return LocatePythonInternal(envValue); } -} \ No newline at end of file +} diff --git a/src/CSnakes.Runtime/Locators/NuGetLocator.cs b/src/CSnakes.Runtime/Locators/NuGetLocator.cs index b178c50a..f7b9c32e 100644 --- a/src/CSnakes.Runtime/Locators/NuGetLocator.cs +++ b/src/CSnakes.Runtime/Locators/NuGetLocator.cs @@ -1,7 +1,8 @@ using System.Runtime.InteropServices; namespace CSnakes.Runtime.Locators; -internal class NuGetLocator(Version version) : PythonLocator(version) + +internal class NuGetLocator(string nugetVersion, Version version) : PythonLocator(version) { public override PythonLocationMetadata LocatePython() { @@ -13,7 +14,7 @@ public override PythonLocationMetadata LocatePython() } string? globalNugetPackagesPath = string.IsNullOrEmpty(nugetPackagesOverride) ? Path.Combine(userProfile, ".nuget", "packages") : nugetPackagesOverride; // TODO : Load optional path from nuget settings. https://learn.microsoft.com/en-us/nuget/consume-packages/managing-the-global-packages-and-cache-folders - string nugetPath = Path.Combine(globalNugetPackagesPath!, "python", $"{Version.Major}.{Version.Minor}.{Version.Build}", "tools"); + string nugetPath = Path.Combine(globalNugetPackagesPath!, "python", nugetVersion, "tools"); return LocatePythonInternal(nugetPath); } diff --git a/src/Integration.Tests/IntegrationTestBase.cs b/src/Integration.Tests/IntegrationTestBase.cs index d0a5dc0c..a59deb14 100644 --- a/src/Integration.Tests/IntegrationTestBase.cs +++ b/src/Integration.Tests/IntegrationTestBase.cs @@ -10,7 +10,7 @@ public class IntegrationTestBase : IDisposable public IntegrationTestBase() { - string pythonVersionWindows = "3.12.4"; + string pythonVersionWindows = Environment.GetEnvironmentVariable("PYTHON_VERSION") ?? "3.12.4"; string pythonVersionMacOS = Environment.GetEnvironmentVariable("PYTHON_VERSION") ?? "3.12"; string pythonVersionLinux = Environment.GetEnvironmentVariable("PYTHON_VERSION") ?? "3.12"; string venvPath = Path.Join(Environment.CurrentDirectory, "python", ".venv"); diff --git a/src/Profile/BaseBenchmark.cs b/src/Profile/BaseBenchmark.cs index 9a46929e..f8bf4086 100644 --- a/src/Profile/BaseBenchmark.cs +++ b/src/Profile/BaseBenchmark.cs @@ -9,7 +9,7 @@ public class BaseBenchmark public BaseBenchmark() { - string pythonVersionWindows = "3.12.4"; + string pythonVersionWindows = Environment.GetEnvironmentVariable("PYTHON_VERSION") ?? "3.12.4"; string pythonVersionMacOS = Environment.GetEnvironmentVariable("PYTHON_VERSION") ?? "3.12"; string pythonVersionLinux = Environment.GetEnvironmentVariable("PYTHON_VERSION") ?? "3.12";