From becc37ce33fa0d66406d98cc2200e8584b98f7cc Mon Sep 17 00:00:00 2001 From: Pranav Bhat Date: Wed, 15 Jan 2020 11:14:24 -0800 Subject: [PATCH] Expose uv_loop_t pointer for integration with other C-extensions --- tests/test_pointers.py | 8 ++++++++ uvloop/loop.pyx | 8 ++++++++ 2 files changed, 16 insertions(+) create mode 100644 tests/test_pointers.py diff --git a/tests/test_pointers.py b/tests/test_pointers.py new file mode 100644 index 00000000..bd608fcc --- /dev/null +++ b/tests/test_pointers.py @@ -0,0 +1,8 @@ +from uvloop import _testbase as tb + +class Test_UV_Pointers(tb.UVTestCase): + def test_get_uvloop_ptr(self): + self.assertGreater(self.new_loop().get_uvloop_ptr(), 0) + + def test_get_uvloop_ptr_capsule(self): + self.assertIsNotNone(self.new_loop().get_uvloop_ptr_capsule()) diff --git a/uvloop/loop.pyx b/uvloop/loop.pyx index c865fedf..201b37a2 100644 --- a/uvloop/loop.pyx +++ b/uvloop/loop.pyx @@ -38,6 +38,7 @@ from cpython cimport ( PyBytes_AsStringAndSize, Py_SIZE, PyBytes_AS_STRING, PyBUF_WRITABLE ) +from cpython.pycapsule cimport PyCapsule_New from . import _noop @@ -3108,6 +3109,13 @@ cdef class Loop: 'asyncgen': agen }) + # Expose pointer for integration with other C-extensions + def get_uvloop_ptr(self): + return self.uvloop + + def get_uvloop_ptr_capsule(self): + return PyCapsule_New(self.uvloop, NULL, NULL) + cdef void __loop_alloc_buffer(uv.uv_handle_t* uvhandle, size_t suggested_size,