def __dispatcher(self, frameRange=None): result = Gaffer.LocalDispatcher( jobPool=Gaffer.LocalDispatcher.JobPool()) result["jobsDirectory"].setValue( "/tmp/gafferTaskContextVariablesTest/jobs") return result
def testBadJobDirectory(self): dispatcher = Gaffer.LocalDispatcher() self.assertEqual(dispatcher["jobName"].getValue(), "") self.assertEqual(dispatcher["jobDirectory"].getValue(), "") jobDir = dispatcher.jobDirectory(Gaffer.Context()) self.assertNotEqual(jobDir, "") self.assertTrue(os.path.exists(jobDir)) shutil.rmtree(jobDir)
def testWedge(self): s = Gaffer.ScriptNode() s["sphere"] = GafferScene.Sphere() s["sphere"]["sets"].setValue("${wedge:value}") s["filter"] = GafferScene.SetFilter() s["filter"]["set"].setValue("hidden") s["attributes"] = GafferScene.StandardAttributes() s["attributes"]["attributes"]["visibility"]["enabled"].setValue(True) s["attributes"]["attributes"]["visibility"]["value"].setValue(False) s["attributes"]["filter"].setInput(s["filter"]["out"]) s["attributes"]["in"].setInput(s["sphere"]["out"]) s["outputs"] = GafferScene.Outputs() s["outputs"].addOutput( "beauty", IECore.Display("/tmp/${wedge:value}.tif", "tiff", "rgba", {})) s["outputs"]["in"].setInput(s["attributes"]["out"]) s["render"] = GafferArnold.ArnoldRender() s["render"]["fileName"].setValue("/tmp/test.####.ass") s["render"]["in"].setInput(s["outputs"]["out"]) s["wedge"] = Gaffer.Wedge() s["wedge"]["mode"].setValue(int(s["wedge"].Mode.StringList)) s["wedge"]["strings"].setValue( IECore.StringVectorData(["visible", "hidden"])) s["wedge"]["requirements"][0].setInput(s["render"]["requirement"]) s["fileName"].setValue("/tmp/test.gfr") s.save() dispatcher = Gaffer.LocalDispatcher() dispatcher["jobsDirectory"].setValue("/tmp/testJobDirectory") dispatcher["framesMode"].setValue( Gaffer.Dispatcher.FramesMode.CurrentFrame) dispatcher["executeInBackground"].setValue(False) dispatcher.dispatch([s["wedge"]]) hidden = GafferImage.ImageReader() hidden["fileName"].setValue("/tmp/hidden.tif") visible = GafferImage.ImageReader() visible["fileName"].setValue("/tmp/visible.tif") hiddenStats = GafferImage.ImageStats() hiddenStats["in"].setInput(hidden["out"]) visibleStats = GafferImage.ImageStats() visibleStats["in"].setInput(visible["out"]) self.assertTrue(hiddenStats["average"].getValue()[0] < 0.05) self.assertTrue(visibleStats["average"].getValue()[0] > .35)
def __dispatcher(self, frameRange=None): result = Gaffer.LocalDispatcher() result["jobsDirectory"].setValue(self.temporaryDirectory() + "/jobs") if frameRange is not None: result["framesMode"].setValue(result.FramesMode.CustomRange) result["frameRange"].setValue(frameRange) return result
def __dispatcher(self, frameRange=None): result = Gaffer.LocalDispatcher() result["jobsDirectory"].setValue("/tmp/gafferWedgeTest/jobs") if frameRange is not None: result["framesMode"].setValue(result.FramesMode.CustomRange) result["frameRange"].setValue(frameRange) return result
def testRenderToDisplayViaForegroundDispatch(self): s = Gaffer.ScriptNode() s["sphere"] = GafferScene.Sphere() s["outputs"] = GafferScene.Outputs() s["outputs"].addOutput( "beauty", IECore.Display( "test", "ieDisplay", "rgba", { "quantize": IECore.FloatVectorData([0, 0, 0, 0]), "driverType": "ClientDisplayDriver", "displayHost": "localhost", "displayPort": "1559", "remoteDisplayType": "GafferImage::GafferDisplayDriver", "handle": "myLovelyPlane", })) s["outputs"]["in"].setInput(s["sphere"]["out"]) s["display"] = GafferImage.Display() def __displayCallback(plug): pass # connect a python function to the Display node image and data # received signals. this emulates what the UI does. c = ( s["display"].imageReceivedSignal().connect(__displayCallback), s["display"].dataReceivedSignal().connect(__displayCallback), ) s["render"] = GafferRenderMan.RenderManRender() s["render"]["ribFileName"].setValue(self.temporaryDirectory() + "/test.rib") s["render"]["in"].setInput(s["outputs"]["out"]) s["fileName"].setValue(self.temporaryDirectory() + "/test.gfr") s.save() # dispatch the render on the foreground thread. if we don't manage # the GIL appropriately, we'll get a deadlock when the Display signals # above try to enter python on the background thread. dispatcher = Gaffer.LocalDispatcher() dispatcher["jobsDirectory"].setValue(self.temporaryDirectory() + "/testJobDirectory") dispatcher["framesMode"].setValue( Gaffer.Dispatcher.FramesMode.CurrentFrame) dispatcher["executeInBackground"].setValue(False) dispatcher.dispatch([s["render"]])
def testFrameRangeSubstitutions(self): s = Gaffer.ScriptNode() s["n"] = Gaffer.SystemCommand() s["n"]["command"].setValue("touch " + self.temporaryDirectory() + "/systemCommandTest.####.txt") d = Gaffer.LocalDispatcher() d["jobsDirectory"].setValue(self.temporaryDirectory() + "/jobs") d["framesMode"].setValue(d.FramesMode.CustomRange) d["frameRange"].setValue("1-10") d.dispatch([s["n"]]) sequences = IECore.ls(self.temporaryDirectory()) self.assertEqual(len(sequences), 1) self.assertEqual(str(sequences[0]), "systemCommandTest.####.txt 1-10")
def testBackgroundDispatch(self): s = Gaffer.ScriptNode() s["c"] = GafferImage.Constant() s["w"] = GafferImage.ImageWriter() s["w"]["in"].setInput(s["c"]["out"]) s["w"]["fileName"].setValue(self.temporaryDirectory() + "/test.exr") d = Gaffer.LocalDispatcher() d["jobsDirectory"].setValue(self.temporaryDirectory() + "/jobs") d["executeInBackground"].setValue(True) with s.context(): d.dispatch([s["w"]]) d.jobPool().waitForAll() self.assertTrue(os.path.isfile(s["w"]["fileName"].getValue()))
def testBackgroundDispatch(self): script = Gaffer.ScriptNode() script["writer"] = GafferTest.TextWriter() script["expression"] = Gaffer.Expression() script["expression"].setExpression( 'parent.writer.fileName = "' + self.temporaryDirectory() + '/test.txt"', "OSL") dispatcher = Gaffer.LocalDispatcher() dispatcher["jobsDirectory"].setValue( "/tmp/gafferOSLExpressionEngineTest/jobs") dispatcher["executeInBackground"].setValue(True) dispatcher.dispatch([script["writer"]]) dispatcher.jobPool().waitForAll() self.assertEqual(len(dispatcher.jobPool().failedJobs()), 0) self.assertTrue(os.path.exists(self.temporaryDirectory() + "/test.txt"))
def testWriteIntermediateFile(self): # This tests a fairly common usage pattern whereby # an ImageReader loads an image generated higher # up the task tree, some processing is done, and # then an ImageWriter is used to write out the modified # image. A good example of this is a render node being # used to generate an image which is then pushed through # a slapcomp process. Because the rendered image to be # read/written doesn't exist at the point of dispatch # we have to make sure this doesn't cause problems. s = Gaffer.ScriptNode() s["c"] = GafferImage.Constant() s["w1"] = GafferImage.ImageWriter() s["w1"]["in"].setInput(s["c"]["out"]) s["w1"]["fileName"].setValue(self.__testDir + "/test1.exr") s["r"] = GafferImage.ImageReader() s["r"]["fileName"].setValue(self.__testDir + "/test1.exr") s["w2"] = GafferImage.ImageWriter() s["w2"]["in"].setInput(s["r"]["out"]) s["w2"]["fileName"].setValue(self.__testDir + "/test2.exr") s["w2"]["requirements"][0].setInput(s["w1"]["requirement"]) d = Gaffer.LocalDispatcher() d["jobsDirectory"].setValue(self.__testDir + "/jobs") with s.context(): d.dispatch([s["w2"]]) self.assertTrue(os.path.isfile(s["w1"]["fileName"].getValue())) self.assertTrue(os.path.isfile(s["w2"]["fileName"].getValue()))
def __dispatcher( self, frameRange = None ) : result = Gaffer.LocalDispatcher( jobPool = Gaffer.LocalDispatcher.JobPool() ) result["jobsDirectory"].setValue( self.temporaryDirectory() + "/jobs" ) return result
def __dispatcher(self): result = Gaffer.LocalDispatcher() result["jobsDirectory"].setValue(self.temporaryDirectory() + "/jobs") return result