ports/filesystems/py-fs/files/patch-2to3
Robert Clausecker 6e2da9672f filesystems: add new category for file systems and related utilities
The filesystems category houses file systems and file system utilities.
It is added mainly to turn the sysutils/fusefs-* pseudo-category into
a proper one, but is also useful for the sundry of other file systems
related ports found in the tree.

Ports that seem like they belong there are moved to the new category.
Two ports, sysutils/fusefs-funionfs and sysutils/fusefs-fusepak are
not moved as they currently don't fetch and don't have TIMESTAMP set
in their distinfo, but that is required to be able to push a rename
of the port by the pre-receive hook.

Approved by:	portmgr (rene)
Reviewed by:	mat
Pull Request:	https://github.com/freebsd/freebsd-ports/pull/302
PR:		281988
2024-11-06 16:17:35 +01:00

5882 lines
233 KiB
Text

--- fs/appdirfs.py.orig 2015-04-12 17:24:29 UTC
+++ fs/appdirfs.py
@@ -84,6 +84,6 @@ class UserLogFS(OSFS):
if __name__ == "__main__":
udfs = UserDataFS('exampleapp', appauthor='pyfs')
- print udfs
+ print(udfs)
udfs2 = UserDataFS('exampleapp2', appauthor='pyfs', create=False)
- print udfs2
+ print(udfs2)
--- fs/appdirs.py.orig 2022-03-04 17:14:43 UTC
+++ fs/appdirs.py
@@ -21,7 +21,7 @@ import os
PY3 = sys.version_info[0] == 3
if PY3:
- unicode = str
+ str = str
class AppDirsError(Exception):
pass
@@ -248,7 +248,7 @@ def _get_win_folder_from_registry(csidl_name):
registry for this guarantees us the correct answer for all CSIDL_*
names.
"""
- import _winreg
+ import winreg
shell_folder_name = {
"CSIDL_APPDATA": "AppData",
@@ -256,9 +256,9 @@ def _get_win_folder_from_registry(csidl_name):
"CSIDL_LOCAL_APPDATA": "Local AppData",
}[csidl_name]
- key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER,
+ key = winreg.OpenKey(winreg.HKEY_CURRENT_USER,
r"Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders")
- dir, type = _winreg.QueryValueEx(key, shell_folder_name)
+ dir, type = winreg.QueryValueEx(key, shell_folder_name)
return dir
def _get_win_folder_with_pywin32(csidl_name):
@@ -268,7 +268,7 @@ def _get_win_folder_with_pywin32(csidl_name):
# not return unicode strings when there is unicode data in the
# path.
try:
- dir = unicode(dir)
+ dir = str(dir)
# Downgrade to short path name if have highbit chars. See
# <http://bugs.activestate.com/show_bug.cgi?id=85099>.
@@ -337,9 +337,9 @@ if __name__ == "__main__":
print("-- app dirs (without optional 'version')")
dirs = AppDirs(appname, appauthor, version="1.0")
for prop in props:
- print("%s: %s" % (prop, getattr(dirs, prop)))
+ print(("%s: %s" % (prop, getattr(dirs, prop))))
print("\n-- app dirs (with optional 'version')")
dirs = AppDirs(appname, appauthor)
for prop in props:
- print("%s: %s" % (prop, getattr(dirs, prop)))
+ print(("%s: %s" % (prop, getattr(dirs, prop))))
--- fs/base.py.orig 2022-03-04 17:14:43 UTC
+++ fs/base.py
@@ -12,8 +12,8 @@ For more information regarding implementing a working
"""
-from __future__ import with_statement
+
__all__ = ['DummyLock',
'silence_fserrors',
'NullFile',
@@ -109,7 +109,7 @@ class NullFile(object):
def flush(self):
pass
- def next(self):
+ def __next__(self):
raise StopIteration
def readline(self, *args, **kwargs):
@@ -900,7 +900,7 @@ class FS(object):
chunk_size=1024 * 64,
progress_callback=progress_callback,
finished_callback=finished_callback)
- except Exception, e:
+ except Exception as e:
if error_callback is not None:
error_callback(e)
finally:
@@ -1156,7 +1156,7 @@ class FS(object):
def _shutil_copyfile(cls, src_syspath, dst_syspath):
try:
shutil.copyfile(src_syspath, dst_syspath)
- except IOError, e:
+ except IOError as e:
# shutil reports ENOENT when a parent directory is missing
if getattr(e, "errno", None) == errno.ENOENT:
if not os.path.exists(dirname(dst_syspath)):
--- fs/browsewin.py.orig 2022-03-04 17:14:43 UTC
+++ fs/browsewin.py
@@ -24,7 +24,7 @@ class InfoFrame(wx.Frame):
self.SetTitle("FS Object info - %s (%s)" % (path, desc))
- keys = info.keys()
+ keys = list(info.keys())
keys.sort()
self.list_ctrl = wx.ListCtrl(self, -1, style=wx.LC_REPORT|wx.SUNKEN_BORDER)
@@ -36,7 +36,7 @@ class InfoFrame(wx.Frame):
self.list_ctrl.SetColumnWidth(1, 300)
for key in sorted(keys, key=lambda k:k.lower()):
- self.list_ctrl.Append((key, unicode(info.get(key))))
+ self.list_ctrl.Append((key, str(info.get(key))))
self.Center()
@@ -50,7 +50,7 @@ class BrowseFrame(wx.Frame):
self.fs = fs
self.hide_dotfiles = hide_dotfiles
- self.SetTitle("FS Browser - " + unicode(fs))
+ self.SetTitle("FS Browser - " + str(fs))
self.tree = wx.gizmos.TreeListCtrl(self, -1, style=wx.TR_DEFAULT_STYLE | wx.TR_HIDE_ROOT)
@@ -105,7 +105,7 @@ class BrowseFrame(wx.Frame):
try:
paths = ( [(True, p) for p in self.fs.listdir(path, absolute=True, dirs_only=True)] +
[(False, p) for p in self.fs.listdir(path, absolute=True, files_only=True)] )
- except FSError, e:
+ except FSError as e:
msg = "Failed to get directory listing for %s\n\nThe following error was reported:\n\n%s" % (path, e)
wx.MessageDialog(self, msg, "Error listing directory", wx.OK).ShowModal()
paths = []
@@ -194,6 +194,6 @@ def browse(fs, hide_dotfiles=False):
if __name__ == "__main__":
- from osfs import OSFS
+ from .osfs import OSFS
home_fs = OSFS("~/")
browse(home_fs, True)
--- fs/commands/fscp.py.orig 2022-03-04 17:14:43 UTC
+++ fs/commands/fscp.py
@@ -3,7 +3,7 @@ from fs.utils import copyfile, copyfile_non_atomic
from fs.path import pathjoin, iswildcard
from fs.commands.runner import Command
import sys
-import Queue as queue
+import queue as queue
import time
import threading
@@ -31,7 +31,7 @@ class FileOpThread(threading.Thread):
self.dest_fs.makedir(path, recursive=True, allow_recreate=True)
else:
self.action(fs, path, self.dest_fs, dest_path, overwrite=True)
- except Exception, e:
+ except Exception as e:
self.on_error(e)
self.queue.task_done()
break
@@ -147,7 +147,7 @@ Copy SOURCE to DESTINATION"""
file_queue,
self.on_done,
self.on_error)
- for i in xrange(options.threads)]
+ for i in range(options.threads)]
for thread in threads:
thread.start()
@@ -188,7 +188,7 @@ Copy SOURCE to DESTINATION"""
if self.action_errors:
for error in self.action_errors:
- self.error(self.wrap_error(unicode(error)) + '\n')
+ self.error(self.wrap_error(str(error)) + '\n')
sys.stdout.flush()
else:
if complete and options.progress:
@@ -204,9 +204,9 @@ Copy SOURCE to DESTINATION"""
try:
if self.options.verbose:
if path_type == self.DIR:
- print "mkdir %s" % dst_fs.desc(dst_path)
+ print("mkdir %s" % dst_fs.desc(dst_path))
else:
- print "%s -> %s" % (src_fs.desc(src_path), dst_fs.desc(dst_path))
+ print("%s -> %s" % (src_fs.desc(src_path), dst_fs.desc(dst_path)))
elif self.options.progress:
self.done_files += 1
sys.stdout.write(self.progress_bar(self.total_files, self.done_files, self.get_verb()))
--- fs/commands/fsinfo.py.orig 2022-03-04 17:14:43 UTC
+++ fs/commands/fsinfo.py
@@ -31,12 +31,12 @@ Display information regarding an FS resource"""
return val
def make_printable(text):
- if not isinstance(text, basestring):
+ if not isinstance(text, str):
try:
text = str(text)
except:
try:
- text = unicode(text)
+ text = str(text)
except:
text = repr(text)
return text
@@ -48,16 +48,16 @@ Display information regarding an FS resource"""
dirs_only=options.dirsonly):
if not options.omit:
if options.simple:
- file_line = u'%s\n' % self.wrap_filename(path)
+ file_line = '%s\n' % self.wrap_filename(path)
else:
- file_line = u'[%s] %s\n' % (self.wrap_filename(path), self.wrap_faded(fs.desc(path)))
+ file_line = '[%s] %s\n' % (self.wrap_filename(path), self.wrap_faded(fs.desc(path)))
self.output(file_line)
info = fs.getinfo(path)
- for k, v in info.items():
+ for k, v in list(info.items()):
if k.startswith('_'):
del info[k]
- elif not isinstance(v, (basestring, int, long, float, bool, datetime)):
+ elif not isinstance(v, (str, int, float, bool, datetime)):
del info[k]
if keys:
--- fs/commands/fsls.py.orig 2022-03-04 17:14:43 UTC
+++ fs/commands/fsls.py
@@ -37,7 +37,7 @@ List contents of [PATH]"""
output = self.output
if not args:
- args = [u'.']
+ args = ['.']
dir_paths = []
file_paths = []
@@ -75,13 +75,13 @@ List contents of [PATH]"""
if options.syspath:
# Path without a syspath, just won't be displayed
- dir_paths = filter(None, [fs.getsyspath(path, allow_none=True) for path in dir_paths])
- file_paths = filter(None, [fs.getsyspath(path, allow_none=True) for path in file_paths])
+ dir_paths = [_f for _f in [fs.getsyspath(path, allow_none=True) for path in dir_paths] if _f]
+ file_paths = [_f for _f in [fs.getsyspath(path, allow_none=True) for path in file_paths] if _f]
if options.url:
# Path without a syspath, just won't be displayed
- dir_paths = filter(None, [fs.getpathurl(path, allow_none=True) for path in dir_paths])
- file_paths = filter(None, [fs.getpathurl(path, allow_none=True) for path in file_paths])
+ dir_paths = [_f for _f in [fs.getpathurl(path, allow_none=True) for path in dir_paths] if _f]
+ file_paths = [_f for _f in [fs.getpathurl(path, allow_none=True) for path in file_paths] if _f]
dirs = frozenset(dir_paths)
paths = sorted(dir_paths + file_paths, key=lambda p: p.lower())
@@ -95,7 +95,7 @@ List contents of [PATH]"""
def columnize(paths, num_columns):
col_height = (len(paths) + num_columns - 1) / num_columns
- columns = [[] for _ in xrange(num_columns)]
+ columns = [[] for _ in range(num_columns)]
col_no = 0
col_pos = 0
for path in paths:
@@ -128,11 +128,11 @@ List contents of [PATH]"""
def condense_columns(columns):
max_column_height = max([len(col) for col in columns])
- lines = [[] for _ in xrange(max_column_height)]
+ lines = [[] for _ in range(max_column_height)]
for column in columns:
for line, path in zip(lines, column):
line.append(path)
- return '\n'.join(u' '.join(line) for line in lines)
+ return '\n'.join(' '.join(line) for line in lines)
if options.long:
for path in paths:
@@ -151,7 +151,7 @@ List contents of [PATH]"""
while num_cols:
col_height = (num_paths + num_cols - 1) // num_cols
line_width = 0
- for col_no in xrange(num_cols):
+ for col_no in range(num_cols):
try:
col_width = max(path_widths[col_no * col_height: (col_no + 1) * col_height])
except ValueError:
--- fs/commands/fsserve.py.orig 2015-04-12 17:24:29 UTC
+++ fs/commands/fsserve.py
@@ -82,7 +82,7 @@ Serves the contents of PATH with one of a number of me
try:
self.output("Starting sftp server on %s:%i\n" % (options.addr, port), verbose=True)
server.serve_forever()
- except Exception, e:
+ except Exception as e:
pass
finally:
server.server_close()
@@ -90,7 +90,7 @@ Serves the contents of PATH with one of a number of me
else:
self.error("Server type '%s' not recognised\n" % options.type)
- except IOError, e:
+ except IOError as e:
if e.errno == errno.EACCES:
self.error('Permission denied\n')
return 1
--- fs/commands/fstree.py.orig 2022-03-04 17:14:43 UTC
+++ fs/commands/fstree.py
@@ -34,7 +34,7 @@ Recursively display the contents of PATH in an ascii t
for fs, path, is_dir in self.get_resources(args, single=True):
if not is_dir:
- self.error(u"'%s' is not a dir\n" % path)
+ self.error("'%s' is not a dir\n" % path)
return 1
fs.cache_hint(True)
if options.gui:
--- fs/commands/runner.py.orig 2022-03-04 17:14:43 UTC
+++ fs/commands/runner.py
@@ -68,7 +68,7 @@ else:
def _unicode(text):
- if not isinstance(text, unicode):
+ if not isinstance(text, str):
return text.decode('ascii', 'replace')
return text
@@ -128,17 +128,17 @@ class Command(object):
text = _unicode(text)
if not self.terminal_colors:
return text
- return u'\x1b[2m%s\x1b[0m' % text
+ return '\x1b[2m%s\x1b[0m' % text
def wrap_link(self, text):
if not self.terminal_colors:
return text
- return u'\x1b[1;33m%s\x1b[0m' % text
+ return '\x1b[1;33m%s\x1b[0m' % text
def wrap_strong(self, text):
if not self.terminal_colors:
return text
- return u'\x1b[1m%s\x1b[0m' % text
+ return '\x1b[1m%s\x1b[0m' % text
def wrap_table_header(self, name):
if not self.terminal_colors:
@@ -215,10 +215,10 @@ class Command(object):
return resources
def ask(self, msg):
- return raw_input('%s: %s ' % (self.name, msg))
+ return input('%s: %s ' % (self.name, msg))
def text_encode(self, text):
- if not isinstance(text, unicode):
+ if not isinstance(text, str):
text = text.decode('ascii', 'replace')
text = text.encode(self.encoding, 'replace')
return text
@@ -226,7 +226,7 @@ class Command(object):
def output(self, msgs, verbose=False):
if verbose and not self.options.verbose:
return
- if isinstance(msgs, basestring):
+ if isinstance(msgs, str):
msgs = (msgs,)
for msg in msgs:
self.output_file.write(self.text_encode(msg))
@@ -276,7 +276,7 @@ class Command(object):
opener_table = []
- for fs_opener in opener.openers.itervalues():
+ for fs_opener in opener.openers.values():
names = fs_opener.names
desc = getattr(fs_opener, 'desc', '')
opener_table.append((names, desc))
@@ -346,12 +346,12 @@ class Command(object):
opener.add(new_opener)
if not six.PY3:
- args = [unicode(arg, sys.getfilesystemencoding()) for arg in args]
+ args = [str(arg, sys.getfilesystemencoding()) for arg in args]
self.verbose = options.verbose
try:
return self.do_run(options, args) or 0
- except FSError, e:
- self.error(self.wrap_error(unicode(e)) + '\n')
+ except FSError as e:
+ self.error(self.wrap_error(str(e)) + '\n')
if options.debug:
raise
return 1
@@ -361,8 +361,8 @@ class Command(object):
return 0
except SystemExit:
return 0
- except Exception, e:
- self.error(self.wrap_error('Error - %s\n' % unicode(e)))
+ except Exception as e:
+ self.error(self.wrap_error('Error - %s\n' % str(e)))
if options.debug:
raise
return 1
--- fs/contrib/archivefs.py.orig 2022-03-04 17:14:43 UTC
+++ fs/contrib/archivefs.py
@@ -62,7 +62,7 @@ class ArchiveFS(FS):
:param thread_synchronize: set to True (default) to enable thread-safety
"""
super(ArchiveFS, self).__init__(thread_synchronize=thread_synchronize)
- if isinstance(f, basestring):
+ if isinstance(f, str):
self.fileobj = None
self.root_path = f
else:
@@ -83,7 +83,7 @@ class ArchiveFS(FS):
return "<ArchiveFS: %s>" % self.root_path
def __unicode__(self):
- return u"<ArchiveFS: %s>" % self.root_path
+ return "<ArchiveFS: %s>" % self.root_path
def getmeta(self, meta_name, default=NoDefaultMeta):
if meta_name == 'read_only':
@@ -446,7 +446,7 @@ class ArchiveMountFS(mountfs.MountFS):
else:
listing = self.listdir(path, *args, **kwargs)
if dirs_only:
- listing = filter(isdir, listing)
+ listing = list(filter(isdir, listing))
return listing
if wildcard is None:
--- fs/contrib/bigfs/__init__.py.orig 2022-03-04 17:14:43 UTC
+++ fs/contrib/bigfs/__init__.py
@@ -149,7 +149,7 @@ class _ExceptionProxy(object):
def __setattr__(self, name, value):
raise ValueError("File has been closed")
- def __nonzero__(self):
+ def __bool__(self):
return False
@@ -193,7 +193,7 @@ class BigFS(FS):
return "<BigFS: %s>" % self.big_path
def __unicode__(self):
- return unicode(self.__str__())
+ return str(self.__str__())
def _parse_resource_list(self, g):
--- fs/contrib/bigfs/subrangefile.py.orig 2022-03-04 17:14:43 UTC
+++ fs/contrib/bigfs/subrangefile.py
@@ -33,7 +33,7 @@ class SubrangeFile:
return "<SubrangeFile: %s@%d size=%d>" % (self.name, self.startOffset, self.fileSize)
def __unicode__(self):
- return unicode(self.__str__())
+ return str(self.__str__())
def size(self):
return self.fileSize
--- fs/contrib/davfs/__init__.py.orig 2015-04-12 17:24:29 UTC
+++ fs/contrib/davfs/__init__.py
@@ -16,21 +16,21 @@ Requires the dexml module:
# Copyright (c) 2009-2010, Cloud Matrix Pty. Ltd.
# All rights reserved; available under the terms of the MIT License.
-from __future__ import with_statement
+
import os
import sys
-import httplib
+import http.client
import socket
-from urlparse import urlparse
+from urllib.parse import urlparse
import stat as statinfo
-from urllib import quote as urlquote
-from urllib import unquote as urlunquote
+from urllib.parse import quote as urlquote
+from urllib.parse import unquote as urlunquote
import base64
import re
import time
import datetime
-import cookielib
+import http.cookiejar
import fnmatch
import xml.dom.pulldom
import threading
@@ -78,8 +78,8 @@ class DAVFS(FS):
"""
connection_classes = {
- "http": httplib.HTTPConnection,
- "https": httplib.HTTPSConnection,
+ "http": http.client.HTTPConnection,
+ "https": http.client.HTTPSConnection,
}
_DEFAULT_PORT_NUMBERS = {
@@ -116,7 +116,7 @@ class DAVFS(FS):
self._connections = []
self._free_connections = {}
self._connection_lock = threading.Lock()
- self._cookiejar = cookielib.CookieJar()
+ self._cookiejar = http.cookiejar.CookieJar()
super(DAVFS,self).__init__(thread_synchronize=thread_synchronize)
# Check that the server speaks WebDAV, and normalize the URL
# after any redirects have been followed.
@@ -221,14 +221,14 @@ class DAVFS(FS):
self._free_connections = {}
self._connection_lock = threading.Lock()
self._url_p = urlparse(self.url)
- self._cookiejar = cookielib.CookieJar()
+ self._cookiejar = http.cookiejar.CookieJar()
def getpathurl(self, path, allow_none=False):
"""Convert a client-side path into a server-side URL."""
path = relpath(normpath(path))
if path.endswith("/"):
path = path[:-1]
- if isinstance(path,unicode):
+ if isinstance(path,str):
path = path.encode("utf8")
return self.url + urlquote(path)
@@ -291,7 +291,7 @@ class DAVFS(FS):
"""Perform a single HTTP request, without any error handling."""
if self.closed:
raise RemoteConnectionError("",msg="FS is closed")
- if isinstance(url,basestring):
+ if isinstance(url,str):
url = urlparse(url)
if self.credentials is not None:
username = self.credentials.get("username","")
@@ -310,7 +310,7 @@ class DAVFS(FS):
if hasattr(body,"md5"):
md5 = body.md5.decode("hex").encode("base64")
con.putheader("Content-MD5",md5)
- for hdr,val in headers.iteritems():
+ for hdr,val in headers.items():
con.putheader(hdr,val)
self._cookiejar.add_cookie_header(FakeReq(con,url.scheme,url.path))
con.endheaders()
@@ -332,7 +332,7 @@ class DAVFS(FS):
self._give_connection(url,con)
resp.close = new_close
return resp
- except socket.error, e:
+ except socket.error as e:
if not fresh:
return self._raw_request(url,method,body,headers,num_tries)
if e.args[0] in _RETRYABLE_ERRORS:
@@ -479,7 +479,7 @@ class DAVFS(FS):
if not entry_ok:
continue
if wildcard is not None:
- if isinstance(wildcard,basestring):
+ if isinstance(wildcard,str):
if not fnmatch.fnmatch(nm,wildcard):
continue
else:
@@ -530,7 +530,7 @@ class DAVFS(FS):
if not entry_ok:
continue
if wildcard is not None:
- if isinstance(wildcard,basestring):
+ if isinstance(wildcard,str):
if not fnmatch.fnmatch(nm,wildcard):
continue
else:
@@ -610,7 +610,7 @@ class DAVFS(FS):
if self._isurl(path,res.href):
info.update(self._info_from_propfind(res))
if "st_mode" not in info:
- info["st_mode"] = 0700 | statinfo.S_IFREG
+ info["st_mode"] = 0o700 | statinfo.S_IFREG
return info
finally:
response.close()
@@ -647,7 +647,7 @@ class DAVFS(FS):
# TODO: should check for status of the propfind first...
# check for directory indicator
if findElements("DAV:","collection"):
- info["st_mode"] = 0700 | statinfo.S_IFDIR
+ info["st_mode"] = 0o700 | statinfo.S_IFDIR
# check for content length
cl = findElements("DAV:","getcontentlength")
if cl:
@@ -674,7 +674,7 @@ class DAVFS(FS):
if etag:
info["etag"] = etag
if "st_mode" not in info:
- info["st_mode"] = 0700 | statinfo.S_IFREG
+ info["st_mode"] = 0o700 | statinfo.S_IFREG
return info
--- fs/contrib/davfs/util.py.orig 2022-03-04 17:14:43 UTC
+++ fs/contrib/davfs/util.py
@@ -8,7 +8,7 @@
import os
import re
-import cookielib
+import http.cookiejar
def get_fileno(file):
@@ -130,7 +130,7 @@ class FakeResp:
# is a tweaked version of the cookielib function of the same name.
#
_test_cookie = "sessionid=e9c9b002befa93bd865ce155270307ef; Domain=.cloud.me; expires=Wed, 10-Feb-2010 03:27:20 GMT; httponly; Max-Age=1209600; Path=/, sessionid_https=None; Domain=.cloud.me; expires=Wed, 10-Feb-2010 03:27:20 GMT; httponly; Max-Age=1209600; Path=/; secure"
-if len(cookielib.parse_ns_headers([_test_cookie])) != 2:
+if len(http.cookiejar.parse_ns_headers([_test_cookie])) != 2:
def parse_ns_headers(ns_headers):
"""Improved parser for netscape-style cookies.
@@ -170,13 +170,13 @@ if len(cookielib.parse_ns_headers([_test_cookie])) !=
# convert expires date to seconds since epoch
if v.startswith('"'): v = v[1:]
if v.endswith('"'): v = v[:-1]
- v = cookielib.http2time(v) # None if invalid
+ v = http.cookiejar.http2time(v) # None if invalid
pairs.append((k, v))
if pairs:
if not version_set:
pairs.append(("version", "0"))
result.append(pairs)
return result
- cookielib.parse_ns_headers = parse_ns_headers
- assert len(cookielib.parse_ns_headers([_test_cookie])) == 2
+ http.cookiejar.parse_ns_headers = parse_ns_headers
+ assert len(http.cookiejar.parse_ns_headers([_test_cookie])) == 2
--- fs/contrib/davfs/xmlobj.py.orig 2022-03-04 17:14:43 UTC
+++ fs/contrib/davfs/xmlobj.py
@@ -9,9 +9,9 @@ of dexml.Model subclasses.
"""
-from urlparse import urlparse, urlunparse
+from urllib.parse import urlparse, urlunparse
-from httplib import responses as STATUS_CODE_TEXT
+from http.client import responses as STATUS_CODE_TEXT
STATUS_CODE_TEXT[207] = "Multi-Status"
import dexml
@@ -86,7 +86,7 @@ class StatusField(fields.Value):
return val
def __set__(self,instance,value):
- if isinstance(value,basestring):
+ if isinstance(value,str):
# sanity check it
bits = value.split(" ")
if len(bits) < 3 or bits[0] != "HTTP/1.1":
--- fs/contrib/sqlitefs.py.orig 2015-04-12 17:24:29 UTC
+++ fs/contrib/sqlitefs.py
@@ -24,7 +24,7 @@ def fetchone(cursor):
'''
row = None
try:
- row = cursor.next()
+ row = next(cursor)
except:
pass
return(row)
@@ -62,7 +62,7 @@ class SqliteFsFileBase(object):
__repr__ = __str__
def __unicode__(self):
- return u"<SqliteFS File in %s %s>" % (self.fs, self.path)
+ return "<SqliteFS File in %s %s>" % (self.fs, self.path)
def __del__(self):
if not self.closed:
@@ -74,7 +74,7 @@ class SqliteFsFileBase(object):
def __iter__(self):
raise OperationFailedError('__iter__', self.path)
- def next(self):
+ def __next__(self):
raise OperationFailedError('next', self.path)
def readline(self, *args, **kwargs):
@@ -139,8 +139,8 @@ class SqliteReadableFile(SqliteFsFileBase):
def __iter__(self):
return iter(self.real_stream)
- def next(self):
- return self.real_stream.next()
+ def __next__(self):
+ return next(self.real_stream)
def readline(self, *args, **kwargs):
return self.real_stream.readline(*args, **kwargs)
@@ -438,7 +438,7 @@ class SqliteFS(FS):
get the directory information dictionary.
'''
info = dict()
- info['st_mode'] = 0755
+ info['st_mode'] = 0o755
return info
def _get_file_info(self, path):
@@ -460,7 +460,7 @@ class SqliteFS(FS):
info['created'] = row[2]
info['last_modified'] = row[3]
info['last_accessed'] = row[4]
- info['st_mode'] = 0666
+ info['st_mode'] = 0o666
return(info)
def _isfile(self,path):
@@ -551,7 +551,7 @@ class SqliteFS(FS):
pass
if( absolute == False):
- pathlist = map(lambda dpath:frombase(path,dpath), pathlist)
+ pathlist = [frombase(path,dpath) for dpath in pathlist]
return(pathlist)
--- fs/contrib/tahoelafs/__init__.py.orig 2022-03-04 17:14:43 UTC
+++ fs/contrib/tahoelafs/__init__.py
@@ -70,8 +70,8 @@ from fs import _thread_synchronize_default, SEEK_END
from fs.remote import CacheFSMixin, RemoteFileBuffer
from fs.base import fnmatch, NoDefaultMeta
-from util import TahoeUtil
-from connection import Connection
+from .util import TahoeUtil
+from .connection import Connection
from six import b
@@ -240,7 +240,7 @@ class _TahoeLAFS(FS):
continue
if wildcard is not None:
- if isinstance(wildcard,basestring):
+ if isinstance(wildcard,str):
if not fnmatch.fnmatch(item['name'], wildcard):
continue
else:
@@ -269,7 +269,7 @@ class _TahoeLAFS(FS):
try:
self.tahoeutil.unlink(self.dircap, path)
- except Exception, e:
+ except Exception as e:
raise errors.ResourceInvalidError(path)
@_fix_path
@@ -341,8 +341,8 @@ class _TahoeLAFS(FS):
def _log(self, level, message):
if not logger.isEnabledFor(level): return
- logger.log(level, u'(%d) %s' % (id(self),
- unicode(message).encode('ASCII', 'replace')))
+ logger.log(level, '(%d) %s' % (id(self),
+ str(message).encode('ASCII', 'replace')))
@_fix_path
def getpathurl(self, path, allow_none=False, webapi=None):
@@ -353,11 +353,11 @@ class _TahoeLAFS(FS):
webapi = self.connection.webapi
self._log(DEBUG, "Retrieving URL for %s over %s" % (path, webapi))
path = self.tahoeutil.fixwinpath(path, False)
- return u"%s/uri/%s%s" % (webapi, self.dircap, path)
+ return "%s/uri/%s%s" % (webapi, self.dircap, path)
@_fix_path
def getrange(self, path, offset, length=None):
- return self.connection.get(u'/uri/%s%s' % (self.dircap, path),
+ return self.connection.get('/uri/%s%s' % (self.dircap, path),
offset=offset, length=length)
@_fix_path
@@ -379,10 +379,10 @@ class _TahoeLAFS(FS):
file.seek(0)
if size > self.largefilesize:
- self.connection.put(u'/uri/%s%s' % (self.dircap, path),
+ self.connection.put('/uri/%s%s' % (self.dircap, path),
"PyFilesystem.TahoeLAFS: Upload started, final size %d" % size)
- self.connection.put(u'/uri/%s%s' % (self.dircap, path), file, size=size)
+ self.connection.put('/uri/%s%s' % (self.dircap, path), file, size=size)
@_fix_path
def getinfo(self, path):
--- fs/contrib/tahoelafs/connection.py.orig 2015-04-12 17:24:29 UTC
+++ fs/contrib/tahoelafs/connection.py
@@ -10,17 +10,19 @@ if python3:
from urllib.parse import urlencode, pathname2url, quote
from urllib.request import Request, urlopen
else:
- from urllib import urlencode, pathname2url
- from urllib2 import Request, urlopen, quote
+ from urllib.parse import urlencode
+ from urllib.request import pathname2url
+ from urllib.request import Request, urlopen
+ from urllib.parse import quote
class PutRequest(Request):
def __init__(self, *args, **kwargs):
- self.get_method = lambda: u'PUT'
+ self.get_method = lambda: 'PUT'
Request.__init__(self, *args, **kwargs)
class DeleteRequest(Request):
def __init__(self, *args, **kwargs):
- self.get_method = lambda: u'DELETE'
+ self.get_method = lambda: 'DELETE'
Request.__init__(self, *args, **kwargs)
class Connection:
@@ -32,7 +34,7 @@ class Connection:
'''
Retrieve length of string or file object and prepare HTTP headers.
'''
- if isinstance(f, basestring):
+ if isinstance(f, str):
# Just set up content length
size = len(f)
elif getattr(f, 'read', None):
@@ -50,20 +52,20 @@ class Connection:
def _urlencode(self, data):
_data = {}
- for k, v in data.items():
+ for k, v in list(data.items()):
_data[k.encode('utf-8')] = v.encode('utf-8')
return urlencode(_data)
def _quotepath(self, path, params={}):
q = quote(path.encode('utf-8'), safe='/')
if params:
- return u"%s?%s" % (q, self._urlencode(params))
+ return "%s?%s" % (q, self._urlencode(params))
return q
def _urlopen(self, req):
try:
return urlopen(req)
- except Exception, e:
+ except Exception as e:
if not getattr(e, 'getcode', None):
raise errors.RemoteConnectionError(str(e))
code = e.getcode()
@@ -85,7 +87,7 @@ class Connection:
data = self._urlencode(data)
path = self._quotepath(path)
if data:
- path = u'?'.join([path, data])
+ path = '?'.join([path, data])
headers = {}
headers.update(self.headers)
--- fs/contrib/tahoelafs/test_tahoelafs.py.orig 2022-03-04 17:14:43 UTC
+++ fs/contrib/tahoelafs/test_tahoelafs.py
@@ -35,7 +35,7 @@ class TestTahoeLAFS(unittest.TestCase,FSTestCases):#,T
def test_dircap(self):
# Is dircap in correct format?
- self.assert_(self.dircap.startswith('URI:DIR2:') and len(self.dircap) > 50)
+ self.assertTrue(self.dircap.startswith('URI:DIR2:') and len(self.dircap) > 50)
def test_concurrent_copydir(self):
# makedir() on TahoeLAFS is currently not atomic
--- fs/contrib/tahoelafs/util.py.orig 2022-03-04 17:14:43 UTC
+++ fs/contrib/tahoelafs/util.py
@@ -19,7 +19,7 @@ except ImportError:
try:
import json
except ImportError:
- print "simplejson (http://pypi.python.org/pypi/simplejson/) required"
+ print("simplejson (http://pypi.python.org/pypi/simplejson/) required")
raise
from .connection import Connection
@@ -29,22 +29,22 @@ python3 = int(platform.python_version_tuple()[0]) > 2
if python3:
from urllib.error import HTTPError
else:
- from urllib2 import HTTPError
+ from urllib.error import HTTPError
class TahoeUtil:
def __init__(self, webapi):
self.connection = Connection(webapi)
def createdircap(self):
- return self.connection.post(u'/uri', params={u't': u'mkdir'}).read()
+ return self.connection.post('/uri', params={'t': 'mkdir'}).read()
def unlink(self, dircap, path=None):
path = self.fixwinpath(path, False)
- self.connection.delete(u'/uri/%s%s' % (dircap, path))
+ self.connection.delete('/uri/%s%s' % (dircap, path))
def info(self, dircap, path):
path = self.fixwinpath(path, False)
- meta = json.load(self.connection.get(u'/uri/%s%s' % (dircap, path), {u't': u'json'}))
+ meta = json.load(self.connection.get('/uri/%s%s' % (dircap, path), {'t': 'json'}))
return self._info(path, meta)
def fixwinpath(self, path, direction=True):
@@ -74,7 +74,7 @@ class TahoeUtil:
if type == 'unknown':
raise errors.ResourceNotFoundError(path)
- info = {'name': unicode(self.fixwinpath(path, True)),
+ info = {'name': str(self.fixwinpath(path, True)),
'type': type,
'size': data.get('size', 0),
'ctime': None,
@@ -83,22 +83,22 @@ class TahoeUtil:
info['ctime'] = data['metadata'].get('ctime')
if info['type'] == 'dirnode':
- info['st_mode'] = 0777 | statinfo.S_IFDIR
+ info['st_mode'] = 0o777 | statinfo.S_IFDIR
else:
- info['st_mode'] = 0644
+ info['st_mode'] = 0o644
return info
def list(self, dircap, path=None):
path = self.fixwinpath(path, False)
- data = json.load(self.connection.get(u'/uri/%s%s' % (dircap, path), {u't': u'json'}))
+ data = json.load(self.connection.get('/uri/%s%s' % (dircap, path), {'t': 'json'}))
if len(data) < 2 or data[0] != 'dirnode':
raise errors.ResourceInvalidError('Metadata in unknown format!')
data = data[1]['children']
- for i in data.keys():
+ for i in list(data.keys()):
x = self._info(i, data[i])
yield x
@@ -106,7 +106,7 @@ class TahoeUtil:
path = self.fixwinpath(path, False)
path = pathsplit(path)
- self.connection.post(u"/uri/%s%s" % (dircap, path[0]), data={u't': u'mkdir', u'name': path[1]})
+ self.connection.post("/uri/%s%s" % (dircap, path[0]), data={'t': 'mkdir', 'name': path[1]})
def move(self, dircap, src, dst):
if src == '/' or dst == '/':
@@ -120,8 +120,8 @@ class TahoeUtil:
if src_tuple[0] == dst_tuple[0]:
# Move inside one directory
- self.connection.post(u"/uri/%s%s" % (dircap, src_tuple[0]), data={u't': u'rename',
- u'from_name': src_tuple[1], u'to_name': dst_tuple[1]})
+ self.connection.post("/uri/%s%s" % (dircap, src_tuple[0]), data={'t': 'rename',
+ 'from_name': src_tuple[1], 'to_name': dst_tuple[1]})
return
# Move to different directory. Firstly create link on dst, then remove from src
@@ -133,7 +133,7 @@ class TahoeUtil:
self.unlink(dircap, dst)
uri = self.info(dircap, src)['uri']
- self.connection.put(u"/uri/%s%s" % (dircap, dst), data=uri, params={u't': u'uri'})
+ self.connection.put("/uri/%s%s" % (dircap, dst), data=uri, params={'t': 'uri'})
if uri != self.info(dircap, dst)['uri']:
raise errors.OperationFailedError('Move failed')
--- fs/errors.py.orig 2015-04-12 17:24:29 UTC
+++ fs/errors.py
@@ -57,19 +57,19 @@ class FSError(Exception):
def __str__(self):
keys = {}
- for k,v in self.__dict__.iteritems():
- if isinstance(v,unicode):
+ for k,v in self.__dict__.items():
+ if isinstance(v,str):
v = v.encode(sys.getfilesystemencoding())
keys[k] = v
return str(self.msg % keys)
def __unicode__(self):
keys = {}
- for k,v in self.__dict__.iteritems():
+ for k,v in self.__dict__.items():
if isinstance(v, six.binary_type):
v = v.decode(sys.getfilesystemencoding(), 'replace')
keys[k] = v
- return unicode(self.msg, encoding=sys.getfilesystemencoding(), errors='replace') % keys
+ return str(self.msg, encoding=sys.getfilesystemencoding(), errors='replace') % keys
def __reduce__(self):
return (self.__class__,(),self.__dict__.copy(),)
@@ -217,33 +217,33 @@ def convert_fs_errors(func):
def wrapper(*args,**kwds):
try:
return func(*args,**kwds)
- except ResourceNotFoundError, e:
+ except ResourceNotFoundError as e:
raise OSError(errno.ENOENT,str(e))
- except ParentDirectoryMissingError, e:
+ except ParentDirectoryMissingError as e:
if sys.platform == "win32":
raise OSError(errno.ESRCH,str(e))
else:
raise OSError(errno.ENOENT,str(e))
- except ResourceInvalidError, e:
+ except ResourceInvalidError as e:
raise OSError(errno.EINVAL,str(e))
- except PermissionDeniedError, e:
+ except PermissionDeniedError as e:
raise OSError(errno.EACCES,str(e))
- except ResourceLockedError, e:
+ except ResourceLockedError as e:
if sys.platform == "win32":
raise WindowsError(32,str(e))
else:
raise OSError(errno.EACCES,str(e))
- except DirectoryNotEmptyError, e:
+ except DirectoryNotEmptyError as e:
raise OSError(errno.ENOTEMPTY,str(e))
- except DestinationExistsError, e:
+ except DestinationExistsError as e:
raise OSError(errno.EEXIST,str(e))
- except StorageSpaceError, e:
+ except StorageSpaceError as e:
raise OSError(errno.ENOSPC,str(e))
- except RemoteConnectionError, e:
+ except RemoteConnectionError as e:
raise OSError(errno.ENETDOWN,str(e))
- except UnsupportedError, e:
+ except UnsupportedError as e:
raise OSError(errno.ENOSYS,str(e))
- except FSError, e:
+ except FSError as e:
raise OSError(errno.EFAULT,str(e))
return wrapper
@@ -255,7 +255,7 @@ def convert_os_errors(func):
def wrapper(self,*args,**kwds):
try:
return func(self,*args,**kwds)
- except (OSError,IOError), e:
+ except (OSError,IOError) as e:
(exc_type,exc_inst,tb) = sys.exc_info()
path = getattr(e,"filename",None)
if path and path[0] == "/" and hasattr(self,"root_path"):
@@ -263,53 +263,53 @@ def convert_os_errors(func):
if isprefix(self.root_path,path):
path = path[len(self.root_path):]
if not hasattr(e,"errno") or not e.errno:
- raise OperationFailedError(opname,details=e),None,tb
+ raise OperationFailedError(opname,details=e).with_traceback(tb)
if e.errno == errno.ENOENT:
- raise ResourceNotFoundError(path,opname=opname,details=e),None,tb
+ raise ResourceNotFoundError(path,opname=opname,details=e).with_traceback(tb)
if e.errno == errno.EFAULT:
# This can happen when listdir a directory that is deleted by another thread
# Best to interpret it as a resource not found
- raise ResourceNotFoundError(path,opname=opname,details=e),None,tb
+ raise ResourceNotFoundError(path,opname=opname,details=e).with_traceback(tb)
if e.errno == errno.ESRCH:
- raise ResourceNotFoundError(path,opname=opname,details=e),None,tb
+ raise ResourceNotFoundError(path,opname=opname,details=e).with_traceback(tb)
if e.errno == errno.ENOTEMPTY:
- raise DirectoryNotEmptyError(path,opname=opname,details=e),None,tb
+ raise DirectoryNotEmptyError(path,opname=opname,details=e).with_traceback(tb)
if e.errno == errno.EEXIST:
- raise DestinationExistsError(path,opname=opname,details=e),None,tb
+ raise DestinationExistsError(path,opname=opname,details=e).with_traceback(tb)
if e.errno == 183: # some sort of win32 equivalent to EEXIST
- raise DestinationExistsError(path,opname=opname,details=e),None,tb
+ raise DestinationExistsError(path,opname=opname,details=e).with_traceback(tb)
if e.errno == errno.ENOTDIR:
- raise ResourceInvalidError(path,opname=opname,details=e),None,tb
+ raise ResourceInvalidError(path,opname=opname,details=e).with_traceback(tb)
if e.errno == errno.EISDIR:
- raise ResourceInvalidError(path,opname=opname,details=e),None,tb
+ raise ResourceInvalidError(path,opname=opname,details=e).with_traceback(tb)
if e.errno == errno.EINVAL:
- raise ResourceInvalidError(path,opname=opname,details=e),None,tb
+ raise ResourceInvalidError(path,opname=opname,details=e).with_traceback(tb)
if e.errno == errno.ENOSPC:
- raise StorageSpaceError(opname,path=path,details=e),None,tb
+ raise StorageSpaceError(opname,path=path,details=e).with_traceback(tb)
if e.errno == errno.EPERM:
- raise PermissionDeniedError(opname,path=path,details=e),None,tb
+ raise PermissionDeniedError(opname,path=path,details=e).with_traceback(tb)
if hasattr(errno,"ENONET") and e.errno == errno.ENONET:
- raise RemoteConnectionError(opname,path=path,details=e),None,tb
+ raise RemoteConnectionError(opname,path=path,details=e).with_traceback(tb)
if e.errno == errno.ENETDOWN:
- raise RemoteConnectionError(opname,path=path,details=e),None,tb
+ raise RemoteConnectionError(opname,path=path,details=e).with_traceback(tb)
if e.errno == errno.ECONNRESET:
- raise RemoteConnectionError(opname,path=path,details=e),None,tb
+ raise RemoteConnectionError(opname,path=path,details=e).with_traceback(tb)
if e.errno == errno.EACCES:
if sys.platform == "win32":
if e.args[0] and e.args[0] == 32:
- raise ResourceLockedError(path,opname=opname,details=e),None,tb
- raise PermissionDeniedError(opname,details=e),None,tb
+ raise ResourceLockedError(path,opname=opname,details=e).with_traceback(tb)
+ raise PermissionDeniedError(opname,details=e).with_traceback(tb)
# Sometimes windows gives some random errors...
if sys.platform == "win32":
if e.errno in (13,):
- raise ResourceInvalidError(path,opname=opname,details=e),None,tb
+ raise ResourceInvalidError(path,opname=opname,details=e).with_traceback(tb)
if e.errno == errno.ENAMETOOLONG:
- raise PathError(path,details=e),None,tb
+ raise PathError(path,details=e).with_traceback(tb)
if e.errno == errno.EOPNOTSUPP:
- raise UnsupportedError(opname,details=e),None,tb
+ raise UnsupportedError(opname,details=e).with_traceback(tb)
if e.errno == errno.ENOSYS:
- raise UnsupportedError(opname,details=e),None,tb
- raise OperationFailedError(opname,details=e),None,tb
+ raise UnsupportedError(opname,details=e).with_traceback(tb)
+ raise OperationFailedError(opname,details=e).with_traceback(tb)
return wrapper
--- fs/expose/dokan/__init__.py.orig 2015-04-12 17:24:29 UTC
+++ fs/expose/dokan/__init__.py
@@ -54,8 +54,8 @@ systems with Dokan installed.
# Copyright (c) 2009-2010, Cloud Matrix Pty. Ltd.
# All rights reserved; available under the terms of the MIT License.
-from __future__ import with_statement
+
import sys
import os
@@ -64,7 +64,7 @@ import errno
import time
import stat as statinfo
import subprocess
-import cPickle
+import pickle
import datetime
import ctypes
from collections import deque
@@ -76,7 +76,7 @@ from fs.local_functools import wraps
from fs.wrapfs import WrapFS
try:
- import libdokan
+ from . import libdokan
except (NotImplementedError, EnvironmentError, ImportError, NameError,):
is_available = False
sys.modules.pop("fs.expose.dokan.libdokan", None)
@@ -171,12 +171,12 @@ def handle_fs_errors(func):
def wrapper(*args,**kwds):
try:
res = func(*args,**kwds)
- except OSError, e:
+ except OSError as e:
if e.errno:
res = -1 * _errno2syserrcode(e.errno)
else:
res = -1
- except Exception, e:
+ except Exception as e:
raise
else:
if res is None:
@@ -424,7 +424,7 @@ class FSOperations(object):
info.contents.Context = 1
try:
f = self.fs.open(path, mode)
- print path, mode, repr(f)
+ print(path, mode, repr(f))
except ResourceInvalidError:
info.contents.IsDirectory = True
except FSError:
@@ -896,10 +896,10 @@ def mount(fs, drive, foreground=False, ready_callback=
def check_ready(mp=None):
if ready_callback is not False:
check_alive(mp)
- for _ in xrange(100):
+ for _ in range(100):
try:
os.stat(drive+":\\")
- except EnvironmentError, e:
+ except EnvironmentError as e:
check_alive(mp)
time.sleep(0.05)
else:
@@ -989,7 +989,7 @@ class MountProcess(subprocess.Popen):
cmd = cmd + "data = cPickle.loads(%s); "
cmd = cmd + "from fs.expose.dokan import MountProcess; "
cmd = cmd + "MountProcess._do_mount(data)"
- cmd = cmd % (repr(cPickle.dumps((fs,drive,dokan_opts,nowait),-1)),)
+ cmd = cmd % (repr(pickle.dumps((fs,drive,dokan_opts,nowait),-1)),)
cmd = [sys.executable,"-c",cmd]
super(MountProcess,self).__init__(cmd,**kwds)
--- fs/expose/ftp.py.orig 2015-04-12 17:24:29 UTC
+++ fs/expose/ftp.py
@@ -28,7 +28,7 @@ from fs.osfs import OSFS
from fs.errors import convert_fs_errors
from fs import iotools
-from six import text_type as unicode
+from six import text_type as str
# Get these once so we can reuse them:
@@ -107,9 +107,9 @@ class FTPFS(ftpserver.AbstractedFS):
def chdir(self, path):
# We dont' use the decorator here, we actually decode a version of the
# path for use with pyfs, but keep the original for use with pyftpdlib.
- if not isinstance(path, unicode):
+ if not isinstance(path, str):
# pyftpdlib 0.7.x
- unipath = unicode(path, self.encoding)
+ unipath = str(path, self.encoding)
else:
# pyftpdlib 1.x
unipath = path
@@ -134,7 +134,7 @@ class FTPFS(ftpserver.AbstractedFS):
@convert_fs_errors
@decode_args
def listdir(self, path):
- return map(lambda x: x.encode(self.encoding), self.fs.listdir(path))
+ return [x.encode(self.encoding) for x in self.fs.listdir(path)]
@convert_fs_errors
@decode_args
@@ -190,7 +190,7 @@ class FTPFS(ftpserver.AbstractedFS):
kwargs['st_mode'] = info['mode']
else:
# Otherwise, build one. Not executable by default.
- mode = 0660
+ mode = 0o660
# Merge in the type (dir or file). File is tested first, some file systems
# such as ArchiveMountFS treat archive files as directories too. By checking
# file first, any such files will be only files (not directories).
@@ -198,7 +198,7 @@ class FTPFS(ftpserver.AbstractedFS):
mode |= stat.S_IFREG
elif self.fs.isdir(path):
mode |= stat.S_IFDIR
- mode |= 0110 # Merge in exec bit to signal dir is listable
+ mode |= 0o110 # Merge in exec bit to signal dir is listable
kwargs['st_mode'] = mode
return FakeStat(**kwargs)
--- fs/expose/fuse/__init__.py.orig 2015-04-12 17:24:29 UTC
+++ fs/expose/fuse/__init__.py
@@ -56,7 +56,7 @@ import errno
import time
import stat as statinfo
import subprocess
-import cPickle
+import pickle
import logging
logger = logging.getLogger("fs.expose.fuse")
@@ -404,9 +404,9 @@ class FSOperations(Operations):
# The interesting stuff
if 'st_mode' not in info:
if self.fs.isdir(path):
- info['st_mode'] = 0755
+ info['st_mode'] = 0o755
else:
- info['st_mode'] = 0666
+ info['st_mode'] = 0o666
mode = info['st_mode']
if not statinfo.S_ISDIR(mode) and not statinfo.S_ISREG(mode):
if self.fs.isdir(path):
@@ -432,7 +432,7 @@ class FSOperations(Operations):
except KeyError:
pass
else:
- info["st_size"] = max(written_sizes.values() + [info["st_size"]])
+ info["st_size"] = max(list(written_sizes.values()) + [info["st_size"]])
return info
@@ -491,7 +491,7 @@ def unmount(path):
else:
args = ["fusermount", "-u", path]
- for num_tries in xrange(3):
+ for num_tries in range(3):
p = subprocess.Popen(args,
stderr=subprocess.PIPE,
stdout=subprocess.PIPE)
@@ -554,7 +554,7 @@ class MountProcess(subprocess.Popen):
cmd = cmd + 'data = loads(%s); '
cmd = cmd + 'from fs.expose.fuse import MountProcess; '
cmd = cmd + 'MountProcess._do_mount_nowait(data)'
- cmd = cmd % (repr(cPickle.dumps((fs, path, fuse_opts), -1)),)
+ cmd = cmd % (repr(pickle.dumps((fs, path, fuse_opts), -1)),)
cmd = [sys.executable, "-c", cmd]
super(MountProcess, self).__init__(cmd, **kwds)
else:
@@ -567,7 +567,7 @@ class MountProcess(subprocess.Popen):
cmd = cmd + 'data = loads(%s); '
cmd = cmd + 'from fs.expose.fuse import MountProcess; '
cmd = cmd + 'MountProcess._do_mount_wait(data)'
- cmd = cmd % (repr(cPickle.dumps((fs, path, fuse_opts, r, w), -1)),)
+ cmd = cmd % (repr(pickle.dumps((fs, path, fuse_opts, r, w), -1)),)
cmd = [sys.executable, "-c", cmd]
super(MountProcess, self).__init__(cmd, **kwds)
os.close(w)
@@ -635,8 +635,8 @@ class MountProcess(subprocess.Popen):
opts["unmount_callback"] = unmount_callback
try:
mount(fs, path, **opts)
- except Exception, e:
- os.write(w, b("E") + unicode(e).encode('ascii', errors='replace'))
+ except Exception as e:
+ os.write(w, b("E") + str(e).encode('ascii', errors='replace'))
os.close(w)
if not successful:
@@ -653,5 +653,5 @@ if __name__ == "__main__":
os.makedirs(mount_point)
def ready_callback():
- print "READY"
+ print("READY")
mount(TempFS(), mount_point, foreground=True, ready_callback=ready_callback)
--- fs/expose/fuse/fuse_ctypes.py.orig 2015-04-12 17:24:29 UTC
+++ fs/expose/fuse/fuse_ctypes.py
@@ -12,8 +12,8 @@
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-from __future__ import division
+
from ctypes import *
from ctypes.util import find_library
from errno import *
@@ -273,7 +273,7 @@ def time_of_timespec(ts):
return ts.tv_sec + ts.tv_nsec / 10 ** 9
def set_st_attrs(st, attrs):
- for key, val in attrs.items():
+ for key, val in list(attrs.items()):
if key in ('st_atime', 'st_mtime', 'st_ctime'):
timespec = getattr(st, key + 'spec')
timespec.tv_sec = int(val)
@@ -314,7 +314,7 @@ class FUSE(object):
kwargs.setdefault('fsname', operations.__class__.__name__)
args.append('-o')
args.append(','.join(key if val == True else '%s=%s' % (key, val)
- for key, val in kwargs.items()))
+ for key, val in list(kwargs.items())))
args.append(mountpoint)
argv = (c_char_p * len(args))(*args)
@@ -331,7 +331,7 @@ class FUSE(object):
"""Decorator for the methods that follow"""
try:
return func(*args, **kwargs) or 0
- except OSError, e:
+ except OSError as e:
return -(e.errno or EFAULT)
except:
print_exc()
@@ -400,7 +400,7 @@ class FUSE(object):
def statfs(self, path, buf):
stv = buf.contents
attrs = self.operations('statfs', path)
- for key, val in attrs.items():
+ for key, val in list(attrs.items()):
if hasattr(stv, key):
setattr(stv, key, val)
return 0
@@ -576,7 +576,7 @@ class Operations(object):
if path != '/':
raise OSError(ENOENT, '')
- return dict(st_mode=(S_IFDIR | 0755), st_nlink=2)
+ return dict(st_mode=(S_IFDIR | 0o755), st_nlink=2)
def getxattr(self, path, name, position=0):
raise OSError(ENOTSUP, '')
@@ -667,13 +667,13 @@ class Operations(object):
class LoggingMixIn:
def __call__(self, op, path, *args):
- print '->', op, path, repr(args)
+ print('->', op, path, repr(args))
ret = '[Unknown Error]'
try:
ret = getattr(self, op)(path, *args)
return ret
- except OSError, e:
+ except OSError as e:
ret = str(e)
raise
finally:
- print '<-', op, repr(ret)
+ print('<-', op, repr(ret))
--- fs/expose/fuse/fuse.py.orig 2015-04-12 17:24:29 UTC
+++ fs/expose/fuse/fuse.py
@@ -12,8 +12,8 @@
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-from __future__ import division
+
from ctypes import *
from ctypes.util import find_library
from errno import *
@@ -269,7 +269,7 @@ def time_of_timespec(ts):
return ts.tv_sec + ts.tv_nsec / 10 ** 9
def set_st_attrs(st, attrs):
- for key, val in attrs.items():
+ for key, val in list(attrs.items()):
if key in ('st_atime', 'st_mtime', 'st_ctime'):
timespec = getattr(st, key + 'spec')
timespec.tv_sec = int(val)
@@ -312,7 +312,7 @@ class FUSE(object):
kwargs.setdefault('fsname', operations.__class__.__name__)
args.append('-o')
args.append(','.join(key if val == True else '%s=%s' % (key, val)
- for key, val in kwargs.items()))
+ for key, val in list(kwargs.items())))
args.append(mountpoint)
argv = (c_char_p * len(args))(*args)
@@ -331,7 +331,7 @@ class FUSE(object):
"""Decorator for the methods that follow"""
try:
return func(*args, **kwargs) or 0
- except OSError, e:
+ except OSError as e:
return -(e.errno or EFAULT)
except:
print_exc()
@@ -406,7 +406,7 @@ class FUSE(object):
def statfs(self, path, buf):
stv = buf.contents
attrs = self.operations('statfs', path)
- for key, val in attrs.items():
+ for key, val in list(attrs.items()):
if hasattr(stv, key):
setattr(stv, key, val)
return 0
@@ -579,7 +579,7 @@ class Operations(object):
if path != '/':
raise FuseOSError(ENOENT)
- return dict(st_mode=(S_IFDIR | 0755), st_nlink=2)
+ return dict(st_mode=(S_IFDIR | 0o755), st_nlink=2)
def getxattr(self, path, name, position=0):
raise FuseOSError(ENOTSUP)
@@ -670,13 +670,13 @@ class Operations(object):
class LoggingMixIn:
def __call__(self, op, path, *args):
- print '->', op, path, repr(args)
+ print('->', op, path, repr(args))
ret = '[Unhandled Exception]'
try:
ret = getattr(self, op)(path, *args)
return ret
- except OSError, e:
+ except OSError as e:
ret = str(e)
raise
finally:
- print '<-', op, repr(ret)
+ print('<-', op, repr(ret))
--- fs/expose/fuse/fuse3.py.orig 2022-03-04 17:14:43 UTC
+++ fs/expose/fuse/fuse3.py
@@ -229,7 +229,7 @@ def time_of_timespec(ts):
return ts.tv_sec + ts.tv_nsec / 10 ** 9
def set_st_attrs(st, attrs):
- for key, val in attrs.items():
+ for key, val in list(attrs.items()):
if key in ('st_atime', 'st_mtime', 'st_ctime'):
timespec = getattr(st, key + 'spec')
timespec.tv_sec = int(val)
@@ -274,7 +274,7 @@ class FUSE(object):
kwargs.setdefault('fsname', operations.__class__.__name__)
args.append('-o')
args.append(','.join(key if val == True else '%s=%s' % (key, val)
- for key, val in kwargs.items()))
+ for key, val in list(kwargs.items())))
args.append(mountpoint)
argv = (c_char_p * len(args))(*args)
@@ -361,7 +361,7 @@ class FUSE(object):
def statfs(self, path, buf):
stv = buf.contents
attrs = self.operations('statfs', path)
- for key, val in attrs.items():
+ for key, val in list(attrs.items()):
if hasattr(stv, key):
setattr(stv, key, val)
return 0
--- fs/expose/http.py.orig 2015-04-12 17:24:29 UTC
+++ fs/expose/http.py
@@ -1,13 +1,13 @@
__all__ = ["serve_fs"]
-import SimpleHTTPServer
-import SocketServer
+import http.server
+import socketserver
from fs.path import pathjoin, dirname
from fs.errors import FSError
from time import mktime
-from cStringIO import StringIO
+from io import StringIO
import cgi
-import urllib
+import urllib.request, urllib.parse, urllib.error
import posixpath
import time
import threading
@@ -16,13 +16,13 @@ import socket
def _datetime_to_epoch(d):
return mktime(d.timetuple())
-class FSHTTPRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
+class FSHTTPRequestHandler(http.server.SimpleHTTPRequestHandler):
"""A hacked together version of SimpleHTTPRequestHandler"""
def __init__(self, fs, request, client_address, server):
self._fs = fs
- SimpleHTTPServer.SimpleHTTPRequestHandler.__init__(self, request, client_address, server)
+ http.server.SimpleHTTPRequestHandler.__init__(self, request, client_address, server)
def do_GET(self):
"""Serve a GET request."""
@@ -69,7 +69,7 @@ class FSHTTPRequestHandler(SimpleHTTPServer.SimpleHTTP
try:
info = self._fs.getinfo(path)
f = self._fs.open(path, 'rb')
- except FSError, e:
+ except FSError as e:
self.send_error(404, str(e))
return None
self.send_response(200)
@@ -98,7 +98,7 @@ class FSHTTPRequestHandler(SimpleHTTPServer.SimpleHTTP
paths = [p+'/' for p in sorted(dir_paths, key=lambda p:p.lower())] + sorted(file_paths, key=lambda p:p.lower())
#list.sort(key=lambda a: a.lower())
f = StringIO()
- displaypath = cgi.escape(urllib.unquote(self.path))
+ displaypath = cgi.escape(urllib.parse.unquote(self.path))
f.write('<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">')
f.write("<html>\n<title>Directory listing for %s</title>\n" % displaypath)
f.write("<body>\n<h2>Directory listing for %s</h2>\n" % displaypath)
@@ -106,11 +106,11 @@ class FSHTTPRequestHandler(SimpleHTTPServer.SimpleHTTP
parent = dirname(path)
if path != parent:
- f.write('<li><a href="%s">../</a></li>' % urllib.quote(parent.rstrip('/') + '/'))
+ f.write('<li><a href="%s">../</a></li>' % urllib.parse.quote(parent.rstrip('/') + '/'))
for path in paths:
f.write('<li><a href="%s">%s</a>\n'
- % (urllib.quote(path), cgi.escape(path)))
+ % (urllib.parse.quote(path), cgi.escape(path)))
f.write("</ul>\n<hr>\n</body>\n</html>\n")
length = f.tell()
f.seek(0)
@@ -124,7 +124,7 @@ class FSHTTPRequestHandler(SimpleHTTPServer.SimpleHTTP
# abandon query parameters
path = path.split('?',1)[0]
path = path.split('#',1)[0]
- path = posixpath.normpath(urllib.unquote(path))
+ path = posixpath.normpath(urllib.parse.unquote(path))
return path
@@ -143,7 +143,7 @@ def serve_fs(fs, address='', port=8000):
#class ThreadedTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
# pass
- httpd = SocketServer.TCPServer((address, port), Handler, bind_and_activate=False)
+ httpd = socketserver.TCPServer((address, port), Handler, bind_and_activate=False)
#httpd = ThreadedTCPServer((address, port), Handler, bind_and_activate=False)
httpd.allow_reuse_address = True
httpd.server_bind()
--- fs/expose/importhook.py.orig 2015-04-12 17:24:29 UTC
+++ fs/expose/importhook.py
@@ -60,7 +60,7 @@ class FSImportHook(object):
def __init__(self,fs_or_url):
# If given a string, try to open it as an FS url.
# Don't open things on the local filesystem though.
- if isinstance(fs_or_url,basestring):
+ if isinstance(fs_or_url,str):
if ":/" not in fs_or_url:
raise ImportError
try:
@@ -182,7 +182,7 @@ class FSImportHook(object):
mod.__loader__ = self
sys.modules[fullname] = mod
try:
- exec code in mod.__dict__
+ exec(code, mod.__dict__)
mod.__file__ = self.get_filename(fullname,info)
if self.is_package(fullname,info):
if self.path is None:
@@ -231,7 +231,7 @@ class FSImportHook(object):
"""Read the specified data file."""
try:
return self.fs.getcontents(path, 'rb')
- except FSError, e:
+ except FSError as e:
raise IOError(str(e))
def get_filename(self,fullname,info=None):
--- fs/expose/sftp.py.orig 2015-04-12 17:24:29 UTC
+++ fs/expose/sftp.py
@@ -24,12 +24,12 @@ is, you probably don't want to use it.
"""
-from __future__ import with_statement
+
import os
import stat as statinfo
import time
-import SocketServer
+import socketserver
import threading
import paramiko
@@ -73,11 +73,11 @@ def report_sftp_errors(func):
def wrapper(*args,**kwds):
try:
return func(*args, **kwds)
- except ResourceNotFoundError, e:
+ except ResourceNotFoundError as e:
return paramiko.SFTP_NO_SUCH_FILE
- except UnsupportedError, e:
+ except UnsupportedError as e:
return paramiko.SFTP_OP_UNSUPPORTED
- except FSError, e:
+ except FSError as e:
return paramiko.SFTP_FAILURE
return wrapper
@@ -114,7 +114,7 @@ class SFTPServerInterface(paramiko.SFTPServerInterface
@report_sftp_errors
def list_folder(self, path):
- if not isinstance(path, unicode):
+ if not isinstance(path, str):
path = path.decode(self.encoding)
stats = []
for entry in self.fs.listdir(path, absolute=True):
@@ -125,7 +125,7 @@ class SFTPServerInterface(paramiko.SFTPServerInterface
@report_sftp_errors
def stat(self, path):
- if not isinstance(path, unicode):
+ if not isinstance(path, str):
path = path.decode(self.encoding)
info = self.fs.getinfo(path)
@@ -146,9 +146,9 @@ class SFTPServerInterface(paramiko.SFTPServerInterface
stat.st_mtime = time.mktime(info.get("modified_time").timetuple())
if isdir(self.fs, path, info):
- stat.st_mode = 0777 | statinfo.S_IFDIR
+ stat.st_mode = 0o777 | statinfo.S_IFDIR
else:
- stat.st_mode = 0777 | statinfo.S_IFREG
+ stat.st_mode = 0o777 | statinfo.S_IFREG
return stat
def lstat(self, path):
@@ -156,16 +156,16 @@ class SFTPServerInterface(paramiko.SFTPServerInterface
@report_sftp_errors
def remove(self, path):
- if not isinstance(path, unicode):
+ if not isinstance(path, str):
path = path.decode(self.encoding)
self.fs.remove(path)
return paramiko.SFTP_OK
@report_sftp_errors
def rename(self, oldpath, newpath):
- if not isinstance(oldpath, unicode):
+ if not isinstance(oldpath, str):
oldpath = oldpath.decode(self.encoding)
- if not isinstance(newpath, unicode):
+ if not isinstance(newpath, str):
newpath = newpath.decode(self.encoding)
if self.fs.isfile(oldpath):
self.fs.move(oldpath, newpath)
@@ -175,14 +175,14 @@ class SFTPServerInterface(paramiko.SFTPServerInterface
@report_sftp_errors
def mkdir(self, path, attr):
- if not isinstance(path, unicode):
+ if not isinstance(path, str):
path = path.decode(self.encoding)
self.fs.makedir(path)
return paramiko.SFTP_OK
@report_sftp_errors
def rmdir(self, path):
- if not isinstance(path, unicode):
+ if not isinstance(path, str):
path = path.decode(self.encoding)
self.fs.removedir(path)
return paramiko.SFTP_OK
@@ -224,7 +224,7 @@ class SFTPHandle(paramiko.SFTPHandle):
super(SFTPHandle, self).__init__(flags)
mode = flags_to_mode(flags)
self.owner = owner
- if not isinstance(path, unicode):
+ if not isinstance(path, str):
path = path.decode(self.owner.encoding)
self.path = path
self._file = owner.fs.open(path, mode)
@@ -263,7 +263,7 @@ class SFTPServer(paramiko.SFTPServer):
super(SFTPServer, self).finish_subsystem()
-class SFTPRequestHandler(SocketServer.BaseRequestHandler):
+class SFTPRequestHandler(socketserver.BaseRequestHandler):
"""SocketServer RequestHandler subclass for BaseSFTPServer.
This RequestHandler subclass creates a paramiko Transport, sets up the
@@ -305,7 +305,7 @@ class SFTPRequestHandler(SocketServer.BaseRequestHandl
-class ThreadedTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
+class ThreadedTCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
pass
@@ -334,7 +334,7 @@ class BaseSFTPServer(ThreadedTCPServer):
self.host_key = host_key
if RequestHandlerClass is None:
RequestHandlerClass = SFTPRequestHandler
- SocketServer.TCPServer.__init__(self, address, RequestHandlerClass)
+ socketserver.TCPServer.__init__(self, address, RequestHandlerClass)
def shutdown_request(self, request):
# Prevent TCPServer from closing the connection prematurely
--- fs/expose/wsgi/__init__.py.orig 2022-03-04 17:14:43 UTC
+++ fs/expose/wsgi/__init__.py
@@ -1 +1 @@
-from wsgi import serve_fs
+from .wsgi import serve_fs
--- fs/expose/wsgi/serve_home.py.orig 2015-04-12 17:24:29 UTC
+++ fs/expose/wsgi/serve_home.py
@@ -1,10 +1,10 @@
from wsgiref.simple_server import make_server
from fs.osfs import OSFS
-from wsgi import serve_fs
+from .wsgi import serve_fs
osfs = OSFS('~/')
application = serve_fs(osfs)
httpd = make_server('', 8000, application)
-print "Serving on http://127.0.0.1:8000"
+print("Serving on http://127.0.0.1:8000")
httpd.serve_forever()
--- fs/expose/wsgi/wsgi.py.orig 2015-04-12 17:24:29 UTC
+++ fs/expose/wsgi/wsgi.py
@@ -1,5 +1,5 @@
-import urlparse
+import urllib.parse
import mimetypes
from fs.errors import FSError
@@ -10,7 +10,7 @@ from datetime import datetime
try:
from mako.template import Template
except ImportError:
- print "Requires mako templates http://www.makotemplates.org/"
+ print("Requires mako templates http://www.makotemplates.org/")
raise
@@ -28,7 +28,7 @@ class WSGIServer(object):
def __init__(self, serve_fs, indexes=True, dir_template=None, chunk_size=16*1024*1024):
if dir_template is None:
- from dirtemplate import template as dir_template
+ from .dirtemplate import template as dir_template
self.serve_fs = serve_fs
self.indexes = indexes
@@ -57,7 +57,7 @@ class WSGIServer(object):
serving_file = None
try:
serving_file = self.serve_fs.open(path, 'rb')
- except Exception, e:
+ except Exception as e:
if serving_file is not None:
serving_file.close()
return self.serve_500(request, str(e))
--- fs/expose/xmlrpc.py.orig 2022-03-04 17:14:43 UTC
+++ fs/expose/xmlrpc.py
@@ -15,8 +15,8 @@ an FS object, which can then be exposed using whatever
"""
-import xmlrpclib
-from SimpleXMLRPCServer import SimpleXMLRPCServer
+import xmlrpc.client
+from xmlrpc.server import SimpleXMLRPCServer
from datetime import datetime
import base64
@@ -61,13 +61,13 @@ class RPCFSInterface(object):
def getmeta(self, meta_name):
meta = self.fs.getmeta(meta_name)
- if isinstance(meta, basestring):
+ if isinstance(meta, str):
meta = self.decode_path(meta)
return meta
def getmeta_default(self, meta_name, default):
meta = self.fs.getmeta(meta_name, default)
- if isinstance(meta, basestring):
+ if isinstance(meta, str):
meta = self.decode_path(meta)
return meta
@@ -77,7 +77,7 @@ class RPCFSInterface(object):
def get_contents(self, path, mode="rb"):
path = self.decode_path(path)
data = self.fs.getcontents(path, mode)
- return xmlrpclib.Binary(data)
+ return xmlrpc.client.Binary(data)
def set_contents(self, path, data):
path = self.decode_path(path)
@@ -119,16 +119,16 @@ class RPCFSInterface(object):
def settimes(self, path, accessed_time, modified_time):
path = self.decode_path(path)
- if isinstance(accessed_time, xmlrpclib.DateTime):
+ if isinstance(accessed_time, xmlrpc.client.DateTime):
accessed_time = datetime.strptime(accessed_time.value, "%Y%m%dT%H:%M:%S")
- if isinstance(modified_time, xmlrpclib.DateTime):
+ if isinstance(modified_time, xmlrpc.client.DateTime):
modified_time = datetime.strptime(modified_time.value, "%Y%m%dT%H:%M:%S")
return self.fs.settimes(path, accessed_time, modified_time)
def getinfo(self, path):
path = self.decode_path(path)
info = self.fs.getinfo(path)
- info = dict((k, v) for k, v in info.iteritems()
+ info = dict((k, v) for k, v in info.items()
if k in self._allowed_info)
return info
--- fs/filelike.py.orig 2022-03-04 17:14:43 UTC
+++ fs/filelike.py
@@ -52,9 +52,9 @@ if PY3:
from six import BytesIO as _StringIO
else:
try:
- from cStringIO import StringIO as _StringIO
+ from io import StringIO as _StringIO
except ImportError:
- from StringIO import StringIO as _StringIO
+ from io import StringIO as _StringIO
class FileLikeBase(object):
@@ -305,7 +305,7 @@ class FileLikeBase(object):
self.close()
return False
- def next(self):
+ def __next__(self):
"""next() method complying with the iterator protocol.
File-like objects are their own iterators, with each call to
--- fs/ftpfs.py.orig 2015-04-12 17:24:29 UTC
+++ fs/ftpfs.py
@@ -37,9 +37,9 @@ if PY3:
from six import BytesIO as StringIO
else:
try:
- from cStringIO import StringIO
+ from io import StringIO
except ImportError:
- from StringIO import StringIO
+ from io import StringIO
import time
@@ -221,10 +221,10 @@ class FTPListDataParser(object):
elif c == 'r':
result.try_retr = True
elif c == 's':
- result.size = long(buf[i+1:j])
+ result.size = int(buf[i+1:j])
elif c == 'm':
result.mtime_type = MTIME_TYPE.LOCAL
- result.mtime = long(buf[i+1:j])
+ result.mtime = int(buf[i+1:j])
elif c == 'i':
result.id_type = ID_TYPE.FULL
result.id = buf[i+1:j-i-1]
@@ -285,7 +285,7 @@ class FTPListDataParser(object):
elif state == 4: # getting tentative size
try:
- size = long(buf[i:j])
+ size = int(buf[i:j])
except ValueError:
pass
state = 5
@@ -295,25 +295,25 @@ class FTPListDataParser(object):
if month >= 0:
state = 6
else:
- size = long(buf[i:j])
+ size = int(buf[i:j])
elif state == 6: # have size and month
- mday = long(buf[i:j])
+ mday = int(buf[i:j])
state = 7
elif state == 7: # have size, month, mday
if (j - i == 4) and (buf[i+1] == ':'):
- hour = long(buf[i])
- minute = long(buf[i+2:i+4])
+ hour = int(buf[i])
+ minute = int(buf[i+2:i+4])
result.mtime_type = MTIME_TYPE.REMOTE_MINUTE
result.mtime = self._guess_time(month, mday, hour, minute)
elif (j - i == 5) and (buf[i+2] == ':'):
- hour = long(buf[i:i+2])
- minute = long(buf[i+3:i+5])
+ hour = int(buf[i:i+2])
+ minute = int(buf[i+3:i+5])
result.mtime_type = MTIME_TYPE.REMOTE_MINUTE
result.mtime = self._guess_time(month, mday, hour, minute)
elif j - i >= 4:
- year = long(buf[i:j])
+ year = int(buf[i:j])
result.mtime_type = MTIME_TYPE.REMOTE_DAY
result.mtime = self._get_mtime(year, month, mday)
else:
@@ -379,7 +379,7 @@ class FTPListDataParser(object):
j = i
j = buf.index('-', j)
- mday = long(buf[i:j])
+ mday = int(buf[i:j])
j = _skip(buf, j, '-')
i = j
@@ -391,13 +391,13 @@ class FTPListDataParser(object):
j = _skip(buf, j, '-')
i = j
j = buf.index(' ', j)
- year = long(buf[i:j])
+ year = int(buf[i:j])
j = _skip(buf, j, ' ')
i = j
j = buf.index(':', j)
- hour = long(buf[i:j])
+ hour = int(buf[i:j])
j = _skip(buf, j, ':')
i = j
@@ -406,7 +406,7 @@ class FTPListDataParser(object):
if j == buflen:
raise IndexError # abort, abort!
- minute = long(buf[i:j])
+ minute = int(buf[i:j])
result.mtime_type = MTIME_TYPE.REMOTE_MINUTE
result.mtime = self._get_mtime(year, month, mday, hour, minute)
@@ -430,17 +430,17 @@ class FTPListDataParser(object):
result = FTPListData(buf)
j = buf.index('-', j)
- month = long(buf[i:j])
+ month = int(buf[i:j])
j = _skip(buf, j, '-')
i = j
j = buf.index('-', j)
- mday = long(buf[i:j])
+ mday = int(buf[i:j])
j = _skip(buf, j, '-')
i = j
j = buf.index(' ', j)
- year = long(buf[i:j])
+ year = int(buf[i:j])
if year < 50:
year += 2000
if year < 1000:
@@ -449,14 +449,14 @@ class FTPListDataParser(object):
j = _skip(buf, j, ' ')
i = j
j = buf.index(':', j)
- hour = long(buf[i:j])
+ hour = int(buf[i:j])
j = _skip(buf, j, ':')
i = j
while not (buf[j] in 'AP'):
j += 1
if j == buflen:
raise IndexError
- minute = long(buf[i:j])
+ minute = int(buf[i:j])
if buf[j] == 'A':
j += 1
@@ -482,7 +482,7 @@ class FTPListDataParser(object):
i = j
j = buf.index(' ', j)
- result.size = long(buf[i:j])
+ result.size = int(buf[i:j])
result.try_retr = True
j = _skip(buf, j, ' ')
@@ -546,10 +546,10 @@ class FTPMlstDataParser(object):
int(factvalue[12:14]),
0, 0, 0))
elif factname == 'size':
- result.size = long(factvalue)
+ result.size = int(factvalue)
elif factname == 'sizd':
# some FTP servers report directory size with sizd
- result.size = long(factvalue)
+ result.size = int(factvalue)
elif factname == 'type':
if factvalue.lower() == 'file':
result.try_retr = True
@@ -605,7 +605,7 @@ def fileftperrors(f):
try:
try:
ret = f(self, *args, **kwargs)
- except Exception, e:
+ except Exception as e:
self.ftpfs._translate_exception(args[0] if args else '', e)
finally:
self._lock.release()
@@ -795,16 +795,16 @@ class _FTPFile(object):
self.conn.close()
self.conn = None
self.ftp.voidresp()
- except error_temp, error_perm:
+ except error_temp as error_perm:
pass
if self.ftp is not None:
try:
self.ftp.close()
- except error_temp, error_perm:
+ except error_temp as error_perm:
pass
self.closed = True
- def next(self):
+ def __next__(self):
return self.readline()
def readline(self, size=None):
@@ -823,7 +823,7 @@ def ftperrors(f):
try:
try:
ret = f(self, *args, **kwargs)
- except Exception, e:
+ except Exception as e:
self._translate_exception(args[0] if args else '', e)
finally:
self._leave_dircache()
@@ -834,7 +834,7 @@ def ftperrors(f):
def _encode(s):
- if isinstance(s, unicode):
+ if isinstance(s, str):
return s.encode('utf-8')
return s
@@ -956,7 +956,7 @@ class FTPFS(FS):
return features
def on_line(line):
- if not isinstance(line, unicode):
+ if not isinstance(line, str):
line = line.decode('utf-8')
info = parse_ftp_list_line(line, self.use_mlst)
if info:
@@ -986,7 +986,7 @@ class FTPFS(FS):
else: # Matrix FTP server has bug
on_line(list_line)
# if it's a dir, then we can send a MLSD
- if dirlist[dirlist.keys()[0]]['try_cwd']:
+ if dirlist[list(dirlist.keys())[0]]['try_cwd']:
dirlist = {}
self.ftp.retrlines("MLSD " + encoded_path, on_line)
else:
@@ -996,11 +996,11 @@ class FTPFS(FS):
self.dircache[path] = dirlist
def is_symlink(info):
- return info['try_retr'] and info['try_cwd'] and info.has_key('target')
+ return info['try_retr'] and info['try_cwd'] and 'target' in info
def resolve_symlink(linkpath):
linkinfo = self.getinfo(linkpath)
- if not linkinfo.has_key('resolved'):
+ if 'resolved' not in linkinfo:
linkinfo['resolved'] = linkpath
if is_symlink(linkinfo):
target = linkinfo['target']
@@ -1036,7 +1036,7 @@ class FTPFS(FS):
else:
dircache = self.dircache
paths = [normpath(abspath(path)) for path in paths]
- for cached_path in dircache.keys():
+ for cached_path in list(dircache.keys()):
for path in paths:
if isbase(cached_path, path):
dircache.pop(cached_path, None)
@@ -1083,7 +1083,7 @@ class FTPFS(FS):
else:
ftp.connect(self.host, self.port, self.timeout)
ftp.login(self.user, self.passwd, self.acct)
- except socket_error, e:
+ except socket_error as e:
raise RemoteConnectionError(str(e), details=e)
return ftp
@@ -1104,7 +1104,7 @@ class FTPFS(FS):
return '<FTPFS %s>' % self.host
def __unicode__(self):
- return u'<FTPFS %s>' % self.host
+ return '<FTPFS %s>' % self.host
@convert_os_errors
def _translate_exception(self, path, exception):
@@ -1225,7 +1225,7 @@ class FTPFS(FS):
raise ResourceNotFoundError(path)
if not self.isdir(path):
raise ResourceInvalidError(path)
- paths = self._readdir(path).keys()
+ paths = list(self._readdir(path).keys())
return self._listdir_helper(path, paths, wildcard, full, absolute, dirs_only, files_only)
@@ -1266,7 +1266,7 @@ class FTPFS(FS):
self.ftp.mkd(_encode(path))
except error_reply:
return
- except error_perm, e:
+ except error_perm as e:
if recursive or allow_recreate:
return
if str(e).split(' ', 1)[0]=='550':
@@ -1337,7 +1337,7 @@ class FTPFS(FS):
try:
self.refresh_dircache(dirname(src), dirname(dst))
self.ftp.rename(_encode(src), _encode(dst))
- except error_perm, exception:
+ except error_perm as exception:
code, message = str(exception).split(' ', 1)
if code == "550":
if not self.exists(dirname(dst)):
--- fs/httpfs.py.orig 2015-04-12 17:24:29 UTC
+++ fs/httpfs.py
@@ -10,8 +10,8 @@ from fs.path import normpath
from fs.errors import ResourceNotFoundError, UnsupportedError
from fs.filelike import FileWrapper
from fs import iotools
-
-from urllib2 import urlopen, URLError
+from urllib.request import urlopen
+from urllib.error import URLError
from datetime import datetime
@@ -50,9 +50,9 @@ class HTTPFS(FS):
url = self._make_url(path)
try:
f = urlopen(url)
- except URLError, e:
+ except URLError as e:
raise ResourceNotFoundError(path, details=e)
- except OSError, e:
+ except OSError as e:
raise ResourceNotFoundError(path, details=e)
return FileWrapper(f)
--- fs/iotools.py.orig 2022-03-04 17:14:43 UTC
+++ fs/iotools.py
@@ -1,6 +1,6 @@
-from __future__ import unicode_literals
-from __future__ import print_function
+
+
from fs import SEEK_SET, SEEK_CUR, SEEK_END
import io
@@ -178,7 +178,7 @@ def make_bytes_io(data, encoding=None, errors=None):
if hasattr(data, 'mode') and 'b' in data.mode:
# It's already a binary file
return data
- if not isinstance(data, basestring):
+ if not isinstance(data, str):
# It's a file, but we don't know if its binary
# TODO: Is there a better way than reading the entire file?
data = data.read() or b''
--- fs/memoryfs.py.orig 2022-03-04 17:14:43 UTC
+++ fs/memoryfs.py
@@ -78,10 +78,10 @@ class MemoryFile(object):
return "<MemoryFile in %s %s>" % (self.memory_fs, self.path)
def __repr__(self):
- return u"<MemoryFile in %s %s>" % (self.memory_fs, self.path)
+ return "<MemoryFile in %s %s>" % (self.memory_fs, self.path)
def __unicode__(self):
- return u"<MemoryFile in %s %s>" % (self.memory_fs, self.path)
+ return "<MemoryFile in %s %s>" % (self.memory_fs, self.path)
def __del__(self):
if not self.closed:
@@ -101,7 +101,7 @@ class MemoryFile(object):
def next(self):
if 'r' not in self.mode and '+' not in self.mode:
raise IOError("File not open for reading")
- return self.mem_file.next()
+ return next(self.mem_file)
@seek_and_lock
def readline(self, *args, **kwargs):
@@ -218,7 +218,7 @@ class DirEntry(object):
if self.isfile():
return "<file %s>" % self.name
elif self.isdir():
- return "<dir %s>" % "".join("%s: %s" % (k, v.desc_contents()) for k, v in self.contents.iteritems())
+ return "<dir %s>" % "".join("%s: %s" % (k, v.desc_contents()) for k, v in self.contents.items())
def isdir(self):
return self.type == "dir"
@@ -559,10 +559,10 @@ class MemoryFS(FS):
raise ResourceNotFoundError(path)
if dir_entry.isfile():
raise ResourceInvalidError(path, msg="not a directory: %(path)s")
- paths = dir_entry.contents.keys()
+ paths = list(dir_entry.contents.keys())
for (i,p) in enumerate(paths):
- if not isinstance(p,unicode):
- paths[i] = unicode(p)
+ if not isinstance(p,str):
+ paths[i] = str(p)
return self._listdir_helper(path, paths, wildcard, full, absolute, dirs_only, files_only)
@synchronize
@@ -578,10 +578,10 @@ class MemoryFS(FS):
info['accessed_time'] = dir_entry.accessed_time
if dir_entry.isdir():
- info['st_mode'] = 0755 | stat.S_IFDIR
+ info['st_mode'] = 0o755 | stat.S_IFDIR
else:
info['size'] = len(dir_entry.data or b(''))
- info['st_mode'] = 0666 | stat.S_IFREG
+ info['st_mode'] = 0o666 | stat.S_IFREG
return info
@@ -671,12 +671,12 @@ class MemoryFS(FS):
@synchronize
def setxattr(self, path, key, value):
dir_entry = self._dir_entry(path)
- key = unicode(key)
+ key = str(key)
dir_entry.xattrs[key] = value
@synchronize
def getxattr(self, path, key, default=None):
- key = unicode(key)
+ key = str(key)
dir_entry = self._dir_entry(path)
return dir_entry.xattrs.get(key, default)
@@ -691,4 +691,4 @@ class MemoryFS(FS):
@synchronize
def listxattrs(self, path):
dir_entry = self._dir_entry(path)
- return dir_entry.xattrs.keys()
+ return list(dir_entry.xattrs.keys())
--- fs/mountfs.py.orig 2022-03-04 17:14:43 UTC
+++ fs/mountfs.py
@@ -61,7 +61,7 @@ class DirMount(object):
return "<DirMount %s, %s>" % (self.path, self.fs)
def __unicode__(self):
- return u"<DirMount %s, %s>" % (self.path, self.fs)
+ return "<DirMount %s, %s>" % (self.path, self.fs)
class FileMount(object):
@@ -90,12 +90,12 @@ class MountFS(FS):
self.mount_tree = PathMap()
def __str__(self):
- return "<%s [%s]>" % (self.__class__.__name__,self.mount_tree.items(),)
+ return "<%s [%s]>" % (self.__class__.__name__,list(self.mount_tree.items()),)
__repr__ = __str__
def __unicode__(self):
- return u"<%s [%s]>" % (self.__class__.__name__,self.mount_tree.items(),)
+ return "<%s [%s]>" % (self.__class__.__name__,list(self.mount_tree.items()),)
def _delegate(self, path):
path = abspath(normpath(path))
@@ -119,7 +119,7 @@ class MountFS(FS):
return self, "/", path
try:
- self.mount_tree.iternames(path).next()
+ next(self.mount_tree.iternames(path))
except StopIteration:
return None, None, None
else:
@@ -129,7 +129,7 @@ class MountFS(FS):
def close(self):
# Explicitly closes children if requested
if self.auto_close:
- for mount in self.mount_tree.itervalues():
+ for mount in self.mount_tree.values():
mount.fs.close()
# Free references (which may incidently call the close method of the child filesystems)
self.mount_tree.clear()
--- fs/multifs.py.orig 2022-03-04 17:14:43 UTC
+++ fs/multifs.py
@@ -106,7 +106,7 @@ class MultiFS(FS):
@synchronize
def __unicode__(self):
- return u"<MultiFS: %s>" % ", ".join(unicode(fs) for fs in self.fs_sequence)
+ return "<MultiFS: %s>" % ", ".join(str(fs) for fs in self.fs_sequence)
def _get_priority(self, name):
return self.fs_priorities[name]
@@ -128,7 +128,7 @@ class MultiFS(FS):
def _priority_sort(self):
"""Sort filesystems by priority order"""
- priority_order = sorted(self.fs_lookup.keys(), key=lambda n: self.fs_priorities[n], reverse=True)
+ priority_order = sorted(list(self.fs_lookup.keys()), key=lambda n: self.fs_priorities[n], reverse=True)
self.fs_sequence = [self.fs_lookup[name] for name in priority_order]
@synchronize
@@ -214,7 +214,7 @@ class MultiFS(FS):
return self.writefs
for fs in self:
if fs.exists(path):
- for fs_name, fs_object in self.fs_lookup.iteritems():
+ for fs_name, fs_object in self.fs_lookup.items():
if fs is fs_object:
return fs_name, fs
raise ResourceNotFoundError(path, msg="Path does not map to any filesystem: %(path)s")
--- fs/opener.py.orig 2022-03-04 17:14:43 UTC
+++ fs/opener.py
@@ -72,7 +72,7 @@ from fs.filelike import FileWrapper
from os import getcwd
import os.path
import re
-from urlparse import urlparse
+from urllib.parse import urlparse
class OpenerError(Exception):
"""The base exception thrown by openers"""
@@ -794,7 +794,7 @@ example:
def get_fs(cls, registry, fs_name, fs_name_params, fs_path, writeable, create_dir):
from fs.mountfs import MountFS
- from ConfigParser import ConfigParser
+ from configparser import ConfigParser
cfg = ConfigParser()
if '#' in fs_path:
@@ -830,7 +830,7 @@ example:
def get_fs(cls, registry, fs_name, fs_name_params, fs_path, writeable, create_dir):
from fs.multifs import MultiFS
- from ConfigParser import ConfigParser
+ from configparser import ConfigParser
cfg = ConfigParser()
if '#' in fs_path:
--- fs/osfs/__init__.py.orig 2015-11-13 22:18:37 UTC
+++ fs/osfs/__init__.py
@@ -48,13 +48,13 @@ def _os_stat(path):
@convert_os_errors
-def _os_mkdir(name, mode=0777):
+def _os_mkdir(name, mode=0o777):
"""Replacement for os.mkdir that raises FSError subclasses."""
return os.mkdir(name, mode)
@convert_os_errors
-def _os_makedirs(name, mode=0777):
+def _os_makedirs(name, mode=0o777):
"""Replacement for os.makdirs that raises FSError subclasses.
This implementation also correctly handles win32 long filenames (those
@@ -71,7 +71,7 @@ def _os_makedirs(name, mode=0777):
if head and tail and not os.path.exists(head):
try:
_os_makedirs(head, mode)
- except OSError, e:
+ except OSError as e:
if e.errno != errno.EEXIST:
raise
if tail == os.curdir:
@@ -98,11 +98,11 @@ class OSFS(OSFSXAttrMixin, OSFSWatchMixin, FS):
'atomic.setcontents': False}
if platform.system() == 'Windows':
- _meta["invalid_path_chars"] = ''.join(chr(n) for n in xrange(31)) + '\\:*?"<>|'
+ _meta["invalid_path_chars"] = ''.join(chr(n) for n in range(31)) + '\\:*?"<>|'
else:
_meta["invalid_path_chars"] = '\0'
- def __init__(self, root_path, thread_synchronize=_thread_synchronize_default, encoding=None, create=False, dir_mode=0700, use_long_paths=True):
+ def __init__(self, root_path, thread_synchronize=_thread_synchronize_default, encoding=None, create=False, dir_mode=0o700, use_long_paths=True):
"""
Creates an FS object that represents the OS Filesystem under a given root path
@@ -124,13 +124,13 @@ class OSFS(OSFSXAttrMixin, OSFSWatchMixin, FS):
if sys.platform == "win32":
if use_long_paths and not root_path.startswith("\\\\?\\"):
if not root_path.startswith("\\"):
- root_path = u"\\\\?\\" + root_path
+ root_path = "\\\\?\\" + root_path
else:
# Explicitly mark UNC paths, seems to work better.
if root_path.startswith("\\\\"):
- root_path = u"\\\\?\\UNC\\" + root_path[2:]
+ root_path = "\\\\?\\UNC\\" + root_path[2:]
else:
- root_path = u"\\\\?" + root_path
+ root_path = "\\\\?" + root_path
# If it points at the root of a drive, it needs a trailing slash.
if len(root_path) == 6 and not root_path.endswith("\\"):
root_path = root_path + "\\"
@@ -155,16 +155,16 @@ class OSFS(OSFSXAttrMixin, OSFSWatchMixin, FS):
return "<OSFS: %r>" % self.root_path
def __unicode__(self):
- return u"<OSFS: %s>" % self.root_path
+ return "<OSFS: %s>" % self.root_path
def _decode_path(self, p):
- if isinstance(p, unicode):
+ if isinstance(p, str):
return p
return p.decode(self.encoding, 'replace')
def getsyspath(self, path, allow_none=False):
self.validatepath(path)
- path = relpath(normpath(path)).replace(u"/", os.sep)
+ path = relpath(normpath(path)).replace("/", os.sep)
path = os.path.join(self.root_path, path)
if not path.startswith(self.root_path):
raise PathError(path, msg="OSFS given path outside root: %(path)s")
@@ -234,7 +234,7 @@ class OSFS(OSFSXAttrMixin, OSFSWatchMixin, FS):
encoding = encoding or 'utf-8'
try:
return io.open(sys_path, mode=mode, buffering=buffering, encoding=encoding, errors=errors, newline=newline)
- except EnvironmentError, e:
+ except EnvironmentError as e:
# Win32 gives EACCES when opening a directory.
if sys.platform == "win32" and e.errno in (errno.EACCES,):
if self.isdir(path):
@@ -301,7 +301,7 @@ class OSFS(OSFSXAttrMixin, OSFSWatchMixin, FS):
sys_path = self.getsyspath(path)
try:
os.remove(sys_path)
- except OSError, e:
+ except OSError as e:
if e.errno == errno.EACCES and sys.platform == "win32":
# sometimes windows says this for attempts to remove a dir
if os.path.isdir(sys_path):
@@ -338,7 +338,7 @@ class OSFS(OSFSXAttrMixin, OSFSWatchMixin, FS):
path_dst = self.getsyspath(dst)
try:
os.rename(path_src, path_dst)
- except OSError, e:
+ except OSError as e:
if e.errno:
# POSIX rename() can rename over an empty directory but gives
# ENOTEMPTY if the dir has contents. Raise UnsupportedError
--- fs/osfs/watch_inotify.py.orig 2015-04-12 17:24:29 UTC
+++ fs/osfs/watch_inotify.py
@@ -18,7 +18,7 @@ from fs.watch import *
try:
import pyinotify
-except Exception, e:
+except Exception as e:
# pyinotify sometimes raises its own custom errors on import.
# How on earth are we supposed to catch them when we can't import them?
if isinstance(e,ImportError):
@@ -39,7 +39,7 @@ class OSFSWatchMixin(WatchableFSMixin):
def close(self):
super(OSFSWatchMixin,self).close()
self.notify_watchers(CLOSED)
- for watcher_list in self._watchers.values():
+ for watcher_list in list(self._watchers.values()):
for watcher in watcher_list:
self.del_watcher(watcher)
self.__watch_lock.acquire()
@@ -58,7 +58,7 @@ class OSFSWatchMixin(WatchableFSMixin):
w = super_add_watcher(callback,path,events,recursive)
w._pyinotify_id = None
syspath = self.getsyspath(path)
- if isinstance(syspath,unicode):
+ if isinstance(syspath,str):
syspath = syspath.encode(sys.getfilesystemencoding())
# Each watch gets its own WatchManager, since it's tricky to make
# a single WatchManager handle multiple callbacks with different
@@ -73,7 +73,7 @@ class OSFSWatchMixin(WatchableFSMixin):
kwds = dict(rec=recursive,auto_add=recursive,quiet=False)
try:
wids = wm.add_watch(syspath,evtmask,process_events,**kwds)
- except pyinotify.WatchManagerError, e:
+ except pyinotify.WatchManagerError as e:
raise OperationFailedError("add_watcher",details=e)
w._pyinotify_id = wids[syspath]
self.__watch_lock.acquire()
@@ -239,7 +239,7 @@ class SharedThreadedNotifier(threading.Thread):
while self.running:
try:
ready_fds = self._poller.poll()
- except _select_error, e:
+ except _select_error as e:
if e[0] != errno.EINTR:
raise
else:
--- fs/osfs/watch_win32.py.orig 2015-04-12 17:24:29 UTC
+++ fs/osfs/watch_win32.py
@@ -10,7 +10,7 @@ import os
import sys
import errno
import threading
-import Queue
+import queue
import stat
import struct
import ctypes
@@ -226,7 +226,7 @@ class WatchedDirectory(object):
ctypes.byref(self.result),len(self.result),
self.recursive,self.flags,None,
overlapped,None)
- except WindowsError, e:
+ except WindowsError as e:
self.error = e
self.close()
@@ -262,7 +262,7 @@ class WatchThread(threading.Thread):
self.watched_directories = {}
self.ready = threading.Event()
self._iocp = None
- self._new_watches = Queue.Queue()
+ self._new_watches = queue.Queue()
def close(self):
if not self.closed:
@@ -383,11 +383,11 @@ class WatchThread(threading.Thread):
hash(w),0)
w.post()
w.ready.set()
- except Queue.Empty:
+ except queue.Empty:
pass
finally:
self.ready.set()
- for w in self.watched_directories.itervalues():
+ for w in self.watched_directories.values():
w.close()
if self._iocp:
CloseHandle(self._iocp)
--- fs/osfs/xattrs.py.orig 2022-03-04 17:14:43 UTC
+++ fs/osfs/xattrs.py
@@ -49,7 +49,7 @@ if xattr is not None:
@convert_os_errors
def listxattrs(self, path):
- return xattr.xattr(self.getsyspath(path)).keys()
+ return list(xattr.xattr(self.getsyspath(path)).keys())
else:
--- fs/path.py.orig 2015-04-12 17:24:29 UTC
+++ fs/path.py
@@ -44,7 +44,7 @@ def normpath(path):
if not _requires_normalization(path):
return path.rstrip('/')
- prefix = u'/' if path.startswith('/') else u''
+ prefix = '/' if path.startswith('/') else ''
components = []
append = components.append
special = ('..', '.', '').__contains__
@@ -60,7 +60,7 @@ def normpath(path):
# causing a circular import.
from fs.errors import BackReferenceError
raise BackReferenceError('Too many backrefs in \'%s\'' % path)
- return prefix + u'/'.join(components)
+ return prefix + '/'.join(components)
if os.sep != '/':
@@ -100,11 +100,11 @@ def recursepath(path, reverse=False):
"""
if path in ('', '/'):
- return [u'/']
+ return ['/']
path = abspath(normpath(path)) + '/'
- paths = [u'/']
+ paths = ['/']
find = path.find
append = paths.append
pos = 1
@@ -133,7 +133,7 @@ def abspath(path):
"""
if not path.startswith('/'):
- return u'/' + path
+ return '/' + path
return path
@@ -176,7 +176,7 @@ def pathjoin(*paths):
absolute = True
relpaths.append(p)
- path = normpath(u"/".join(relpaths))
+ path = normpath("/".join(relpaths))
if absolute:
path = abspath(path)
return path
@@ -419,7 +419,7 @@ def relativefrom(base, path):
break
common += 1
- return u'/'.join([u'..'] * (len(base) - common) + path[common:])
+ return '/'.join(['..'] * (len(base) - common) + path[common:])
class PathMap(object):
@@ -559,7 +559,7 @@ class PathMap(object):
m = m[name]
except KeyError:
return
- for (nm, subm) in m.iteritems():
+ for (nm, subm) in m.items():
if not nm:
yield abspath(root)
else:
@@ -568,7 +568,7 @@ class PathMap(object):
yield subk
def __iter__(self):
- return self.iterkeys()
+ return iter(self.keys())
def keys(self,root="/"):
return list(self.iterkeys(root))
@@ -583,7 +583,7 @@ class PathMap(object):
m = m[name]
except KeyError:
return
- for (nm, subm) in m.iteritems():
+ for (nm, subm) in m.items():
if not nm:
yield subm
else:
@@ -604,7 +604,7 @@ class PathMap(object):
m = m[name]
except KeyError:
return
- for (nm, subm) in m.iteritems():
+ for (nm, subm) in m.items():
if not nm:
yield (abspath(normpath(root)), subm)
else:
@@ -627,7 +627,7 @@ class PathMap(object):
m = m[name]
except KeyError:
return
- for (nm, subm) in m.iteritems():
+ for (nm, subm) in m.items():
if nm and subm:
yield nm
@@ -651,9 +651,9 @@ def iswildcard(path):
return not _wild_chars.isdisjoint(path)
if __name__ == "__main__":
- print recursepath('a/b/c')
+ print(recursepath('a/b/c'))
- print relativefrom('/', '/foo')
- print relativefrom('/foo/bar', '/foo/baz')
- print relativefrom('/foo/bar/baz', '/foo/egg')
- print relativefrom('/foo/bar/baz/egg', '/foo/egg')
+ print(relativefrom('/', '/foo'))
+ print(relativefrom('/foo/bar', '/foo/baz'))
+ print(relativefrom('/foo/bar/baz', '/foo/egg'))
+ print(relativefrom('/foo/bar/baz/egg', '/foo/egg'))
--- fs/remote.py.orig 2015-04-12 17:24:29 UTC
+++ fs/remote.py
@@ -20,8 +20,8 @@ FS subclasses interfacing with a remote filesystem. T
"""
-from __future__ import with_statement
+
import time
import stat as statinfo
from errno import EINVAL
@@ -422,11 +422,11 @@ class CachedInfo(object):
self.has_full_children = other.has_full_children
@classmethod
def new_file_stub(cls):
- info = {"info" : 0700 | statinfo.S_IFREG}
+ info = {"info" : 0o700 | statinfo.S_IFREG}
return cls(info,has_full_info=False)
@classmethod
def new_dir_stub(cls):
- info = {"info" : 0700 | statinfo.S_IFDIR}
+ info = {"info" : 0o700 | statinfo.S_IFDIR}
return cls(info,has_full_info=False)
@@ -512,7 +512,7 @@ class CacheFSMixin(FS):
if self.max_cache_size is not None and old_ci is None:
while self.__cache_size >= self.max_cache_size:
try:
- to_del = iter(self.__cache).next()
+ to_del = next(iter(self.__cache))
except StopIteration:
break
else:
@@ -592,7 +592,7 @@ class CacheFSMixin(FS):
def isdir(self, path):
try:
- self.__cache.iternames(path).next()
+ next(self.__cache.iternames(path))
return True
except StopIteration:
pass
@@ -607,7 +607,7 @@ class CacheFSMixin(FS):
def isfile(self, path):
try:
- self.__cache.iternames(path).next()
+ next(self.__cache.iternames(path))
return False
except StopIteration:
pass
--- fs/remotefs.py.orig 2015-04-12 17:24:29 UTC
+++ fs/remotefs.py
@@ -1,5 +1,5 @@
# Work in Progress - Do not use
-from __future__ import with_statement
+
from fs.base import FS
from fs.expose.serve import packetstream
@@ -7,7 +7,7 @@ from collections import defaultdict
import threading
from threading import Lock, RLock
from json import dumps
-import Queue as queue
+import queue as queue
import socket
from six import b
@@ -35,12 +35,12 @@ class PacketHandler(threading.Thread):
while True:
data = read(1024*16)
if not data:
- print "No data"
+ print("No data")
break
- print "data", repr(data)
+ print("data", repr(data))
for header, payload in decoder.feed(data):
- print repr(header)
- print repr(payload)
+ print(repr(header))
+ print(repr(payload))
on_packet(header, payload)
def _new_call_id(self):
@@ -77,8 +77,8 @@ class PacketHandler(threading.Thread):
while True:
header, payload = queue.get()
- print repr(header)
- print repr(payload)
+ print(repr(header))
+ print(repr(payload))
if client_ref is not None and header.get('client_ref') != client_ref:
continue
break
@@ -167,9 +167,9 @@ class RemoteFS(FS):
def ping(self, msg):
call_id = self.packet_handler.send_packet({'type':'rpc', 'method':'ping'}, msg)
header, payload = self.packet_handler.get_packet(call_id)
- print "PING"
- print header
- print payload
+ print("PING")
+ print(header)
+ print(payload)
def close(self):
self.transport.close()
--- fs/rpcfs.py.orig 2015-04-12 17:24:29 UTC
+++ fs/rpcfs.py
@@ -8,7 +8,7 @@ class from the :mod:`fs.expose.xmlrpc` module.
"""
-import xmlrpclib
+import xmlrpc.client
import socket
import base64
@@ -28,11 +28,11 @@ def re_raise_faults(func):
def wrapper(*args, **kwds):
try:
return func(*args, **kwds)
- except (xmlrpclib.Fault), f:
+ except (xmlrpc.client.Fault) as f:
#raise
# Make sure it's in a form we can handle
- print f.faultString
+ print(f.faultString)
bits = f.faultString.split(" ")
if bits[0] not in ["<type", "<class"]:
raise f
@@ -41,7 +41,7 @@ def re_raise_faults(func):
cls = bits[0]
msg = ">:".join(bits[1:])
cls = cls.strip('\'')
- print "-" + cls
+ print("-" + cls)
cls = _object_by_name(cls)
# Re-raise using the remainder of the fault code as message
if cls:
@@ -50,7 +50,7 @@ def re_raise_faults(func):
else:
raise cls(msg)
raise f
- except socket.error, e:
+ except socket.error as e:
raise RemoteConnectionError(str(e), details=e)
return wrapper
@@ -126,9 +126,9 @@ class RPCFS(FS):
kwds = dict(allow_none=True, use_datetime=True)
if self._transport is not None:
- proxy = xmlrpclib.ServerProxy(self.uri, self._transport, **kwds)
+ proxy = xmlrpc.client.ServerProxy(self.uri, self._transport, **kwds)
else:
- proxy = xmlrpclib.ServerProxy(self.uri, **kwds)
+ proxy = xmlrpc.client.ServerProxy(self.uri, **kwds)
return ReRaiseFaults(proxy)
@@ -170,7 +170,7 @@ class RPCFS(FS):
meta = self.proxy.getmeta(meta_name)
else:
meta = self.proxy.getmeta_default(meta_name, default)
- if isinstance(meta, basestring):
+ if isinstance(meta, str):
# To allow transport of meta with invalid xml chars (like null)
meta = self.encode_path(meta)
return meta
@@ -185,7 +185,7 @@ class RPCFS(FS):
# TODO: chunked transport of large files
epath = self.encode_path(path)
if "w" in mode:
- self.proxy.set_contents(epath, xmlrpclib.Binary(b("")))
+ self.proxy.set_contents(epath, xmlrpc.client.Binary(b("")))
if "r" in mode or "a" in mode or "+" in mode:
try:
data = self.proxy.get_contents(epath, "rb").data
@@ -194,7 +194,7 @@ class RPCFS(FS):
raise ResourceNotFoundError(path)
if not self.isdir(dirname(path)):
raise ParentDirectoryMissingError(path)
- self.proxy.set_contents(path, xmlrpclib.Binary(b("")))
+ self.proxy.set_contents(path, xmlrpc.client.Binary(b("")))
else:
data = b("")
f = StringIO(data)
@@ -210,7 +210,7 @@ class RPCFS(FS):
self._lock.acquire()
try:
oldflush()
- self.proxy.set_contents(epath, xmlrpclib.Binary(f.getvalue()))
+ self.proxy.set_contents(epath, xmlrpc.client.Binary(f.getvalue()))
finally:
self._lock.release()
--- fs/s3fs.py.orig 2015-11-13 16:37:26 UTC
+++ fs/s3fs.py
@@ -41,7 +41,7 @@ else:
try:
return self._map[(threading.currentThread(),attr)]
except KeyError:
- raise AttributeError, attr
+ raise AttributeError(attr)
def __setattr__(self,attr,value):
self._map[(threading.currentThread(),attr)] = value
@@ -106,7 +106,7 @@ class S3FS(FS):
prefix = prefix[1:]
if not prefix.endswith(separator) and prefix != "":
prefix = prefix + separator
- if isinstance(prefix,unicode):
+ if isinstance(prefix,str):
prefix = prefix.encode("utf8")
if aws_access_key is None:
if "AWS_ACCESS_KEY_ID" not in os.environ:
@@ -149,7 +149,7 @@ class S3FS(FS):
b.get_key(self._prefix)
else:
b = self._s3conn.get_bucket(self._bucket_name, validate=1)
- except S3ResponseError, e:
+ except S3ResponseError as e:
if "404 Not Found" not in str(e):
raise
b = self._s3conn.create_bucket(self._bucket_name)
@@ -179,7 +179,7 @@ class S3FS(FS):
s3path = self._prefix + path
if s3path and s3path[-1] == self._separator:
s3path = s3path[:-1]
- if isinstance(s3path,unicode):
+ if isinstance(s3path,str):
s3path = s3path.encode("utf8")
return s3path
@@ -220,9 +220,9 @@ class S3FS(FS):
def _sync_set_contents(self,key,contents):
"""Synchronously set the contents of a key."""
- if isinstance(key,basestring):
+ if isinstance(key,str):
key = self._s3bukt.new_key(key)
- if isinstance(contents,basestring):
+ if isinstance(contents,str):
key.set_contents_from_string(contents)
elif hasattr(contents,"md5"):
hexmd5 = contents.md5
@@ -338,7 +338,7 @@ class S3FS(FS):
# the directory itself, which other tools may not create.
ks = self._s3bukt.list(prefix=s3path,delimiter=self._separator)
try:
- iter(ks).next()
+ next(iter(ks))
except StopIteration:
return False
else:
@@ -398,7 +398,7 @@ class S3FS(FS):
# Skip over the entry for the directory itself, if it exists
name = self._uns3path(k.name,s3path)
if name != "":
- if not isinstance(name,unicode):
+ if not isinstance(name,str):
name = name.decode("utf8")
if name.endswith(self._separator):
name = name[:-1]
@@ -572,14 +572,14 @@ class S3FS(FS):
else:
info["name"] = basename(self._uns3key(k.name))
if self._key_is_dir(key):
- info["st_mode"] = 0700 | statinfo.S_IFDIR
+ info["st_mode"] = 0o700 | statinfo.S_IFDIR
else:
- info["st_mode"] = 0700 | statinfo.S_IFREG
+ info["st_mode"] = 0o700 | statinfo.S_IFREG
if hasattr(key,"size"):
info['size'] = int(key.size)
etag = getattr(key,"etag",None)
if etag is not None:
- if isinstance(etag,unicode):
+ if isinstance(etag,str):
etag = etag.encode("utf8")
info['etag'] = etag.strip('"').strip("'")
if hasattr(key,"last_modified"):
@@ -632,7 +632,7 @@ class S3FS(FS):
s3path_src = self._s3path(src)
try:
self._s3bukt.copy_key(s3path_dst,self._bucket_name,s3path_src)
- except S3ResponseError, e:
+ except S3ResponseError as e:
if "404 Not Found" in str(e):
msg = "Source is not a file: %(path)s"
raise ResourceInvalidError(src, msg=msg)
@@ -663,7 +663,7 @@ class S3FS(FS):
for k in self._s3bukt.list(prefix=prefix):
name = relpath(self._uns3path(k.name,prefix))
if name != "":
- if not isinstance(name,unicode):
+ if not isinstance(name,str):
name = name.decode("utf8")
if not k.name.endswith(self._separator):
if wildcard is not None:
@@ -691,7 +691,7 @@ class S3FS(FS):
for k in self._s3bukt.list(prefix=prefix):
name = relpath(self._uns3path(k.name,prefix))
if name != "":
- if not isinstance(name,unicode):
+ if not isinstance(name,str):
name = name.decode("utf8")
if wildcard is not None:
if callable(wildcard):
@@ -718,7 +718,7 @@ class S3FS(FS):
for k in self._s3bukt.list(prefix=prefix):
name = relpath(self._uns3path(k.name,prefix))
if name != "":
- if not isinstance(name,unicode):
+ if not isinstance(name,str):
name = name.decode("utf8")
if not k.name.endswith(self._separator):
if wildcard is not None:
@@ -733,16 +733,16 @@ class S3FS(FS):
def _eq_utf8(name1,name2):
- if isinstance(name1,unicode):
+ if isinstance(name1,str):
name1 = name1.encode("utf8")
- if isinstance(name2,unicode):
+ if isinstance(name2,str):
name2 = name2.encode("utf8")
return name1 == name2
def _startswith_utf8(name1,name2):
- if isinstance(name1,unicode):
+ if isinstance(name1,str):
name1 = name1.encode("utf8")
- if isinstance(name2,unicode):
+ if isinstance(name2,str):
name2 = name2.encode("utf8")
return name1.startswith(name2)
--- fs/sftpfs.py.orig 2015-04-12 17:24:29 UTC
+++ fs/sftpfs.py
@@ -131,7 +131,7 @@ class SFTPFS(FS):
self._client = None
self.hostname = None
- if isinstance(connection, basestring):
+ if isinstance(connection, str):
self.hostname = connection
elif isinstance(connection, tuple):
self.hostname = '%s:%s' % connection
@@ -183,7 +183,7 @@ class SFTPFS(FS):
if not connection.is_authenticated():
try:
connection.auth_none(username)
- except paramiko.BadAuthenticationType, e:
+ except paramiko.BadAuthenticationType as e:
self.close()
allowed = ', '.join(e.allowed_types)
raise RemoteConnectionError(msg='no auth - server requires one of the following: %s' % allowed, details=e)
@@ -192,14 +192,14 @@ class SFTPFS(FS):
self.close()
raise RemoteConnectionError(msg='no auth')
- except paramiko.SSHException, e:
+ except paramiko.SSHException as e:
self.close()
raise RemoteConnectionError(msg='SSH exception (%s)' % str(e), details=e)
self._transport = connection
def __unicode__(self):
- return u'<SFTPFS: %s>' % self.desc('/')
+ return '<SFTPFS: %s>' % self.desc('/')
@classmethod
def _agent_auth(cls, transport, username):
@@ -307,7 +307,7 @@ class SFTPFS(FS):
self.closed = True
def _normpath(self, path):
- if not isinstance(path, unicode):
+ if not isinstance(path, str):
path = path.decode(self.encoding)
npath = pathjoin(self.root_path, relpath(normpath(path)))
if not isprefix(self.root_path, npath):
@@ -355,10 +355,10 @@ class SFTPFS(FS):
def desc(self, path):
npath = self._normpath(path)
if self.hostname:
- return u'sftp://%s%s' % (self.hostname, path)
+ return 'sftp://%s%s' % (self.hostname, path)
else:
addr, port = self._transport.getpeername()
- return u'sftp://%s:%i%s' % (addr, port, self.client.normalize(npath))
+ return 'sftp://%s:%i%s' % (addr, port, self.client.normalize(npath))
@synchronize
@convert_os_errors
@@ -368,7 +368,7 @@ class SFTPFS(FS):
npath = self._normpath(path)
try:
self.client.stat(npath)
- except IOError, e:
+ except IOError as e:
if getattr(e,"errno",None) == ENOENT:
return False
raise
@@ -382,7 +382,7 @@ class SFTPFS(FS):
npath = self._normpath(path)
try:
stat = self.client.stat(npath)
- except IOError, e:
+ except IOError as e:
if getattr(e,"errno",None) == ENOENT:
return False
raise
@@ -394,7 +394,7 @@ class SFTPFS(FS):
npath = self._normpath(path)
try:
stat = self.client.stat(npath)
- except IOError, e:
+ except IOError as e:
if getattr(e,"errno",None) == ENOENT:
return False
raise
@@ -409,10 +409,10 @@ class SFTPFS(FS):
if dirs_only or files_only:
attrs = self.client.listdir_attr(npath)
attrs_map = dict((a.filename, a) for a in attrs)
- paths = list(attrs_map.iterkeys())
+ paths = list(attrs_map.keys())
else:
paths = self.client.listdir(npath)
- except IOError, e:
+ except IOError as e:
if getattr(e,"errno",None) == ENOENT:
if self.isfile(path):
raise ResourceInvalidError(path,msg="Can't list directory contents of a file: %(path)s")
@@ -424,19 +424,19 @@ class SFTPFS(FS):
if attrs_map:
if dirs_only:
filter_paths = []
- for apath, attr in attrs_map.iteritems():
+ for apath, attr in attrs_map.items():
if isdir(self, path, attr.__dict__):
filter_paths.append(apath)
paths = filter_paths
elif files_only:
filter_paths = []
- for apath, attr in attrs_map.iteritems():
+ for apath, attr in attrs_map.items():
if isfile(self, apath, attr.__dict__):
filter_paths.append(apath)
paths = filter_paths
for (i,p) in enumerate(paths):
- if not isinstance(p,unicode):
+ if not isinstance(p,str):
paths[i] = p.decode(self.encoding)
return self._listdir_helper(path, paths, wildcard, full, absolute, False, False)
@@ -448,8 +448,8 @@ class SFTPFS(FS):
try:
attrs = self.client.listdir_attr(npath)
attrs_map = dict((a.filename, a) for a in attrs)
- paths = attrs_map.keys()
- except IOError, e:
+ paths = list(attrs_map.keys())
+ except IOError as e:
if getattr(e,"errno",None) == ENOENT:
if self.isfile(path):
raise ResourceInvalidError(path,msg="Can't list directory contents of a file: %(path)s")
@@ -460,19 +460,19 @@ class SFTPFS(FS):
if dirs_only:
filter_paths = []
- for path, attr in attrs_map.iteritems():
+ for path, attr in attrs_map.items():
if isdir(self, path, attr.__dict__):
filter_paths.append(path)
paths = filter_paths
elif files_only:
filter_paths = []
- for path, attr in attrs_map.iteritems():
+ for path, attr in attrs_map.items():
if isfile(self, path, attr.__dict__):
filter_paths.append(path)
paths = filter_paths
for (i, p) in enumerate(paths):
- if not isinstance(p, unicode):
+ if not isinstance(p, str):
paths[i] = p.decode(self.encoding)
def getinfo(p):
@@ -491,7 +491,7 @@ class SFTPFS(FS):
npath = self._normpath(path)
try:
self.client.mkdir(npath)
- except IOError, _e:
+ except IOError as _e:
# Error code is unreliable, try to figure out what went wrong
try:
stat = self.client.stat(npath)
@@ -519,7 +519,7 @@ class SFTPFS(FS):
npath = self._normpath(path)
try:
self.client.remove(npath)
- except IOError, e:
+ except IOError as e:
if getattr(e,"errno",None) == ENOENT:
raise ResourceNotFoundError(path)
elif self.isdir(path):
@@ -542,7 +542,7 @@ class SFTPFS(FS):
raise ResourceNotFoundError(path)
try:
self.client.rmdir(npath)
- except IOError, e:
+ except IOError as e:
if getattr(e,"errno",None) == ENOENT:
if self.isfile(path):
raise ResourceInvalidError(path,msg="Can't use removedir() on a file: %(path)s")
@@ -565,7 +565,7 @@ class SFTPFS(FS):
ndst = self._normpath(dst)
try:
self.client.rename(nsrc,ndst)
- except IOError, e:
+ except IOError as e:
if getattr(e,"errno",None) == ENOENT:
raise ResourceNotFoundError(src)
if not self.isdir(dirname(dst)):
@@ -581,7 +581,7 @@ class SFTPFS(FS):
self.remove(dst)
try:
self.client.rename(nsrc,ndst)
- except IOError, e:
+ except IOError as e:
if getattr(e,"errno",None) == ENOENT:
raise ResourceNotFoundError(src)
if self.exists(dst):
@@ -599,7 +599,7 @@ class SFTPFS(FS):
self.removedir(dst)
try:
self.client.rename(nsrc,ndst)
- except IOError, e:
+ except IOError as e:
if getattr(e,"errno",None) == ENOENT:
raise ResourceNotFoundError(src)
if self.exists(dst):
@@ -612,7 +612,7 @@ class SFTPFS(FS):
@classmethod
def _extract_info(cls, stats):
fromtimestamp = datetime.datetime.fromtimestamp
- info = dict((k, v) for k, v in stats.iteritems() if k in cls._info_vars and not k.startswith('_'))
+ info = dict((k, v) for k, v in stats.items() if k in cls._info_vars and not k.startswith('_'))
info['size'] = info['st_size']
ct = info.get('st_ctime')
if ct is not None:
--- fs/tempfs.py.orig 2015-04-12 17:24:29 UTC
+++ fs/tempfs.py
@@ -29,7 +29,7 @@ class TempFS(OSFS):
_meta['atomic.move'] = True
_meta['atomic.copy'] = True
- def __init__(self, identifier=None, temp_dir=None, dir_mode=0700, thread_synchronize=_thread_synchronize_default):
+ def __init__(self, identifier=None, temp_dir=None, dir_mode=0o700, thread_synchronize=_thread_synchronize_default):
"""Creates a temporary Filesystem
identifier -- A string that is included in the name of the temporary directory,
@@ -49,7 +49,7 @@ class TempFS(OSFS):
__str__ = __repr__
def __unicode__(self):
- return u'<TempFS: %s>' % self._temp_dir
+ return '<TempFS: %s>' % self._temp_dir
def __getstate__(self):
# If we are picking a TempFS, we want to preserve its contents,
--- fs/tests/__init__.py.orig 2015-11-13 22:33:26 UTC
+++ fs/tests/__init__.py
@@ -5,8 +5,8 @@
"""
-from __future__ import with_statement
+
# Send any output from the logging module to stdout, so it will
# be captured by nose and reported appropriately
import sys
@@ -61,7 +61,7 @@ class FSTestCases(object):
self.assertEqual(self.fs.validatepath('.foo'), None)
self.assertEqual(self.fs.validatepath('foo'), None)
self.assertEqual(self.fs.validatepath('foo/bar'), None)
- self.assert_(self.fs.isvalidpath('foo/bar'))
+ self.assertTrue(self.fs.isvalidpath('foo/bar'))
def test_tree(self):
"""Test tree print"""
@@ -79,8 +79,8 @@ class FSTestCases(object):
stupid_meta = 'thismetashouldnotexist!"r$$%^&&*()_+'
self.assertRaises(NoMetaError, self.fs.getmeta, stupid_meta)
self.assertFalse(self.fs.hasmeta(stupid_meta))
- self.assertEquals(None, self.fs.getmeta(stupid_meta, None))
- self.assertEquals(3.14, self.fs.getmeta(stupid_meta, 3.14))
+ self.assertEqual(None, self.fs.getmeta(stupid_meta, None))
+ self.assertEqual(3.14, self.fs.getmeta(stupid_meta, 3.14))
for meta_name in meta_names:
try:
meta = self.fs.getmeta(meta_name)
@@ -101,15 +101,15 @@ class FSTestCases(object):
except NoSysPathError:
pass
else:
- self.assertTrue(isinstance(syspath, unicode))
+ self.assertTrue(isinstance(syspath, str))
syspath = self.fs.getsyspath("/", allow_none=True)
if syspath is not None:
- self.assertTrue(isinstance(syspath, unicode))
+ self.assertTrue(isinstance(syspath, str))
def test_debug(self):
str(self.fs)
repr(self.fs)
- self.assert_(hasattr(self.fs, 'desc'))
+ self.assertTrue(hasattr(self.fs, 'desc'))
def test_open_on_directory(self):
self.fs.makedir("testdir")
@@ -132,20 +132,20 @@ class FSTestCases(object):
f.close()
self.assertTrue(self.check("test1.txt"))
f = self.fs.open("test1.txt", "rb")
- self.assertEquals(f.read(), b("testing"))
+ self.assertEqual(f.read(), b("testing"))
f.close()
f = self.fs.open("test1.txt", "wb")
f.write(b("test file overwrite"))
f.close()
self.assertTrue(self.check("test1.txt"))
f = self.fs.open("test1.txt", "rb")
- self.assertEquals(f.read(), b("test file overwrite"))
+ self.assertEqual(f.read(), b("test file overwrite"))
f.close()
def test_createfile(self):
test = b('now with content')
self.fs.createfile("test.txt")
- self.assert_(self.fs.exists("test.txt"))
+ self.assertTrue(self.fs.exists("test.txt"))
self.assertEqual(self.fs.getcontents("test.txt", "rb"), b(''))
self.fs.setcontents("test.txt", test)
self.fs.createfile("test.txt")
@@ -163,36 +163,36 @@ class FSTestCases(object):
def test_setcontents(self):
# setcontents() should accept both a string...
self.fs.setcontents("hello", b("world"))
- self.assertEquals(self.fs.getcontents("hello", "rb"), b("world"))
+ self.assertEqual(self.fs.getcontents("hello", "rb"), b("world"))
# ...and a file-like object
self.fs.setcontents("hello", StringIO(b("to you, good sir!")))
- self.assertEquals(self.fs.getcontents(
+ self.assertEqual(self.fs.getcontents(
"hello", "rb"), b("to you, good sir!"))
# setcontents() should accept both a string...
self.fs.setcontents("hello", b("world"), chunk_size=2)
- self.assertEquals(self.fs.getcontents("hello", "rb"), b("world"))
+ self.assertEqual(self.fs.getcontents("hello", "rb"), b("world"))
# ...and a file-like object
self.fs.setcontents("hello", StringIO(
b("to you, good sir!")), chunk_size=2)
- self.assertEquals(self.fs.getcontents(
+ self.assertEqual(self.fs.getcontents(
"hello", "rb"), b("to you, good sir!"))
self.fs.setcontents("hello", b(""))
- self.assertEquals(self.fs.getcontents("hello", "rb"), b(""))
+ self.assertEqual(self.fs.getcontents("hello", "rb"), b(""))
def test_setcontents_async(self):
# setcontents() should accept both a string...
self.fs.setcontents_async("hello", b("world")).wait()
- self.assertEquals(self.fs.getcontents("hello", "rb"), b("world"))
+ self.assertEqual(self.fs.getcontents("hello", "rb"), b("world"))
# ...and a file-like object
self.fs.setcontents_async("hello", StringIO(
b("to you, good sir!"))).wait()
- self.assertEquals(self.fs.getcontents("hello"), b("to you, good sir!"))
+ self.assertEqual(self.fs.getcontents("hello"), b("to you, good sir!"))
self.fs.setcontents_async("hello", b("world"), chunk_size=2).wait()
- self.assertEquals(self.fs.getcontents("hello", "rb"), b("world"))
+ self.assertEqual(self.fs.getcontents("hello", "rb"), b("world"))
# ...and a file-like object
self.fs.setcontents_async("hello", StringIO(
b("to you, good sir!")), chunk_size=2).wait()
- self.assertEquals(self.fs.getcontents(
+ self.assertEqual(self.fs.getcontents(
"hello", "rb"), b("to you, good sir!"))
def test_isdir_isfile(self):
@@ -214,19 +214,19 @@ class FSTestCases(object):
def test_listdir(self):
def check_unicode(items):
for item in items:
- self.assertTrue(isinstance(item, unicode))
- self.fs.setcontents(u"a", b(''))
+ self.assertTrue(isinstance(item, str))
+ self.fs.setcontents("a", b(''))
self.fs.setcontents("b", b(''))
self.fs.setcontents("foo", b(''))
self.fs.setcontents("bar", b(''))
# Test listing of the root directory
d1 = self.fs.listdir()
self.assertEqual(len(d1), 4)
- self.assertEqual(sorted(d1), [u"a", u"b", u"bar", u"foo"])
+ self.assertEqual(sorted(d1), ["a", "b", "bar", "foo"])
check_unicode(d1)
d1 = self.fs.listdir("")
self.assertEqual(len(d1), 4)
- self.assertEqual(sorted(d1), [u"a", u"b", u"bar", u"foo"])
+ self.assertEqual(sorted(d1), ["a", "b", "bar", "foo"])
check_unicode(d1)
d1 = self.fs.listdir("/")
self.assertEqual(len(d1), 4)
@@ -234,7 +234,7 @@ class FSTestCases(object):
# Test listing absolute paths
d2 = self.fs.listdir(absolute=True)
self.assertEqual(len(d2), 4)
- self.assertEqual(sorted(d2), [u"/a", u"/b", u"/bar", u"/foo"])
+ self.assertEqual(sorted(d2), ["/a", "/b", "/bar", "/foo"])
check_unicode(d2)
# Create some deeper subdirectories, to make sure their
# contents are not inadvertantly included
@@ -248,25 +248,25 @@ class FSTestCases(object):
dirs_only = self.fs.listdir(dirs_only=True)
files_only = self.fs.listdir(files_only=True)
contains_a = self.fs.listdir(wildcard="*a*")
- self.assertEqual(sorted(dirs_only), [u"p", u"q"])
- self.assertEqual(sorted(files_only), [u"a", u"b", u"bar", u"foo"])
- self.assertEqual(sorted(contains_a), [u"a", u"bar"])
+ self.assertEqual(sorted(dirs_only), ["p", "q"])
+ self.assertEqual(sorted(files_only), ["a", "b", "bar", "foo"])
+ self.assertEqual(sorted(contains_a), ["a", "bar"])
check_unicode(dirs_only)
check_unicode(files_only)
check_unicode(contains_a)
# Test listing a subdirectory
d3 = self.fs.listdir("p/1/2/3")
self.assertEqual(len(d3), 4)
- self.assertEqual(sorted(d3), [u"a", u"b", u"bar", u"foo"])
+ self.assertEqual(sorted(d3), ["a", "b", "bar", "foo"])
check_unicode(d3)
# Test listing a subdirectory with absoliute and full paths
d4 = self.fs.listdir("p/1/2/3", absolute=True)
self.assertEqual(len(d4), 4)
- self.assertEqual(sorted(d4), [u"/p/1/2/3/a", u"/p/1/2/3/b", u"/p/1/2/3/bar", u"/p/1/2/3/foo"])
+ self.assertEqual(sorted(d4), ["/p/1/2/3/a", "/p/1/2/3/b", "/p/1/2/3/bar", "/p/1/2/3/foo"])
check_unicode(d4)
d4 = self.fs.listdir("p/1/2/3", full=True)
self.assertEqual(len(d4), 4)
- self.assertEqual(sorted(d4), [u"p/1/2/3/a", u"p/1/2/3/b", u"p/1/2/3/bar", u"p/1/2/3/foo"])
+ self.assertEqual(sorted(d4), ["p/1/2/3/a", "p/1/2/3/b", "p/1/2/3/bar", "p/1/2/3/foo"])
check_unicode(d4)
# Test that appropriate errors are raised
self.assertRaises(ResourceNotFoundError, self.fs.listdir, "zebra")
@@ -275,32 +275,32 @@ class FSTestCases(object):
def test_listdirinfo(self):
def check_unicode(items):
for (nm, info) in items:
- self.assertTrue(isinstance(nm, unicode))
+ self.assertTrue(isinstance(nm, str))
def check_equal(items, target):
names = [nm for (nm, info) in items]
self.assertEqual(sorted(names), sorted(target))
- self.fs.setcontents(u"a", b(''))
+ self.fs.setcontents("a", b(''))
self.fs.setcontents("b", b(''))
self.fs.setcontents("foo", b(''))
self.fs.setcontents("bar", b(''))
# Test listing of the root directory
d1 = self.fs.listdirinfo()
self.assertEqual(len(d1), 4)
- check_equal(d1, [u"a", u"b", u"bar", u"foo"])
+ check_equal(d1, ["a", "b", "bar", "foo"])
check_unicode(d1)
d1 = self.fs.listdirinfo("")
self.assertEqual(len(d1), 4)
- check_equal(d1, [u"a", u"b", u"bar", u"foo"])
+ check_equal(d1, ["a", "b", "bar", "foo"])
check_unicode(d1)
d1 = self.fs.listdirinfo("/")
self.assertEqual(len(d1), 4)
- check_equal(d1, [u"a", u"b", u"bar", u"foo"])
+ check_equal(d1, ["a", "b", "bar", "foo"])
check_unicode(d1)
# Test listing absolute paths
d2 = self.fs.listdirinfo(absolute=True)
self.assertEqual(len(d2), 4)
- check_equal(d2, [u"/a", u"/b", u"/bar", u"/foo"])
+ check_equal(d2, ["/a", "/b", "/bar", "/foo"])
check_unicode(d2)
# Create some deeper subdirectories, to make sure their
# contents are not inadvertantly included
@@ -314,25 +314,25 @@ class FSTestCases(object):
dirs_only = self.fs.listdirinfo(dirs_only=True)
files_only = self.fs.listdirinfo(files_only=True)
contains_a = self.fs.listdirinfo(wildcard="*a*")
- check_equal(dirs_only, [u"p", u"q"])
- check_equal(files_only, [u"a", u"b", u"bar", u"foo"])
- check_equal(contains_a, [u"a", u"bar"])
+ check_equal(dirs_only, ["p", "q"])
+ check_equal(files_only, ["a", "b", "bar", "foo"])
+ check_equal(contains_a, ["a", "bar"])
check_unicode(dirs_only)
check_unicode(files_only)
check_unicode(contains_a)
# Test listing a subdirectory
d3 = self.fs.listdirinfo("p/1/2/3")
self.assertEqual(len(d3), 4)
- check_equal(d3, [u"a", u"b", u"bar", u"foo"])
+ check_equal(d3, ["a", "b", "bar", "foo"])
check_unicode(d3)
# Test listing a subdirectory with absoliute and full paths
d4 = self.fs.listdirinfo("p/1/2/3", absolute=True)
self.assertEqual(len(d4), 4)
- check_equal(d4, [u"/p/1/2/3/a", u"/p/1/2/3/b", u"/p/1/2/3/bar", u"/p/1/2/3/foo"])
+ check_equal(d4, ["/p/1/2/3/a", "/p/1/2/3/b", "/p/1/2/3/bar", "/p/1/2/3/foo"])
check_unicode(d4)
d4 = self.fs.listdirinfo("p/1/2/3", full=True)
self.assertEqual(len(d4), 4)
- check_equal(d4, [u"p/1/2/3/a", u"p/1/2/3/b", u"p/1/2/3/bar", u"p/1/2/3/foo"])
+ check_equal(d4, ["p/1/2/3/a", "p/1/2/3/b", "p/1/2/3/bar", "p/1/2/3/foo"])
check_unicode(d4)
# Test that appropriate errors are raised
self.assertRaises(ResourceNotFoundError, self.fs.listdirinfo, "zebra")
@@ -343,7 +343,7 @@ class FSTestCases(object):
self.fs.setcontents('b.txt', b('world'))
self.fs.makeopendir('foo').setcontents('c', b('123'))
sorted_walk = sorted([(d, sorted(fs)) for (d, fs) in self.fs.walk()])
- self.assertEquals(sorted_walk,
+ self.assertEqual(sorted_walk,
[("/", ["a.txt", "b.txt"]),
("/foo", ["c"])])
# When searching breadth-first, shallow entries come first
@@ -371,10 +371,10 @@ class FSTestCases(object):
self.fs.makeopendir('.svn').setcontents('ignored', b(''))
for dir_path, paths in self.fs.walk(wildcard='*.txt'):
for path in paths:
- self.assert_(path.endswith('.txt'))
+ self.assertTrue(path.endswith('.txt'))
for dir_path, paths in self.fs.walk(wildcard=lambda fn: fn.endswith('.txt')):
for path in paths:
- self.assert_(path.endswith('.txt'))
+ self.assertTrue(path.endswith('.txt'))
def test_walk_dir_wildcard(self):
self.fs.setcontents('a.txt', b('hello'))
@@ -383,35 +383,35 @@ class FSTestCases(object):
self.fs.makeopendir('.svn').setcontents('ignored', b(''))
for dir_path, paths in self.fs.walk(dir_wildcard=lambda fn: not fn.endswith('.svn')):
for path in paths:
- self.assert_('.svn' not in path)
+ self.assertTrue('.svn' not in path)
def test_walkfiles(self):
self.fs.makeopendir('bar').setcontents('a.txt', b('123'))
self.fs.makeopendir('foo').setcontents('b', b('123'))
- self.assertEquals(sorted(
+ self.assertEqual(sorted(
self.fs.walkfiles()), ["/bar/a.txt", "/foo/b"])
- self.assertEquals(sorted(self.fs.walkfiles(
+ self.assertEqual(sorted(self.fs.walkfiles(
dir_wildcard="*foo*")), ["/foo/b"])
- self.assertEquals(sorted(self.fs.walkfiles(
+ self.assertEqual(sorted(self.fs.walkfiles(
wildcard="*.txt")), ["/bar/a.txt"])
def test_walkdirs(self):
self.fs.makeopendir('bar').setcontents('a.txt', b('123'))
self.fs.makeopendir('foo').makeopendir(
"baz").setcontents('b', b('123'))
- self.assertEquals(sorted(self.fs.walkdirs()), [
+ self.assertEqual(sorted(self.fs.walkdirs()), [
"/", "/bar", "/foo", "/foo/baz"])
- self.assertEquals(sorted(self.fs.walkdirs(
+ self.assertEqual(sorted(self.fs.walkdirs(
wildcard="*foo*")), ["/", "/foo", "/foo/baz"])
def test_unicode(self):
- alpha = u"\N{GREEK SMALL LETTER ALPHA}"
- beta = u"\N{GREEK SMALL LETTER BETA}"
+ alpha = "\N{GREEK SMALL LETTER ALPHA}"
+ beta = "\N{GREEK SMALL LETTER BETA}"
self.fs.makedir(alpha)
self.fs.setcontents(alpha + "/a", b(''))
self.fs.setcontents(alpha + "/" + beta, b(''))
self.assertTrue(self.check(alpha))
- self.assertEquals(sorted(self.fs.listdir(alpha)), ["a", beta])
+ self.assertEqual(sorted(self.fs.listdir(alpha)), ["a", beta])
def test_makedir(self):
check = self.check
@@ -420,11 +420,11 @@ class FSTestCases(object):
self.assertRaises(
ParentDirectoryMissingError, self.fs.makedir, "a/b/c")
self.fs.makedir("a/b/c", recursive=True)
- self.assert_(check("a/b/c"))
+ self.assertTrue(check("a/b/c"))
self.fs.makedir("foo/bar/baz", recursive=True)
- self.assert_(check("foo/bar/baz"))
+ self.assertTrue(check("foo/bar/baz"))
self.fs.makedir("a/b/child")
- self.assert_(check("a/b/child"))
+ self.assertTrue(check("a/b/child"))
self.assertRaises(DestinationExistsError, self.fs.makedir, "/a/b")
self.fs.makedir("/a/b", allow_recreate=True)
self.fs.setcontents("/a/file", b(''))
@@ -446,30 +446,30 @@ class FSTestCases(object):
def test_removedir(self):
check = self.check
self.fs.makedir("a")
- self.assert_(check("a"))
+ self.assertTrue(check("a"))
self.fs.removedir("a")
self.assertRaises(ResourceNotFoundError, self.fs.removedir, "a")
- self.assert_(not check("a"))
+ self.assertTrue(not check("a"))
self.fs.makedir("a/b/c/d", recursive=True)
self.assertRaises(DirectoryNotEmptyError, self.fs.removedir, "a/b")
self.fs.removedir("a/b/c/d")
- self.assert_(not check("a/b/c/d"))
+ self.assertTrue(not check("a/b/c/d"))
self.fs.removedir("a/b/c")
- self.assert_(not check("a/b/c"))
+ self.assertTrue(not check("a/b/c"))
self.fs.removedir("a/b")
- self.assert_(not check("a/b"))
+ self.assertTrue(not check("a/b"))
# Test recursive removal of empty parent dirs
self.fs.makedir("foo/bar/baz", recursive=True)
self.fs.removedir("foo/bar/baz", recursive=True)
- self.assert_(not check("foo/bar/baz"))
- self.assert_(not check("foo/bar"))
- self.assert_(not check("foo"))
+ self.assertTrue(not check("foo/bar/baz"))
+ self.assertTrue(not check("foo/bar"))
+ self.assertTrue(not check("foo"))
self.fs.makedir("foo/bar/baz", recursive=True)
self.fs.setcontents("foo/file.txt", b("please don't delete me"))
self.fs.removedir("foo/bar/baz", recursive=True)
- self.assert_(not check("foo/bar/baz"))
- self.assert_(not check("foo/bar"))
- self.assert_(check("foo/file.txt"))
+ self.assertTrue(not check("foo/bar/baz"))
+ self.assertTrue(not check("foo/bar"))
+ self.assertTrue(check("foo/file.txt"))
# Ensure that force=True works as expected
self.fs.makedir("frollic/waggle", recursive=True)
self.fs.setcontents("frollic/waddle.txt", b("waddlewaddlewaddle"))
@@ -477,41 +477,41 @@ class FSTestCases(object):
self.assertRaises(
ResourceInvalidError, self.fs.removedir, "frollic/waddle.txt")
self.fs.removedir("frollic", force=True)
- self.assert_(not check("frollic"))
+ self.assertTrue(not check("frollic"))
# Test removing unicode dirs
- kappa = u"\N{GREEK CAPITAL LETTER KAPPA}"
+ kappa = "\N{GREEK CAPITAL LETTER KAPPA}"
self.fs.makedir(kappa)
- self.assert_(self.fs.isdir(kappa))
+ self.assertTrue(self.fs.isdir(kappa))
self.fs.removedir(kappa)
self.assertRaises(ResourceNotFoundError, self.fs.removedir, kappa)
- self.assert_(not self.fs.isdir(kappa))
+ self.assertTrue(not self.fs.isdir(kappa))
self.fs.makedir(pathjoin("test", kappa), recursive=True)
- self.assert_(check(pathjoin("test", kappa)))
+ self.assertTrue(check(pathjoin("test", kappa)))
self.fs.removedir("test", force=True)
- self.assert_(not check("test"))
+ self.assertTrue(not check("test"))
def test_rename(self):
check = self.check
# test renaming a file in the same directory
self.fs.setcontents("foo.txt", b("Hello, World!"))
- self.assert_(check("foo.txt"))
+ self.assertTrue(check("foo.txt"))
self.fs.rename("foo.txt", "bar.txt")
- self.assert_(check("bar.txt"))
- self.assert_(not check("foo.txt"))
+ self.assertTrue(check("bar.txt"))
+ self.assertTrue(not check("foo.txt"))
# test renaming a directory in the same directory
self.fs.makedir("dir_a")
self.fs.setcontents("dir_a/test.txt", b("testerific"))
- self.assert_(check("dir_a"))
+ self.assertTrue(check("dir_a"))
self.fs.rename("dir_a", "dir_b")
- self.assert_(check("dir_b"))
- self.assert_(check("dir_b/test.txt"))
- self.assert_(not check("dir_a/test.txt"))
- self.assert_(not check("dir_a"))
+ self.assertTrue(check("dir_b"))
+ self.assertTrue(check("dir_b/test.txt"))
+ self.assertTrue(not check("dir_a/test.txt"))
+ self.assertTrue(not check("dir_a"))
# test renaming a file into a different directory
self.fs.makedir("dir_a")
self.fs.rename("dir_b/test.txt", "dir_a/test.txt")
- self.assert_(not check("dir_b/test.txt"))
- self.assert_(check("dir_a/test.txt"))
+ self.assertTrue(not check("dir_b/test.txt"))
+ self.assertTrue(check("dir_a/test.txt"))
# test renaming a file into a non-existent directory
self.assertRaises(ParentDirectoryMissingError,
self.fs.rename, "dir_a/test.txt", "nonexistent/test.txt")
@@ -530,7 +530,7 @@ class FSTestCases(object):
test_str = b("Hello, World!")
self.fs.setcontents("info.txt", test_str)
info = self.fs.getinfo("info.txt")
- for k, v in info.iteritems():
+ for k, v in info.items():
self.assertEqual(self.fs.getinfokeys('info.txt', k), {k: v})
test_info = {}
@@ -562,26 +562,26 @@ class FSTestCases(object):
self.fs.makedir("foo/bar", recursive=True)
makefile("foo/bar/a.txt")
- self.assert_(check("foo/bar/a.txt"))
- self.assert_(checkcontents("foo/bar/a.txt"))
+ self.assertTrue(check("foo/bar/a.txt"))
+ self.assertTrue(checkcontents("foo/bar/a.txt"))
self.fs.move("foo/bar/a.txt", "foo/b.txt")
- self.assert_(not check("foo/bar/a.txt"))
- self.assert_(check("foo/b.txt"))
- self.assert_(checkcontents("foo/b.txt"))
+ self.assertTrue(not check("foo/bar/a.txt"))
+ self.assertTrue(check("foo/b.txt"))
+ self.assertTrue(checkcontents("foo/b.txt"))
self.fs.move("foo/b.txt", "c.txt")
- self.assert_(not check("foo/b.txt"))
- self.assert_(check("/c.txt"))
- self.assert_(checkcontents("/c.txt"))
+ self.assertTrue(not check("foo/b.txt"))
+ self.assertTrue(check("/c.txt"))
+ self.assertTrue(checkcontents("/c.txt"))
makefile("foo/bar/a.txt")
self.assertRaises(
DestinationExistsError, self.fs.move, "foo/bar/a.txt", "/c.txt")
- self.assert_(check("foo/bar/a.txt"))
- self.assert_(check("/c.txt"))
+ self.assertTrue(check("foo/bar/a.txt"))
+ self.assertTrue(check("/c.txt"))
self.fs.move("foo/bar/a.txt", "/c.txt", overwrite=True)
- self.assert_(not check("foo/bar/a.txt"))
- self.assert_(check("/c.txt"))
+ self.assertTrue(not check("foo/bar/a.txt"))
+ self.assertTrue(check("/c.txt"))
def test_movedir(self):
check = self.check
@@ -602,29 +602,29 @@ class FSTestCases(object):
self.fs.movedir("a", "copy of a")
- self.assert_(self.fs.isdir("copy of a"))
- self.assert_(check("copy of a/1.txt"))
- self.assert_(check("copy of a/2.txt"))
- self.assert_(check("copy of a/3.txt"))
- self.assert_(check("copy of a/foo/bar/baz.txt"))
+ self.assertTrue(self.fs.isdir("copy of a"))
+ self.assertTrue(check("copy of a/1.txt"))
+ self.assertTrue(check("copy of a/2.txt"))
+ self.assertTrue(check("copy of a/3.txt"))
+ self.assertTrue(check("copy of a/foo/bar/baz.txt"))
- self.assert_(not check("a/1.txt"))
- self.assert_(not check("a/2.txt"))
- self.assert_(not check("a/3.txt"))
- self.assert_(not check("a/foo/bar/baz.txt"))
- self.assert_(not check("a/foo/bar"))
- self.assert_(not check("a/foo"))
- self.assert_(not check("a"))
+ self.assertTrue(not check("a/1.txt"))
+ self.assertTrue(not check("a/2.txt"))
+ self.assertTrue(not check("a/3.txt"))
+ self.assertTrue(not check("a/foo/bar/baz.txt"))
+ self.assertTrue(not check("a/foo/bar"))
+ self.assertTrue(not check("a/foo"))
+ self.assertTrue(not check("a"))
self.fs.makedir("a")
self.assertRaises(
DestinationExistsError, self.fs.movedir, "copy of a", "a")
self.fs.movedir("copy of a", "a", overwrite=True)
- self.assert_(not check("copy of a"))
- self.assert_(check("a/1.txt"))
- self.assert_(check("a/2.txt"))
- self.assert_(check("a/3.txt"))
- self.assert_(check("a/foo/bar/baz.txt"))
+ self.assertTrue(not check("copy of a"))
+ self.assertTrue(check("a/1.txt"))
+ self.assertTrue(check("a/2.txt"))
+ self.assertTrue(check("a/3.txt"))
+ self.assertTrue(check("a/foo/bar/baz.txt"))
def test_cant_copy_from_os(self):
sys_executable = os.path.abspath(os.path.realpath(sys.executable))
@@ -645,28 +645,28 @@ class FSTestCases(object):
self.fs.makedir("foo/bar", recursive=True)
makefile("foo/bar/a.txt")
- self.assert_(check("foo/bar/a.txt"))
- self.assert_(checkcontents("foo/bar/a.txt"))
+ self.assertTrue(check("foo/bar/a.txt"))
+ self.assertTrue(checkcontents("foo/bar/a.txt"))
# import rpdb2; rpdb2.start_embedded_debugger('password');
self.fs.copy("foo/bar/a.txt", "foo/b.txt")
- self.assert_(check("foo/bar/a.txt"))
- self.assert_(check("foo/b.txt"))
- self.assert_(checkcontents("foo/bar/a.txt"))
- self.assert_(checkcontents("foo/b.txt"))
+ self.assertTrue(check("foo/bar/a.txt"))
+ self.assertTrue(check("foo/b.txt"))
+ self.assertTrue(checkcontents("foo/bar/a.txt"))
+ self.assertTrue(checkcontents("foo/b.txt"))
self.fs.copy("foo/b.txt", "c.txt")
- self.assert_(check("foo/b.txt"))
- self.assert_(check("/c.txt"))
- self.assert_(checkcontents("/c.txt"))
+ self.assertTrue(check("foo/b.txt"))
+ self.assertTrue(check("/c.txt"))
+ self.assertTrue(checkcontents("/c.txt"))
makefile("foo/bar/a.txt", b("different contents"))
- self.assert_(checkcontents("foo/bar/a.txt", b("different contents")))
+ self.assertTrue(checkcontents("foo/bar/a.txt", b("different contents")))
self.assertRaises(
DestinationExistsError, self.fs.copy, "foo/bar/a.txt", "/c.txt")
- self.assert_(checkcontents("/c.txt"))
+ self.assertTrue(checkcontents("/c.txt"))
self.fs.copy("foo/bar/a.txt", "/c.txt", overwrite=True)
- self.assert_(checkcontents("foo/bar/a.txt", b("different contents")))
- self.assert_(checkcontents("/c.txt", b("different contents")))
+ self.assertTrue(checkcontents("foo/bar/a.txt", b("different contents")))
+ self.assertTrue(checkcontents("/c.txt", b("different contents")))
def test_copydir(self):
check = self.check
@@ -690,24 +690,24 @@ class FSTestCases(object):
makefile("a/foo/bar/baz.txt")
self.fs.copydir("a", "copy of a")
- self.assert_(check("copy of a/1.txt"))
- self.assert_(check("copy of a/2.txt"))
- self.assert_(check("copy of a/3.txt"))
- self.assert_(check("copy of a/foo/bar/baz.txt"))
+ self.assertTrue(check("copy of a/1.txt"))
+ self.assertTrue(check("copy of a/2.txt"))
+ self.assertTrue(check("copy of a/3.txt"))
+ self.assertTrue(check("copy of a/foo/bar/baz.txt"))
checkcontents("copy of a/1.txt")
- self.assert_(check("a/1.txt"))
- self.assert_(check("a/2.txt"))
- self.assert_(check("a/3.txt"))
- self.assert_(check("a/foo/bar/baz.txt"))
+ self.assertTrue(check("a/1.txt"))
+ self.assertTrue(check("a/2.txt"))
+ self.assertTrue(check("a/3.txt"))
+ self.assertTrue(check("a/foo/bar/baz.txt"))
checkcontents("a/1.txt")
self.assertRaises(DestinationExistsError, self.fs.copydir, "a", "b")
self.fs.copydir("a", "b", overwrite=True)
- self.assert_(check("b/1.txt"))
- self.assert_(check("b/2.txt"))
- self.assert_(check("b/3.txt"))
- self.assert_(check("b/foo/bar/baz.txt"))
+ self.assertTrue(check("b/1.txt"))
+ self.assertTrue(check("b/2.txt"))
+ self.assertTrue(check("b/3.txt"))
+ self.assertTrue(check("b/foo/bar/baz.txt"))
checkcontents("b/1.txt")
def test_copydir_with_dotfile(self):
@@ -724,13 +724,13 @@ class FSTestCases(object):
makefile("a/.hidden.txt")
self.fs.copydir("a", "copy of a")
- self.assert_(check("copy of a/1.txt"))
- self.assert_(check("copy of a/2.txt"))
- self.assert_(check("copy of a/.hidden.txt"))
+ self.assertTrue(check("copy of a/1.txt"))
+ self.assertTrue(check("copy of a/2.txt"))
+ self.assertTrue(check("copy of a/.hidden.txt"))
- self.assert_(check("a/1.txt"))
- self.assert_(check("a/2.txt"))
- self.assert_(check("a/.hidden.txt"))
+ self.assertTrue(check("a/1.txt"))
+ self.assertTrue(check("a/2.txt"))
+ self.assertTrue(check("a/.hidden.txt"))
def test_readwriteappendseek(self):
def checkcontents(path, check_contents):
@@ -743,7 +743,7 @@ class FSTestCases(object):
all_strings = b("").join(test_strings)
self.assertRaises(ResourceNotFoundError, self.fs.open, "a.txt", "r")
- self.assert_(not self.fs.exists("a.txt"))
+ self.assertTrue(not self.fs.exists("a.txt"))
f1 = self.fs.open("a.txt", "wb")
pos = 0
for s in test_strings:
@@ -751,26 +751,26 @@ class FSTestCases(object):
pos += len(s)
self.assertEqual(pos, f1.tell())
f1.close()
- self.assert_(self.fs.exists("a.txt"))
- self.assert_(checkcontents("a.txt", all_strings))
+ self.assertTrue(self.fs.exists("a.txt"))
+ self.assertTrue(checkcontents("a.txt", all_strings))
f2 = self.fs.open("b.txt", "wb")
f2.write(test_strings[0])
f2.close()
- self.assert_(checkcontents("b.txt", test_strings[0]))
+ self.assertTrue(checkcontents("b.txt", test_strings[0]))
f3 = self.fs.open("b.txt", "ab")
# On win32, tell() gives zero until you actually write to the file
# self.assertEquals(f3.tell(),len(test_strings[0]))
f3.write(test_strings[1])
- self.assertEquals(f3.tell(), len(test_strings[0])+len(test_strings[1]))
+ self.assertEqual(f3.tell(), len(test_strings[0])+len(test_strings[1]))
f3.write(test_strings[2])
- self.assertEquals(f3.tell(), len(all_strings))
+ self.assertEqual(f3.tell(), len(all_strings))
f3.close()
- self.assert_(checkcontents("b.txt", all_strings))
+ self.assertTrue(checkcontents("b.txt", all_strings))
f4 = self.fs.open("b.txt", "wb")
f4.write(test_strings[2])
f4.close()
- self.assert_(checkcontents("b.txt", test_strings[2]))
+ self.assertTrue(checkcontents("b.txt", test_strings[2]))
f5 = self.fs.open("c.txt", "wb")
for s in test_strings:
f5.write(s+b("\n"))
@@ -815,7 +815,7 @@ class FSTestCases(object):
with self.fs.open("hello", "wb") as f:
f.truncate(30)
- self.assertEquals(self.fs.getsize("hello"), 30)
+ self.assertEqual(self.fs.getsize("hello"), 30)
# Some file systems (FTPFS) don't support both reading and writing
if self.fs.getmeta('file.read_and_write', True):
@@ -825,7 +825,7 @@ class FSTestCases(object):
with self.fs.open("hello", "rb") as f:
f.seek(25)
- self.assertEquals(f.read(), b("123456"))
+ self.assertEqual(f.read(), b("123456"))
def test_write_past_end_of_file(self):
if self.fs.getmeta('file.read_and_write', True):
@@ -833,7 +833,7 @@ class FSTestCases(object):
f.seek(25)
f.write(b("EOF"))
with self.fs.open("write_at_end", "rb") as f:
- self.assertEquals(f.read(), b("\x00")*25 + b("EOF"))
+ self.assertEqual(f.read(), b("\x00")*25 + b("EOF"))
def test_with_statement(self):
# This is a little tricky since 'with' is actually new syntax.
@@ -856,15 +856,15 @@ class FSTestCases(object):
code += " raise ValueError\n"
code = compile(code, "<string>", 'exec')
self.assertRaises(ValueError, eval, code, globals(), locals())
- self.assertEquals(self.fs.getcontents('f.txt', 'rb'), contents)
+ self.assertEqual(self.fs.getcontents('f.txt', 'rb'), contents)
def test_pickling(self):
if self.fs.getmeta('pickle_contents', True):
self.fs.setcontents("test1", b("hello world"))
fs2 = pickle.loads(pickle.dumps(self.fs))
- self.assert_(fs2.isfile("test1"))
+ self.assertTrue(fs2.isfile("test1"))
fs3 = pickle.loads(pickle.dumps(self.fs, -1))
- self.assert_(fs3.isfile("test1"))
+ self.assertTrue(fs3.isfile("test1"))
else:
# Just make sure it doesn't throw an exception
fs2 = pickle.loads(pickle.dumps(self.fs))
@@ -879,9 +879,9 @@ class FSTestCases(object):
r = random.Random(0)
randint = r.randint
int2byte = six.int2byte
- for _i in xrange(num_chunks):
+ for _i in range(num_chunks):
c = b("").join(int2byte(randint(
- 0, 255)) for _j in xrange(chunk_size//8))
+ 0, 255)) for _j in range(chunk_size//8))
yield c * 8
f = self.fs.open("bigfile", "wb")
try:
@@ -894,7 +894,7 @@ class FSTestCases(object):
try:
try:
while True:
- if chunks.next() != f.read(chunk_size):
+ if next(chunks) != f.read(chunk_size):
assert False, "bigfile was corrupted"
except StopIteration:
if f.read() != b(""):
@@ -929,9 +929,9 @@ class FSTestCases(object):
"""Test read(0) returns empty string"""
self.fs.setcontents('foo.txt', b('Hello, World'))
with self.fs.open('foo.txt', 'rb') as f:
- self.assert_(len(f.read(0)) == 0)
+ self.assertTrue(len(f.read(0)) == 0)
with self.fs.open('foo.txt', 'rt') as f:
- self.assert_(len(f.read(0)) == 0)
+ self.assertTrue(len(f.read(0)) == 0)
# May be disabled - see end of file
@@ -977,7 +977,7 @@ class ThreadingTestCases(object):
for t in threads:
t.join()
for (c, e, t) in errors:
- raise e, None, t
+ raise e.with_traceback(t)
finally:
sys.setcheckinterval(check_interval)
@@ -994,12 +994,12 @@ class ThreadingTestCases(object):
def thread1():
c = b("thread1 was 'ere")
setcontents("thread1.txt", c)
- self.assertEquals(self.fs.getcontents("thread1.txt", 'rb'), c)
+ self.assertEqual(self.fs.getcontents("thread1.txt", 'rb'), c)
def thread2():
c = b("thread2 was 'ere")
setcontents("thread2.txt", c)
- self.assertEquals(self.fs.getcontents("thread2.txt", 'rb'), c)
+ self.assertEqual(self.fs.getcontents("thread2.txt", 'rb'), c)
self._runThreads(thread1, thread2)
def test_setcontents_threaded_samefile(self):
@@ -1016,19 +1016,19 @@ class ThreadingTestCases(object):
c = b("thread1 was 'ere")
setcontents("threads.txt", c)
self._yield()
- self.assertEquals(self.fs.listdir("/"), ["threads.txt"])
+ self.assertEqual(self.fs.listdir("/"), ["threads.txt"])
def thread2():
c = b("thread2 was 'ere")
setcontents("threads.txt", c)
self._yield()
- self.assertEquals(self.fs.listdir("/"), ["threads.txt"])
+ self.assertEqual(self.fs.listdir("/"), ["threads.txt"])
def thread3():
c = b("thread3 was 'ere")
setcontents("threads.txt", c)
self._yield()
- self.assertEquals(self.fs.listdir("/"), ["threads.txt"])
+ self.assertEqual(self.fs.listdir("/"), ["threads.txt"])
try:
self._runThreads(thread1, thread2, thread3)
except ResourceLockedError:
@@ -1079,23 +1079,23 @@ class ThreadingTestCases(object):
def makedir():
try:
self.fs.makedir("testdir")
- except DestinationExistsError, e:
+ except DestinationExistsError as e:
errors.append(e)
def makedir_noerror():
try:
self.fs.makedir("testdir", allow_recreate=True)
- except DestinationExistsError, e:
+ except DestinationExistsError as e:
errors.append(e)
def removedir():
try:
self.fs.removedir("testdir")
- except (ResourceNotFoundError, ResourceLockedError), e:
+ except (ResourceNotFoundError, ResourceLockedError) as e:
errors.append(e)
# One thread should succeed, one should error
self._runThreads(makedir, makedir)
- self.assertEquals(len(errors), 1)
+ self.assertEqual(len(errors), 1)
self.fs.removedir("testdir")
# One thread should succeed, two should error
errors = []
@@ -1106,18 +1106,18 @@ class ThreadingTestCases(object):
# All threads should succeed
errors = []
self._runThreads(makedir_noerror, makedir_noerror, makedir_noerror)
- self.assertEquals(len(errors), 0)
+ self.assertEqual(len(errors), 0)
self.assertTrue(self.fs.isdir("testdir"))
self.fs.removedir("testdir")
# makedir() can beat removedir() and vice-versa
errors = []
self._runThreads(makedir, removedir)
if self.fs.isdir("testdir"):
- self.assertEquals(len(errors), 1)
+ self.assertEqual(len(errors), 1)
self.assertFalse(isinstance(errors[0], DestinationExistsError))
self.fs.removedir("testdir")
else:
- self.assertEquals(len(errors), 0)
+ self.assertEqual(len(errors), 0)
def test_concurrent_copydir(self):
self.fs.makedir("a")
@@ -1136,10 +1136,10 @@ class ThreadingTestCases(object):
# This should error out since we're not overwriting
self.assertRaises(
DestinationExistsError, self._runThreads, copydir, copydir)
- self.assert_(self.fs.isdir('a'))
- self.assert_(self.fs.isdir('a'))
+ self.assertTrue(self.fs.isdir('a'))
+ self.assertTrue(self.fs.isdir('a'))
copydir_overwrite()
- self.assert_(self.fs.isdir('a'))
+ self.assertTrue(self.fs.isdir('a'))
# This should run to completion and give a valid state, unless
# files get locked when written to.
try:
@@ -1160,19 +1160,19 @@ class ThreadingTestCases(object):
"contents the second"), b("number three")]
def thread1():
- for i in xrange(30):
+ for i in range(30):
for c in contents:
self.fs.setcontents("thread1.txt", c)
- self.assertEquals(self.fs.getsize("thread1.txt"), len(c))
- self.assertEquals(self.fs.getcontents(
+ self.assertEqual(self.fs.getsize("thread1.txt"), len(c))
+ self.assertEqual(self.fs.getcontents(
"thread1.txt", 'rb'), c)
def thread2():
- for i in xrange(30):
+ for i in range(30):
for c in contents:
self.fs.setcontents("thread2.txt", c)
- self.assertEquals(self.fs.getsize("thread2.txt"), len(c))
- self.assertEquals(self.fs.getcontents(
+ self.assertEqual(self.fs.getsize("thread2.txt"), len(c))
+ self.assertEqual(self.fs.getcontents(
"thread2.txt", 'rb'), c)
self._runThreads(thread1, thread2)
--- fs/tests/test_archivefs.py.orig 2022-03-04 17:14:43 UTC
+++ fs/tests/test_archivefs.py
@@ -58,7 +58,7 @@ class TestReadArchiveFS(unittest.TestCase):
contents = f.read()
return contents
def check_contents(path, expected):
- self.assert_(read_contents(path)==expected)
+ self.assertTrue(read_contents(path)==expected)
check_contents("a.txt", b("Hello, World!"))
check_contents("1.txt", b("1"))
check_contents("foo/bar/baz.txt", b("baz"))
@@ -67,29 +67,29 @@ class TestReadArchiveFS(unittest.TestCase):
def read_contents(path):
return self.fs.getcontents(path)
def check_contents(path, expected):
- self.assert_(read_contents(path)==expected)
+ self.assertTrue(read_contents(path)==expected)
check_contents("a.txt", b("Hello, World!"))
check_contents("1.txt", b("1"))
check_contents("foo/bar/baz.txt", b("baz"))
def test_is(self):
- self.assert_(self.fs.isfile('a.txt'))
- self.assert_(self.fs.isfile('1.txt'))
- self.assert_(self.fs.isfile('foo/bar/baz.txt'))
- self.assert_(self.fs.isdir('foo'))
- self.assert_(self.fs.isdir('foo/bar'))
- self.assert_(self.fs.exists('a.txt'))
- self.assert_(self.fs.exists('1.txt'))
- self.assert_(self.fs.exists('foo/bar/baz.txt'))
- self.assert_(self.fs.exists('foo'))
- self.assert_(self.fs.exists('foo/bar'))
+ self.assertTrue(self.fs.isfile('a.txt'))
+ self.assertTrue(self.fs.isfile('1.txt'))
+ self.assertTrue(self.fs.isfile('foo/bar/baz.txt'))
+ self.assertTrue(self.fs.isdir('foo'))
+ self.assertTrue(self.fs.isdir('foo/bar'))
+ self.assertTrue(self.fs.exists('a.txt'))
+ self.assertTrue(self.fs.exists('1.txt'))
+ self.assertTrue(self.fs.exists('foo/bar/baz.txt'))
+ self.assertTrue(self.fs.exists('foo'))
+ self.assertTrue(self.fs.exists('foo/bar'))
def test_listdir(self):
def check_listing(path, expected):
dir_list = self.fs.listdir(path)
- self.assert_(sorted(dir_list) == sorted(expected))
+ self.assertTrue(sorted(dir_list) == sorted(expected))
for item in dir_list:
- self.assert_(isinstance(item,unicode))
+ self.assertTrue(isinstance(item,str))
check_listing('/', ['a.txt', '1.txt', 'foo', 'b.txt'])
check_listing('foo', ['second.txt', 'bar'])
check_listing('foo/bar', ['baz.txt'])
@@ -114,7 +114,7 @@ class TestWriteArchiveFS(unittest.TestCase):
makefile("a.txt", b("Hello, World!"))
makefile("b.txt", b("b"))
- makefile(u"\N{GREEK SMALL LETTER ALPHA}/\N{GREEK CAPITAL LETTER OMEGA}.txt", b("this is the alpha and the omega"))
+ makefile("\N{GREEK SMALL LETTER ALPHA}/\N{GREEK CAPITAL LETTER OMEGA}.txt", b("this is the alpha and the omega"))
makefile("foo/bar/baz.txt", b("baz"))
makefile("foo/second.txt", b("hai"))
@@ -125,7 +125,7 @@ class TestWriteArchiveFS(unittest.TestCase):
def test_valid(self):
zf = zipfile.ZipFile(self.temp_filename, "r")
- self.assert_(zf.testzip() is None)
+ self.assertTrue(zf.testzip() is None)
zf.close()
def test_creation(self):
@@ -140,7 +140,7 @@ class TestWriteArchiveFS(unittest.TestCase):
check_contents("b.txt", b("b"))
check_contents("foo/bar/baz.txt", b("baz"))
check_contents("foo/second.txt", b("hai"))
- check_contents(u"\N{GREEK SMALL LETTER ALPHA}/\N{GREEK CAPITAL LETTER OMEGA}.txt", b("this is the alpha and the omega"))
+ check_contents("\N{GREEK SMALL LETTER ALPHA}/\N{GREEK CAPITAL LETTER OMEGA}.txt", b("this is the alpha and the omega"))
#~ class TestAppendArchiveFS(TestWriteArchiveFS):
--- fs/tests/test_errors.py.orig 2022-03-04 17:14:43 UTC
+++ fs/tests/test_errors.py
@@ -29,4 +29,4 @@ class TestFSError(unittest.TestCase):
def test_unicode_representation_of_error_with_non_ascii_characters(self):
path_error = PathError('/Shïrê/Frødø')
- _ = unicode(path_error)
\ No newline at end of file
+ _ = str(path_error)
--- fs/tests/test_expose.py.orig 2022-03-04 17:14:43 UTC
+++ fs/tests/test_expose.py
@@ -149,7 +149,7 @@ if dokan.is_available:
def tearDown(self):
self.mount_proc.unmount()
- for _ in xrange(10):
+ for _ in range(10):
try:
if self.mount_proc.poll() is None:
self.mount_proc.terminate()
--- fs/tests/test_fs.py.orig 2022-03-04 17:14:43 UTC
+++ fs/tests/test_fs.py
@@ -20,7 +20,7 @@ from fs import osfs
class TestOSFS(unittest.TestCase,FSTestCases,ThreadingTestCases):
def setUp(self):
- self.temp_dir = tempfile.mkdtemp(u"fstest")
+ self.temp_dir = tempfile.mkdtemp("fstest")
self.fs = osfs.OSFS(self.temp_dir)
def tearDown(self):
@@ -35,14 +35,14 @@ class TestOSFS(unittest.TestCase,FSTestCases,Threading
self.assertRaises(errors.InvalidCharsInPathError, self.fs.open, 'invalid\0file', 'wb')
self.assertFalse(self.fs.isvalidpath('invalid\0file'))
- self.assert_(self.fs.isvalidpath('validfile'))
- self.assert_(self.fs.isvalidpath('completely_valid/path/foo.bar'))
+ self.assertTrue(self.fs.isvalidpath('validfile'))
+ self.assertTrue(self.fs.isvalidpath('completely_valid/path/foo.bar'))
class TestSubFS(unittest.TestCase,FSTestCases,ThreadingTestCases):
def setUp(self):
- self.temp_dir = tempfile.mkdtemp(u"fstest")
+ self.temp_dir = tempfile.mkdtemp("fstest")
self.parent_fs = osfs.OSFS(self.temp_dir)
self.parent_fs.makedir("foo/bar", recursive=True)
self.fs = self.parent_fs.opendir("foo/bar")
@@ -118,7 +118,7 @@ class TestTempFS(unittest.TestCase,FSTestCases,Threadi
def tearDown(self):
td = self.fs._temp_dir
self.fs.close()
- self.assert_(not os.path.exists(td))
+ self.assertTrue(not os.path.exists(td))
def check(self, p):
td = self.fs._temp_dir
@@ -129,5 +129,5 @@ class TestTempFS(unittest.TestCase,FSTestCases,Threadi
self.assertRaises(errors.InvalidCharsInPathError, self.fs.open, 'invalid\0file', 'wb')
self.assertFalse(self.fs.isvalidpath('invalid\0file'))
- self.assert_(self.fs.isvalidpath('validfile'))
- self.assert_(self.fs.isvalidpath('completely_valid/path/foo.bar'))
+ self.assertTrue(self.fs.isvalidpath('validfile'))
+ self.assertTrue(self.fs.isvalidpath('completely_valid/path/foo.bar'))
--- fs/tests/test_ftpfs.py.orig 2022-03-04 17:14:43 UTC
+++ fs/tests/test_ftpfs.py
@@ -10,7 +10,7 @@ import tempfile
import subprocess
import time
from os.path import abspath
-import urllib
+import urllib.request, urllib.parse, urllib.error
from six import PY3
@@ -37,7 +37,7 @@ class TestFTPFS(unittest.TestCase, FSTestCases, Thread
ftp_port += 1
use_port = str(ftp_port)
#ftp_port = 10000
- self.temp_dir = tempfile.mkdtemp(u"ftpfstests")
+ self.temp_dir = tempfile.mkdtemp("ftpfstests")
file_path = __file__
if ':' not in file_path:
@@ -58,7 +58,7 @@ class TestFTPFS(unittest.TestCase, FSTestCases, Thread
start_time = time.time()
while time.time() - start_time < 5:
try:
- ftpurl = urllib.urlopen('ftp://127.0.0.1:%s' % use_port)
+ ftpurl = urllib.request.urlopen('ftp://127.0.0.1:%s' % use_port)
except IOError:
time.sleep(0)
else:
--- fs/tests/test_importhook.py.orig 2022-03-04 17:14:43 UTC
+++ fs/tests/test_importhook.py
@@ -25,7 +25,7 @@ class TestFSImportHook(unittest.TestCase):
for ph in list(sys.path_hooks):
if issubclass(ph,FSImportHook):
sys.path_hooks.remove(mph)
- for (k,v) in sys.modules.items():
+ for (k,v) in list(sys.modules.items()):
if k.startswith("fsih_"):
del sys.modules[k]
elif hasattr(v,"__loader__"):
@@ -64,22 +64,22 @@ class TestFSImportHook(unittest.TestCase):
ih = FSImportHook(t)
sys.meta_path.append(ih)
try:
- self.assertEquals(ih.find_module("fsih_hello"),ih)
- self.assertEquals(ih.find_module("fsih_helo"),None)
- self.assertEquals(ih.find_module("fsih_pkg"),ih)
- self.assertEquals(ih.find_module("fsih_pkg.sub1"),ih)
- self.assertEquals(ih.find_module("fsih_pkg.sub2"),ih)
- self.assertEquals(ih.find_module("fsih_pkg.sub3"),None)
+ self.assertEqual(ih.find_module("fsih_hello"),ih)
+ self.assertEqual(ih.find_module("fsih_helo"),None)
+ self.assertEqual(ih.find_module("fsih_pkg"),ih)
+ self.assertEqual(ih.find_module("fsih_pkg.sub1"),ih)
+ self.assertEqual(ih.find_module("fsih_pkg.sub2"),ih)
+ self.assertEqual(ih.find_module("fsih_pkg.sub3"),None)
m = ih.load_module("fsih_hello")
- self.assertEquals(m.message,"hello world!")
+ self.assertEqual(m.message,"hello world!")
self.assertRaises(ImportError,ih.load_module,"fsih_helo")
ih.load_module("fsih_pkg")
m = ih.load_module("fsih_pkg.sub1")
- self.assertEquals(m.message,"hello world!")
- self.assertEquals(m.a,42)
+ self.assertEqual(m.message,"hello world!")
+ self.assertEqual(m.a,42)
m = ih.load_module("fsih_pkg.sub2")
- self.assertEquals(m.message,"hello world!")
- self.assertEquals(m.a,42 * 2)
+ self.assertEqual(m.message,"hello world!")
+ self.assertEqual(m.a,42 * 2)
self.assertRaises(ImportError,ih.load_module,"fsih_pkg.sub3")
finally:
sys.meta_path.remove(ih)
@@ -88,7 +88,7 @@ class TestFSImportHook(unittest.TestCase):
def _check_imports_are_working(self):
try:
import fsih_hello
- self.assertEquals(fsih_hello.message,"hello world!")
+ self.assertEqual(fsih_hello.message,"hello world!")
try:
import fsih_helo
except ImportError:
@@ -97,11 +97,11 @@ class TestFSImportHook(unittest.TestCase):
assert False, "ImportError not raised"
import fsih_pkg
import fsih_pkg.sub1
- self.assertEquals(fsih_pkg.sub1.message,"hello world!")
- self.assertEquals(fsih_pkg.sub1.a,42)
+ self.assertEqual(fsih_pkg.sub1.message,"hello world!")
+ self.assertEqual(fsih_pkg.sub1.a,42)
import fsih_pkg.sub2
- self.assertEquals(fsih_pkg.sub2.message,"hello world!")
- self.assertEquals(fsih_pkg.sub2.a,42 * 2)
+ self.assertEqual(fsih_pkg.sub2.message,"hello world!")
+ self.assertEqual(fsih_pkg.sub2.a,42 * 2)
try:
import fsih_pkg.sub3
except ImportError:
@@ -109,7 +109,7 @@ class TestFSImportHook(unittest.TestCase):
else:
assert False, "ImportError not raised"
finally:
- for k in sys.modules.keys():
+ for k in list(sys.modules.keys()):
if k.startswith("fsih_"):
del sys.modules[k]
--- fs/tests/test_iotools.py.orig 2022-03-04 17:14:43 UTC
+++ fs/tests/test_iotools.py
@@ -1,5 +1,5 @@
-from __future__ import unicode_literals
+
from fs import iotools
import io
@@ -7,9 +7,9 @@ import unittest
from os.path import dirname, join, abspath
try:
- unicode
+ str
except NameError:
- unicode = str
+ str = str
class OpenFilelike(object):
@@ -37,20 +37,20 @@ class TestIOTools(unittest.TestCase):
"""Test make_stream"""
with self.get_bin_file() as f:
text = f.read()
- self.assert_(isinstance(text, bytes))
+ self.assertTrue(isinstance(text, bytes))
with self.get_bin_file() as f:
with iotools.make_stream("data/UTF-8-demo.txt", f, 'rt') as f2:
text = f2.read()
- self.assert_(isinstance(text, unicode))
+ self.assertTrue(isinstance(text, str))
def test_decorator(self):
"""Test filelike_to_stream decorator"""
o = OpenFilelike(self.get_bin_file)
with o.open('file', 'rb') as f:
text = f.read()
- self.assert_(isinstance(text, bytes))
+ self.assertTrue(isinstance(text, bytes))
with o.open('file', 'rt') as f:
text = f.read()
- self.assert_(isinstance(text, unicode))
+ self.assertTrue(isinstance(text, str))
--- fs/tests/test_mountfs.py.orig 2022-03-04 17:14:43 UTC
+++ fs/tests/test_mountfs.py
@@ -12,11 +12,11 @@ class TestMountFS(unittest.TestCase):
m2 = MemoryFS()
multi_fs.mount('/m1', m1)
multi_fs.mount('/m2', m2)
- self.assert_(not m1.closed)
- self.assert_(not m2.closed)
+ self.assertTrue(not m1.closed)
+ self.assertTrue(not m2.closed)
multi_fs.close()
- self.assert_(m1.closed)
- self.assert_(m2.closed)
+ self.assertTrue(m1.closed)
+ self.assertTrue(m2.closed)
def test_no_auto_close(self):
"""Test MountFS auto close can be disabled"""
@@ -25,11 +25,11 @@ class TestMountFS(unittest.TestCase):
m2 = MemoryFS()
multi_fs.mount('/m1', m1)
multi_fs.mount('/m2', m2)
- self.assert_(not m1.closed)
- self.assert_(not m2.closed)
+ self.assertTrue(not m1.closed)
+ self.assertTrue(not m2.closed)
multi_fs.close()
- self.assert_(not m1.closed)
- self.assert_(not m2.closed)
+ self.assertTrue(not m1.closed)
+ self.assertTrue(not m2.closed)
def test_mountfile(self):
"""Test mounting a file"""
@@ -42,16 +42,16 @@ class TestMountFS(unittest.TestCase):
mount_fs = MountFS()
mount_fs.mountfile('bar.txt', foo_dir.open, foo_dir.getinfo)
- self.assert_(mount_fs.isdir('/'))
- self.assert_(mount_fs.isdir('./'))
- self.assert_(mount_fs.isdir(''))
+ self.assertTrue(mount_fs.isdir('/'))
+ self.assertTrue(mount_fs.isdir('./'))
+ self.assertTrue(mount_fs.isdir(''))
# Check we can see the mounted file in the dir list
self.assertEqual(mount_fs.listdir(), ["bar.txt"])
- self.assert_(not mount_fs.exists('nobodyhere.txt'))
- self.assert_(mount_fs.exists('bar.txt'))
- self.assert_(mount_fs.isfile('bar.txt'))
- self.assert_(not mount_fs.isdir('bar.txt'))
+ self.assertTrue(not mount_fs.exists('nobodyhere.txt'))
+ self.assertTrue(mount_fs.exists('bar.txt'))
+ self.assertTrue(mount_fs.isfile('bar.txt'))
+ self.assertTrue(not mount_fs.isdir('bar.txt'))
# Check open and getinfo callables
self.assertEqual(mount_fs.getcontents('bar.txt'), quote)
@@ -67,9 +67,9 @@ class TestMountFS(unittest.TestCase):
self.assertEqual(mem_fs.getsize('foo/bar.txt'), len('baz'))
# Check unmount
- self.assert_(mount_fs.unmount("bar.txt"))
+ self.assertTrue(mount_fs.unmount("bar.txt"))
self.assertEqual(mount_fs.listdir(), [])
- self.assert_(not mount_fs.exists('bar.txt'))
+ self.assertTrue(not mount_fs.exists('bar.txt'))
# Check unount a second time is a null op, and returns False
self.assertFalse(mount_fs.unmount("bar.txt"))
--- fs/tests/test_multifs.py.orig 2022-03-04 17:14:43 UTC
+++ fs/tests/test_multifs.py
@@ -13,11 +13,11 @@ class TestMultiFS(unittest.TestCase):
m2 = MemoryFS()
multi_fs.addfs('m1', m1)
multi_fs.addfs('m2', m2)
- self.assert_(not m1.closed)
- self.assert_(not m2.closed)
+ self.assertTrue(not m1.closed)
+ self.assertTrue(not m2.closed)
multi_fs.close()
- self.assert_(m1.closed)
- self.assert_(m2.closed)
+ self.assertTrue(m1.closed)
+ self.assertTrue(m2.closed)
def test_no_auto_close(self):
"""Test MultiFS auto close can be disables"""
@@ -26,11 +26,11 @@ class TestMultiFS(unittest.TestCase):
m2 = MemoryFS()
multi_fs.addfs('m1', m1)
multi_fs.addfs('m2', m2)
- self.assert_(not m1.closed)
- self.assert_(not m2.closed)
+ self.assertTrue(not m1.closed)
+ self.assertTrue(not m2.closed)
multi_fs.close()
- self.assert_(not m1.closed)
- self.assert_(not m2.closed)
+ self.assertTrue(not m1.closed)
+ self.assertTrue(not m2.closed)
def test_priority(self):
@@ -45,7 +45,7 @@ class TestMultiFS(unittest.TestCase):
multi_fs.addfs("m1", m1)
multi_fs.addfs("m2", m2)
multi_fs.addfs("m3", m3)
- self.assert_(multi_fs.getcontents("name") == b("m3"))
+ self.assertTrue(multi_fs.getcontents("name") == b("m3"))
m1 = MemoryFS()
m2 = MemoryFS()
@@ -57,7 +57,7 @@ class TestMultiFS(unittest.TestCase):
multi_fs.addfs("m1", m1)
multi_fs.addfs("m2", m2, priority=10)
multi_fs.addfs("m3", m3)
- self.assert_(multi_fs.getcontents("name") == b("m2"))
+ self.assertTrue(multi_fs.getcontents("name") == b("m2"))
m1 = MemoryFS()
m2 = MemoryFS()
@@ -69,7 +69,7 @@ class TestMultiFS(unittest.TestCase):
multi_fs.addfs("m1", m1)
multi_fs.addfs("m2", m2, priority=10)
multi_fs.addfs("m3", m3, priority=10)
- self.assert_(multi_fs.getcontents("name") == b("m3"))
+ self.assertTrue(multi_fs.getcontents("name") == b("m3"))
m1 = MemoryFS()
m2 = MemoryFS()
@@ -81,5 +81,5 @@ class TestMultiFS(unittest.TestCase):
multi_fs.addfs("m1", m1, priority=11)
multi_fs.addfs("m2", m2, priority=10)
multi_fs.addfs("m3", m3, priority=10)
- self.assert_(multi_fs.getcontents("name") == b("m1"))
+ self.assertTrue(multi_fs.getcontents("name") == b("m1"))
--- fs/tests/test_opener.py.orig 2022-03-04 17:14:43 UTC
+++ fs/tests/test_opener.py
@@ -14,7 +14,7 @@ from fs import path
class TestOpener(unittest.TestCase):
def setUp(self):
- self.temp_dir = tempfile.mkdtemp(u"fstest_opener")
+ self.temp_dir = tempfile.mkdtemp("fstest_opener")
def tearDown(self):
shutil.rmtree(self.temp_dir)
--- fs/tests/test_path.py.orig 2022-03-04 17:14:43 UTC
+++ fs/tests/test_path.py
@@ -23,7 +23,7 @@ class TestPathFunctions(unittest.TestCase):
("a/b/c", "a/b/c"),
("a/b/../c/", "a/c"),
("/","/"),
- (u"a/\N{GREEK SMALL LETTER BETA}/c",u"a/\N{GREEK SMALL LETTER BETA}/c"),
+ ("a/\N{GREEK SMALL LETTER BETA}/c","a/\N{GREEK SMALL LETTER BETA}/c"),
]
for path, result in tests:
self.assertEqual(normpath(path), result)
@@ -44,7 +44,7 @@ class TestPathFunctions(unittest.TestCase):
("a/b", "./d", "e", "a/b/d/e"),
("/", "/", "/"),
("/", "", "/"),
- (u"a/\N{GREEK SMALL LETTER BETA}","c",u"a/\N{GREEK SMALL LETTER BETA}/c"),
+ ("a/\N{GREEK SMALL LETTER BETA}","c","a/\N{GREEK SMALL LETTER BETA}/c"),
]
for testpaths in tests:
paths = testpaths[:-1]
@@ -101,12 +101,12 @@ class TestPathFunctions(unittest.TestCase):
self.assertEqual(pathsplit(path), result)
def test_recursepath(self):
- self.assertEquals(recursepath("/"),["/"])
- self.assertEquals(recursepath("hello"),["/","/hello"])
- self.assertEquals(recursepath("/hello/world/"),["/","/hello","/hello/world"])
- self.assertEquals(recursepath("/hello/world/",reverse=True),["/hello/world","/hello","/"])
- self.assertEquals(recursepath("hello",reverse=True),["/hello","/"])
- self.assertEquals(recursepath("",reverse=True),["/"])
+ self.assertEqual(recursepath("/"),["/"])
+ self.assertEqual(recursepath("hello"),["/","/hello"])
+ self.assertEqual(recursepath("/hello/world/"),["/","/hello","/hello/world"])
+ self.assertEqual(recursepath("/hello/world/",reverse=True),["/hello/world","/hello","/"])
+ self.assertEqual(recursepath("hello",reverse=True),["/hello","/"])
+ self.assertEqual(recursepath("",reverse=True),["/"])
def test_isdotfile(self):
for path in ['.foo',
@@ -114,7 +114,7 @@ class TestPathFunctions(unittest.TestCase):
'foo/.svn',
'foo/bar/.svn',
'/foo/.bar']:
- self.assert_(isdotfile(path))
+ self.assertTrue(isdotfile(path))
for path in ['asfoo',
'df.svn',
@@ -142,10 +142,10 @@ class TestPathFunctions(unittest.TestCase):
self.assertEqual(basename(path), test_basename)
def test_iswildcard(self):
- self.assert_(iswildcard('*'))
- self.assert_(iswildcard('*.jpg'))
- self.assert_(iswildcard('foo/*'))
- self.assert_(iswildcard('foo/{}'))
+ self.assertTrue(iswildcard('*'))
+ self.assertTrue(iswildcard('*.jpg'))
+ self.assertTrue(iswildcard('foo/*'))
+ self.assertTrue(iswildcard('foo/{}'))
self.assertFalse(iswildcard('foo'))
self.assertFalse(iswildcard('img.jpg'))
self.assertFalse(iswildcard('foo/bar'))
@@ -171,9 +171,9 @@ class Test_PathMap(unittest.TestCase):
def test_basics(self):
map = PathMap()
map["hello"] = "world"
- self.assertEquals(map["/hello"],"world")
- self.assertEquals(map["/hello/"],"world")
- self.assertEquals(map.get("hello"),"world")
+ self.assertEqual(map["/hello"],"world")
+ self.assertEqual(map["/hello/"],"world")
+ self.assertEqual(map.get("hello"),"world")
def test_iteration(self):
map = PathMap()
@@ -183,17 +183,17 @@ class Test_PathMap(unittest.TestCase):
map["hello/kitty"] = 4
map["hello/kitty/islame"] = 5
map["batman/isawesome"] = 6
- self.assertEquals(set(map.iterkeys()),set(("/hello/world","/hello/world/howareya","/hello/world/iamfine","/hello/kitty","/hello/kitty/islame","/batman/isawesome")))
- self.assertEquals(sorted(map.values()),range(1,7))
- self.assertEquals(sorted(map.items("/hello/world/")),[("/hello/world",1),("/hello/world/howareya",2),("/hello/world/iamfine",3)])
- self.assertEquals(zip(map.keys(),map.values()),map.items())
- self.assertEquals(zip(map.keys("batman"),map.values("batman")),map.items("batman"))
- self.assertEquals(set(map.iternames("hello")),set(("world","kitty")))
- self.assertEquals(set(map.iternames("/hello/kitty")),set(("islame",)))
+ self.assertEqual(set(map.keys()),set(("/hello/world","/hello/world/howareya","/hello/world/iamfine","/hello/kitty","/hello/kitty/islame","/batman/isawesome")))
+ self.assertEqual(sorted(map.values()),list(range(1,7)))
+ self.assertEqual(sorted(map.items("/hello/world/")),[("/hello/world",1),("/hello/world/howareya",2),("/hello/world/iamfine",3)])
+ self.assertEqual(list(zip(list(map.keys()),list(map.values()))),list(map.items()))
+ self.assertEqual(list(zip(map.keys("batman"),map.values("batman"))),map.items("batman"))
+ self.assertEqual(set(map.iternames("hello")),set(("world","kitty")))
+ self.assertEqual(set(map.iternames("/hello/kitty")),set(("islame",)))
del map["hello/kitty/islame"]
- self.assertEquals(set(map.iternames("/hello/kitty")),set())
- self.assertEquals(set(map.iterkeys()),set(("/hello/world","/hello/world/howareya","/hello/world/iamfine","/hello/kitty","/batman/isawesome")))
- self.assertEquals(set(map.values()),set(range(1,7)) - set((5,)))
+ self.assertEqual(set(map.iternames("/hello/kitty")),set())
+ self.assertEqual(set(map.keys()),set(("/hello/world","/hello/world/howareya","/hello/world/iamfine","/hello/kitty","/batman/isawesome")))
+ self.assertEqual(set(map.values()),set(range(1,7)) - set((5,)))
--- fs/tests/test_remote.py.orig 2022-03-04 17:14:43 UTC
+++ fs/tests/test_remote.py
@@ -116,37 +116,37 @@ class TestRemoteFileBuffer(unittest.TestCase, FSTestCa
self.fakeOn()
f = self.fs.open('test.txt', 'rb')
- self.assertEquals(f.read(10), contents[:10])
+ self.assertEqual(f.read(10), contents[:10])
f.wrapped_file.seek(0, SEEK_END)
- self.assertEquals(f._rfile.tell(), 10)
+ self.assertEqual(f._rfile.tell(), 10)
f.seek(20)
- self.assertEquals(f.tell(), 20)
- self.assertEquals(f._rfile.tell(), 20)
+ self.assertEqual(f.tell(), 20)
+ self.assertEqual(f._rfile.tell(), 20)
f.seek(0, SEEK_END)
- self.assertEquals(f._rfile.tell(), len(contents))
+ self.assertEqual(f._rfile.tell(), len(contents))
f.close()
f = self.fs.open('test.txt', 'ab')
- self.assertEquals(f.tell(), len(contents))
+ self.assertEqual(f.tell(), len(contents))
f.close()
self.fakeOff()
# Writing over the rfile edge
f = self.fs.open('test.txt', 'wb+')
- self.assertEquals(f.tell(), 0)
+ self.assertEqual(f.tell(), 0)
f.seek(len(contents) - 5)
# Last 5 characters not loaded from remote file
- self.assertEquals(f._rfile.tell(), len(contents) - 5)
+ self.assertEqual(f._rfile.tell(), len(contents) - 5)
# Confirm that last 5 characters are still in rfile buffer
- self.assertEquals(f._rfile.read(), contents[-5:])
+ self.assertEqual(f._rfile.read(), contents[-5:])
# Rollback position 5 characters before eof
f._rfile.seek(len(contents[:-5]))
# Write 10 new characters (will make contents longer for 5 chars)
f.write(b('1234567890'))
f.flush()
# We are on the end of file (and buffer not serve anything anymore)
- self.assertEquals(f.read(), b(''))
+ self.assertEqual(f.read(), b(''))
f.close()
self.fakeOn()
@@ -154,7 +154,7 @@ class TestRemoteFileBuffer(unittest.TestCase, FSTestCa
# Check if we wrote everything OK from
# previous writing over the remote buffer edge
f = self.fs.open('test.txt', 'rb')
- self.assertEquals(f.read(), contents[:-5] + b('1234567890'))
+ self.assertEqual(f.read(), contents[:-5] + b('1234567890'))
f.close()
self.fakeOff()
@@ -199,36 +199,36 @@ class TestRemoteFileBuffer(unittest.TestCase, FSTestCa
f = self.fs.open('test.txt', 'rb+')
# Check if we read just 10 characters
- self.assertEquals(f.read(10), contents[:10])
- self.assertEquals(f._rfile.tell(), 10)
+ self.assertEqual(f.read(10), contents[:10])
+ self.assertEqual(f._rfile.tell(), 10)
# Write garbage to file to mark it as _changed
f.write(b('x'))
# This should read the rest of file and store file back to again.
f.flush()
f.seek(0)
# Try if we have unocrrupted file locally...
- self.assertEquals(f.read(), contents[:10] + b('x') + contents[11:])
+ self.assertEqual(f.read(), contents[:10] + b('x') + contents[11:])
f.close()
# And if we have uncorrupted file also on storage
f = self.fs.open('test.txt', 'rb')
- self.assertEquals(f.read(), contents[:10] + b('x') + contents[11:])
+ self.assertEqual(f.read(), contents[:10] + b('x') + contents[11:])
f.close()
# Now try it again, but write garbage behind edge of remote file
f = self.fs.open('test.txt', 'rb+')
- self.assertEquals(f.read(10), contents[:10])
+ self.assertEqual(f.read(10), contents[:10])
# Write garbage to file to mark it as _changed
f.write(contents2)
f.flush()
f.seek(0)
# Try if we have unocrrupted file locally...
- self.assertEquals(f.read(), contents[:10] + contents2)
+ self.assertEqual(f.read(), contents[:10] + contents2)
f.close()
# And if we have uncorrupted file also on storage
f = self.fs.open('test.txt', 'rb')
- self.assertEquals(f.read(), contents[:10] + contents2)
+ self.assertEqual(f.read(), contents[:10] + contents2)
f.close()
--- fs/tests/test_rpcfs.py.orig 2015-04-12 17:24:29 UTC
+++ fs/tests/test_rpcfs.py
@@ -48,7 +48,7 @@ class TestRPCFS(unittest.TestCase, FSTestCases, Thread
while not self.server:
try:
self.server = self.makeServer(self.temp_fs,("127.0.0.1",port))
- except socket.error, e:
+ except socket.error as e:
if e.args[1] == "Address already in use":
port += 1
else:
@@ -63,7 +63,7 @@ class TestRPCFS(unittest.TestCase, FSTestCases, Thread
#self.server.serve_forever()
while self.serve_more_requests:
self.server.handle_request()
- except Exception, e:
+ except Exception as e:
pass
self.end_event.set()
@@ -93,7 +93,7 @@ class TestRPCFS(unittest.TestCase, FSTestCases, Thread
sock.settimeout(.1)
sock.connect(sa)
sock.send(b("\n"))
- except socket.error, e:
+ except socket.error as e:
pass
finally:
if sock is not None:
--- fs/tests/test_utils.py.orig 2022-03-04 17:14:43 UTC
+++ fs/tests/test_utils.py
@@ -16,11 +16,11 @@ class TestUtils(unittest.TestCase):
fs.setcontents("foo/bar/fruit", b("apple"))
def _check_fs(self, fs):
- self.assert_(fs.isfile("f1"))
- self.assert_(fs.isfile("f2"))
- self.assert_(fs.isfile("f3"))
- self.assert_(fs.isdir("foo/bar"))
- self.assert_(fs.isfile("foo/bar/fruit"))
+ self.assertTrue(fs.isfile("f1"))
+ self.assertTrue(fs.isfile("f2"))
+ self.assertTrue(fs.isfile("f3"))
+ self.assertTrue(fs.isdir("foo/bar"))
+ self.assertTrue(fs.isfile("foo/bar/fruit"))
self.assertEqual(fs.getcontents("f1", "rb"), b("file 1"))
self.assertEqual(fs.getcontents("f2", "rb"), b("file 2"))
self.assertEqual(fs.getcontents("f3", "rb"), b("file 3"))
@@ -61,7 +61,7 @@ class TestUtils(unittest.TestCase):
fs1sub = fs1.makeopendir("from")
self._make_fs(fs1sub)
utils.movedir((fs1, "from"), (fs2, "copy"))
- self.assert_(not fs1.exists("from"))
+ self.assertTrue(not fs1.exists("from"))
self._check_fs(fs2.opendir("copy"))
fs1 = TempFS()
@@ -69,7 +69,7 @@ class TestUtils(unittest.TestCase):
fs1sub = fs1.makeopendir("from")
self._make_fs(fs1sub)
utils.movedir((fs1, "from"), (fs2, "copy"))
- self.assert_(not fs1.exists("from"))
+ self.assertTrue(not fs1.exists("from"))
self._check_fs(fs2.opendir("copy"))
def test_movedir_root(self):
@@ -79,7 +79,7 @@ class TestUtils(unittest.TestCase):
fs1sub = fs1.makeopendir("from")
self._make_fs(fs1sub)
utils.movedir((fs1, "from"), fs2)
- self.assert_(not fs1.exists("from"))
+ self.assertTrue(not fs1.exists("from"))
self._check_fs(fs2)
fs1 = TempFS()
@@ -87,7 +87,7 @@ class TestUtils(unittest.TestCase):
fs1sub = fs1.makeopendir("from")
self._make_fs(fs1sub)
utils.movedir((fs1, "from"), fs2)
- self.assert_(not fs1.exists("from"))
+ self.assertTrue(not fs1.exists("from"))
self._check_fs(fs2)
def test_remove_all(self):
@@ -101,15 +101,15 @@ class TestUtils(unittest.TestCase):
fs.setcontents("foo/baz", b("baz"))
utils.remove_all(fs, "foo/bar")
- self.assert_(not fs.exists("foo/bar/fruit"))
- self.assert_(fs.exists("foo/bar"))
- self.assert_(fs.exists("foo/baz"))
+ self.assertTrue(not fs.exists("foo/bar/fruit"))
+ self.assertTrue(fs.exists("foo/bar"))
+ self.assertTrue(fs.exists("foo/baz"))
utils.remove_all(fs, "")
- self.assert_(not fs.exists("foo/bar/fruit"))
- self.assert_(not fs.exists("foo/bar/baz"))
- self.assert_(not fs.exists("foo/baz"))
- self.assert_(not fs.exists("foo"))
- self.assert_(not fs.exists("f1"))
- self.assert_(fs.isdirempty('/'))
+ self.assertTrue(not fs.exists("foo/bar/fruit"))
+ self.assertTrue(not fs.exists("foo/bar/baz"))
+ self.assertTrue(not fs.exists("foo/baz"))
+ self.assertTrue(not fs.exists("foo"))
+ self.assertTrue(not fs.exists("f1"))
+ self.assertTrue(fs.isdirempty('/'))
--- fs/tests/test_watch.py.orig 2022-03-04 17:14:43 UTC
+++ fs/tests/test_watch.py
@@ -71,7 +71,7 @@ class WatcherTestCases:
for event in event_list:
if isinstance(event,cls):
if path is None or event.path == path:
- for (k,v) in attrs.iteritems():
+ for (k,v) in attrs.items():
if getattr(event,k) != v:
break
else:
@@ -98,7 +98,7 @@ class WatcherTestCases:
self.assertEventOccurred(CREATED,"/hello")
self.clearCapturedEvents()
old_atime = self.fs.getinfo("hello").get("accessed_time")
- self.assertEquals(self.fs.getcontents("hello"), b("hello world"))
+ self.assertEqual(self.fs.getcontents("hello"), b("hello world"))
if not isinstance(self.watchfs,PollingWatchableFS):
# Help it along by updting the atime.
# TODO: why is this necessary?
@@ -113,7 +113,7 @@ class WatcherTestCases:
# update it if it's too old, or don't update it at all!
# Try to force the issue, wait for it to change, but eventually
# give up and bail out.
- for i in xrange(10):
+ for i in range(10):
if self.fs.getinfo("hello").get("accessed_time") != old_atime:
if not self.checkEventOccurred(MODIFIED,"/hello"):
self.assertEventOccurred(ACCESSED,"/hello")
@@ -142,7 +142,7 @@ class WatcherTestCases:
self.waitForEvents()
for evt in events:
assert isinstance(evt,MODIFIED)
- self.assertEquals(evt.path,"/hello")
+ self.assertEqual(evt.path,"/hello")
def test_watch_single_file_remove(self):
self.fs.makedir("testing")
@@ -153,9 +153,9 @@ class WatcherTestCases:
self.waitForEvents()
self.fs.remove("testing/hello")
self.waitForEvents()
- self.assertEquals(len(events),1)
+ self.assertEqual(len(events),1)
assert isinstance(events[0],REMOVED)
- self.assertEquals(events[0].path,"/testing/hello")
+ self.assertEqual(events[0].path,"/testing/hello")
def test_watch_iter_changes(self):
changes = iter_changes(self.watchfs)
@@ -195,9 +195,9 @@ class TestWatchers_TempFS(unittest.TestCase,FSTestCase
watchfs = osfs.OSFS(self.fs.root_path)
self.watchfs = ensure_watchable(watchfs,poll_interval=0.1)
if watch_inotify is not None:
- self.assertEquals(watchfs,self.watchfs)
+ self.assertEqual(watchfs,self.watchfs)
if watch_win32 is not None:
- self.assertEquals(watchfs,self.watchfs)
+ self.assertEqual(watchfs,self.watchfs)
def tearDown(self):
self.watchfs.close()
--- fs/tests/test_wrapfs.py.orig 2022-03-04 17:14:43 UTC
+++ fs/tests/test_wrapfs.py
@@ -26,7 +26,7 @@ class TestWrapFS(unittest.TestCase, FSTestCases, Threa
#__test__ = False
def setUp(self):
- self.temp_dir = tempfile.mkdtemp(u"fstest")
+ self.temp_dir = tempfile.mkdtemp("fstest")
self.fs = wrapfs.WrapFS(osfs.OSFS(self.temp_dir))
def tearDown(self):
@@ -41,7 +41,7 @@ from fs.wrapfs.lazyfs import LazyFS
class TestLazyFS(unittest.TestCase, FSTestCases, ThreadingTestCases):
def setUp(self):
- self.temp_dir = tempfile.mkdtemp(u"fstest")
+ self.temp_dir = tempfile.mkdtemp("fstest")
self.fs = LazyFS((osfs.OSFS,(self.temp_dir,)))
def tearDown(self):
@@ -63,13 +63,13 @@ class TestLimitSizeFS(TestWrapFS):
def tearDown(self):
remove_all(self.fs, "/")
- self.assertEquals(self.fs.cur_size,0)
+ self.assertEqual(self.fs.cur_size,0)
super(TestLimitSizeFS,self).tearDown()
self.fs.close()
def test_storage_error(self):
total_written = 0
- for i in xrange(1024*2):
+ for i in range(1024*2):
try:
total_written += 1030
self.fs.setcontents("file %i" % i, b("C")*1030)
@@ -85,11 +85,11 @@ from fs.wrapfs.hidedotfilesfs import HideDotFilesFS
class TestHideDotFilesFS(unittest.TestCase):
def setUp(self):
- self.temp_dir = tempfile.mkdtemp(u"fstest")
- open(os.path.join(self.temp_dir, u".dotfile"), 'w').close()
- open(os.path.join(self.temp_dir, u"regularfile"), 'w').close()
- os.mkdir(os.path.join(self.temp_dir, u".dotdir"))
- os.mkdir(os.path.join(self.temp_dir, u"regulardir"))
+ self.temp_dir = tempfile.mkdtemp("fstest")
+ open(os.path.join(self.temp_dir, ".dotfile"), 'w').close()
+ open(os.path.join(self.temp_dir, "regularfile"), 'w').close()
+ os.mkdir(os.path.join(self.temp_dir, ".dotdir"))
+ os.mkdir(os.path.join(self.temp_dir, "regulardir"))
self.fs = HideDotFilesFS(osfs.OSFS(self.temp_dir))
def tearDown(self):
@@ -97,15 +97,15 @@ class TestHideDotFilesFS(unittest.TestCase):
self.fs.close()
def test_hidden(self):
- self.assertEquals(len(self.fs.listdir(hidden=False)), 2)
- self.assertEquals(len(list(self.fs.ilistdir(hidden=False))), 2)
+ self.assertEqual(len(self.fs.listdir(hidden=False)), 2)
+ self.assertEqual(len(list(self.fs.ilistdir(hidden=False))), 2)
def test_nonhidden(self):
- self.assertEquals(len(self.fs.listdir(hidden=True)), 4)
- self.assertEquals(len(list(self.fs.ilistdir(hidden=True))), 4)
+ self.assertEqual(len(self.fs.listdir(hidden=True)), 4)
+ self.assertEqual(len(list(self.fs.ilistdir(hidden=True))), 4)
def test_default(self):
- self.assertEquals(len(self.fs.listdir()), 2)
- self.assertEquals(len(list(self.fs.ilistdir())), 2)
+ self.assertEqual(len(self.fs.listdir()), 2)
+ self.assertEqual(len(list(self.fs.ilistdir())), 2)
--- fs/tests/test_xattr.py.orig 2022-03-04 17:14:43 UTC
+++ fs/tests/test_xattr.py
@@ -37,19 +37,19 @@ class XAttrTestCases:
def test_list_xattrs(self):
def do_list(p):
- self.assertEquals(sorted(self.fs.listxattrs(p)),[])
+ self.assertEqual(sorted(self.fs.listxattrs(p)),[])
self.fs.setxattr(p,"xattr1","value1")
- self.assertEquals(self.fs.getxattr(p,"xattr1"),"value1")
- self.assertEquals(sorted(self.fs.listxattrs(p)),["xattr1"])
- self.assertTrue(isinstance(self.fs.listxattrs(p)[0],unicode))
+ self.assertEqual(self.fs.getxattr(p,"xattr1"),"value1")
+ self.assertEqual(sorted(self.fs.listxattrs(p)),["xattr1"])
+ self.assertTrue(isinstance(self.fs.listxattrs(p)[0],str))
self.fs.setxattr(p,"attr2","value2")
- self.assertEquals(sorted(self.fs.listxattrs(p)),["attr2","xattr1"])
- self.assertTrue(isinstance(self.fs.listxattrs(p)[0],unicode))
- self.assertTrue(isinstance(self.fs.listxattrs(p)[1],unicode))
+ self.assertEqual(sorted(self.fs.listxattrs(p)),["attr2","xattr1"])
+ self.assertTrue(isinstance(self.fs.listxattrs(p)[0],str))
+ self.assertTrue(isinstance(self.fs.listxattrs(p)[1],str))
self.fs.delxattr(p,"xattr1")
- self.assertEquals(sorted(self.fs.listxattrs(p)),["attr2"])
+ self.assertEqual(sorted(self.fs.listxattrs(p)),["attr2"])
self.fs.delxattr(p,"attr2")
- self.assertEquals(sorted(self.fs.listxattrs(p)),[])
+ self.assertEqual(sorted(self.fs.listxattrs(p)),[])
self.fs.setcontents("test.txt",b("hello"))
do_list("test.txt")
self.fs.makedir("mystuff")
@@ -64,16 +64,16 @@ class XAttrTestCases:
self.fs.makedir("stuff")
self.fs.copy("a.txt","stuff/a.txt")
self.assertTrue(self.fs.exists("stuff/a.txt"))
- self.assertEquals(self.fs.getxattr("stuff/a.txt","myattr"),"myvalue")
- self.assertEquals(self.fs.getxattr("stuff/a.txt","testattr"),"testvalue")
- self.assertEquals(self.fs.getxattr("a.txt","myattr"),"myvalue")
- self.assertEquals(self.fs.getxattr("a.txt","testattr"),"testvalue")
+ self.assertEqual(self.fs.getxattr("stuff/a.txt","myattr"),"myvalue")
+ self.assertEqual(self.fs.getxattr("stuff/a.txt","testattr"),"testvalue")
+ self.assertEqual(self.fs.getxattr("a.txt","myattr"),"myvalue")
+ self.assertEqual(self.fs.getxattr("a.txt","testattr"),"testvalue")
self.fs.setxattr("stuff","dirattr","a directory")
self.fs.copydir("stuff","stuff2")
- self.assertEquals(self.fs.getxattr("stuff2/a.txt","myattr"),"myvalue")
- self.assertEquals(self.fs.getxattr("stuff2/a.txt","testattr"),"testvalue")
- self.assertEquals(self.fs.getxattr("stuff2","dirattr"),"a directory")
- self.assertEquals(self.fs.getxattr("stuff","dirattr"),"a directory")
+ self.assertEqual(self.fs.getxattr("stuff2/a.txt","myattr"),"myvalue")
+ self.assertEqual(self.fs.getxattr("stuff2/a.txt","testattr"),"testvalue")
+ self.assertEqual(self.fs.getxattr("stuff2","dirattr"),"a directory")
+ self.assertEqual(self.fs.getxattr("stuff","dirattr"),"a directory")
def test_move_xattrs(self):
self.fs.setcontents("a.txt",b("content"))
@@ -82,29 +82,29 @@ class XAttrTestCases:
self.fs.makedir("stuff")
self.fs.move("a.txt","stuff/a.txt")
self.assertTrue(self.fs.exists("stuff/a.txt"))
- self.assertEquals(self.fs.getxattr("stuff/a.txt","myattr"),"myvalue")
- self.assertEquals(self.fs.getxattr("stuff/a.txt","testattr"),"testvalue")
+ self.assertEqual(self.fs.getxattr("stuff/a.txt","myattr"),"myvalue")
+ self.assertEqual(self.fs.getxattr("stuff/a.txt","testattr"),"testvalue")
self.fs.setxattr("stuff","dirattr","a directory")
self.fs.movedir("stuff","stuff2")
- self.assertEquals(self.fs.getxattr("stuff2/a.txt","myattr"),"myvalue")
- self.assertEquals(self.fs.getxattr("stuff2/a.txt","testattr"),"testvalue")
- self.assertEquals(self.fs.getxattr("stuff2","dirattr"),"a directory")
+ self.assertEqual(self.fs.getxattr("stuff2/a.txt","myattr"),"myvalue")
+ self.assertEqual(self.fs.getxattr("stuff2/a.txt","testattr"),"testvalue")
+ self.assertEqual(self.fs.getxattr("stuff2","dirattr"),"a directory")
def test_remove_file(self):
def listxattrs(path):
return list(self.fs.listxattrs(path))
# Check that xattrs aren't preserved after a file is removed
self.fs.createfile("myfile")
- self.assertEquals(listxattrs("myfile"),[])
+ self.assertEqual(listxattrs("myfile"),[])
self.fs.setxattr("myfile","testattr","testvalue")
- self.assertEquals(listxattrs("myfile"),["testattr"])
+ self.assertEqual(listxattrs("myfile"),["testattr"])
self.fs.remove("myfile")
self.assertRaises(ResourceNotFoundError,listxattrs,"myfile")
self.fs.createfile("myfile")
- self.assertEquals(listxattrs("myfile"),[])
+ self.assertEqual(listxattrs("myfile"),[])
self.fs.setxattr("myfile","testattr2","testvalue2")
- self.assertEquals(listxattrs("myfile"),["testattr2"])
- self.assertEquals(self.fs.getxattr("myfile","testattr2"),"testvalue2")
+ self.assertEqual(listxattrs("myfile"),["testattr2"])
+ self.assertEqual(self.fs.getxattr("myfile","testattr2"),"testvalue2")
# Check that removing a file without xattrs still works
self.fs.createfile("myfile2")
self.fs.remove("myfile2")
@@ -114,16 +114,16 @@ class XAttrTestCases:
return list(self.fs.listxattrs(path))
# Check that xattrs aren't preserved after a dir is removed
self.fs.makedir("mydir")
- self.assertEquals(listxattrs("mydir"),[])
+ self.assertEqual(listxattrs("mydir"),[])
self.fs.setxattr("mydir","testattr","testvalue")
- self.assertEquals(listxattrs("mydir"),["testattr"])
+ self.assertEqual(listxattrs("mydir"),["testattr"])
self.fs.removedir("mydir")
self.assertRaises(ResourceNotFoundError,listxattrs,"mydir")
self.fs.makedir("mydir")
- self.assertEquals(listxattrs("mydir"),[])
+ self.assertEqual(listxattrs("mydir"),[])
self.fs.setxattr("mydir","testattr2","testvalue2")
- self.assertEquals(listxattrs("mydir"),["testattr2"])
- self.assertEquals(self.fs.getxattr("mydir","testattr2"),"testvalue2")
+ self.assertEqual(listxattrs("mydir"),["testattr2"])
+ self.assertEqual(self.fs.getxattr("mydir","testattr2"),"testvalue2")
# Check that removing a dir without xattrs still works
self.fs.makedir("mydir2")
self.fs.removedir("mydir2")
@@ -149,7 +149,7 @@ class TestXAttr_TempFS(unittest.TestCase,FSTestCases,X
except AttributeError:
td = self.fs.wrapped_fs._temp_dir
self.fs.close()
- self.assert_(not os.path.exists(td))
+ self.assertTrue(not os.path.exists(td))
def check(self, p):
try:
--- fs/tests/test_zipfs.py.orig 2022-03-04 17:14:43 UTC
+++ fs/tests/test_zipfs.py
@@ -52,7 +52,7 @@ class TestReadZipFS(unittest.TestCase):
return contents
def check_contents(path, expected):
- self.assert_(read_contents(path) == expected)
+ self.assertTrue(read_contents(path) == expected)
check_contents("a.txt", b("Hello, World!"))
check_contents("1.txt", b("1"))
check_contents("foo/bar/baz.txt", b("baz"))
@@ -62,30 +62,30 @@ class TestReadZipFS(unittest.TestCase):
return self.fs.getcontents(path, 'rb')
def check_contents(path, expected):
- self.assert_(read_contents(path) == expected)
+ self.assertTrue(read_contents(path) == expected)
check_contents("a.txt", b("Hello, World!"))
check_contents("1.txt", b("1"))
check_contents("foo/bar/baz.txt", b("baz"))
def test_is(self):
- self.assert_(self.fs.isfile('a.txt'))
- self.assert_(self.fs.isfile('1.txt'))
- self.assert_(self.fs.isfile('foo/bar/baz.txt'))
- self.assert_(self.fs.isdir('foo'))
- self.assert_(self.fs.isdir('foo/bar'))
- self.assert_(self.fs.exists('a.txt'))
- self.assert_(self.fs.exists('1.txt'))
- self.assert_(self.fs.exists('foo/bar/baz.txt'))
- self.assert_(self.fs.exists('foo'))
- self.assert_(self.fs.exists('foo/bar'))
+ self.assertTrue(self.fs.isfile('a.txt'))
+ self.assertTrue(self.fs.isfile('1.txt'))
+ self.assertTrue(self.fs.isfile('foo/bar/baz.txt'))
+ self.assertTrue(self.fs.isdir('foo'))
+ self.assertTrue(self.fs.isdir('foo/bar'))
+ self.assertTrue(self.fs.exists('a.txt'))
+ self.assertTrue(self.fs.exists('1.txt'))
+ self.assertTrue(self.fs.exists('foo/bar/baz.txt'))
+ self.assertTrue(self.fs.exists('foo'))
+ self.assertTrue(self.fs.exists('foo/bar'))
def test_listdir(self):
def check_listing(path, expected):
dir_list = self.fs.listdir(path)
- self.assert_(sorted(dir_list) == sorted(expected))
+ self.assertTrue(sorted(dir_list) == sorted(expected))
for item in dir_list:
- self.assert_(isinstance(item, unicode))
+ self.assertTrue(isinstance(item, str))
check_listing('/', ['a.txt', '1.txt', 'foo', 'b.txt'])
check_listing('foo', ['second.txt', 'bar'])
check_listing('foo/bar', ['baz.txt'])
@@ -108,7 +108,7 @@ class TestWriteZipFS(unittest.TestCase):
makefile("a.txt", b("Hello, World!"))
makefile("b.txt", b("b"))
- makefile(u"\N{GREEK SMALL LETTER ALPHA}/\N{GREEK CAPITAL LETTER OMEGA}.txt", b("this is the alpha and the omega"))
+ makefile("\N{GREEK SMALL LETTER ALPHA}/\N{GREEK CAPITAL LETTER OMEGA}.txt", b("this is the alpha and the omega"))
makefile("foo/bar/baz.txt", b("baz"))
makefile("foo/second.txt", b("hai"))
@@ -119,7 +119,7 @@ class TestWriteZipFS(unittest.TestCase):
def test_valid(self):
zf = zipfile.ZipFile(self.temp_filename, "r")
- self.assert_(zf.testzip() is None)
+ self.assertTrue(zf.testzip() is None)
zf.close()
def test_creation(self):
@@ -134,7 +134,7 @@ class TestWriteZipFS(unittest.TestCase):
check_contents("b.txt", b("b"))
check_contents("foo/bar/baz.txt", b("baz"))
check_contents("foo/second.txt", b("hai"))
- check_contents(u"\N{GREEK SMALL LETTER ALPHA}/\N{GREEK CAPITAL LETTER OMEGA}.txt", b("this is the alpha and the omega"))
+ check_contents("\N{GREEK SMALL LETTER ALPHA}/\N{GREEK CAPITAL LETTER OMEGA}.txt", b("this is the alpha and the omega"))
class TestAppendZipFS(TestWriteZipFS):
@@ -159,7 +159,7 @@ class TestAppendZipFS(TestWriteZipFS):
zip_fs = zipfs.ZipFS(self.temp_filename, 'a')
makefile("foo/bar/baz.txt", b("baz"))
- makefile(u"\N{GREEK SMALL LETTER ALPHA}/\N{GREEK CAPITAL LETTER OMEGA}.txt", b("this is the alpha and the omega"))
+ makefile("\N{GREEK SMALL LETTER ALPHA}/\N{GREEK CAPITAL LETTER OMEGA}.txt", b("this is the alpha and the omega"))
makefile("foo/second.txt", b("hai"))
zip_fs.close()
--- fs/utils.py.orig 2015-11-13 23:12:33 UTC
+++ fs/utils.py
@@ -384,7 +384,7 @@ def isfile(fs,path,info=None):
def contains_files(fs, path='/'):
"""Check if there are any files in the filesystem"""
try:
- iter(fs.walkfiles(path)).next()
+ next(iter(fs.walkfiles(path)))
except StopIteration:
return False
return True
@@ -426,7 +426,7 @@ def find_duplicates(fs,
for path in compare_paths:
file_sizes[fs.getsize(path)].append(path)
- size_duplicates = [paths for paths in file_sizes.itervalues() if len(paths) > 1]
+ size_duplicates = [paths for paths in file_sizes.values() if len(paths) > 1]
signatures = defaultdict(list)
@@ -453,7 +453,7 @@ def find_duplicates(fs,
# If 'quick' is True then the signature comparison is adequate (although
# it may result in false positives)
if quick:
- for paths in signatures.itervalues():
+ for paths in signatures.values():
if len(paths) > 1:
yield paths
return
@@ -482,7 +482,7 @@ def find_duplicates(fs,
# byte by byte.
# All path groups in this loop have the same size and same signature, so are
# highly likely to be identical.
- for paths in signatures.itervalues():
+ for paths in signatures.values():
while len(paths) > 1:
@@ -535,7 +535,7 @@ def print_fs(fs,
if file_out is None:
file_out = sys.stdout
- file_encoding = getattr(file_out, 'encoding', u'utf-8') or u'utf-8'
+ file_encoding = getattr(file_out, 'encoding', 'utf-8') or 'utf-8'
file_encoding = file_encoding.upper()
if terminal_colors is None:
@@ -546,44 +546,44 @@ def print_fs(fs,
def write(line):
if PY3:
- file_out.write((line + u'\n'))
+ file_out.write((line + '\n'))
else:
- file_out.write((line + u'\n').encode(file_encoding, 'replace'))
+ file_out.write((line + '\n').encode(file_encoding, 'replace'))
def wrap_prefix(prefix):
if not terminal_colors:
return prefix
- return u'\x1b[32m%s\x1b[0m' % prefix
+ return '\x1b[32m%s\x1b[0m' % prefix
def wrap_dirname(dirname):
if not terminal_colors:
return dirname
- return u'\x1b[1;34m%s\x1b[0m' % dirname
+ return '\x1b[1;34m%s\x1b[0m' % dirname
def wrap_error(msg):
if not terminal_colors:
return msg
- return u'\x1b[31m%s\x1b[0m' % msg
+ return '\x1b[31m%s\x1b[0m' % msg
def wrap_filename(fname):
if not terminal_colors:
return fname
- if fname.startswith(u'.'):
- fname = u'\x1b[33m%s\x1b[0m' % fname
+ if fname.startswith('.'):
+ fname = '\x1b[33m%s\x1b[0m' % fname
return fname
dircount = [0]
filecount = [0]
def print_dir(fs, path, levels=[]):
if file_encoding == 'UTF-8' and terminal_colors:
- char_vertline = u'│'
- char_newnode = u'├'
- char_line = u'──'
- char_corner = u'╰'
+ char_vertline = '│'
+ char_newnode = '├'
+ char_line = '──'
+ char_corner = '╰'
else:
- char_vertline = u'|'
- char_newnode = u'|'
- char_line = u'--'
- char_corner = u'`'
+ char_vertline = '|'
+ char_newnode = '|'
+ char_line = '--'
+ char_corner = '`'
try:
dirs = fs.listdir(path, dirs_only=True)
@@ -593,18 +593,18 @@ def print_fs(fs,
files = fs.listdir(path, files_only=True, wildcard=files_wildcard)
dir_listing = ( [(True, p) for p in dirs] +
[(False, p) for p in files] )
- except Exception, e:
+ except Exception as e:
prefix = ''.join([(char_vertline + ' ', ' ')[last] for last in levels]) + ' '
- write(wrap_prefix(prefix[:-1] + ' ') + wrap_error(u"unable to retrieve directory list (%s) ..." % str(e)))
+ write(wrap_prefix(prefix[:-1] + ' ') + wrap_error("unable to retrieve directory list (%s) ..." % str(e)))
return 0
if hide_dotfiles:
dir_listing = [(isdir, p) for isdir, p in dir_listing if not p.startswith('.')]
if dirs_first:
- dir_listing.sort(key = lambda (isdir, p):(not isdir, p.lower()))
+ dir_listing.sort(key = lambda isdir_p:(not isdir_p[0], isdir_p[1].lower()))
else:
- dir_listing.sort(key = lambda (isdir, p):p.lower())
+ dir_listing.sort(key = lambda isdir_p1:isdir_p1[1].lower())
for i, (is_dir, item) in enumerate(dir_listing):
if is_dir:
@@ -685,9 +685,9 @@ if __name__ == "__main__":
t1.tree()
t2 = TempFS()
- print t2.listdir()
+ print(t2.listdir())
movedir(t1, t2)
- print t2.listdir()
+ print(t2.listdir())
t1.tree()
t2.tree()
--- fs/watch.py.orig 2022-03-04 17:14:43 UTC
+++ fs/watch.py
@@ -32,7 +32,7 @@ an iterator over the change events.
import sys
import weakref
import threading
-import Queue
+import queue
import traceback
from fs.path import *
@@ -54,10 +54,10 @@ class EVENT(object):
self.path = path
def __str__(self):
- return unicode(self).encode("utf8")
+ return str(self).encode("utf8")
def __unicode__(self):
- return u"<fs.watch.%s object (path='%s') at %s>" % (self.__class__.__name__,self.path,hex(id(self)))
+ return "<fs.watch.%s object (path='%s') at %s>" % (self.__class__.__name__,self.path,hex(id(self)))
def clone(self,fs=None,path=None):
if fs is None:
@@ -102,7 +102,7 @@ class MOVED_DST(EVENT):
self.source = source
def __unicode__(self):
- return u"<fs.watch.%s object (path=%r,src=%r) at %s>" % (self.__class__.__name__,self.path,self.source,hex(id(self)))
+ return "<fs.watch.%s object (path=%r,src=%r) at %s>" % (self.__class__.__name__,self.path,self.source,hex(id(self)))
def clone(self,fs=None,path=None,source=None):
evt = super(MOVED_DST,self).clone(fs,path)
@@ -120,7 +120,7 @@ class MOVED_SRC(EVENT):
self.destination = destination
def __unicode__(self):
- return u"<fs.watch.%s object (path=%r,dst=%r) at %s>" % (self.__class__.__name__,self.path,self.destination,hex(id(self)))
+ return "<fs.watch.%s object (path=%r,dst=%r) at %s>" % (self.__class__.__name__,self.path,self.destination,hex(id(self)))
def clone(self,fs=None,path=None,destination=None):
evt = super(MOVED_SRC,self).clone(fs,path)
@@ -182,7 +182,7 @@ class Watcher(object):
try:
self.callback(event)
except Exception:
- print >>sys.stderr, "error in FS watcher callback", self.callback
+ print("error in FS watcher callback", self.callback, file=sys.stderr)
traceback.print_exc()
@@ -213,7 +213,7 @@ class WatchableFSMixin(FS):
if isinstance(watcher_or_callback,Watcher):
self._watchers[watcher_or_callback.path].remove(watcher_or_callback)
else:
- for watchers in self._watchers.itervalues():
+ for watchers in self._watchers.values():
for i,watcher in enumerate(watchers):
if watcher.callback is watcher_or_callback:
del watchers[i]
@@ -221,7 +221,7 @@ class WatchableFSMixin(FS):
def _find_watchers(self,callback):
"""Find watchers registered with the given callback."""
- for watchers in self._watchers.itervalues():
+ for watchers in self._watchers.values():
for watcher in watchers:
if watcher.callback is callback:
yield watcher
@@ -235,7 +235,7 @@ class WatchableFSMixin(FS):
if path is None:
path = event.path
if path is None:
- for watchers in self._watchers.itervalues():
+ for watchers in self._watchers.values():
for watcher in watchers:
watcher.handle_event(event)
else:
@@ -443,7 +443,7 @@ class WatchableFS(WatchableFSMixin,WrapFS):
def _post_move(self,src,dst,data):
(src_paths,dst_paths) = data
- for src_path,isdir in sorted(src_paths.items(),reverse=True):
+ for src_path,isdir in sorted(list(src_paths.items()),reverse=True):
path = pathjoin(src,src_path)
self.notify_watchers(REMOVED,path)
@@ -554,7 +554,7 @@ class PollingWatchableFS(WatchableFS):
else:
was_accessed = False
was_modified = False
- for (k,v) in new_info.iteritems():
+ for (k,v) in new_info.items():
if k not in old_info:
was_modified = True
break
@@ -612,7 +612,7 @@ class iter_changes(object):
def __init__(self,fs=None,path="/",events=None,**kwds):
self.closed = False
- self._queue = Queue.Queue()
+ self._queue = queue.Queue()
self._watching = set()
if fs is not None:
self.add_watcher(fs,path,events,**kwds)
@@ -628,7 +628,7 @@ class iter_changes(object):
raise StopIteration
try:
event = self._queue.get(timeout=timeout)
- except Queue.Empty:
+ except queue.Empty:
raise StopIteration
if event is None:
raise StopIteration
--- fs/wrapfs/__init__.py.orig 2015-04-12 17:24:29 UTC
+++ fs/wrapfs/__init__.py
@@ -32,12 +32,12 @@ def rewrite_errors(func):
def wrapper(self,*args,**kwds):
try:
return func(self,*args,**kwds)
- except ResourceError, e:
+ except ResourceError as e:
(exc_type,exc_inst,tb) = sys.exc_info()
try:
e.path = self._decode(e.path)
except (AttributeError, ValueError, TypeError):
- raise e, None, tb
+ raise e.with_traceback(tb)
raise
return wrapper
@@ -119,7 +119,7 @@ class WrapFS(FS):
return (mode, mode)
def __unicode__(self):
- return u"<%s: %s>" % (self.__class__.__name__,self.wrapped_fs,)
+ return "<%s: %s>" % (self.__class__.__name__,self.wrapped_fs,)
#def __str__(self):
# return unicode(self).encode(sys.getdefaultencoding(),"replace")
--- fs/wrapfs/debugfs.py.orig 2022-03-04 17:14:43 UTC
+++ fs/wrapfs/debugfs.py
@@ -66,7 +66,7 @@ class DebugFS(object):
logger.log(level, message)
def __parse_param(self, value):
- if isinstance(value, basestring):
+ if isinstance(value, str):
if len(value) > 60:
value = "%s ... (length %d)" % (repr(value[:60]), len(value))
else:
@@ -75,7 +75,7 @@ class DebugFS(object):
value = "%s (%d items)" % (repr(value[:3]), len(value))
elif isinstance(value, dict):
items = {}
- for k, v in value.items()[:3]:
+ for k, v in list(value.items())[:3]:
items[k] = v
value = "%s (%d items)" % (repr(items), len(value))
else:
@@ -84,7 +84,7 @@ class DebugFS(object):
def __parse_args(self, *arguments, **kwargs):
args = [self.__parse_param(a) for a in arguments]
- for k, v in kwargs.items():
+ for k, v in list(kwargs.items()):
args.append("%s=%s" % (k, self.__parse_param(v)))
args = ','.join(args)
@@ -105,10 +105,10 @@ class DebugFS(object):
try:
attr = getattr(self.__wrapped_fs, key)
- except AttributeError, e:
+ except AttributeError as e:
self.__log(DEBUG, "Asking for not implemented method %s" % key)
raise e
- except Exception, e:
+ except Exception as e:
self.__log(CRITICAL, "Exception %s: %s" % \
(e.__class__.__name__, str(e)))
raise e
@@ -122,19 +122,19 @@ class DebugFS(object):
try:
value = attr(*args, **kwargs)
self.__report("Call method", key, value, *args, **kwargs)
- except FSError, e:
+ except FSError as e:
self.__log(ERROR, "Call method %s%s -> Exception %s: %s" % \
(key, self.__parse_args(*args, **kwargs), \
e.__class__.__name__, str(e)))
(exc_type,exc_inst,tb) = sys.exc_info()
- raise e, None, tb
- except Exception, e:
+ raise e.with_traceback(tb)
+ except Exception as e:
self.__log(CRITICAL,
"Call method %s%s -> Non-FS exception %s: %s" %\
(key, self.__parse_args(*args, **kwargs), \
e.__class__.__name__, str(e)))
(exc_type,exc_inst,tb) = sys.exc_info()
- raise e, None, tb
+ raise e.with_traceback(tb)
return value
if self.__verbose:
--- fs/wrapfs/hidedotfilesfs.py.orig 2022-03-04 17:14:43 UTC
+++ fs/wrapfs/hidedotfilesfs.py
@@ -87,7 +87,7 @@ class HideDotFilesFS(WrapFS):
path = normpath(path)
iter_dir = iter(self.listdir(path,hidden=True))
try:
- iter_dir.next()
+ next(iter_dir)
except StopIteration:
return True
return False
--- fs/wrapfs/lazyfs.py.orig 2022-03-04 17:14:43 UTC
+++ fs/wrapfs/lazyfs.py
@@ -39,14 +39,14 @@ class LazyFS(WrapFS):
# It appears that python2.5 has trouble printing out
# classes that define a __unicode__ method.
try:
- return u"<LazyFS: %s>" % (self._fsclass,)
+ return "<LazyFS: %s>" % (self._fsclass,)
except TypeError:
try:
- return u"<LazyFS: %s>" % (self._fsclass.__name__,)
+ return "<LazyFS: %s>" % (self._fsclass.__name__,)
except AttributeError:
- return u"<LazyFS: <unprintable>>"
+ return "<LazyFS: <unprintable>>"
else:
- return u"<LazyFS: %s>" % (wrapped_fs,)
+ return "<LazyFS: %s>" % (wrapped_fs,)
def __getstate__(self):
state = super(LazyFS,self).__getstate__()
--- fs/wrapfs/limitsizefs.py.orig 2022-03-04 17:14:43 UTC
+++ fs/wrapfs/limitsizefs.py
@@ -9,7 +9,7 @@ total size of files stored in the wrapped FS.
"""
-from __future__ import with_statement
+
from fs.errors import *
from fs.path import *
--- fs/wrapfs/subfs.py.orig 2022-03-04 17:14:43 UTC
+++ fs/wrapfs/subfs.py
@@ -34,7 +34,7 @@ class SubFS(WrapFS):
return '<SubFS: %s/%s>' % (self.wrapped_fs, self.sub_dir.lstrip('/'))
def __unicode__(self):
- return u'<SubFS: %s/%s>' % (self.wrapped_fs, self.sub_dir.lstrip('/'))
+ return '<SubFS: %s/%s>' % (self.wrapped_fs, self.sub_dir.lstrip('/'))
def __repr__(self):
return "SubFS(%r, %r)" % (self.wrapped_fs, self.sub_dir)
--- fs/xattrs.py.orig 2015-04-12 17:24:29 UTC
+++ fs/xattrs.py
@@ -23,7 +23,7 @@ if it has native xattr support, and return a wrapped v
import sys
try:
- import cPickle as pickle
+ import pickle as pickle
except ImportError:
import pickle
@@ -104,7 +104,7 @@ class SimulateXAttr(WrapFS):
"""Set an extended attribute on the given path."""
if not self.exists(path):
raise ResourceNotFoundError(path)
- key = unicode(key)
+ key = str(key)
attrs = self._get_attr_dict(path)
attrs[key] = str(value)
self._set_attr_dict(path, attrs)
@@ -133,7 +133,7 @@ class SimulateXAttr(WrapFS):
"""List all the extended attribute keys set on the given path."""
if not self.exists(path):
raise ResourceNotFoundError(path)
- return self._get_attr_dict(path).keys()
+ return list(self._get_attr_dict(path).keys())
def _encode(self,path):
"""Prevent requests for operations on .xattr files."""
@@ -189,7 +189,7 @@ class SimulateXAttr(WrapFS):
d_attr_file = self._get_attr_path(dst)
try:
self.wrapped_fs.copy(s_attr_file,d_attr_file,overwrite=True)
- except ResourceNotFoundError,e:
+ except ResourceNotFoundError as e:
pass
def move(self,src,dst,**kwds):
--- fs/zipfs.py.orig 2015-04-12 17:25:37 UTC
+++ fs/zipfs.py
@@ -16,9 +16,9 @@ from fs.filelike import StringIO
from fs import iotools
from zipfile import ZipFile, ZIP_DEFLATED, ZIP_STORED, BadZipfile, LargeZipFile
-from memoryfs import MemoryFS
+from .memoryfs import MemoryFS
-import tempfs
+from . import tempfs
from six import PY3
@@ -74,7 +74,7 @@ class _ExceptionProxy(object):
def __setattr__(self, name, value):
raise ValueError("Zip file has been closed")
- def __nonzero__(self):
+ def __bool__(self):
return False
@@ -117,7 +117,7 @@ class ZipFS(FS):
self.zip_mode = mode
self.encoding = encoding
- if isinstance(zip_file, basestring):
+ if isinstance(zip_file, str):
zip_file = os.path.expanduser(os.path.expandvars(zip_file))
zip_file = os.path.normpath(os.path.abspath(zip_file))
self._zip_file_string = True
@@ -126,10 +126,10 @@ class ZipFS(FS):
try:
self.zf = ZipFile(zip_file, mode, compression_type, allow_zip_64)
- except BadZipfile, bzf:
+ except BadZipfile as bzf:
raise ZipOpenError("Not a zip file or corrupt (%s)" % str(zip_file),
details=bzf)
- except IOError, ioe:
+ except IOError as ioe:
if str(ioe).startswith('[Errno 22] Invalid argument'):
raise ZipOpenError("Not a zip file or corrupt (%s)" % str(zip_file),
details=ioe)
@@ -151,7 +151,7 @@ class ZipFS(FS):
return "<ZipFS: %s>" % self.zip_path
def __unicode__(self):
- return u"<ZipFS: %s>" % self.zip_path
+ return "<ZipFS: %s>" % self.zip_path
def _decode_path(self, path):
if PY3:
@@ -280,7 +280,7 @@ class ZipFS(FS):
try:
zi = self.zf.getinfo(self._encode_path(path))
zinfo = dict((attrib, getattr(zi, attrib)) for attrib in dir(zi) if not attrib.startswith('_'))
- for k, v in zinfo.iteritems():
+ for k, v in zinfo.items():
if callable(v):
zinfo[k] = v()
except KeyError:
--- setup.py.orig 2015-11-14 11:44:01 UTC
+++ setup.py
@@ -38,8 +38,6 @@ with open('README.txt', 'r') as f:
extra = {}
-if PY3:
- extra["use_2to3"] = True
setup(install_requires=['setuptools', 'six'],
name='fs',