Repository: python/cpython
Pull request: gh-104955: Fix __release_buffer__ signature
Fixes #104955

<!-- gh-issue-number: gh-104955 -->
* Issue: gh-104955
<!-- /gh-issue-number -->


Problem statement:
Signature for `__release_buffer__` is incorrect
Currently the signature for PEP-688's `__release_buffer__` method is as follows:

```
>>> bytearray.__release_buffer__.__text_signature__
'($self, /)'
```

This is incorrect; the method takes a single argument that according to the PEP should be called `buffer`.

<!-- gh-linked-prs -->
### Linked PRs
* gh-104956
* gh-104973
<!-- /gh-linked-prs -->

Hints from issue discussion:

Commit message: gh-104955: Fix __release_buffer__ signature

Patch to review:
diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py
index 0590e49d0e1a43..ade32151eaf233 100644
--- a/Lib/test/test_inspect.py
+++ b/Lib/test/test_inspect.py
@@ -2766,6 +2766,11 @@ class ThisWorksNow:
         # Regression test for issue #20586
         test_callable(_testcapi.docstring_with_signature_but_no_doc)
 
+        # Regression test for gh-104955
+        method = bytearray.__release_buffer__
+        sig = test_unbound_method(method)
+        self.assertEqual(list(sig.parameters), ['self', 'buffer'])
+
     @cpython_only
     @unittest.skipIf(MISSING_C_DOCSTRINGS,
                      "Signature information for builtins requires docstrings")
diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-05-25-21-40-39.gh-issue-104955.LZx7jf.rst b/Misc/NEWS.d/next/Core and Builtins/2023-05-25-21-40-39.gh-issue-104955.LZx7jf.rst
new file mode 100644
index 00000000000000..5f234ae8795c3b
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2023-05-25-21-40-39.gh-issue-104955.LZx7jf.rst	
@@ -0,0 +1,2 @@
+Fix signature for the new :meth:`__release_buffer__` slot. Patch by Jelle
+Zijlstra.
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index 2fbcafe91aadc6..0a2e1b1d3c1f78 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -9428,7 +9428,7 @@ static pytype_slotdef slotdefs[] = {
             "__buffer__($self, flags, /)\n--\n\n"
             "Return a buffer object that exposes the underlying memory of the object."),
     BUFSLOT(__release_buffer__, bf_releasebuffer, slot_bf_releasebuffer, wrap_releasebuffer,
-            "__release_buffer__($self, /)\n--\n\n"
+            "__release_buffer__($self, buffer, /)\n--\n\n"
             "Release the buffer object that exposes the underlying memory of the object."),
 
     AMSLOT(__await__, am_await, slot_am_await, wrap_unaryfunc,


Code review comments:
diff_hunk: @@ -0,0 +1,2 @@
+Fix signature for the new :meth:`__release_buffer__` slot. Patch by Jelle
path: Misc/NEWS.d/next/Core and Builtins/2023-05-25-21-40-39.gh-issue-104955.LZx7jf.rst
text: @user1:
```suggestion
Fix signature for the new :meth:`~object.__release_buffer__` slot. Patch by Jelle
```

I don't know if this works, just guessing.

@author:
Seems like it should given this:

```
Doc/reference/datamodel.rst:.. method:: object.__release_buffer__(self, buffer)
```