Skip to content

Commit d2a06ce

Browse files
authored
Handle managed enum constructor from Python (#106)
* Make EnumObject derive ClassObject for constructor handling * Bump version to 2.0.48
1 parent 1aa5b8b commit d2a06ce

File tree

5 files changed

+30
-6
lines changed

5 files changed

+30
-6
lines changed

src/embed_tests/EnumTests.cs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -621,6 +621,30 @@ public void ThrowsOnNullComparisonOperators([Values("<", "<=", ">", ">=")] strin
621621
Assert.Throws<PythonException>(() => module.InvokeMethod("compare_with_csharp_object2", pyNull));
622622
}
623623

624+
[TestCase(VerticalDirection.Down)]
625+
[TestCase(VerticalDirection.Flat)]
626+
[TestCase(VerticalDirection.Up)]
627+
public void CanInstantiateEnumFromInt(VerticalDirection expectedEnumValue)
628+
{
629+
using var _ = Py.GIL();
630+
using var module = PyModule.FromString("CanInstantiateEnumFromInt", $@"
631+
from clr import AddReference
632+
AddReference(""Python.EmbeddingTest"")
633+
634+
from Python.EmbeddingTest import *
635+
636+
def get_enum(int_value):
637+
return {nameof(EnumTests)}.{nameof(VerticalDirection)}(int_value)
638+
639+
");
640+
641+
using var pyEnumIntValue = ((int)expectedEnumValue).ToPython();
642+
PyObject pyEnumValue = null;
643+
Assert.DoesNotThrow(() => pyEnumValue = module.InvokeMethod("get_enum", pyEnumIntValue));
644+
var enumValue = pyEnumValue.As<VerticalDirection>();
645+
Assert.AreEqual(expectedEnumValue, enumValue);
646+
}
647+
624648
public class TestClass
625649
{
626650
}

src/perf_tests/Python.PerformanceTests.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
1414
</PackageReference>
1515
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.*" />
16-
<PackageReference Include="quantconnect.pythonnet" Version="2.0.47" GeneratePathProperty="true">
16+
<PackageReference Include="quantconnect.pythonnet" Version="2.0.48" GeneratePathProperty="true">
1717
<IncludeAssets>compile</IncludeAssets>
1818
</PackageReference>
1919
</ItemGroup>
@@ -25,7 +25,7 @@
2525
</Target>
2626

2727
<Target Name="CopyBaseline" AfterTargets="Build">
28-
<Copy SourceFiles="$(NuGetPackageRoot)quantconnect.pythonnet\2.0.47\lib\net9.0\Python.Runtime.dll" DestinationFolder="$(OutDir)baseline" />
28+
<Copy SourceFiles="$(NuGetPackageRoot)quantconnect.pythonnet\2.0.48\lib\net9.0\Python.Runtime.dll" DestinationFolder="$(OutDir)baseline" />
2929
</Target>
3030

3131
<Target Name="CopyNewBuild" AfterTargets="Build">

src/runtime/Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@
44
[assembly: InternalsVisibleTo("Python.EmbeddingTest, PublicKey=00240000048000009400000006020000002400005253413100040000110000005ffd8f49fb44ab0641b3fd8d55e749f716e6dd901032295db641eb98ee46063cbe0d4a1d121ef0bc2af95f8a7438d7a80a3531316e6b75c2dae92fb05a99f03bf7e0c03980e1c3cfb74ba690aca2f3339ef329313bcc5dccced125a4ffdc4531dcef914602cd5878dc5fbb4d4c73ddfbc133f840231343e013762884d6143189")]
55
[assembly: InternalsVisibleTo("Python.Test, PublicKey=00240000048000009400000006020000002400005253413100040000110000005ffd8f49fb44ab0641b3fd8d55e749f716e6dd901032295db641eb98ee46063cbe0d4a1d121ef0bc2af95f8a7438d7a80a3531316e6b75c2dae92fb05a99f03bf7e0c03980e1c3cfb74ba690aca2f3339ef329313bcc5dccced125a4ffdc4531dcef914602cd5878dc5fbb4d4c73ddfbc133f840231343e013762884d6143189")]
66

7-
[assembly: AssemblyVersion("2.0.47")]
8-
[assembly: AssemblyFileVersion("2.0.47")]
7+
[assembly: AssemblyVersion("2.0.48")]
8+
[assembly: AssemblyFileVersion("2.0.48")]

src/runtime/Python.Runtime.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<RootNamespace>Python.Runtime</RootNamespace>
66
<AssemblyName>Python.Runtime</AssemblyName>
77
<PackageId>QuantConnect.pythonnet</PackageId>
8-
<Version>2.0.47</Version>
8+
<Version>2.0.48</Version>
99
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
1010
<PackageLicenseFile>LICENSE</PackageLicenseFile>
1111
<RepositoryUrl>https://github.com/pythonnet/pythonnet</RepositoryUrl>

src/runtime/Types/EnumObject.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace Python.Runtime
77
/// Managed class that provides the implementation for reflected enum types.
88
/// </summary>
99
[Serializable]
10-
internal class EnumObject : ClassBase
10+
internal class EnumObject : ClassObject
1111
{
1212
internal EnumObject(Type type) : base(type)
1313
{

0 commit comments

Comments
 (0)