Skip to content

Commit c98bd07

Browse files
committed
Give all MIDIMessage objects a useful repr()
1 parent 100b723 commit c98bd07

14 files changed

+30
-3
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: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
class Continue(MIDIMessage):
2626
"""Continue MIDI message."""
27+
_message_slots = []
2728

2829
_STATUS = 0xFB
2930
_STATUSMASK = 0xFF

adafruit_midi/midi_message.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,18 @@ 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+
args = ", ".join(f"{name}={repr(getattr(self, name, None))}"
293+
for name in slots)
294+
else:
295+
args = "..."
296+
return f"{self.__class__.__name__}({args})"
297+
298+
__repr__ = __str__
299+
288300

289301
# DO NOT try to register these messages
290302
class MIDIUnknownEvent(MIDIMessage):
@@ -296,6 +308,7 @@ class MIDIUnknownEvent(MIDIMessage):
296308
or because it is not imported.
297309
"""
298310

311+
_message_slots = ['status']
299312
LENGTH = -1
300313

301314
def __init__(self, status):
@@ -316,6 +329,8 @@ class MIDIBadEvent(MIDIMessage):
316329

317330
LENGTH = -1
318331

332+
_message_slots = ['msg_bytes', 'exception']
333+
319334
def __init__(self, msg_bytes, exception):
320335
self.data = bytes(msg_bytes)
321336
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

adafruit_midi/start.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,6 @@ class Start(MIDIMessage):
2828
_STATUS = 0xFA
2929
_STATUSMASK = 0xFF
3030
LENGTH = 1
31-
31+
_message_slots=[]
3232

3333
Start.register_message_type()

adafruit_midi/stop.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,6 @@ class Stop(MIDIMessage):
2828
_STATUS = 0xFC
2929
_STATUSMASK = 0xFF
3030
LENGTH = 1
31-
31+
_message_slots=[]
3232

3333
Stop.register_message_type()

adafruit_midi/system_exclusive.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ class SystemExclusive(MIDIMessage):
3232
This message can only be parsed if it fits within the input buffer in :class:MIDI.
3333
"""
3434

35+
_message_slots = ['manufacturer_id', 'data']
3536
_STATUS = 0xF0
3637
_STATUSMASK = 0xFF
3738
LENGTH = -1

adafruit_midi/timing_clock.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,6 @@ class TimingClock(MIDIMessage):
3434
_STATUS = 0xF8
3535
_STATUSMASK = 0xFF
3636
LENGTH = 1
37-
37+
_slots = []
3838

3939
TimingClock.register_message_type()

0 commit comments

Comments
 (0)