示例#1
0
	def testExpansionMask( self ) :

		n1 = GafferTest.StringInOutNode( substitutions = Gaffer.Context.Substitutions.AllSubstitutions )
		n2 = GafferTest.StringInOutNode( substitutions = Gaffer.Context.Substitutions.AllSubstitutions & ~Gaffer.Context.Substitutions.FrameSubstitutions )

		n1["in"].setValue( "hello.####.${ext}" )
		n2["in"].setValue( "hello.####.${ext}" )
		self.assertEqual( n1["out"].getValue(), os.path.expanduser( "hello.0001." ) )
		self.assertEqual( n2["out"].getValue(), os.path.expanduser( "hello.####." ) )

		c = Gaffer.Context()
		c["ext"] = "cob"
		c.setFrame( 10 )
		with c :
			self.assertEqual( n1["out"].getValue(), os.path.expanduser( "hello.0010.cob" ) )
			self.assertEqual( n2["out"].getValue(), os.path.expanduser( "hello.####.cob" ) )
示例#2
0
	def testPlugFlagsOnReload( self ):

		s = Gaffer.ScriptNode()
		s["b"] = Gaffer.Box()
		s["b"]["s"] = GafferTest.StringInOutNode()
		s["b"]["a"] = GafferTest.AddNode()

		s["b"].exportForReference( self.temporaryDirectory() + "/test.grf" )

		# import it into a script.

		s2 = Gaffer.ScriptNode()
		s2["r"] = Gaffer.Reference()
		s2["r"].load( self.temporaryDirectory() + "/test.grf" )
		s2["r"]["__pluggy"] = Gaffer.Plug( flags = Gaffer.Plug.Flags.Dynamic | Gaffer.Plug.Flags.Default )
		s2["r"]["__pluggy"]["int"] = Gaffer.IntPlug( flags = Gaffer.Plug.Flags.Dynamic | Gaffer.Plug.Flags.Default )
		s2["r"]["__pluggy"]["compound"] = Gaffer.Plug( flags = Gaffer.Plug.Flags.Dynamic | Gaffer.Plug.Flags.Default )
		s2["r"]["__pluggy"]["compound"]["int"] = Gaffer.IntPlug( flags = Gaffer.Plug.Flags.Dynamic | Gaffer.Plug.Flags.Default )

		self.assertEqual( s2["r"]["__pluggy"].getFlags(), Gaffer.Plug.Flags.Dynamic | Gaffer.Plug.Flags.Default )
		self.assertEqual( s2["r"]["__pluggy"]["int"].getFlags(), Gaffer.Plug.Flags.Dynamic | Gaffer.Plug.Flags.Default )
		self.assertEqual( s2["r"]["__pluggy"]["compound"].getFlags(), Gaffer.Plug.Flags.Dynamic | Gaffer.Plug.Flags.Default )
		self.assertEqual( s2["r"]["__pluggy"]["compound"]["int"].getFlags(), Gaffer.Plug.Flags.Dynamic | Gaffer.Plug.Flags.Default )

		s2["r"].load( self.temporaryDirectory() + "/test.grf" )

		self.assertEqual( s2["r"]["__pluggy"].getFlags(), Gaffer.Plug.Flags.Dynamic | Gaffer.Plug.Flags.Default )
		self.assertEqual( s2["r"]["__pluggy"]["int"].getFlags(), Gaffer.Plug.Flags.Dynamic | Gaffer.Plug.Flags.Default )
		self.assertEqual( s2["r"]["__pluggy"]["compound"].getFlags(), Gaffer.Plug.Flags.Dynamic | Gaffer.Plug.Flags.Default )
		self.assertEqual( s2["r"]["__pluggy"]["compound"]["int"].getFlags(), Gaffer.Plug.Flags.Dynamic | Gaffer.Plug.Flags.Default )
    def testPatternMatching(self):

        n = GafferTest.StringInOutNode()
        self.assertHashesValid(n)

        d = Gaffer.DeleteContextVariablesComputeNode()
        d["in"] = Gaffer.StringPlug()
        d["out"] = Gaffer.StringPlug(direction=Gaffer.Plug.Direction.Out)
        d["in"].setInput(n["out"])

        c = Gaffer.ContextVariablesComputeNode()
        c["in"] = Gaffer.StringPlug()
        c["out"] = Gaffer.StringPlug(direction=Gaffer.Plug.Direction.Out)
        c["in"].setInput(d["out"])

        n["in"].setValue("$a1_$a2_$b1_$b2_$c1_$c2")
        self.assertEqual(c["out"].getValue(), "_____")

        c["variables"].addMember("a1", IECore.StringData("A1"))
        c["variables"].addMember("a2", IECore.StringData("A2"))
        c["variables"].addMember("b1", IECore.StringData("B1"))
        c["variables"].addMember("b2", IECore.StringData("B2"))
        c["variables"].addMember("c1", IECore.StringData("C1"))
        c["variables"].addMember("c2", IECore.StringData("C2"))
        self.assertEqual(c["out"].getValue(), "A1_A2_B1_B2_C1_C2")

        d["variables"].setValue("a* c*")

        self.assertEqual(c["out"].getValue(), "__B1_B2__")
    def testDirtyPropagation(self):

        n = GafferTest.StringInOutNode()

        c = Gaffer.ContextVariables()
        c.setup(Gaffer.StringPlug())
        c["in"].setInput(n["out"])

        # adding a variable should dirty the output:
        dirtied = GafferTest.CapturingSlot(c.plugDirtiedSignal())
        c["variables"].addChild(
            Gaffer.NameValuePlug("a",
                                 IECore.StringData("A"),
                                 "member1",
                                 flags=Gaffer.Plug.Flags.Default
                                 | Gaffer.Plug.Flags.Dynamic))
        self.assertIn(c["out"], [p[0] for p in dirtied])

        # modifying the variable should dirty the output:
        dirtied = GafferTest.CapturingSlot(c.plugDirtiedSignal())
        c["variables"]["member1"]["value"].setValue("b")
        self.assertIn(c["out"], [p[0] for p in dirtied])

        # removing the variable should also dirty the output:
        dirtied = GafferTest.CapturingSlot(c.plugDirtiedSignal())
        c["variables"].removeChild(c["variables"]["member1"])
        self.assertIn(c["out"], [p[0] for p in dirtied])
示例#5
0
    def testExtraVariables(self):

        s = Gaffer.ScriptNode()
        s["n"] = GafferTest.StringInOutNode()

        s["c"] = Gaffer.ContextVariablesComputeNode()
        s["c"]["in"] = Gaffer.StringPlug(flags=Gaffer.Plug.Flags.Default
                                         | Gaffer.Plug.Flags.Dynamic)
        s["c"]["out"] = Gaffer.StringPlug(direction=Gaffer.Plug.Direction.Out,
                                          flags=Gaffer.Plug.Flags.Default
                                          | Gaffer.Plug.Flags.Dynamic)
        s["c"]["in"].setInput(s["n"]["out"])

        s["n"]["in"].setValue("$a")
        self.assertEqual(s["c"]["out"].getValue(), "")

        dirtied = GafferTest.CapturingSlot(s["c"].plugDirtiedSignal())
        s["c"]["extraVariables"].setValue(IECore.CompoundData({"a": "A"}))
        self.failUnless(s["c"]["out"] in {p[0] for p in dirtied})
        self.assertEqual(s["c"]["out"].getValue(), "A")

        # Extra variables trump regular variables of the same name
        s["c"]["variables"].addMember("a", IECore.StringData("B"))
        self.assertEqual(s["c"]["out"].getValue(), "A")

        s2 = Gaffer.ScriptNode()
        s2.execute(s.serialise())

        self.assertEqual(s2["c"]["out"].getValue(), "A")
示例#6
0
	def testFactory( self ) :

		node = GafferTest.StringInOutNode()
		self.assertTrue( GafferUI.View.create( node["out"] ) is None )

		# check that we can make our own view and register it for the node

		class MyView( GafferUI.View ) :

			def __init__( self, viewedPlug = None ) :

				GafferUI.View.__init__( self, "MyView", Gaffer.StringPlug( "in" ) )

				self["in"].setInput( viewedPlug )

		GafferUI.View.registerView( GafferTest.StringInOutNode, "out", MyView )

		view = GafferUI.View.create( node["out"] )
		self.assertTrue( isinstance( view, MyView ) )
		self.assertTrue( view["in"].getInput().isSame( node["out"] ) )

		# and check that that registration leaves other nodes alone

		n = Gaffer.Node()
		n["out"] = Gaffer.StringPlug( direction = Gaffer.Plug.Direction.Out )

		self.assertTrue( GafferUI.View.create( n["out"] ) is None )
示例#7
0
	def testExtraVariables( self ) :

		s = Gaffer.ScriptNode()
		s["n"] = GafferTest.StringInOutNode()

		s["c"] = Gaffer.ContextVariables()
		s["c"].setup( Gaffer.StringPlug() )
		s["c"]["in"].setInput( s["n"]["out"] )

		s["n"]["in"].setValue( "$a" )
		self.assertEqual( s["c"]["out"].getValue(), "" )

		dirtied = GafferTest.CapturingSlot( s["c"].plugDirtiedSignal() )
		s["c"]["extraVariables"].setValue( IECore.CompoundData( { "a" : "A" } ) )
		self.failUnless( s["c"]["out"] in { p[0] for p in dirtied } )
		self.assertEqual( s["c"]["out"].getValue(), "A" )

		# Extra variables trump regular variables of the same name
		s["c"]["variables"].addChild( Gaffer.NameValuePlug( "a", IECore.StringData( "B" ) ) )
		self.assertEqual( s["c"]["out"].getValue(), "A" )

		s2 = Gaffer.ScriptNode()
		s2.execute( s.serialise() )

		self.assertEqual( s2["c"]["out"].getValue(), "A" )
示例#8
0
    def testDefaultValueExpansion(self):

        n = GafferTest.StringInOutNode(defaultValue="${A}")
        context = Gaffer.Context()
        context["A"] = "b"
        with context:
            self.assertEqual(n["out"].getValue(), "b")
示例#9
0
	def testDeriving( self ) :

		class MyView( GafferImageUI.ImageView ) :

			def __init__( self, viewedPlug = None ) :

				GafferImageUI.ImageView.__init__( self, "MyView" )

				converter = Gaffer.Node()
				converter["in"] = Gaffer.StringPlug()
				converter["out"] = GafferImage.ImagePlug( direction = Gaffer.Plug.Direction.Out )
				converter["text"] = GafferImage.Text()
				converter["text"]["text"].setInput( converter["in"] )
				converter["out"].setInput( converter["text"]["out"] )

				self._insertConverter( converter )

				self["in"].setInput( viewedPlug )

		GafferUI.View.registerView( GafferTest.StringInOutNode, "out", MyView )

		string = GafferTest.StringInOutNode()

		view = GafferUI.View.create( string["out"] )
		self.assertTrue( isinstance( view, MyView ) )
		self.assertTrue( view["in"].getInput().isSame( string["out"] ) )
		self.assertTrue( isinstance( view["in"], Gaffer.StringPlug ) )
		view["exposure"].setValue( 1 )
		view["gamma"].setValue( 0.5 )
	def testPatternMatching( self ) :

		n = GafferTest.StringInOutNode()
		self.assertHashesValid( n )

		d = Gaffer.DeleteContextVariables()
		d.setup( Gaffer.StringPlug() )
		d["in"].setInput( n["out"] )

		c = Gaffer.ContextVariables()
		c.setup( Gaffer.StringPlug() )
		c["in"].setInput( d["out"] )


		n["in"].setValue( "$a1_$a2_$b1_$b2_$c1_$c2" )
		self.assertEqual( c["out"].getValue(), "_____" )

		c["variables"].addChild( Gaffer.NameValuePlug( "a1", IECore.StringData( "A1" ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic) )
		c["variables"].addChild( Gaffer.NameValuePlug( "a2", IECore.StringData( "A2" ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic) )
		c["variables"].addChild( Gaffer.NameValuePlug( "b1", IECore.StringData( "B1" ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic) )
		c["variables"].addChild( Gaffer.NameValuePlug( "b2", IECore.StringData( "B2" ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic) )
		c["variables"].addChild( Gaffer.NameValuePlug( "c1", IECore.StringData( "C1" ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic) )
		c["variables"].addChild( Gaffer.NameValuePlug( "c2", IECore.StringData( "C2" ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic) )
		self.assertEqual( c["out"].getValue(), "A1_A2_B1_B2_C1_C2" )

		d["variables"].setValue( "a* c*" )

		self.assertEqual( c["out"].getValue(), "__B1_B2__" )
示例#11
0
    def testRowAccessorWithComputedNames(self):

        n = GafferTest.StringInOutNode()
        n["in"].setValue("x")

        s = Gaffer.Spreadsheet()
        r = s["rows"].addRow()
        r["name"].setInput(n["out"])

        self.assertEqual(s["rows"].row("x"), None)
示例#12
0
    def testRecursiveExpansion(self):

        n = GafferTest.StringInOutNode()
        n["in"].setValue("$a")

        context = Gaffer.Context()
        context["a"] = "a$b"
        context["b"] = "b"

        with context:
            self.assertEqual(n["out"].getValue(), "ab")
示例#13
0
    def testRecursiveExpansionCycles(self):

        n = GafferTest.StringInOutNode()
        n["in"].setValue("$a")

        context = Gaffer.Context()
        context["a"] = "a$b"
        context["b"] = "b$a"

        with context:
            self.assertRaises(RuntimeError, n["out"].getValue)
示例#14
0
	def testDirtyPropagation( self ) :

		n = GafferTest.StringInOutNode()

		d = Gaffer.DeleteContextVariables()
		d.setup( Gaffer.StringPlug() )
		d["in"].setInput( n["out"] )

		# deleting a variable should dirty the output:
		dirtied = GafferTest.CapturingSlot( d.plugDirtiedSignal() )
		d["variables"].setValue( "a" )
		self.failUnless( d["out"] in [ p[0] for p in dirtied ] )
示例#15
0
	def test( self ) :

		n = GafferTest.StringInOutNode()
		self.assertHashesValid( n )

		c = Gaffer.ContextVariables()
		c.setup( Gaffer.StringPlug() )
		c["in"].setInput( n["out"] )

		n["in"].setValue( "$a" )
		self.assertEqual( c["out"].getValue(), "" )

		c["variables"].addChild( Gaffer.NameValuePlug( "a", IECore.StringData( "A" ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic ) )
		self.assertEqual( c["out"].getValue(), "A" )
示例#16
0
	def testTildeExpansion( self ) :

		n = GafferTest.StringInOutNode()

		n["in"].setValue( "~" )
		self.assertEqual( n["out"].getValue(), os.path.expanduser( "~" ) )

		n["in"].setValue( "~/something.tif" )
		self.assertEqual( n["out"].getValue(), os.path.expanduser( "~/something.tif" ) )

		# ~ shouldn't be expanded unless it's at the front - it would
		# be meaningless in other cases.
		n["in"].setValue( "in ~1900" )
		self.assertEqual( n["out"].getValue(), "in ~1900" )
示例#17
0
    def test(self):

        n = GafferTest.StringInOutNode()
        self.assertHashesValid(n)

        c = Gaffer.ContextVariables()
        c.setup(Gaffer.StringPlug())
        c["in"].setInput(n["out"])

        n["in"].setValue("$a")
        self.assertEqual(c["out"].getValue(), "")

        c["variables"].addMember("a", IECore.StringData("A"))
        self.assertEqual(c["out"].getValue(), "A")
示例#18
0
    def testExpansionFromInputConnection(self):

        p = Gaffer.StringPlug()
        p.setValue("${foo}")

        n = GafferTest.StringInOutNode()
        n["in"].setInput(p)

        c = Gaffer.Context()
        with c:
            self.assertEqual(n["out"].getValue(), "")
            h = n["out"].hash()

        c["foo"] = "foo"
        with c:
            self.assertNotEqual(n["out"].hash(), h)
            self.assertEqual(n["out"].getValue(), "foo")
示例#19
0
    def testExpansion(self):

        n = GafferTest.StringInOutNode()
        self.assertHashesValid(n)

        # nothing should be expanded when we're in a non-computation context
        n["in"].setValue("testyTesty.##.exr")
        self.assertEqual(n["in"].getValue(), "testyTesty.##.exr")

        n["in"].setValue("${a}/$b/${a:b}")
        self.assertEqual(n["in"].getValue(), "${a}/$b/${a:b}")

        # but expansions should happen magically when the compute()
        # calls getValue().
        context = Gaffer.Context()
        context.setFrame(10)
        n["in"].setValue("testyTesty.###.exr")
        with context:
            self.assertEqual(n["out"].getValue(), "testyTesty.010.exr")

        context["A"] = "apple"
        n["in"].setValue("what a lovely $A")
        with context:
            self.assertEqual(n["out"].getValue(), "what a lovely apple")
        n["in"].setValue("what a lovely ${A}")
        with context:
            self.assertEqual(n["out"].getValue(), "what a lovely apple")
        context["A"] = "peach"
        with context:
            self.assertEqual(n["out"].getValue(), "what a lovely peach")

        context["env:dir"] = "a/path"
        n["in"].setValue("a/${env:dir}/b")
        with context:
            self.assertEqual(n["out"].getValue(), "a/a/path/b")

        n["in"].setValue("$dontExist")
        with context:
            self.assertEqual(n["out"].getValue(), "")

        # once again, nothing should be expanded when we're in a
        # non-computation context
        n["in"].setValue("testyTesty.##.exr")
        self.assertEqual(n["in"].getValue(), "testyTesty.##.exr")
示例#20
0
	def testLoadThrowsExceptionsOnError( self ) :

		s = Gaffer.ScriptNode()
		s["b"] = Gaffer.Box()
		s["b"]["n"] = GafferTest.StringInOutNode()

		s["b"].exportForReference( self.temporaryDirectory() + "/test.grf" )

		del GafferTest.StringInOutNode # induce a failure during loading

		s2 = Gaffer.ScriptNode()
		s2["r"] = Gaffer.Reference()

		with IECore.CapturingMessageHandler() as mh :
			self.assertRaises( Exception, s2["r"].load, self.temporaryDirectory() + "/test.grf" )

		self.assertEqual( len( mh.messages ), 2 )
		self.assertTrue( "has no attribute 'StringInOutNode'" in mh.messages[0].message )
		self.assertTrue( "KeyError: 'n'" in mh.messages[1].message )
示例#21
0
    def testHashUsesValue(self):

        script = Gaffer.ScriptNode()
        script["node"] = GafferTest.StringInOutNode()

        script["expression"] = Gaffer.Expression()
        script["expression"].setExpression(
            """parent["node"]["in"] = str( min( context.getFrame(), 10.0 ) )"""
        )

        hashes = {}
        with Gaffer.Context() as context:
            for i in range(0, 20):
                context.setFrame(i)
                hashes[i] = str(script["node"]["in"].hash())

        self.assertEqual(len(set(hashes.values())), 11)
        for i in range(10, 20):
            self.assertEqual(hashes[i], hashes[10])
示例#22
0
    def testExtraVariablesExpression(self):

        s = Gaffer.ScriptNode()
        s["n"] = GafferTest.StringInOutNode()

        s["c"] = Gaffer.ContextVariablesComputeNode()
        s["c"]["in"] = Gaffer.StringPlug(flags=Gaffer.Plug.Flags.Default
                                         | Gaffer.Plug.Flags.Dynamic)
        s["c"]["out"] = Gaffer.StringPlug(direction=Gaffer.Plug.Direction.Out,
                                          flags=Gaffer.Plug.Flags.Default
                                          | Gaffer.Plug.Flags.Dynamic)
        s["c"]["in"].setInput(s["n"]["out"])

        s["n"]["in"].setValue("$a$b$c")
        self.assertEqual(s["c"]["out"].getValue(), "")

        s["e"] = Gaffer.Expression()
        s["e"].setExpression(
            inspect.cleandoc("""
			result = IECore.CompoundData()

			if context.getFrame() > 1 :
				result["a"] = "A"
			if context.getFrame() > 2 :
				result["b"] = "B"
			if context.getFrame() > 3 :
				result["c"] = "C"

			parent["c"]["extraVariables"] = result
			"""))

        with Gaffer.Context() as c:

            self.assertEqual(s["c"]["out"].getValue(), "")

            c.setFrame(2)
            self.assertEqual(s["c"]["out"].getValue(), "A")

            c.setFrame(3)
            self.assertEqual(s["c"]["out"].getValue(), "AB")

            c.setFrame(4)
            self.assertEqual(s["c"]["out"].getValue(), "ABC")
示例#23
0
    def testEnvironmentExpansion(self):

        n = GafferTest.StringInOutNode()

        n["in"].setValue("${NOT_AN_ENVIRONMENT_VARIABLE}")
        h1 = n["out"].hash()
        self.assertEqual(n["out"].getValue(), "")

        n["in"].setValue("${GAFFER_ROOT}")
        self.assertEqual(n["out"].getValue(), os.environ["GAFFER_ROOT"])
        h2 = n["out"].hash()
        self.assertNotEqual(h1, h2)

        context = Gaffer.Context()
        context["GAFFER_ROOT"] = "b"
        with context:
            # context should win against environment
            self.assertEqual(n["out"].getValue(), "b")
            self.assertNotEqual(n["out"].hash(), h1)
            self.assertNotEqual(n["out"].hash(), h2)
示例#24
0
	def testSerialisation( self ) :

		s = Gaffer.ScriptNode()
		s["n"] = GafferTest.StringInOutNode()

		s["c"] = Gaffer.ContextVariables()
		s["c"].setup( Gaffer.StringPlug() )
		s["c"]["in"].setInput( s["n"]["out"] )

		s["n"]["in"].setValue( "$a" )
		self.assertEqual( s["c"]["out"].getValue(), "" )

		s["c"]["variables"].addChild( Gaffer.NameValuePlug( "a", IECore.StringData( "A" ), flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic ) )
		self.assertEqual( s["c"]["out"].getValue(), "A" )

		s2 = Gaffer.ScriptNode()
		s2.execute( s.serialise() )

		self.assertEqual( s2["c"].keys(), s["c"].keys() )
		self.assertEqual( s2["c"]["out"].getValue(), "A" )
示例#25
0
    def testSerialisation(self):

        s = Gaffer.ScriptNode()
        s["n"] = GafferTest.StringInOutNode()

        s["c"] = Gaffer.ContextVariables()
        s["c"].setup(Gaffer.StringPlug())
        s["c"]["in"].setInput(s["n"]["out"])

        s["n"]["in"].setValue("$a")
        self.assertEqual(s["c"]["out"].getValue(), "")

        s["c"]["variables"].addMember("a", IECore.StringData("A"))
        self.assertEqual(s["c"]["out"].getValue(), "A")

        s2 = Gaffer.ScriptNode()
        s2.execute(s.serialise())

        self.assertEqual(s2["c"].keys(), s["c"].keys())
        self.assertEqual(s2["c"]["out"].getValue(), "A")
示例#26
0
    def testEnabledPlugTypeConversion(self):

        plane = GafferScene.Plane()
        string = GafferTest.StringInOutNode()

        processor = GafferScene.StandardAttributes()
        processor["in"].setInput(plane["out"])
        processor["attributes"]["doubleSided"]["enabled"].setValue(True)
        processor["attributes"]["doubleSided"]["value"].setValue(True)
        processor["enabled"].setInput(string["out"])

        string["in"].setValue("")
        self.assertScenesEqual(processor["in"], processor["out"])
        self.assertSceneHashesEqual(processor["in"], processor["out"])

        string["in"].setValue("x")
        self.assertNotEqual(processor["in"].attributes("/plane"),
                            processor["out"].attributes("/plane"))
        self.assertNotEqual(processor["in"].attributesHash("/plane"),
                            processor["out"].attributesHash("/plane"))
示例#27
0
    def testEnvironmentExpansion(self):

        n = GafferTest.StringInOutNode()

        n["in"].setValue("${A}")
        h1 = n["out"].hash()
        self.assertEqual(n["out"].getValue(), "")

        os.environ["A"] = "a"
        self.assertEqual(n["out"].getValue(), "a")
        h2 = n["out"].hash()
        self.assertNotEqual(h1, h2)

        context = Gaffer.Context()
        context["A"] = "b"
        with context:
            # context should win against environment
            self.assertEqual(n["out"].getValue(), "b")
            self.assertNotEqual(n["out"].hash(), h1)
            self.assertNotEqual(n["out"].hash(), h2)
示例#28
0
	def testSerialisation( self ) :

		s = Gaffer.ScriptNode()
		s["n"] = GafferTest.StringInOutNode()

		s["c"] = Gaffer.ContextVariablesComputeNode()
		s["c"]["in"] = Gaffer.StringPlug( flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic )
		s["c"]["out"] = Gaffer.StringPlug( direction = Gaffer.Plug.Direction.Out, flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic )
		s["c"]["in"].setInput( s["n"]["out"] )

		s["n"]["in"].setValue( "$a" )
		self.assertEqual( s["c"]["out"].getValue(), "" )

		s["c"]["variables"].addMember( "a", IECore.StringData( "A" ) )
		self.assertEqual( s["c"]["out"].getValue(), "A" )

		s2 = Gaffer.ScriptNode()
		s2.execute( s.serialise() )

		self.assertEqual( s2["c"].keys(), s["c"].keys() )
		self.assertEqual( s2["c"]["out"].getValue(), "A" )
示例#29
0
	def testErrorTolerantLoading( self ) :

		# make a box containing 2 nodes, and export it.

		s = Gaffer.ScriptNode()
		s["b"] = Gaffer.Box()
		s["b"]["s"] = GafferTest.StringInOutNode()
		s["b"]["a"] = GafferTest.AddNode()

		s["b"].exportForReference( self.temporaryDirectory() + "/test.grf" )

		# import it into a script.

		s2 = Gaffer.ScriptNode()
		s2["r"] = Gaffer.Reference()
		s2["r"].load( self.temporaryDirectory() + "/test.grf" )

		self.assertTrue( "a" in s2["r"] )
		self.assertTrue( isinstance( s2["r"]["a"], GafferTest.AddNode ) )

		# save that script, and then mysteriously
		# disable GafferTest.StringInOutNode.

		s2["fileName"].setValue( self.temporaryDirectory() + "/test.gfr" )
		s2.save()

		del GafferTest.StringInOutNode

		# load the script, and check that we could at least
		# load in the other referenced node.

		s3 = Gaffer.ScriptNode()
		s3["fileName"].setValue( self.temporaryDirectory() + "/test.gfr" )
		with IECore.CapturingMessageHandler() as mh :
			s3.load( continueOnError=True )

		self.assertTrue( len( mh.messages ) )

		self.assertTrue( "a" in s3["r"] )
		self.assertTrue( isinstance( s3["r"]["a"], GafferTest.AddNode ) )
示例#30
0
    def testPrecomputedHash(self):

        n = GafferTest.StringInOutNode()
        n["in"].setValue("hi")

        self.assertEqual(n["out"].getValue(), "hi")
        self.assertEqual(n.numHashCalls, 1)
        self.assertEqual(n.numComputeCalls, 1)

        h = n["out"].hash()
        numHashCalls = n.numHashCalls
        # Accept either 1 or 2 - it would be reasonable for the ValuePlug
        # to have either cached the hash or not, but that's not what we're
        # testing here.
        self.assertTrue(numHashCalls == 1 or numHashCalls == 2)
        self.assertEqual(n.numComputeCalls, 1)

        # What we care about is that calling getValue() with a precomputed hash
        # definitely doesn't recompute the hash again.
        self.assertEqual(n["out"].getValue(_precomputedHash=h), "hi")
        self.assertEqual(n.numHashCalls, numHashCalls)
        self.assertEqual(n.numComputeCalls, 1)