From 528200c1ecddfbfaa174ac378116a7ee69510b29 Mon Sep 17 00:00:00 2001 From: iDoMeteor <11758268+iDoMeteor@users.noreply.github.com> Date: Fri, 2 Oct 2026 07:31:28 -0400 Subject: [PATCH] Set the docstring of MidiIn.close_port In MidiIn, the line close_port.__doc__ == MidiBase.close_port.__doc__ is a comparison, not an assignment, so it did nothing and MidiIn.close_port only had the signature that Cython embeds ("MidiIn.close_port(self)"), while MidiBase.close_port documents that it also cancels the callback. Use a plain assignment, which Cython accepts in a cdef class body, so that MidiIn.close_port gets the docstring of MidiBase.close_port, like the other inherited methods. Add a test for it. Co-Authored-By: Claude Opus 5.5 --- src/_rtmidi.pyx | 2 +- tests/test_basic.py | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/_rtmidi.pyx b/src/_rtmidi.pyx index 00c9e5c..7b32c9b 100644 --- a/src/_rtmidi.pyx +++ b/src/_rtmidi.pyx @@ -876,7 +876,7 @@ cdef class MidiIn(MidiBase): self.cancel_callback() MidiBase.close_port(self) - close_port.__doc__ == MidiBase.close_port.__doc__ + close_port.__doc__ = MidiBase.close_port.__doc__ def get_message(self): """Poll for MIDI input. diff --git a/tests/test_basic.py b/tests/test_basic.py index b971646..5a537c0 100644 --- a/tests/test_basic.py +++ b/tests/test_basic.py @@ -27,6 +27,9 @@ def test_get_api_name(self): self.assertEqual(rtmidi.get_api_name(rtmidi.API_WINDOWS_MM), 'winmm') self.assertEqual(rtmidi.get_api_name(rtmidi.API_WEB_MIDI), 'web') + def test_midiin_close_port_docstring(self): + self.assertEqual(rtmidi.MidiIn.close_port.__doc__, rtmidi._rtmidi.MidiBase.close_port.__doc__) + def test_get_compiled_api(self): apilist = rtmidi.get_compiled_api() self.assertTrue(isinstance(apilist, list))