Skip to content

Commit c041f8a

Browse files
authored
Merge pull request #53 from adafruit/useful-repr
Give all MIDIMessage objects a useful repr()
2 parents 100b723 + f89b137 commit c041f8a

22 files changed

+60
-36
lines changed

adafruit_midi/channel_pressure.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ class ChannelPressure(MIDIMessage):
2828
:param int pressure: The pressure, 0-127.
2929
"""
3030

31+
_message_slots = ["pressure", "channel"]
3132
_STATUS = 0xD0
3233
_STATUSMASK = 0xF0
3334
LENGTH = 2

adafruit_midi/control_change.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ class ControlChange(MIDIMessage):
3030
3131
"""
3232

33+
_message_slots = ["control", "value", "channel"]
3334
_STATUS = 0xB0
3435
_STATUSMASK = 0xF0
3536
LENGTH = 3

adafruit_midi/midi_continue.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
class Continue(MIDIMessage):
2626
"""Continue MIDI message."""
2727

28+
_message_slots = []
29+
2830
_STATUS = 0xFB
2931
_STATUSMASK = 0xFF
3032
LENGTH = 1

adafruit_midi/midi_message.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,20 @@ def from_bytes(cls, msg_bytes):
285285
representation of the MIDI message."""
286286
return cls()
287287

288+
def __str__(self):
289+
"""Print an instance"""
290+
cls = self.__class__
291+
if slots := getattr(cls, "_message_slots", None):
292+
# pylint: disable=not-an-iterable
293+
args = ", ".join(
294+
f"{name}={repr(getattr(self, name, None))}" for name in slots
295+
)
296+
else:
297+
args = "..."
298+
return f"{self.__class__.__name__}({args})"
299+
300+
__repr__ = __str__
301+
288302

289303
# DO NOT try to register these messages
290304
class MIDIUnknownEvent(MIDIMessage):
@@ -296,6 +310,7 @@ class MIDIUnknownEvent(MIDIMessage):
296310
or because it is not imported.
297311
"""
298312

313+
_message_slots = ["status"]
299314
LENGTH = -1
300315

301316
def __init__(self, status):
@@ -316,6 +331,8 @@ class MIDIBadEvent(MIDIMessage):
316331

317332
LENGTH = -1
318333

334+
_message_slots = ["msg_bytes", "exception"]
335+
319336
def __init__(self, msg_bytes, exception):
320337
self.data = bytes(msg_bytes)
321338
self.exception_text = repr(exception)

adafruit_midi/mtc_quarter_frame.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ class MtcQuarterFrame(MIDIMessage):
4141
:param value: The quarter frame value for the specified type.
4242
"""
4343

44+
_message_slots = ["msgtype", "value"]
45+
4446
_STATUS = 0xF1
4547
_STATUSMASK = 0xFF
4648
LENGTH = 2

adafruit_midi/note_off.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ class NoteOff(MIDIMessage): # pylint: disable=duplicate-code
3131
3232
"""
3333

34+
_message_slots = ["note", "velocity", "channel"]
3435
_STATUS = 0x80
3536
_STATUSMASK = 0xF0
3637
LENGTH = 3

adafruit_midi/note_on.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ class NoteOn(MIDIMessage):
3131
to a Note Off, defaults to 127.
3232
"""
3333

34+
_message_slots = ["note", "velocity", "channel"]
35+
3436
_STATUS = 0x90
3537
_STATUSMASK = 0xF0
3638
LENGTH = 3

adafruit_midi/pitch_bend.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ class PitchBend(MIDIMessage):
2929
bend from 0 through 8192 (midpoint, no bend) to 16383.
3030
"""
3131

32+
_message_slots = ["pitch_bend", "channel"]
3233
_STATUS = 0xE0
3334
_STATUSMASK = 0xF0
3435
LENGTH = 3

adafruit_midi/polyphonic_key_pressure.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ class PolyphonicKeyPressure(MIDIMessage):
3030
:param int pressure: The pressure, 0-127.
3131
"""
3232

33+
_message_slots = ["note", "pressure", "channel"]
3334
_STATUS = 0xA0
3435
_STATUSMASK = 0xF0
3536
LENGTH = 3

adafruit_midi/program_change.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ class ProgramChange(MIDIMessage):
2828
:param int patch: The new program/patch number to use, 0-127.
2929
"""
3030

31+
_message_slots = ["patch", "channel"]
3132
_STATUS = 0xC0
3233
_STATUSMASK = 0xF0
3334
LENGTH = 2

0 commit comments

Comments
 (0)