-
Notifications
You must be signed in to change notification settings - Fork 0
/
gniputils.py
95 lines (80 loc) · 4.01 KB
/
gniputils.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
CMD_ALL = 'GNIP_DUMPALL'
CMD_TREE = 'GNIP_DUMPTREE'
def register(trg):
trg._parent.log_message('Registering UserAction command:%s from:%s' % (CMD_ALL, __file__))
# Add method from this file to the ClyphXUserActions class
type(trg).gnip_dumpall = dumpall_cmd
# Register method with ClyphX command
trg._action_dict[CMD_ALL] = 'gnip_dumpall'
trg._parent.log_message('Registering UserAction command:%s from:%s' % (CMD_TREE, __file__))
# Add method from this file to the ClyphXUserActions class
type(trg).gnip_dumptree = dumptree_cmd
# Register method with ClyphX command
trg._action_dict[CMD_TREE] = 'gnip_dumptree'
#################### ClyphXUserActions
def dumpall_cmd(self, track, args):
"""<CMD> - dump info about song, view, tracks and first track to Log.txt
<CMD> true - dump same info but with functions shown as well"""
self._parent.show_message('Running ' + CMD_ALL)
show_funcs = args.lower() == 'true'
txt = '\nRUNNING ' + CMD_ALL
txt += '\n' + _dumpobj(self.song(), show_funcs)
txt += '\n' + _dumpobj(self.song().view, show_funcs)
txt += '\n' + _dumpobj(self.song().tracks, show_funcs)
txt += '\n' + _dumpobj(self.song().tracks[0], show_funcs)
if len(self.song().tracks[0].devices) > 0:
txt += '\n' + _dumpobj(self.song().tracks[0].devices[0])
self._parent.log_message(txt)
def dumptree_cmd(self, track, args):
"""Dump basic song, song view, track, clip info"""
self._parent.show_message('Running ' + CMD_TREE)
t = '\nRUNNING ' + CMD_TREE + '\n'
song = self.song()
t += 'Song: length:%.f cur:%.f playing:%s tempo:%.f\n' % (
song.song_length, song.current_song_time, song.is_playing, song.tempo)
sel_trk = song.view.selected_track
sel_scene = song.view.selected_scene
hilited_clip = '<empty slot>' if song.view.highlighted_clip_slot.clip is None else song.view.highlighted_clip_slot.clip.name
t += 'Song view: selTrk:%s selScene:%s selClip:%s\n' % (sel_trk.name, sel_scene.name, hilited_clip)
for track in song.tracks:
t += ' track %s\n' % track.name
for device in track.devices:
t += ' Device: type:%-14s class:%s name:%s\n' % (device.type, device.class_name, device.name)
if hasattr(device, 'selected_preset_index') and hasattr(device, 'presets'):
t += ' selected preset: %s\n' % device.presets[device.selected_preset_index]
for slot in track.clip_slots:
tag = '' if slot.clip is None else slot.clip.name
t += ' clipslot %s\n' % tag
self._parent.log_message(t)
self._parent.show_message('Complete: ' + CMD_TREE)
#################### Supporting code
def _make_member_desc(member_name, member):
return '{} <{}>'.format(member_name, type(member).__name__)
def _dumpobj(obj, show_callables=False):
'''A debugging function that prints out the names and values of all the
members of the given object. Very useful for inspecting objects in
interactive sessions'''
txt = 'TYPE: %s\n' % type(obj).__name__
members = {}
for name in dir(obj):
try:
members[name] = getattr(obj, name)
except Exception as e:
members[name] = 'EXCEPTION getting value: %s - %s' % (type(e), str(e))
members = {name: member for name, member in members.items()
if name not in ('__builtins__', '__doc__')}
members = {name: member for name, member in members.items()
if not name.startswith('__') and not name.endswith('__')}
if not show_callables:
members = {name: member for name, member in members.items()
if not callable(member)}
if len(members) == 0:
txt += ' <EMPTY>\n'
return txt
max_desc_len = max([len(_make_member_desc(k, v)) for k, v in members.items()])
items = list(members.items())
items.sort()
for name, member in items:
member_desc = _make_member_desc(name, member)
txt += ' {} = {}\n'.format(member_desc.ljust(max_desc_len), member)
return txt