示例#1
0
    def __dispatcher(self, frameRange=None):

        result = Gaffer.LocalDispatcher(
            jobPool=Gaffer.LocalDispatcher.JobPool())
        result["jobsDirectory"].setValue(
            "/tmp/gafferTaskContextVariablesTest/jobs")

        return result
示例#2
0
    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)
示例#3
0
    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)
示例#4
0
    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
示例#5
0
    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
示例#6
0
    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"]])
示例#7
0
    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")
示例#8
0
    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()))
示例#9
0
    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"))
示例#10
0
    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()))
示例#11
0
	def __dispatcher( self, frameRange = None ) :

		result = Gaffer.LocalDispatcher( jobPool = Gaffer.LocalDispatcher.JobPool() )
		result["jobsDirectory"].setValue( self.temporaryDirectory() + "/jobs" )

		return result
示例#12
0
    def __dispatcher(self):

        result = Gaffer.LocalDispatcher()
        result["jobsDirectory"].setValue(self.temporaryDirectory() + "/jobs")

        return result