From 5949ede455365ad851865fcfb894b5ad04d9f2f8 Mon Sep 17 00:00:00 2001 From: Victor Milovanov Date: Thu, 30 Apr 2020 21:40:23 -0700 Subject: [PATCH] Removes new object.GetRawPythonProxy extension method in favor of existing PyObject.FromManagedObject Reverts most of https://github.com/pythonnet/pythonnet/pull/1078 --- CHANGELOG.md | 1 - src/embed_tests/Codecs.cs | 2 +- src/embed_tests/TestConverter.cs | 4 ++-- src/runtime/Codecs/RawProxyEncoder.cs | 2 +- src/runtime/clrobject.cs | 12 ------------ src/runtime/converter.cs | 11 ----------- src/runtime/pyobject.cs | 3 ++- 7 files changed, 6 insertions(+), 29 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3cc571ad4..f754cbc4e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,7 +13,6 @@ This document follows the conventions laid out in [Keep a CHANGELOG][]. - Added function that sets Py_NoSiteFlag to 1. - Added support for Jetson Nano. - Added support for __len__ for .NET classes that implement ICollection -- Added `object.GetRawPythonProxy() -> PyObject` extension method, that bypasses any conversions - Added PythonException.Format method to format exceptions the same as traceback.format_exception ### Changed diff --git a/src/embed_tests/Codecs.cs b/src/embed_tests/Codecs.cs index d872dbd12..18fcd32d1 100644 --- a/src/embed_tests/Codecs.cs +++ b/src/embed_tests/Codecs.cs @@ -91,7 +91,7 @@ static void TupleRoundtripGeneric() { class ObjectToEncoderInstanceEncoder : IPyObjectEncoder { public bool CanEncode(Type type) => type == typeof(T); - public PyObject TryEncode(object value) => this.GetRawPythonProxy(); + public PyObject TryEncode(object value) => PyObject.FromManagedObject(this); } /// diff --git a/src/embed_tests/TestConverter.cs b/src/embed_tests/TestConverter.cs index 078f4c0f8..40219973b 100644 --- a/src/embed_tests/TestConverter.cs +++ b/src/embed_tests/TestConverter.cs @@ -51,7 +51,7 @@ public void TestConvertDoubleToManaged( public void RawListProxy() { var list = new List {"hello", "world"}; - var listProxy = list.GetRawPythonProxy(); + var listProxy = PyObject.FromManagedObject(list); var clrObject = (CLRObject)ManagedType.GetManagedObject(listProxy.Handle); Assert.AreSame(list, clrObject.inst); } @@ -60,7 +60,7 @@ public void RawListProxy() public void RawPyObjectProxy() { var pyObject = "hello world!".ToPython(); - var pyObjectProxy = pyObject.GetRawPythonProxy(); + var pyObjectProxy = PyObject.FromManagedObject(pyObject); var clrObject = (CLRObject)ManagedType.GetManagedObject(pyObjectProxy.Handle); Assert.AreSame(pyObject, clrObject.inst); diff --git a/src/runtime/Codecs/RawProxyEncoder.cs b/src/runtime/Codecs/RawProxyEncoder.cs index dd6f21ee0..a1b6c52b3 100644 --- a/src/runtime/Codecs/RawProxyEncoder.cs +++ b/src/runtime/Codecs/RawProxyEncoder.cs @@ -13,7 +13,7 @@ public PyObject TryEncode(object value) { if (value is null) throw new ArgumentNullException(nameof(value)); - return value.GetRawPythonProxy(); + return PyObject.FromManagedObject(value); } public virtual bool CanEncode(Type type) => false; diff --git a/src/runtime/clrobject.cs b/src/runtime/clrobject.cs index 13c15f862..502677655 100644 --- a/src/runtime/clrobject.cs +++ b/src/runtime/clrobject.cs @@ -68,17 +68,5 @@ internal static IntPtr GetInstHandle(object ob) CLRObject co = GetInstance(ob); return co.pyHandle; } - - /// - /// Creates proxy for the given object, - /// and returns a to it. - /// - internal static NewReference MakeNewReference(object obj) - { - if (obj is null) throw new ArgumentNullException(nameof(obj)); - - // TODO: CLRObject currently does not have Dispose or finalizer which might change in the future - return NewReference.DangerousFromPointer(GetInstHandle(obj)); - } } } diff --git a/src/runtime/converter.cs b/src/runtime/converter.cs index a7b7b5c48..3add8aba0 100644 --- a/src/runtime/converter.cs +++ b/src/runtime/converter.cs @@ -967,16 +967,5 @@ public static PyObject ToPython(this object o) { return new PyObject(Converter.ToPython(o, o?.GetType())); } - - /// - /// Gets raw Python proxy for this object (bypasses all conversions, - /// except null <==> None) - /// - public static PyObject GetRawPythonProxy(this object o) - { - if (o is null) return new PyObject(new BorrowedReference(Runtime.PyNone)); - - return CLRObject.MakeNewReference(o).MoveToPyObject(); - } } } diff --git a/src/runtime/pyobject.cs b/src/runtime/pyobject.cs index 37d53eeec..96968e678 100644 --- a/src/runtime/pyobject.cs +++ b/src/runtime/pyobject.cs @@ -111,7 +111,8 @@ public IntPtr Handle /// - /// FromManagedObject Method + /// Gets raw Python proxy for this object (bypasses all conversions, + /// except null <==> None) /// /// /// Given an arbitrary managed object, return a Python instance that