-
Notifications
You must be signed in to change notification settings - Fork 2.6k
[stdlib] Add PyCapsule_New and PyCapsule_GetPointer #4334
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
721af64
to
add0db0
Compare
mojo/stdlib/src/python/_cpython.mojo
Outdated
return self.lib.call["PyCapsule_New", PyObjectPtr]( | ||
pointer, name.unsafe_ptr(), destructor | ||
) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think you need to call self._inc_total_rc()
here, since PyCapsule_New
returns a new reference. Also, we should cast name
to c_char
, if only to document ABI compliance.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oops, adding.
Could you please put improve the docstring a bit more and add the signature of the Python C API function in a comment #4205 style? |
ce7df25
to
fcc2efd
Compare
Nice, I pushed a second commit. I am not sure if you prefer separate commits for ease of review or just one commit for cleaner history. |
I think they get squashed when imported into their internal repo anyway, so it shouldn't matter much. |
Thanks for the edits, accepted them. |
037d990
to
4d41eec
Compare
4d41eec
to
768722f
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the patch! Just a few nits and requests, but LGTM otherwise.
var capsule_pointer = Cpython_env[].PyCapsule_GetPointer( | ||
capsule, "some_name" | ||
) | ||
assert_equal(capsule_impl.bitcast[NoneType](), capsule_pointer) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you please add a test for a PyCapsule_GetPointer
with a mismatched name?
var capsule_pointer = Cpython_env[].PyCapsule_GetPointer( | |
capsule, "some_name" | |
) | |
assert_equal(capsule_impl.bitcast[NoneType](), capsule_pointer) | |
var capsule_pointer = Cpython_env[].PyCapsule_GetPointer( | |
capsule, "some_name" | |
) | |
assert_equal(capsule_impl.bitcast[NoneType](), capsule_pointer) |
These are critical when interacting with PyCapsules created by other libraries in the system. The current use case is interacting with PyArrow. Signed-off-by: Marius Seritan <[email protected]>
6414dd7
to
e4cbca2
Compare
Co-authored-by: Laszlo Kindrat <[email protected]> Signed-off-by: Marius Seritan <[email protected]>
Co-authored-by: Laszlo Kindrat <[email protected]> Signed-off-by: Marius Seritan <[email protected]>
Signed-off-by: Marius Seritan <[email protected]>
e4cbca2
to
affaddd
Compare
@laszlokindrat many thanks for the review, I addressed the feedback. I am not sure if there is anything else for me to do, I will wait for the PR to be merged at some point. Let me know if I am missing something. |
These are critical when interacting with PyCapsules created by other libraries in the system. The current use case is interacting with PyArrow.