Skip to content

Commit 7847dbb

Browse files
authored
Fix PEP8 method overload binding (#87)
* fix: overload PEP8 methods binding * Bump version to 2.0.33
1 parent fe99052 commit 7847dbb

File tree

5 files changed

+93
-14
lines changed

5 files changed

+93
-14
lines changed

src/embed_tests/ClassManagerTests.cs

Lines changed: 87 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -709,6 +709,93 @@ public int another_int_property()
709709
{
710710
return 654;
711711
}
712+
713+
public virtual int get_value(int x)
714+
{
715+
throw new Exception("get_value(int x)");
716+
}
717+
718+
public virtual int get_value_2(int x)
719+
{
720+
throw new Exception("get_value_2(int x)");
721+
}
722+
723+
public int get_value_3(int x)
724+
{
725+
throw new Exception("get_value_3(int x)");
726+
}
727+
728+
public int GetValue(int x)
729+
{
730+
throw new Exception("GetValue(int x)");
731+
}
732+
733+
public virtual int GetValue(int x, int y)
734+
{
735+
throw new Exception("GetValue(int x, int y)");
736+
}
737+
738+
public virtual int GetValue2(int x)
739+
{
740+
throw new Exception("GetValue2(int x)");
741+
}
742+
743+
public int GetValue3(int x)
744+
{
745+
throw new Exception("GetValue3(int x)");
746+
}
747+
}
748+
749+
private class AlreadyDefinedSnakeCaseMemberTestDerivedClass : AlreadyDefinedSnakeCaseMemberTestBaseClass
750+
{
751+
public int SomeIntProperty { get; set; } = 111;
752+
753+
public override int AnotherIntProperty { get; set; } = 222;
754+
755+
public override int get_value(int x)
756+
{
757+
throw new Exception("override get_value(int x)");
758+
}
759+
760+
public override int GetValue(int x, int y)
761+
{
762+
throw new Exception("override GetValue(int x, int y)");
763+
}
764+
765+
public override int GetValue2(int x)
766+
{
767+
throw new Exception("override GetValue2(int x)");
768+
}
769+
770+
public new int GetValue3(int x)
771+
{
772+
throw new Exception("new GetValue3(int x)");
773+
}
774+
}
775+
776+
[TestCase(typeof(AlreadyDefinedSnakeCaseMemberTestBaseClass), "get_value", new object[] { 2, 3 }, "GetValue(int x, int y)")]
777+
// 1 int arg, binds to the original c# class get_value(int x)
778+
[TestCase(typeof(AlreadyDefinedSnakeCaseMemberTestBaseClass), "get_value", new object[] { 2 }, "get_value(int x)")]
779+
// 2 int args, binds to the snake-cased overriden GetValue(int x, int y)
780+
[TestCase(typeof(AlreadyDefinedSnakeCaseMemberTestDerivedClass), "get_value", new object[] { 2, 3 }, "override GetValue(int x, int y)")]
781+
[TestCase(typeof(AlreadyDefinedSnakeCaseMemberTestDerivedClass), "get_value", new object[] { 2 }, "override get_value(int x)")]
782+
[TestCase(typeof(AlreadyDefinedSnakeCaseMemberTestDerivedClass), "get_value_2", new object[] { 2 }, "override GetValue2(int x)")]
783+
[TestCase(typeof(AlreadyDefinedSnakeCaseMemberTestDerivedClass), "get_value_3", new object[] { 2 }, "new GetValue3(int x)")]
784+
public void BindsSnakeCasedMethodAsOverload(Type type, string methodName, object[] args, string expectedMessage)
785+
{
786+
var obj = Activator.CreateInstance(type);
787+
using var pyObj = obj.ToPython();
788+
789+
using var method = pyObj.GetAttr(methodName);
790+
var pyArgs = args.Select(x => x.ToPython()).ToArray();
791+
792+
var exception = Assert.Throws<Exception>(() => method.Invoke(pyArgs));
793+
Assert.AreEqual(expectedMessage, exception.Message);
794+
795+
foreach (var x in pyArgs)
796+
{
797+
x.Dispose();
798+
}
712799
}
713800

714801
[Test]
@@ -734,13 +821,6 @@ public void DoesntBindSnakeCasedMemberIfAlreadyOriginallyDefinedAsMethod()
734821
Assert.AreEqual(654, method.Invoke().As<int>());
735822
}
736823

737-
private class AlreadyDefinedSnakeCaseMemberTestDerivedClass : AlreadyDefinedSnakeCaseMemberTestBaseClass
738-
{
739-
public int SomeIntProperty { get; set; } = 111;
740-
741-
public int AnotherIntProperty { get; set; } = 222;
742-
}
743-
744824
[Test]
745825
public void DoesntBindSnakeCasedMemberIfAlreadyOriginallyDefinedAsPropertyInBaseClass()
746826
{

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.32" GeneratePathProperty="true">
16+
<PackageReference Include="quantconnect.pythonnet" Version="2.0.33" 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.32\lib\net5.0\Python.Runtime.dll" DestinationFolder="$(OutDir)baseline" />
28+
<Copy SourceFiles="$(NuGetPackageRoot)quantconnect.pythonnet\2.0.33\lib\net5.0\Python.Runtime.dll" DestinationFolder="$(OutDir)baseline" />
2929
</Target>
3030

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

src/runtime/ClassManager.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -495,7 +495,6 @@ void AddMember(string name, string snakeCasedName, bool isStaticReadonlyCallable
495495
if (name == "__init__" && !impl.HasCustomNew())
496496
continue;
497497

498-
CheckForSnakeCasedAttribute(name);
499498
if (!methods.TryGetValue(name, out var methodList))
500499
{
501500
methodList = methods[name] = new MethodOverloads(true);
@@ -505,7 +504,7 @@ void AddMember(string name, string snakeCasedName, bool isStaticReadonlyCallable
505504
if (!OperatorMethod.IsOperatorMethod(meth))
506505
{
507506
var snakeCasedMethodName = name.ToSnakeCase();
508-
if (snakeCasedMethodName != name && !originalMemberNames.Contains(snakeCasedMethodName))
507+
if (snakeCasedMethodName != name)
509508
{
510509
if (!methods.TryGetValue(snakeCasedMethodName, out methodList))
511510
{

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.32")]
8-
[assembly: AssemblyFileVersion("2.0.32")]
7+
[assembly: AssemblyVersion("2.0.33")]
8+
[assembly: AssemblyFileVersion("2.0.33")]

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.32</Version>
8+
<Version>2.0.33</Version>
99
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
1010
<PackageLicenseFile>LICENSE</PackageLicenseFile>
1111
<RepositoryUrl>https://github.com/pythonnet/pythonnet</RepositoryUrl>

0 commit comments

Comments
 (0)