def tearDown(self): if vfs.exists(self.root + 'tmp'): vfs.remove(self.root + 'tmp') if vfs.exists(self.root + 'tmp2'): vfs.remove(self.root + 'tmp2') if vfs.exists(self.root + 'testfile.txt'): vfs.remove(self.root + 'testfile.txt')
def tearDown(self): if vfs.exists(self.root + "tmp"): vfs.remove(self.root + "tmp") if vfs.exists(self.root + "tmp2"): vfs.remove(self.root + "tmp2") if vfs.exists(self.root + "testfile.txt"): vfs.remove(self.root + "testfile.txt")
def test00_existence(self): exists = vfs.exists(self.root + "fdsfsf") self.assertEqual(exists, False) # All the following should be synonyms exists = vfs.exists(self.root + "tmp") self.assertEqual(exists, True) exists = vfs.exists(self.root + "//tmp") self.assertEqual(exists, True) exists = vfs.exists(self.root + "///tmp") self.assertEqual(exists, True)
def test00_existence(self): exists = vfs.exists('mem:fdsfsf') self.assertEqual(exists, False) # All the following should be synonyms exists = vfs.exists('mem:tmp') self.assertEqual(exists, True) exists = vfs.exists('mem://tmp') self.assertEqual(exists, True) exists = vfs.exists('mem:///tmp') self.assertEqual(exists, True)
def test00_existence(self): exists = vfs.exists(self.root + 'fdsfsf') self.assertEqual(exists, False) # All the following should be synonyms exists = vfs.exists(self.root + 'tmp') self.assertEqual(exists, True) exists = vfs.exists(self.root + '//tmp') self.assertEqual(exists, True) exists = vfs.exists(self.root + '///tmp') self.assertEqual(exists, True)
def test00_existence(self): assert vfs.exists(self.root + "README") assert vfs.can_read(self.root + "README") assert vfs.can_write(self.root + "README") assert not vfs.exists(self.root + 'fdsfsf') # All the following should be synonyms exists = vfs.exists(self.root + 'README') self.assertEqual(exists, True) exists = vfs.exists(self.root + '//README') self.assertEqual(exists, True) exists = vfs.exists(self.root + '///README') self.assertEqual(exists, True)
def findHeaders(url): urls = [] for ext in _header_extensions: header = vfs.normalize(str(url)+ext) if vfs.exists(header): urls.append(header) name,ext = os.path.splitext(str(url)) for ext in _header_extensions: header = vfs.normalize(name+ext) if vfs.exists(header): urls.append(header) return urls
def findHeaders(url): urls = [] for ext in _header_extensions: header = vfs.normalize(str(url) + ext) if vfs.exists(header): urls.append(header) name, ext = os.path.splitext(str(url)) for ext in _header_extensions: header = vfs.normalize(name + ext) if vfs.exists(header): urls.append(header) return urls
def test29_remove(self): url = 'mem:testfile.txt.old' vfs.remove(url) self.assertEqual(vfs.exists(url), False) url = 'mem:test/dir' vfs.make_folder(url) vfs.remove(url) self.assertEqual(vfs.exists(url), False) # Create hierarchy vfs.make_folder('mem:tests/folder') vfs.make_folder('mem:tests/folder/a') vfs.make_file('mem:tests/folder/a/hello.txt') # Remove and test vfs.remove('mem:tests/folder') self.assertEqual(vfs.exists('mem:tests/folder'), False)
def test20_move_file(self): vfs.copy(self.root + 'tmp/blah.txt', self.root + 'tmp/blah.txt.bak') vfs.move(self.root + 'tmp/blah.txt.bak', self.root + 'tmp/blah.txt.old') file = vfs.open(self.root + 'tmp/blah.txt.old') self.assertEqual(file.read(), 'BLAH!!!') self.assertEqual(vfs.exists(self.root + 'tmp/blah.txt.bak'), False)
def action(self, index=-1, multiplier=1): url = self.storage[index] assert self.dprint("opening file %s" % url) if vfs.exists(url): self.frame.open(url) else: self.frame.SetStatusText("File not found: %s" % url)
def applyProjectSettings(cls, msg): """Publish/subscribe callback to load project view settings. This is called by the major mode loading process to set the default view parameters based on per-project defaults. """ mode = msg.data if not mode.project_info: return cls.dprint("Applying settings for %s" % mode) # Add 'project' keyword to Buffer object if the file belongs to a # project settings = cls.findProjectConfigObject(mode, cls.classprefs.settings_directory) if not settings: # Try the global settings cls.dprint("Trying default settings for project %s" % mode.project_info.project_name) base = mode.project_info.getSettingsRelativeURL() url = base.resolve2(ProjectPlugin.classprefs.default_settings_file_name) if vfs.exists(url): fh = vfs.open(url) settings = pickle.load(fh) fh.close() if settings and isinstance(settings, dict): # dprint(settings) # mode.applyFileLocalComments(settings) mode.classprefsUpdateLocals(settings) mode.applyDefaultSettings()
def createProject(cls, topdir): url = vfs.normalize(topdir) if url in cls.url_to_project_mapping: raise TypeError("Project already exists.") proj_dir = url.resolve2(cls.classprefs.project_directory) if not vfs.is_folder(proj_dir): if not vfs.exists(proj_dir): vfs.make_folder(proj_dir) else: raise TypeError("Can't create directory %s -- seems already exist as a file" % proj_dir) info = cls.registerProject(None, proj_dir) info.savePrefs() cls.dprint(info) buffers = BufferList.getBuffers() for buffer in buffers: if buffer.url.scheme != "file": continue cls.dprint(u"prefix=%s topdir=%s" % (buffer.url.path.get_prefix(url.path), url.path)) if buffer.url.path.get_prefix(url.path) == url.path: cls.dprint(u"belongs in project! %s" % buffer.url.path) for mode in buffer.iterViewers(): mode.project_info = info else: cls.dprint(u"not in project: %s" % buffer.url.path) return info
def setUp(self): if vfs.exists(self.root + 'tmp'): vfs.remove(self.root + 'tmp') vfs.make_folder(self.root + 'tmp') file = vfs.make_file(self.root + 'tmp/blah.txt') file.write("BLAH!!!") file.close()
def openGUIThreadSuccess(self): # Only increment count on successful buffer loads Buffer.count += 1 self.order_loaded = Buffer.count self.closeBufferedReader() self.stc.openSuccess(self) self.setName() # If it doesn't exist, that means we are creating the file, so it # should be writable. self.readonly = not (vfs.can_write(self.url) or not vfs.exists(self.url)) #dprint("readonly = %s" % self.readonly) self.stc.EmptyUndoBuffer() # Add to the currently-opened buffer list BufferList.addBuffer(self) # Send a message to any interested plugins that a new buffer # has been successfully opened. pub.sendMessage('buffer.opened', buffer=self) wx.CallAfter(self.showModifiedAll)
def openGUIThreadSuccess(self): # Only increment count on successful buffer loads Buffer.count+=1 self.order_loaded = Buffer.count self.closeBufferedReader() self.stc.openSuccess(self) self.setName() # If it doesn't exist, that means we are creating the file, so it # should be writable. self.readonly = not (vfs.can_write(self.url) or not vfs.exists(self.url)) #dprint("readonly = %s" % self.readonly) self.stc.EmptyUndoBuffer() # Add to the currently-opened buffer list BufferList.addBuffer(self) # Send a message to any interested plugins that a new buffer # has been successfully opened. pub.sendMessage('buffer.opened', buffer=self) wx.CallAfter(self.showModifiedAll)
def applyProjectSettings(cls, msg): """Publish/subscribe callback to load project view settings. This is called by the major mode loading process to set the default view parameters based on per-project defaults. """ mode = msg.data if not mode.project_info: return cls.dprint("Applying settings for %s" % mode) # Add 'project' keyword to Buffer object if the file belongs to a # project settings = cls.findProjectConfigObject( mode, cls.classprefs.settings_directory) if not settings: # Try the global settings cls.dprint("Trying default settings for project %s" % mode.project_info.project_name) base = mode.project_info.getSettingsRelativeURL() url = base.resolve2( ProjectPlugin.classprefs.default_settings_file_name) if vfs.exists(url): fh = vfs.open(url) settings = pickle.load(fh) fh.close() if settings and isinstance(settings, dict): #dprint(settings) #mode.applyFileLocalComments(settings) mode.classprefsUpdateLocals(settings) mode.applyDefaultSettings()
def createProject(cls, topdir): url = vfs.normalize(topdir) if url in cls.url_to_project_mapping: raise TypeError("Project already exists.") proj_dir = url.resolve2(cls.classprefs.project_directory) if not vfs.is_folder(proj_dir): if not vfs.exists(proj_dir): vfs.make_folder(proj_dir) else: raise TypeError( "Can't create directory %s -- seems already exist as a file" % proj_dir) info = cls.registerProject(None, proj_dir) info.savePrefs() cls.dprint(info) buffers = BufferList.getBuffers() for buffer in buffers: if buffer.url.scheme != "file": continue cls.dprint(u"prefix=%s topdir=%s" % (buffer.url.path.get_prefix(url.path), url.path)) if buffer.url.path.get_prefix(url.path) == url.path: cls.dprint(u"belongs in project! %s" % buffer.url.path) for mode in buffer.iterViewers(): mode.project_info = info else: cls.dprint(u"not in project: %s" % buffer.url.path) return info
def test14_remove_folder(self): # Create hierarchy vfs.make_folder('vfs/folder') vfs.make_folder('vfs/folder/a') vfs.make_file('vfs/folder/a/hello.txt') # Remove and test vfs.remove('vfs/folder') self.assertEqual(vfs.exists('vfs/folder'), False)
def restoreFromAutosaveIfExists(self): temp_url = self.stc.getAutosaveTemporaryFilename(self) if temp_url and vfs.exists(temp_url): # If the original URL no longer exists, the autosave file will be # removed without prompting. if vfs.exists(self.url) and vfs.get_mtime(temp_url) >= vfs.get_mtime(self.url) and vfs.get_size(temp_url) > 0: # backup file is newer than saved file. dlg = CustomOkDialog(wx.GetApp().GetTopWindow(), u"Autosave file for %s\nis newer than last saved version.\n\nRestore from autosave file?" % self.url, "Restore from Autosave", "Ignore Autosave") retval=dlg.ShowModal() dlg.Destroy() if retval==wx.ID_OK: self.dprint(u"Recovering from autosave file %s" % temp_url) self.revert(temp_url, allow_undo=True) self.modified = True wx.CallAfter(self.showModifiedAll) else: vfs.remove(temp_url)
def getBufferedReader(self, size=1024): assert self.dprint(u"opening %s as %s" % (self.url, self.defaultmode)) if self.bfh is None: if vfs.exists(self.url): fh = vfs.open(self.url) self.bfh = BufferedReader(fh, size) if self.bfh: self.bfh.seek(0) return self.bfh
def removeAutosaveIfExists(self): temp_url = self.stc.getAutosaveTemporaryFilename(self) if temp_url and vfs.exists(temp_url): try: vfs.remove(temp_url) self.dprint(u"Removed autosave file %s" % temp_url) except OSError: self.dprint("Can't remove autosave file %s" % temp_url) self.autosave_valid = False
def test29_remove(self): url = self.root + 'tmp/dir' vfs.make_folder(url) vfs.remove(url) self.assertEqual(vfs.exists(url), False) # Create hierarchy vfs.make_folder(self.root + 'tmp3') vfs.exists(self.root + 'tmp3') vfs.make_folder(self.root + 'tmp3/folder') vfs.exists(self.root + 'tmp3/folder') vfs.make_folder(self.root + 'tmp3/folder/a') vfs.exists(self.root + 'tmp3/folder/a') fh = vfs.make_file(self.root + 'tmp3/folder/a/hello.txt') fh.write("blah") fh.close() vfs.exists(self.root + 'tmp3/folder/a/hello.txt') # Remove and test vfs.remove(self.root + 'tmp3/folder') self.assertEqual(vfs.exists(self.root + 'tmp3/folder'), False)
def backupCallback(self): # This is only called once, the first time the document is modified, # regardless of the outcome of this method. self.backup_saved = True if not vfs.exists(self.url): # The url may point to a nonexistent file because the user has # created a new file. New files aren't saved in the vfs until the # user explicitly saves it, so because it doesn't exist in the vfs # it won't need to be backed up. return try: temp_url = self.stc.getBackupTemporaryFilename(self) if temp_url: if vfs.exists(temp_url): vfs.remove(temp_url) vfs.copy(self.url, temp_url) except NotImplementedError: # Some URI schemes won't be writable, so don't cause a failure in # this case; just ignore it. pass
def restoreFromAutosaveIfExists(self): temp_url = self.stc.getAutosaveTemporaryFilename(self) if temp_url and vfs.exists(temp_url): # If the original URL no longer exists, the autosave file will be # removed without prompting. if vfs.exists( self.url) and vfs.get_mtime(temp_url) >= vfs.get_mtime( self.url) and vfs.get_size(temp_url) > 0: # backup file is newer than saved file. dlg = CustomOkDialog( wx.GetApp().GetTopWindow(), u"Autosave file for %s\nis newer than last saved version.\n\nRestore from autosave file?" % self.url, "Restore from Autosave", "Ignore Autosave") retval = dlg.ShowModal() dlg.Destroy() if retval == wx.ID_OK: self.dprint(u"Recovering from autosave file %s" % temp_url) self.revert(temp_url, allow_undo=True) self.modified = True wx.CallAfter(self.showModifiedAll) else: vfs.remove(temp_url)
def verifyHeader(filename): hasext=False for ext in _header_extensions: if filename.endswith(ext): hasext=True break if not hasext: for ext in _header_extensions: if vfs.exists(filename+ext): filename+=ext hasext=True break if not hasext: name,ext=os.path.splitext(filename) for ext in _header_extensions: if vfs.exists(name+ext): filename=name+ext break return filename
def verifyHeader(filename): hasext = False for ext in _header_extensions: if filename.endswith(ext): hasext = True break if not hasext: for ext in _header_extensions: if vfs.exists(filename + ext): filename += ext hasext = True break if not hasext: name, ext = os.path.splitext(filename) for ext in _header_extensions: if vfs.exists(name + ext): filename = name + ext break return filename
def test_simple(self): vfs.make_folder(self.root + "tmp") file = vfs.make_file(self.root + "tmp/blah.txt") file.write("BLAH!!!") file.close() # Probably too loose of a test, but the modification time has a 10 # second window for correctness mtime = vfs.get_mtime(self.root + "tmp/blah.txt") current = datetime.now() assert abs(mtime - current) < timedelta(10) file = vfs.open(self.root + "tmp/blah.txt") self.assertEqual(file.read(), "BLAH!!!") assert vfs.exists(self.root + "tmp") names = vfs.get_names(self.root) assert "tmp" in names names = vfs.get_names(self.root + "tmp") assert "blah.txt" in names vfs.remove(self.root + "tmp") assert not vfs.exists(self.root + "tmp") assert not vfs.exists(self.root + "tmp/blah.txt")
def test_simple(self): vfs.make_folder(self.root + 'tmp') file = vfs.make_file(self.root + 'tmp/blah.txt') file.write("BLAH!!!") file.close() # Probably too loose of a test, but the modification time has a 10 # second window for correctness mtime = vfs.get_mtime(self.root + 'tmp/blah.txt') current = datetime.now() assert abs(mtime - current) < timedelta(10) file = vfs.open(self.root + 'tmp/blah.txt') self.assertEqual(file.read(), 'BLAH!!!') assert vfs.exists(self.root + 'tmp') names = vfs.get_names(self.root) assert "tmp" in names names = vfs.get_names(self.root + 'tmp') assert "blah.txt" in names vfs.remove(self.root + 'tmp') assert not vfs.exists(self.root + 'tmp') assert not vfs.exists(self.root + 'tmp/blah.txt')
def test13_folder_creation(self): url = 'mem:testfile.txt/dir' self.assertEqual(vfs.is_folder(url), False) self.assertRaises(OSError, vfs.make_folder, url) # This should raise an OSError because we're trying to make a file # inside another file file = vfs.make_file('mem:blah1') file.write("blah1\n") file.close() self.assertRaises(OSError, vfs.make_folder, 'mem:blah1/bad1') # This should raise OSError because we're trying to make a file with # the same name as an existing folder url = 'mem:blah2/file2' file = vfs.make_file(url) file.write("blah2\n") file.close() self.assertEqual(True, vfs.exists(url)) self.assertRaises(OSError, vfs.make_file, 'mem:blah2')
def load(cls, url): import cPickle as pickle # Note: because plugins are loaded using the execfile command, pickle # can't find classes that are in the global namespace. Have to supply # PythonScriptableMacro into the builtin namespace to get around this. import __builtin__ __builtin__.PythonScriptableMacro = PythonScriptableMacro if not vfs.exists(url): return fh = vfs.open(url) bytes = fh.read() fh.close() if bytes: version, data = pickle.loads(bytes) if version == 1: cls.unpackVersion1(data) else: raise RuntimeError("Unknown version of MacroSaveData in %s" % url)
def test13_folder_creation(self): file = vfs.make_file(self.root + 'testfile.txt') file.write("one\n") file.close() url = self.root + 'testfile.txt/dir' self.assertRaises(OSError, vfs.make_folder, url) # This should raise an OSError because we're trying to make a file # inside another file file = vfs.make_file(self.root + 'tmp/blah1') file.write("blah1\n") file.close() self.assertRaises(OSError, vfs.make_folder, self.root + 'tmp/blah1/bad1') # This should raise OSError because we're trying to make a file with # the same name as an existing folder url = self.root + 'tmp/blah2' file = vfs.make_file(url) file.write("blah2\n") file.close() self.assertEqual(True, vfs.exists(url)) self.assertRaises(OSError, vfs.make_file, self.root + 'tmp/blah2')
def addMacro(cls, macro, dirname=None): if dirname: if not dirname.endswith("/"): dirname += "/" # Make sure the directory exists url = vfs.normalize("macro:%s" % dirname) needs_mkdir = False if vfs.exists(url): if vfs.is_file(url): # we have a macro that is the same name as the directory # name. Rename the file and create the directory. components = dirname.strip('/').split('/') filename = components.pop() parent_dirname = "/".join(components) dum, new_filename = cls.findAlternateName(parent_dirname, filename) #dprint("parent=%s filename=%s: New filename: %s" % (parent_dirname, filename, new_filename)) parent, existing, name = cls._find(parent_dirname) #dprint("existing=%s" % existing) existing[new_filename] = existing[filename] del existing[filename] #dprint("existing after=%s" % existing) needs_mkdir = True else: needs_mkdir = True if needs_mkdir: #dprint("Making folder %s" % url) vfs.make_folder(url) else: dirname = "" fullpath, basename = cls.findAlternateName(dirname, macro.name) parent, existing, name = cls._find(dirname) #dprint("name=%s: parent=%s, existing=%s" % (basename, parent, existing)) macro.setName(fullpath) existing[basename] = macro
def test00_exists(self): exists = vfs.exists('vfs/hello.txt') self.assertEqual(exists, True) self.assertEqual(True, vfs.can_read('vfs/hello.txt'))
def test01_does_not_exist(self): exists = vfs.exists('vfs/fdsfsf') self.assertEqual(exists, False)
def test12_remove_file(self): vfs.remove('vfs/file') self.assertEqual(vfs.exists('vfs/file'), False)
def test19_traverse(self): for x in vfs.traverse('.'): self.assertEqual(vfs.exists(x), True)
def test13_remove_empty_folder(self): vfs.remove('vfs/folder') self.assertEqual(vfs.exists('vfs/folder'), False)
def tearDown(self): if vfs.exists('vfs-tmp'): vfs.remove('vfs-tmp')
def test17_move_file(self): vfs.copy('vfs/hello.txt', 'vfs/hello.txt.bak') vfs.move('vfs/hello.txt.bak', 'vfs/hello.txt.old') file = vfs.open('vfs/hello.txt.old') self.assertEqual(file.read(), 'hello world\n') self.assertEqual(vfs.exists('vfs/hello.txt.bak'), False)