def testConstructFromList(self): f1 = Gaffer.FileNamePathFilter(["a.*"]) f2 = Gaffer.FileNamePathFilter(["b.*"]) f = Gaffer.CompoundPathFilter([f1, f2]) self.assertFilterListsEqual(f.getFilters(), [f1, f2])
def open(menu): scriptWindow = menu.ancestor(GafferUI.ScriptWindow) path = Gaffer.FileSystemPath("/") path.addFilter(Gaffer.FileNamePathFilter(["*.gfr"])) path.addFilter( Gaffer.FileNamePathFilter([re.compile("^[^.].*")], leafOnly=False)) dialogue = GafferUI.PathChooserDialogue(path, title="Open script", confirmLabel="Open") scriptWindow.addChildWindow(dialogue) path = dialogue.waitForPath() dialogue.hide() if not path: return currentScript = scriptWindow.getScript() application = scriptWindow.getScript().ancestor( Gaffer.ApplicationRoot.staticTypeId()) currentNodes = [ n for n in currentScript.children() if n.isInstanceOf(Gaffer.Node.staticTypeId()) ] if not currentNodes and not currentScript["fileName"].getValue(): script = currentScript else: script = Gaffer.ScriptNode() script["fileName"].setValue(str(path)) script.load() application["scripts"].addChild(script)
def testFilterSignals(self): p = Gaffer.Path("/") f1 = Gaffer.FileNamePathFilter(["*.gfr"]) f2 = Gaffer.FileNamePathFilter(["*.grf"]) self.assertEqual(f1.changedSignal().num_slots(), 0) self.assertEqual(f2.changedSignal().num_slots(), 0) # The Path shouldn't connect to the filter changed signal # until it really needs to - when something is connected # to the path's own changed signal. p.setFilter(f1) self.assertEqual(f1.changedSignal().num_slots(), 0) self.assertEqual(f2.changedSignal().num_slots(), 0) cs = GafferTest.CapturingSlot(p.pathChangedSignal()) self.assertEqual(f1.changedSignal().num_slots(), 1) self.assertEqual(f2.changedSignal().num_slots(), 0) self.assertEqual(len(cs), 0) f1.setEnabled(False) self.assertEqual(len(cs), 1) p.setFilter(f2) self.assertEqual(f1.changedSignal().num_slots(), 0) self.assertEqual(f2.changedSignal().num_slots(), 1) self.assertEqual(len(cs), 2) f1.setEnabled(True) self.assertEqual(len(cs), 2) f2.setEnabled(False) self.assertEqual(len(cs), 3)
def testConstructFromIterable(self): f1 = Gaffer.FileNamePathFilter(["a.*"]) f2 = Gaffer.FileNamePathFilter(["b.*"]) f = Gaffer.CompoundPathFilter(itertools.chain([f1], [f2])) self.assertFilterListsEqual(f.getFilters(), [f1, f2])
def testUserData(self): pathFilter = Gaffer.FileNamePathFilter(["*.gfr"]) self.assertEqual(pathFilter.userData(), {}) ud = {"a": "a"} pathFilter = Gaffer.FileNamePathFilter(["*.gfr"], userData=ud) self.assertEqual(pathFilter.userData(), ud) self.failIf(pathFilter.userData() is ud)
def testUserData(self): pathFilter = Gaffer.FileNamePathFilter(["*.gfr"]) self.assertEqual(pathFilter.userData(), IECore.CompoundData()) ud = IECore.CompoundData({"a": "a"}) pathFilter = Gaffer.FileNamePathFilter(["*.gfr"], userData=ud) self.assertEqual(pathFilter.userData(), ud) self.failIf(pathFilter.userData() is ud)
def _filter( self ) : result = Gaffer.CompoundPathFilter() result.addFilter( Gaffer.FileNamePathFilter( [ re.compile( "^[^.].*" ) ], leafOnly=False, userData = { "UI" : { "label" : "Show hidden files", "invertEnabled" : True, } } ) ) result.addFilter( Gaffer.InfoPathFilter( infoKey = "name", matcher = None, # the ui will fill this in leafOnly = False, ) ) return result
def test(self): # First, check that we have a mix of extensions in # our test directory. Otherwise we can't test anything. self.assertTrue( len(glob.glob(self.__testDirectory + "/*")) != len( glob.glob(self.__testDirectory + "/*.txt"))) # Check that an unfiltered path can see all the files path = Gaffer.FileSystemPath(self.__testDirectory) children = path.children() self.assertEqual(len(children), len(glob.glob(self.__testDirectory + "/*"))) # Attach a filter, and check that the files are filtered txtFilter = Gaffer.FileNamePathFilter(["*.txt"]) path.setFilter(txtFilter) children = path.children() self.assertEqual(len(children), len(glob.glob(self.__testDirectory + "/*.txt"))) # Copy the path and check the filter is working on the copy pathCopy = path.copy() self.assertEqual(len(pathCopy.children()), len(children)) # Detach the filter and check that behaviour has reverted path.setFilter(None) children = path.children() self.assertEqual(len(children), len(glob.glob(self.__testDirectory + "/*")))
def _initialPath(self): scriptWindow = self.browser().ancestor(GafferUI.ScriptWindow) scriptNode = scriptWindow.scriptNode() return Gaffer.GraphComponentPath( scriptNode, "/", filter=Gaffer.CompoundPathFilter( filters=[ Gaffer.FileNamePathFilter([re.compile("^[^__].*")], leafOnly=False, userData={ "UI": { "label": "Show hidden", "invertEnabled": True, } }), Gaffer.InfoPathFilter( infoKey="name", matcher=None, # the ui will fill this in leafOnly=False, ), ], ), )
def testFilters( self ) : p = Gaffer.Path( "/" ) self.assertEqual( p.getFilter(), None ) changedPaths = [] def f( path ) : changedPaths.append( str( path ) ) c = p.pathChangedSignal().connect( f ) self.assertEqual( len( changedPaths ), 0 ) filter = Gaffer.FileNamePathFilter( [ "*.gfr" ] ) p.setFilter( filter ) self.assertTrue( p.getFilter().isSame( filter ) ) self.assertEqual( len( changedPaths ), 1 ) p.setFilter( filter ) self.assertTrue( p.getFilter().isSame( filter ) ) self.assertEqual( len( changedPaths ), 1 ) p.setFilter( None ) self.assertIsNone( p.getFilter() ) self.assertEqual( len( changedPaths ), 2 ) p.setFilter( filter ) self.assertTrue( p.getFilter().isSame( filter ) ) self.assertEqual( len( changedPaths ), 3 ) filter.setEnabled( False ) self.assertEqual( len( changedPaths ), 4 ) filter.setEnabled( True ) self.assertEqual( len( changedPaths ), 5 )
def testConstructWithFilter(self): p = Gaffer.Path("/test/path") self.failUnless(p.getFilter() is None) f = Gaffer.FileNamePathFilter(["*.exr"]) p = Gaffer.Path("/test/path", filter=f) self.failUnless(p.getFilter() is f)
def createStandardFilter( extensions=[], extensionsLabel=None ) : result = Gaffer.CompoundPathFilter() if extensions : extensions = [ e.lower() for e in extensions ] if extensionsLabel is None : extensionsLabel = "Show only " + ", ".join( [ "." + e for e in extensions ] ) + " files" extensions += [ e.upper() for e in extensions ] extensions = [ "*." + e for e in extensions ] # the form below is for file sequences, where the frame range will # come after the extension extensions += [ "*.%s *" % e for e in extensions ] result.addFilter( Gaffer.FileNamePathFilter( extensions, userData = { "UI" : { "label" : extensionsLabel, } } ) ) result.addFilter( Gaffer.FileNamePathFilter( [ re.compile( "^[^.].*" ) ], leafOnly=False, userData = { "UI" : { "label" : "Show hidden files", "invertEnabled" : True, } } ) ) result.addFilter( Gaffer.InfoPathFilter( infoKey = "name", matcher = None, # the ui will fill this in leafOnly = False, ) ) return result
def testConstructWithFilter(self): p = Gaffer.FileSystemPath(__file__) self.failUnless(p.getFilter() is None) f = Gaffer.FileNamePathFilter(["*.exr"]) p = Gaffer.FileSystemPath(__file__, filter=f) self.failUnless(p.getFilter().isSame(f))
def testConstructWithFilter(self): p = Gaffer.FileSystemPath(__file__) self.assertIsNone(p.getFilter()) f = Gaffer.FileNamePathFilter(["*.exr"]) p = Gaffer.FileSystemPath(__file__, filter=f) self.assertTrue(p.getFilter().isSame(f))
def testConstructWithFilter(self): p = Gaffer.Path("/test/path") self.assertIsNone(p.getFilter()) f = Gaffer.FileNamePathFilter(["*.exr"]) p = Gaffer.Path("/test/path", filter=f) self.assertTrue(p.getFilter().isSame(f))
def test(self): f1 = Gaffer.FileNamePathFilter(["*.gfr"]) f2 = Gaffer.FileNamePathFilter(["*.tif"]) c = Gaffer.CompoundPathFilter() self.assertEqual(c.getFilters(), []) c.addFilter(f1) self.assertEqual(c.getFilters(), [f1]) c.addFilter(f2) self.assertEqual(c.getFilters(), [f1, f2]) c.removeFilter(f1) self.assertEqual(c.getFilters(), [f2]) c.setFilters([f1, f2]) self.assertEqual(c.getFilters(), [f1, f2])
def testFiltering(self): p = Gaffer.DictPath({ "a.txt": 1, "b.txt": 2, "c.exr": 3, }, "/") self.assertEqual(len(p.children()), 3) f = Gaffer.CompoundPathFilter() p.setFilter(f) self.assertEqual(len(p.children()), 3) f.addFilter(Gaffer.FileNamePathFilter(["*.txt"])) self.assertEqual(len(p.children()), 2) f.addFilter(Gaffer.FileNamePathFilter(["a.*"])) self.assertEqual(len(p.children()), 1)
def testChangedSignalPropagation(self): cf = Gaffer.CompoundPathFilter() self.__numChanges = 0 def f(filter): self.failUnless(filter is cf) self.__numChanges += 1 f1 = Gaffer.FileNamePathFilter(["*.gfr"]) f2 = Gaffer.FileNamePathFilter(["*.tif"]) c = cf.changedSignal().connect(f) self.assertEqual(self.__numChanges, 0) cf.setFilters([f1, f2]) self.assertEqual(self.__numChanges, 1) f1.changedSignal()(f1) self.assertEqual(self.__numChanges, 2) f2.changedSignal()(f2) self.assertEqual(self.__numChanges, 3) cf.removeFilter(f1) self.assertEqual(self.__numChanges, 4) f1.changedSignal()(f1) self.assertEqual(self.__numChanges, 4) cf.removeFilter(f2) self.assertEqual(self.__numChanges, 5) f2.changedSignal()(f2) self.assertEqual(self.__numChanges, 5) cf.addFilter(f1) self.assertEqual(self.__numChanges, 6) f1.changedSignal()(f1) self.assertEqual(self.__numChanges, 7)
def saveAs(menu): scriptWindow = menu.ancestor(GafferUI.ScriptWindow) script = scriptWindow.getScript() path = Gaffer.FileSystemPath(script["fileName"].getValue()) path.addFilter(Gaffer.FileNamePathFilter(["*.gfr"])) path.addFilter( Gaffer.FileNamePathFilter([re.compile("^[^.].*")], leafOnly=False)) dialogue = GafferUI.PathChooserDialogue(path, title="Save script", confirmLabel="Save") scriptWindow.addChildWindow(dialogue) path = dialogue.waitForPath() dialogue.hide() if not path: return script["fileName"].setValue(str(path)) script.save()
def testChangedSignal(self): cf = Gaffer.CompoundPathFilter() self.__numChanges = 0 def f(filter): self.failUnless(filter is cf) self.__numChanges += 1 f1 = Gaffer.FileNamePathFilter(["*.gfr"]) f2 = Gaffer.FileNamePathFilter(["*.tif"]) c = cf.changedSignal().connect(f) self.assertEqual(self.__numChanges, 0) cf.addFilter(f1) self.assertEqual(self.__numChanges, 1) cf.setFilters([f1]) self.assertEqual(self.__numChanges, 1) cf.setFilters([f1, f2]) self.assertEqual(self.__numChanges, 2) cf.removeFilter(f1) self.assertEqual(self.__numChanges, 3) # changing filters while not enabled shouldn't emit the signal cf.setEnabled(False) self.assertEqual(self.__numChanges, 4) cf.setFilters([]) self.assertEqual(self.__numChanges, 4) cf.setFilters([f1, f2]) self.assertEqual(self.__numChanges, 4)
def testDisconnectFromFilterChangedOnDestruct(self): # make a path with a filter f = Gaffer.FileNamePathFilter(["*.gfr"]) p = Gaffer.FileSystemPath("/a/b/c", filter=f) # force the path to connect to the # filter's changed signal. c = p.pathChangedSignal() # delete the path del p del c # edit the filter f.setEnabled(False)
def testEnabledState(self): path = Gaffer.FileSystemPath("test/data/scripts") f = Gaffer.FileNamePathFilter(["*.gfr"]) self.assertEqual(f.getEnabled(), True) path.setFilter(f) self.assertEqual(len(path.children()), len(glob.glob("test/data/scripts/*.gfr"))) f.setEnabled(False) self.assertEqual(f.getEnabled(), False) self.assertEqual(len(path.children()), len(glob.glob("test/data/scripts/*"))) f.setEnabled(True) self.assertEqual(f.getEnabled(), True) self.assertEqual(len(path.children()), len(glob.glob("test/data/scripts/*.gfr")))
def testChangedSignal(self): pathFilter = Gaffer.FileNamePathFilter(["*.gfr"]) enabledStates = [] def f(pf): self.failUnless(pf.isSame(pathFilter)) enabledStates.append(pf.getEnabled()) c = pathFilter.changedSignal().connect(f) pathFilter.setEnabled(False) pathFilter.setEnabled(False) pathFilter.setEnabled(True) pathFilter.setEnabled(True) pathFilter.setEnabled(False) self.assertEqual(enabledStates, [False, True, False])
def testEnabledState(self): path = Gaffer.FileSystemPath(self.__testDirectory) f = Gaffer.FileNamePathFilter(["*.txt"]) self.assertEqual(f.getEnabled(), True) path.setFilter(f) self.assertEqual(len(path.children()), len(glob.glob(self.__testDirectory + "/*.txt"))) f.setEnabled(False) self.assertEqual(f.getEnabled(), False) self.assertEqual(len(path.children()), len(glob.glob(self.__testDirectory + "/*"))) f.setEnabled(True) self.assertEqual(f.getEnabled(), True) self.assertEqual(len(path.children()), len(glob.glob(self.__testDirectory + "/*.txt")))
def test(self): path = Gaffer.FileSystemPath("test/data/scripts") children = path.children() self.assertEqual(len(children), len(glob.glob("test/data/scripts/*"))) # attach a filter gfrFilter = Gaffer.FileNamePathFilter(["*.gfr"]) path.addFilter(gfrFilter) children = path.children() self.assertEqual(len(children), len(glob.glob("test/data/scripts/*.gfr"))) # copy the path and check the filter is working on the copy pathCopy = path.copy() self.assertEqual(len(pathCopy.children()), len(children)) # detach the filter and check that behaviour has reverted path.removeFilter(gfrFilter) children = path.children() self.assertEqual(len(children), len(glob.glob("test/data/scripts/*")))