Skip to content

Instantly share code, notes, and snippets.

@santosh
Created February 20, 2020 20:13
Show Gist options
  • Save santosh/12c01ed273a7a335fbfa3a6bf1622690 to your computer and use it in GitHub Desktop.
Save santosh/12c01ed273a7a335fbfa3a6bf1622690 to your computer and use it in GitHub Desktop.
disable nuke callbacks for debugging
CALLBACKS = (
'beforeRenders',
'beforeFrameRenders',
'afterRenders',
'afterFrameRenders',
'updateUIs',
'autolabels',
'filenameFilters',
'onCreates',
'onDestroys',
'onScriptCloses',
'onScriptLoads',
'onScriptSaves',
'onUserCreates',
'knobChangeds',
)
class CallbackSwitch(object):
"""Temporarily disable callbacks to avoid them getting called recursively."""
__instance = None
def __new__(self):
"""Make object a singleton."""
if self.__instance is None:
self.__instance = super(CallbackSwitch, self).__new__(self)
self.__instance.initialized = False
return self.__instance
def __init__(self):
"""Temporarily disable callbacks to avoid them getting called recursively."""
if self.initialized:
return
self.initialized = True
self.cleared = False
self.knob_callbacks = {}
self.callback_data = {}
self.callbacks = []
def clear(self, callbacks=None):
"""Clear callbacks.
Args:
callbacks (list of str): list of callbacks to clear.
Clears all if not specified."""
self.callbacks = callbacks or CALLBACKS
# Make a backup and clear registered callbacks
for callback in self.callbacks:
self.callback_data[callback] = getattr(nuke.callbacks, callback)
setattr(nuke.callbacks, callback, {})
self.cleared = True
def restore(self):
"""Restore callbacks. Opposite of CallbackSwitch.clear()"""
if not self.cleared:
return
for callback in self.callbacks:
setattr(nuke.callbacks, callback, self.callabck_data[callback])
self.cleared
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment