# Copyright (c) 2009 The Foundry Visionmongers Ltd. All Rights Reserved.
import nuke_internal as nuke
import re
def __NodeHasKnobWithName(node, name):
try:
node[name]
except NameError:
return False
else:
return True
def __NodeHasFileKnob(node):
return __NodeHasKnobWithName(node, 'file')
def __NodeHasProxyKnob(node):
return __NodeHasKnobWithName(node, 'proxy')
def __ReplaceKnobValue(searchstr, replacestr, knob):
v = knob.value()
if v:
repl = re.sub(searchstr, replacestr, v)
knob.setValue(repl)
[docs]def search_replace():
""" Search/Replace in Reads and Writes. """
fileKnobNodes = [i for i in nuke.selectedNodes(recursive=True) if __NodeHasFileKnob(i)]
proxyKnobNodes = [i for i in nuke.selectedNodes(recursive=True) if __NodeHasProxyKnob(i)]
if not fileKnobNodes and not proxyKnobNodes: raise ValueError("No nodes selected")
p = nuke.Panel("Search/Replace in Reads and Writes")
p.addSingleLineInput("Search for:", "rgbea")
p.addSingleLineInput("Replace with:", "rgbea")
success = p.show()
if success == 1:
searchstr = p.value("Search for:")
replacestr = p.value("Replace with:")
for i in fileKnobNodes: __ReplaceKnobValue(searchstr, replacestr, i['file'])
for i in proxyKnobNodes: __ReplaceKnobValue(searchstr, replacestr, i['proxy'])