From 0383df8de6b2573b656db94b73614044eb7022f2 Mon Sep 17 00:00:00 2001 From: pinzart90 Date: Mon, 1 Dec 2025 15:30:18 -0500 Subject: [PATCH 1/3] move target for unzipping python package --- test/DynamoCoreTests/DynamoCoreTests.csproj | 9 +++++++++ .../DynamoPythonTests/DynamoPythonTests.csproj | 12 ------------ 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/test/DynamoCoreTests/DynamoCoreTests.csproj b/test/DynamoCoreTests/DynamoCoreTests.csproj index d2d53f2e2cd..d60672a7c57 100644 --- a/test/DynamoCoreTests/DynamoCoreTests.csproj +++ b/test/DynamoCoreTests/DynamoCoreTests.csproj @@ -138,6 +138,15 @@ + + + $([System.IO.Path]::GetFullPath('$(SolutionDir)..\test\core\packageDependencyTests\')) + $(PkgTestsRoot)PythonEnginePackage.zip + $(PkgTestsRoot)PythonEnginePackage\ + + + + diff --git a/test/Libraries/DynamoPythonTests/DynamoPythonTests.csproj b/test/Libraries/DynamoPythonTests/DynamoPythonTests.csproj index 9d9461ac5ef..8df0ec7deca 100644 --- a/test/Libraries/DynamoPythonTests/DynamoPythonTests.csproj +++ b/test/Libraries/DynamoPythonTests/DynamoPythonTests.csproj @@ -84,16 +84,4 @@ - - - - - - $([System.IO.Path]::GetFullPath('$(SolutionDir)..\test\core\packageDependencyTests\')) - $(PkgTestsRoot)PythonEnginePackage.zip - $(PkgTestsRoot)PythonEnginePackage\ - - - - From f399a9e0d27ed5490251f846b6d608a38e030b09 Mon Sep 17 00:00:00 2001 From: pinzart90 Date: Mon, 1 Dec 2025 16:07:17 -0500 Subject: [PATCH 2/3] Revert "move target for unzipping python package" This reverts commit 0383df8de6b2573b656db94b73614044eb7022f2. --- test/DynamoCoreTests/DynamoCoreTests.csproj | 9 --------- .../DynamoPythonTests/DynamoPythonTests.csproj | 12 ++++++++++++ 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/test/DynamoCoreTests/DynamoCoreTests.csproj b/test/DynamoCoreTests/DynamoCoreTests.csproj index d60672a7c57..d2d53f2e2cd 100644 --- a/test/DynamoCoreTests/DynamoCoreTests.csproj +++ b/test/DynamoCoreTests/DynamoCoreTests.csproj @@ -138,15 +138,6 @@ - - - $([System.IO.Path]::GetFullPath('$(SolutionDir)..\test\core\packageDependencyTests\')) - $(PkgTestsRoot)PythonEnginePackage.zip - $(PkgTestsRoot)PythonEnginePackage\ - - - - diff --git a/test/Libraries/DynamoPythonTests/DynamoPythonTests.csproj b/test/Libraries/DynamoPythonTests/DynamoPythonTests.csproj index 8df0ec7deca..9d9461ac5ef 100644 --- a/test/Libraries/DynamoPythonTests/DynamoPythonTests.csproj +++ b/test/Libraries/DynamoPythonTests/DynamoPythonTests.csproj @@ -84,4 +84,16 @@ + + + + + + $([System.IO.Path]::GetFullPath('$(SolutionDir)..\test\core\packageDependencyTests\')) + $(PkgTestsRoot)PythonEnginePackage.zip + $(PkgTestsRoot)PythonEnginePackage\ + + + + From 1dc7f68c4b5befa1307215c506e2b9f3f2c49801 Mon Sep 17 00:00:00 2001 From: pinzart90 Date: Mon, 1 Dec 2025 16:51:46 -0500 Subject: [PATCH 3/3] move the test --- .../DynamoCoreTests/PackageDependencyTests.cs | 72 ----------------- .../PythonEngineSelectorTests.cs | 80 ++++++++++++++++++- 2 files changed, 77 insertions(+), 75 deletions(-) diff --git a/test/DynamoCoreTests/PackageDependencyTests.cs b/test/DynamoCoreTests/PackageDependencyTests.cs index 854bc9e823f..d7eecd292df 100644 --- a/test/DynamoCoreTests/PackageDependencyTests.cs +++ b/test/DynamoCoreTests/PackageDependencyTests.cs @@ -8,12 +8,10 @@ using Dynamo.Graph.Workspaces; using Dynamo.Interfaces; using Dynamo.Models; -using Dynamo.PythonServices; using Dynamo.Scheduler; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using NUnit.Framework; -using PythonNodeModels; namespace Dynamo.Tests { @@ -30,13 +28,6 @@ protected override void GetLibrariesToPreload(List libraries) base.GetLibrariesToPreload(libraries); } - private void UpdatePythonEngineAndRun(PythonNode pythonNode, string pythonEngineVersion) - { - pythonNode.EngineName = pythonEngineVersion; - //to kick off a run node modified must be called - pythonNode.OnNodeModified(); - } - private PackageDependencyInfo GetPackageInfo(string packageName) { var loader = GetPackageLoader(); @@ -106,69 +97,6 @@ public void ZeroTouchPackageDependencyIsCollectedAndSerialized() Assert.AreEqual(package.Nodes.Select(n => n.ToString("N")), nodes); } - [Test] - public void PythonEnginePackageDependencyIsCollectedAndSerialized() - { - // Load JSON file graph - string path = Path.Combine(TestDirectory, @"core\packageDependencyTests\PythonDependency.dyn"); - - // Assert package dependency is not already serialized to .dyn - using (StreamReader file = new StreamReader(path)) - { - var data = file.ReadToEnd(); - var json = (JObject)JsonConvert.DeserializeObject(data); - Assert.IsEmpty(json[WorkspaceReadConverter.NodeLibraryDependenciesPropString]); - } - - string packageDirectory = Path.Combine(TestDirectory, @"core\packageDependencyTests\PythonEnginePackage"); - LoadPackage(packageDirectory); - - OpenModel(path); - - //TO-DO: Force load binaries or mock the python engine instead of loading a package - //assert that default python engine was selected, and 2 different engines are loaded - var currentws = CurrentDynamoModel.CurrentWorkspace; - var pyNode = currentws.Nodes.OfType().FirstOrDefault(); - Assert.IsNotNull(pyNode); - Assert.AreEqual(pyNode.EngineName, PythonEngineManager.PythonNet3EngineName); - Assert.AreEqual(PythonEngineManager.Instance.AvailableEngines.Count, 2); - - currentws.ForceComputeWorkspaceReferences = true; - var packageDependencies = currentws.NodeLibraryDependencies; - // PythonNet3 is loaded as a default package, ww should have a single package dependency. - Assert.AreEqual(1, packageDependencies.Count); - - // Change engine to IronPython2, which is loaded as a package. - UpdatePythonEngineAndRun(pyNode, "IronPython2"); - currentws.ForceComputeWorkspaceReferences = true; - - //assert that python engine imported from a package gets added to NodeLibraryDependencies - packageDependencies = currentws.NodeLibraryDependencies; - Assert.AreEqual(1, packageDependencies.Count); - var package = packageDependencies.First(); - Assert.AreEqual(new PackageDependencyInfo("DynamoIronPython2.7", new Version("3.2.1")), package); - Assert.AreEqual(1, package.Nodes.Count); - - Assert.IsTrue(package.IsLoaded); - if (package is PackageDependencyInfo) - { - var packageDependencyState = ((PackageDependencyInfo)package).State; - Assert.AreEqual(PackageDependencyState.Loaded, packageDependencyState); - } - - // Assert package dependency is serialized - var ToJson = currentws.ToJson(CurrentDynamoModel.EngineController); - var JObject = (JObject)JsonConvert.DeserializeObject(ToJson); - var deserializedPackageDependencies = JObject[WorkspaceReadConverter.NodeLibraryDependenciesPropString]; - Assert.AreEqual(1, deserializedPackageDependencies.Count()); - var name = deserializedPackageDependencies.First()[NodeLibraryDependencyConverter.NamePropString].Value(); - Assert.AreEqual(package.Name, name); - var version = deserializedPackageDependencies.First()[NodeLibraryDependencyConverter.VersionPropString].Value(); - Assert.AreEqual(package.Version.ToString(), version); - var nodes = deserializedPackageDependencies.First()[NodeLibraryDependencyConverter.NodesPropString].Values(); - Assert.AreEqual(package.Nodes.Select(n => n.ToString("N")), nodes); - } - [Test] public void CustomNodePackageDependencyIsCollected() { diff --git a/test/Libraries/DynamoPythonTests/PythonEngineSelectorTests.cs b/test/Libraries/DynamoPythonTests/PythonEngineSelectorTests.cs index 56346a9e2aa..74414a93620 100644 --- a/test/Libraries/DynamoPythonTests/PythonEngineSelectorTests.cs +++ b/test/Libraries/DynamoPythonTests/PythonEngineSelectorTests.cs @@ -1,12 +1,16 @@ -using System; -using System.Collections; -using System.Linq; using Dynamo; +using Dynamo.Graph.Workspaces; using Dynamo.PythonServices; using Dynamo.PythonServices.EventHandlers; using Dynamo.Utilities; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; using NUnit.Framework; using PythonNodeModels; +using System; +using System.Collections; +using System.IO; +using System.Linq; using static Dynamo.Models.DynamoModel; namespace DynamoPythonTests @@ -14,6 +18,13 @@ namespace DynamoPythonTests [TestFixture] class PythonEngineSelectorTests : DynamoModelTestBase { + private void UpdatePythonEngineAndRun(PythonNode pythonNode, string pythonEngineVersion) + { + pythonNode.EngineName = pythonEngineVersion; + //to kick off a run node modified must be called + pythonNode.OnNodeModified(); + } + /// /// This test will cover the use case of the API to query certain Python engine ability for evaluation /// @@ -24,6 +35,69 @@ public void TestEngineSelectorInitialization() Assert.AreEqual(false, PythonEngineManager.Instance.AvailableEngines.Any(x => x.Name == PythonEngineManager.IronPython2EngineName)); } + [Test] + public void PythonEnginePackageDependencyIsCollectedAndSerialized() + { + // Load JSON file graph + string path = Path.Combine(TestDirectory, @"core\packageDependencyTests\PythonDependency.dyn"); + + // Assert package dependency is not already serialized to .dyn + using (StreamReader file = new StreamReader(path)) + { + var data = file.ReadToEnd(); + var json = (JObject)JsonConvert.DeserializeObject(data); + Assert.IsEmpty(json[WorkspaceReadConverter.NodeLibraryDependenciesPropString]); + } + + string packageDirectory = Path.Combine(TestDirectory, @"core\packageDependencyTests\PythonEnginePackage"); + LoadPackage(packageDirectory); + + OpenModel(path); + + //TO-DO: Force load binaries or mock the python engine instead of loading a package + //assert that default python engine was selected, and 2 different engines are loaded + var currentws = CurrentDynamoModel.CurrentWorkspace; + var pyNode = currentws.Nodes.OfType().FirstOrDefault(); + Assert.IsNotNull(pyNode); + Assert.AreEqual(pyNode.EngineName, PythonEngineManager.PythonNet3EngineName); + Assert.AreEqual(PythonEngineManager.Instance.AvailableEngines.Count, 2); + + currentws.ForceComputeWorkspaceReferences = true; + var packageDependencies = currentws.NodeLibraryDependencies; + // PythonNet3 is loaded as a default package, ww should have a single package dependency. + Assert.AreEqual(1, packageDependencies.Count); + + // Change engine to IronPython2, which is loaded as a package. + UpdatePythonEngineAndRun(pyNode, "IronPython2"); + currentws.ForceComputeWorkspaceReferences = true; + + //assert that python engine imported from a package gets added to NodeLibraryDependencies + packageDependencies = currentws.NodeLibraryDependencies; + Assert.AreEqual(1, packageDependencies.Count); + var package = packageDependencies.First(); + Assert.AreEqual(new PackageDependencyInfo("DynamoIronPython2.7", new Version("3.2.1")), package); + Assert.AreEqual(1, package.Nodes.Count); + + Assert.IsTrue(package.IsLoaded); + if (package is PackageDependencyInfo) + { + var packageDependencyState = ((PackageDependencyInfo)package).State; + Assert.AreEqual(PackageDependencyState.Loaded, packageDependencyState); + } + + // Assert package dependency is serialized + var ToJson = currentws.ToJson(CurrentDynamoModel.EngineController); + var JObject = (JObject)JsonConvert.DeserializeObject(ToJson); + var deserializedPackageDependencies = JObject[WorkspaceReadConverter.NodeLibraryDependenciesPropString]; + Assert.AreEqual(1, deserializedPackageDependencies.Count()); + var name = deserializedPackageDependencies.First()[NodeLibraryDependencyConverter.NamePropString].Value(); + Assert.AreEqual(package.Name, name); + var version = deserializedPackageDependencies.First()[NodeLibraryDependencyConverter.VersionPropString].Value(); + Assert.AreEqual(package.Version.ToString(), version); + var nodes = deserializedPackageDependencies.First()[NodeLibraryDependencyConverter.NodesPropString].Values(); + Assert.AreEqual(package.Nodes.Select(n => n.ToString("N")), nodes); + } + [Test] public void CanCopydAndPasteAndUndoPythonEngine() {