updated instances of octal literals to use the format 0o123 for python3 compatibility

This commit is contained in:
heartsucker 2019-03-28 14:02:56 +01:00
parent 7511b5956b
commit 129ef22185
No known key found for this signature in database
GPG Key ID: C49FAAAA25756E79
15 changed files with 101 additions and 77 deletions

1
newsfragments/3015.other Normal file
View File

@ -0,0 +1 @@
Updated instances of octal literals to use the format 0o123 for Python3 compatibility.

View File

@ -1,18 +1,20 @@
docs/ docs/
integration/ integration/
misc/build_helpers/check-build.py
misc/build_helpers/gen-package-table.py
misc/build_helpers/run-deprecations.py
misc/build_helpers/show-tool-versions.py
misc/build_helpers/test-osx-pkg.py misc/build_helpers/test-osx-pkg.py
misc/coding_tools/check-debugging.py misc/coding_tools/check-debugging.py
misc/coding_tools/check-umids.py
misc/coding_tools/coverage2el.py misc/coding_tools/coverage2el.py
misc/coding_tools/find-trailing-spaces.py
misc/coding_tools/fixshebangs.py misc/coding_tools/fixshebangs.py
misc/coding_tools/graph-deps.py misc/coding_tools/graph-deps.py
misc/incident-gatherer/classify_tahoe.py misc/coding_tools/make-canary-files.py
misc/operations_helpers/provisioning/provisioning.py misc/incident-gatherer/
misc/operations_helpers/provisioning/reliability.py misc/operations_helpers/
misc/operations_helpers/provisioning/run.py misc/simulators/
misc/operations_helpers/provisioning/test_provisioning.py
misc/operations_helpers/provisioning/util.py
misc/operations_helpers/provisioning/web_reliability.py
misc/operations_helpers/spacetime/diskwatcher.py
release-tools/ release-tools/
setup.py setup.py
src/allmydata/_auto_deps.py src/allmydata/_auto_deps.py
@ -48,11 +50,14 @@ src/allmydata/mutable/publish.py
src/allmydata/mutable/repairer.py src/allmydata/mutable/repairer.py
src/allmydata/mutable/servermap.py src/allmydata/mutable/servermap.py
src/allmydata/nodemaker.py src/allmydata/nodemaker.py
src/allmydata/node.py
src/allmydata/scripts/admin.py src/allmydata/scripts/admin.py
src/allmydata/scripts/cli.py src/allmydata/scripts/cli.py
src/allmydata/scripts/common.py src/allmydata/scripts/common.py
src/allmydata/scripts/create_node.py
src/allmydata/scripts/default_nodedir.py src/allmydata/scripts/default_nodedir.py
src/allmydata/scripts/__init__.py src/allmydata/scripts/__init__.py
src/allmydata/scripts/magic_folder_cli.py
src/allmydata/scripts/stats_gatherer.py src/allmydata/scripts/stats_gatherer.py
src/allmydata/scripts/tahoe_add_alias.py src/allmydata/scripts/tahoe_add_alias.py
src/allmydata/scripts/tahoe_backup.py src/allmydata/scripts/tahoe_backup.py
@ -61,8 +66,13 @@ src/allmydata/scripts/tahoe_restart.py
src/allmydata/scripts/tahoe_run.py src/allmydata/scripts/tahoe_run.py
src/allmydata/scripts/tahoe_start.py src/allmydata/scripts/tahoe_start.py
src/allmydata/scripts/tahoe_status.py src/allmydata/scripts/tahoe_status.py
src/allmydata/storage_client.py src/allmydata/stats.py
src/allmydata/storage/ src/allmydata/storage/
src/allmydata/test/bench_dirnode.py
src/allmydata/test/check_grid.py
src/allmydata/test/check_load.py
src/allmydata/test/check_memory.py
src/allmydata/test/check_speed.py
src/allmydata/test/cli/common.py src/allmydata/test/cli/common.py
src/allmydata/test/cli/__init__.py src/allmydata/test/cli/__init__.py
src/allmydata/test/cli/test_alias.py src/allmydata/test/cli/test_alias.py
@ -71,6 +81,7 @@ src/allmydata/test/cli/test_daemonize.py
src/allmydata/test/cli/test_invite.py src/allmydata/test/cli/test_invite.py
src/allmydata/test/cli/test_start.py src/allmydata/test/cli/test_start.py
src/allmydata/test/cli/test_status.py src/allmydata/test/cli/test_status.py
src/allmydata/test/common_util.py
src/allmydata/test/common_web.py src/allmydata/test/common_web.py
src/allmydata/test/eliotutil.py src/allmydata/test/eliotutil.py
src/allmydata/test/__init__.py src/allmydata/test/__init__.py
@ -85,7 +96,10 @@ src/allmydata/test/mutable/test_interoperability.py
src/allmydata/test/mutable/test_multiple_encodings.py src/allmydata/test/mutable/test_multiple_encodings.py
src/allmydata/test/mutable/test_multiple_versions.py src/allmydata/test/mutable/test_multiple_versions.py
src/allmydata/test/mutable/test_repair.py src/allmydata/test/mutable/test_repair.py
src/allmydata/test/mutable/test_roundtrip.py
src/allmydata/test/mutable/test_servermap.py src/allmydata/test/mutable/test_servermap.py
src/allmydata/test/mutable/test_update.py
src/allmydata/test/mutable/test_version.py
src/allmydata/test/mutable/util.py src/allmydata/test/mutable/util.py
src/allmydata/test/plugins/tahoe_lafs_dropin.py src/allmydata/test/plugins/tahoe_lafs_dropin.py
src/allmydata/test/status.py src/allmydata/test/status.py
@ -98,6 +112,7 @@ src/allmydata/test/test_connections.py
src/allmydata/test/test_eliotutil.py src/allmydata/test/test_eliotutil.py
src/allmydata/test/test_encode.py src/allmydata/test/test_encode.py
src/allmydata/test/test_filenode.py src/allmydata/test/test_filenode.py
src/allmydata/test/test_ftp.py
src/allmydata/test/test_happiness.py src/allmydata/test/test_happiness.py
src/allmydata/test/test_helper.py src/allmydata/test/test_helper.py
src/allmydata/test/test_hung_server.py src/allmydata/test/test_hung_server.py
@ -108,9 +123,11 @@ src/allmydata/test/test_inotify.py
src/allmydata/test/test_introducer.py src/allmydata/test/test_introducer.py
src/allmydata/test/test_iputil.py src/allmydata/test/test_iputil.py
src/allmydata/test/test_json_metadata.py src/allmydata/test/test_json_metadata.py
src/allmydata/test/test_magic_folder.py
src/allmydata/test/test_magicpath.py src/allmydata/test/test_magicpath.py
src/allmydata/test/test_multi_introducers.py src/allmydata/test/test_multi_introducers.py
src/allmydata/test/test_netstring.py src/allmydata/test/test_netstring.py
src/allmydata/test/test_node.py
src/allmydata/test/test_no_network.py src/allmydata/test/test_no_network.py
src/allmydata/test/test_observer.py src/allmydata/test/test_observer.py
src/allmydata/test/test_runner.py src/allmydata/test/test_runner.py
@ -121,7 +138,11 @@ src/allmydata/test/test_uri.py
src/allmydata/test/test_version.py src/allmydata/test/test_version.py
src/allmydata/test/web/common.py src/allmydata/test/web/common.py
src/allmydata/test/web/__init__.py src/allmydata/test/web/__init__.py
src/allmydata/test/web/matchers.py
src/allmydata/test/web/test_grid.py
src/allmydata/test/web/test_introducer.py src/allmydata/test/web/test_introducer.py
src/allmydata/test/web/test_logs.py
src/allmydata/test/web/test_private.py
src/allmydata/test/web/test_root.py src/allmydata/test/web/test_root.py
src/allmydata/test/web/test_token.py src/allmydata/test/web/test_token.py
src/allmydata/test/web/test_util.py src/allmydata/test/web/test_util.py
@ -149,6 +170,7 @@ src/allmydata/util/nummedobj.py
src/allmydata/util/observer.py src/allmydata/util/observer.py
src/allmydata/util/pipeline.py src/allmydata/util/pipeline.py
src/allmydata/util/pkgresutil.py src/allmydata/util/pkgresutil.py
src/allmydata/util/pollmixin.py
src/allmydata/util/progress.py src/allmydata/util/progress.py
src/allmydata/util/repeatable_random.py src/allmydata/util/repeatable_random.py
src/allmydata/util/rrefutil.py src/allmydata/util/rrefutil.py
@ -157,9 +179,10 @@ src/allmydata/util/statistics.py
src/allmydata/util/tor_provider.py src/allmydata/util/tor_provider.py
src/allmydata/util/verlib.py src/allmydata/util/verlib.py
src/allmydata/util/yamlutil.py src/allmydata/util/yamlutil.py
src/allmydata/_version.py
src/allmydata/watchdog/ src/allmydata/watchdog/
src/allmydata/web/ src/allmydata/web/
src/allmydata/webish.py
src/allmydata/windows/__init__.py src/allmydata/windows/__init__.py
src/allmydata/windows/tahoesvc.py src/allmydata/windows/tahoesvc.py
static/tahoe.py static/tahoe.py
ws_client.py

View File

@ -217,7 +217,7 @@ class Handler(object):
# Twisted-15.0.0 expects a # Twisted-15.0.0 expects a
# twisted.python.filepath.Permissions , and calls its # twisted.python.filepath.Permissions , and calls its
# .shorthand() method. This provides both. # .shorthand() method. This provides both.
value = IntishPermissions(0600) value = IntishPermissions(0o600)
elif key == "hardlinks": elif key == "hardlinks":
value = 1 value = 1
elif key == "modified": elif key == "modified":

View File

@ -283,10 +283,10 @@ def fix_magic_folder_config(yaml_fname, name, config):
# make sure directory for magic folder exists # make sure directory for magic folder exists
dir_fp = to_filepath(config['directory']) dir_fp = to_filepath(config['directory'])
umask = config.setdefault('umask', 0077) umask = config.setdefault('umask', 0o077)
try: try:
os.mkdir(dir_fp.path, 0777 & (~ umask)) os.mkdir(dir_fp.path, 0o777 & (~ umask))
except OSError as e: except OSError as e:
if EEXIST != e.errno: if EEXIST != e.errno:
# Report some unknown problem. # Report some unknown problem.
@ -1645,9 +1645,9 @@ class WriteFileMixin(object):
replacement_path_u = abspath_u + u".tmp" # FIXME more unique replacement_path_u = abspath_u + u".tmp" # FIXME more unique
initial_path_u = os.path.dirname(abspath_u) initial_path_u = os.path.dirname(abspath_u)
fileutil.make_dirs_with_absolute_mode(local_path_u, initial_path_u, (~ self._umask) & 0777) fileutil.make_dirs_with_absolute_mode(local_path_u, initial_path_u, (~ self._umask) & 0o777)
fileutil.write(replacement_path_u, file_contents) fileutil.write(replacement_path_u, file_contents)
os.chmod(replacement_path_u, (~ self._umask) & 0666) os.chmod(replacement_path_u, (~ self._umask) & 0o666)
# FUDGE_SECONDS is used to determine if another process has # FUDGE_SECONDS is used to determine if another process has
# written to the same file concurrently. This is described in # written to the same file concurrently. This is described in

View File

@ -214,7 +214,7 @@ def _populate_attrs(childnode, metadata, size=None):
if childnode and childnode.is_unknown(): if childnode and childnode.is_unknown():
perms = 0 perms = 0
elif childnode and IDirectoryNode.providedBy(childnode): elif childnode and IDirectoryNode.providedBy(childnode):
perms = S_IFDIR | 0777 perms = S_IFDIR | 0o777
else: else:
# For files, omit the size if we don't immediately know it. # For files, omit the size if we don't immediately know it.
if childnode and size is None: if childnode and size is None:
@ -222,11 +222,11 @@ def _populate_attrs(childnode, metadata, size=None):
if size is not None: if size is not None:
_assert(isinstance(size, (int, long)) and not isinstance(size, bool), size=size) _assert(isinstance(size, (int, long)) and not isinstance(size, bool), size=size)
attrs['size'] = size attrs['size'] = size
perms = S_IFREG | 0666 perms = S_IFREG | 0o666
if metadata: if metadata:
if metadata.get('no-write', False): if metadata.get('no-write', False):
perms &= S_IFDIR | S_IFREG | 0555 # clear 'w' bits perms &= S_IFDIR | S_IFREG | 0o555 # clear 'w' bits
# See webapi.txt for what these times mean. # See webapi.txt for what these times mean.
# We would prefer to omit atime, but SFTP version 3 can only # We would prefer to omit atime, but SFTP version 3 can only

View File

@ -784,7 +784,7 @@ class Node(service.MultiService):
# need to send a pid to the foolscap log here. # need to send a pid to the foolscap log here.
twlog.msg("My pid: %s" % os.getpid()) twlog.msg("My pid: %s" % os.getpid())
try: try:
os.chmod("twistd.pid", 0644) os.chmod("twistd.pid", 0o644)
except EnvironmentError: except EnvironmentError:
pass pass

View File

@ -426,7 +426,7 @@ def create_node(config):
else: else:
print(" {}: [sensitive data; see tahoe.cfg]".format(k), file=out) print(" {}: [sensitive data; see tahoe.cfg]".format(k), file=out)
fileutil.make_dirs(os.path.join(basedir, "private"), 0700) fileutil.make_dirs(os.path.join(basedir, "private"), 0o700)
with open(os.path.join(basedir, "tahoe.cfg"), "w") as c: with open(os.path.join(basedir, "tahoe.cfg"), "w") as c:
yield write_node_config(c, config) yield write_node_config(c, config)
write_client_config(c, config) write_client_config(c, config)
@ -465,7 +465,7 @@ def create_introducer(config):
os.mkdir(basedir) os.mkdir(basedir)
write_tac(basedir, "introducer") write_tac(basedir, "introducer")
fileutil.make_dirs(os.path.join(basedir, "private"), 0700) fileutil.make_dirs(os.path.join(basedir, "private"), 0o700)
with open(os.path.join(basedir, "tahoe.cfg"), "w") as c: with open(os.path.join(basedir, "tahoe.cfg"), "w") as c:
yield write_node_config(c, config) yield write_node_config(c, config)

View File

@ -466,7 +466,7 @@ class Backup(GridTestMixin, CLITestMixin, StallMixin, unittest.TestCase):
# This is necessary for the temp files to be correctly removed # This is necessary for the temp files to be correctly removed
def _cleanup(self): def _cleanup(self):
os.chmod(os.path.join(source, "foo.txt"), 0644) os.chmod(os.path.join(source, "foo.txt"), 0o644)
d.addCallback(_cleanup) d.addCallback(_cleanup)
d.addErrback(_cleanup) d.addErrback(_cleanup)
@ -501,7 +501,7 @@ class Backup(GridTestMixin, CLITestMixin, StallMixin, unittest.TestCase):
# This is necessary for the temp files to be correctly removed # This is necessary for the temp files to be correctly removed
def _cleanup(self): def _cleanup(self):
os.chmod(os.path.join(source, "test"), 0655) os.chmod(os.path.join(source, "test"), 0o655)
d.addCallback(_cleanup) d.addCallback(_cleanup)
d.addErrback(_cleanup) d.addErrback(_cleanup)
return d return d

View File

@ -194,7 +194,7 @@ def create_no_network_client(basedir):
does no actual networking but has the same API. does no actual networking but has the same API.
""" """
basedir = abspath_expanduser_unicode(unicode(basedir)) basedir = abspath_expanduser_unicode(unicode(basedir))
fileutil.make_dirs(os.path.join(basedir, "private"), 0700) fileutil.make_dirs(os.path.join(basedir, "private"), 0o700)
from allmydata.client import read_config from allmydata.client import read_config
config = read_config(basedir, u'client.port') config = read_config(basedir, u'client.port')

View File

@ -94,12 +94,12 @@ class Handler(GridTestMixin, ReallyEqualMixin, unittest.TestCase):
expected_root = [ expected_root = [
('loop', ('loop',
[0, True, ftpd.IntishPermissions(0600), 1, self.FALL_OF_BERLIN_WALL, 'alice', 'alice', '??']), [0, True, ftpd.IntishPermissions(0o600), 1, self.FALL_OF_BERLIN_WALL, 'alice', 'alice', '??']),
('immutable', ('immutable',
[23, False, ftpd.IntishPermissions(0600), 1, self.TURN_OF_MILLENIUM, 'alice', 'alice', '??']), [23, False, ftpd.IntishPermissions(0o600), 1, self.TURN_OF_MILLENIUM, 'alice', 'alice', '??']),
('mutable', ('mutable',
# timestamp should be 0 if no timestamp metadata is present # timestamp should be 0 if no timestamp metadata is present
[0, False, ftpd.IntishPermissions(0600), 1, 0, 'alice', 'alice', '??'])] [0, False, ftpd.IntishPermissions(0o600), 1, 0, 'alice', 'alice', '??'])]
d.addCallback(lambda root: self._compareDirLists(root, expected_root)) d.addCallback(lambda root: self._compareDirLists(root, expected_root))

View File

@ -2281,23 +2281,23 @@ class MockTest(SingleMagicFolderTestMixin, AsyncTestCase):
readonly_dircap = n.get_readonly_uri() readonly_dircap = n.get_readonly_uri()
self.shouldFail(ValueError, 'does not exist', 'does not exist', self.shouldFail(ValueError, 'does not exist', 'does not exist',
MagicFolder, client, upload_dircap, '', doesnotexist, magicfolderdb, 0077, 'default') MagicFolder, client, upload_dircap, '', doesnotexist, magicfolderdb, 0o077, 'default')
self.shouldFail(ValueError, 'is not a directory', 'is not a directory', self.shouldFail(ValueError, 'is not a directory', 'is not a directory',
MagicFolder, client, upload_dircap, '', not_a_dir, magicfolderdb, 0077, 'default') MagicFolder, client, upload_dircap, '', not_a_dir, magicfolderdb, 0o077, 'default')
self.shouldFail(AssertionError, 'bad upload.dircap', 'does not refer to a directory', self.shouldFail(AssertionError, 'bad upload.dircap', 'does not refer to a directory',
MagicFolder, client, 'bad', '', errors_dir, magicfolderdb, 0077, 'default') MagicFolder, client, 'bad', '', errors_dir, magicfolderdb, 0o077, 'default')
self.shouldFail(AssertionError, 'non-directory upload.dircap', 'does not refer to a directory', self.shouldFail(AssertionError, 'non-directory upload.dircap', 'does not refer to a directory',
MagicFolder, client, 'URI:LIT:foo', '', errors_dir, magicfolderdb, 0077, 'default') MagicFolder, client, 'URI:LIT:foo', '', errors_dir, magicfolderdb, 0o077, 'default')
self.shouldFail(AssertionError, 'readonly upload.dircap', 'is not a writecap to a directory', self.shouldFail(AssertionError, 'readonly upload.dircap', 'is not a writecap to a directory',
MagicFolder, client, readonly_dircap, '', errors_dir, magicfolderdb, 0077, 'default') MagicFolder, client, readonly_dircap, '', errors_dir, magicfolderdb, 0o077, 'default')
self.shouldFail(AssertionError, 'collective dircap', 'is not a readonly cap to a directory', self.shouldFail(AssertionError, 'collective dircap', 'is not a readonly cap to a directory',
MagicFolder, client, upload_dircap, upload_dircap, errors_dir, magicfolderdb, 0077, 'default') MagicFolder, client, upload_dircap, upload_dircap, errors_dir, magicfolderdb, 0o077, 'default')
def _not_implemented(): def _not_implemented():
raise NotImplementedError("blah") raise NotImplementedError("blah")
self.patch(magic_folder, 'get_inotify_module', _not_implemented) self.patch(magic_folder, 'get_inotify_module', _not_implemented)
self.shouldFail(NotImplementedError, 'unsupported', 'blah', self.shouldFail(NotImplementedError, 'unsupported', 'blah',
MagicFolder, client, upload_dircap, '', errors_dir, magicfolderdb, 0077, 'default') MagicFolder, client, upload_dircap, '', errors_dir, magicfolderdb, 0o077, 'default')
d.addCallback(_check_errors) d.addCallback(_check_errors)
return d.result return d.result
@ -2310,7 +2310,7 @@ class MockTest(SingleMagicFolderTestMixin, AsyncTestCase):
pass pass
writefile = TestWriteFileMixin() writefile = TestWriteFileMixin()
writefile._umask = 0077 writefile._umask = 0o077
# create a file with name "foobar" with content "foo" # create a file with name "foobar" with content "foo"
# write downloaded file content "bar" into "foobar" with is_conflict = False # write downloaded file content "bar" into "foobar" with is_conflict = False

View File

@ -299,7 +299,7 @@ class TestCase(testutil.SignalMixin, unittest.TestCase):
privdir = os.path.join(basedir, "private") privdir = os.path.join(basedir, "private")
st = os.stat(privdir) st = os.stat(privdir)
bits = stat.S_IMODE(st[stat.ST_MODE]) bits = stat.S_IMODE(st[stat.ST_MODE])
self.failUnless(bits & 0001 == 0, bits) self.failUnless(bits & 0o001 == 0, bits)
@defer.inlineCallbacks @defer.inlineCallbacks
def test_logdir_is_str(self): def test_logdir_is_str(self):

View File

@ -293,16 +293,16 @@ class Handler(GridTestMixin, ShouldFailMixin, ReallyEqualMixin, unittest.TestCas
gross = u"gro\u00DF".encode("utf-8") gross = u"gro\u00DF".encode("utf-8")
expected_root = [ expected_root = [
('empty_lit_dir', r'dr-xr-xr-x .* 0 .* empty_lit_dir$', {'permissions': S_IFDIR | 0555}), ('empty_lit_dir', r'dr-xr-xr-x .* 0 .* empty_lit_dir$', {'permissions': S_IFDIR | 0o555}),
(gross, r'-rw-rw-rw- .* 1010 .* '+gross+'$', {'permissions': S_IFREG | 0666, 'size': 1010}), (gross, r'-rw-rw-rw- .* 1010 .* '+gross+'$', {'permissions': S_IFREG | 0o666, 'size': 1010}),
# The fall of the Berlin wall may have been on 9th or 10th November 1989 depending on the gateway's timezone. # The fall of the Berlin wall may have been on 9th or 10th November 1989 depending on the gateway's timezone.
#('loop', r'drwxrwxrwx .* 0 Nov (09|10) 1989 loop$', {'permissions': S_IFDIR | 0777}), #('loop', r'drwxrwxrwx .* 0 Nov (09|10) 1989 loop$', {'permissions': S_IFDIR | 0777}),
('loop', r'drwxrwxrwx .* 0 .* loop$', {'permissions': S_IFDIR | 0777}), ('loop', r'drwxrwxrwx .* 0 .* loop$', {'permissions': S_IFDIR | 0o777}),
('mutable', r'-rw-rw-rw- .* 0 .* mutable$', {'permissions': S_IFREG | 0666}), ('mutable', r'-rw-rw-rw- .* 0 .* mutable$', {'permissions': S_IFREG | 0o666}),
('readonly', r'-r--r--r-- .* 0 .* readonly$', {'permissions': S_IFREG | 0444}), ('readonly', r'-r--r--r-- .* 0 .* readonly$', {'permissions': S_IFREG | 0o444}),
('small', r'-rw-rw-rw- .* 10 .* small$', {'permissions': S_IFREG | 0666, 'size': 10}), ('small', r'-rw-rw-rw- .* 10 .* small$', {'permissions': S_IFREG | 0o666, 'size': 10}),
('small2', r'-rw-rw-rw- .* 26 .* small2$', {'permissions': S_IFREG | 0666, 'size': 26}), ('small2', r'-rw-rw-rw- .* 26 .* small2$', {'permissions': S_IFREG | 0o666, 'size': 26}),
('tiny_lit_dir', r'dr-xr-xr-x .* 0 .* tiny_lit_dir$', {'permissions': S_IFDIR | 0555}), ('tiny_lit_dir', r'dr-xr-xr-x .* 0 .* tiny_lit_dir$', {'permissions': S_IFDIR | 0o555}),
('unknown', r'\?--------- .* 0 .* unknown$', {'permissions': 0}), ('unknown', r'\?--------- .* 0 .* unknown$', {'permissions': 0}),
] ]
@ -320,20 +320,20 @@ class Handler(GridTestMixin, ShouldFailMixin, ReallyEqualMixin, unittest.TestCas
# The UTC epoch may either be in Jan 1 1970 or Dec 31 1969 depending on the gateway's timezone. # The UTC epoch may either be in Jan 1 1970 or Dec 31 1969 depending on the gateway's timezone.
expected_tiny_lit = [ expected_tiny_lit = [
('short', r'-r--r--r-- .* 8 (Jan 01 1970|Dec 31 1969) short$', {'permissions': S_IFREG | 0444, 'size': 8}), ('short', r'-r--r--r-- .* 8 (Jan 01 1970|Dec 31 1969) short$', {'permissions': S_IFREG | 0o444, 'size': 8}),
] ]
d.addCallback(lambda ign: self.handler.openDirectory("tiny_lit_dir")) d.addCallback(lambda ign: self.handler.openDirectory("tiny_lit_dir"))
d.addCallback(lambda res: self._compareDirLists(res, expected_tiny_lit)) d.addCallback(lambda res: self._compareDirLists(res, expected_tiny_lit))
d.addCallback(lambda ign: self.handler.getAttrs("small", True)) d.addCallback(lambda ign: self.handler.getAttrs("small", True))
d.addCallback(lambda attrs: self._compareAttributes(attrs, {'permissions': S_IFREG | 0666, 'size': 10})) d.addCallback(lambda attrs: self._compareAttributes(attrs, {'permissions': S_IFREG | 0o666, 'size': 10}))
d.addCallback(lambda ign: self.handler.setAttrs("small", {})) d.addCallback(lambda ign: self.handler.setAttrs("small", {}))
d.addCallback(lambda res: self.failUnlessReallyEqual(res, None)) d.addCallback(lambda res: self.failUnlessReallyEqual(res, None))
d.addCallback(lambda ign: self.handler.getAttrs("small", True)) d.addCallback(lambda ign: self.handler.getAttrs("small", True))
d.addCallback(lambda attrs: self._compareAttributes(attrs, {'permissions': S_IFREG | 0666, 'size': 10})) d.addCallback(lambda attrs: self._compareAttributes(attrs, {'permissions': S_IFREG | 0o666, 'size': 10}))
d.addCallback(lambda ign: d.addCallback(lambda ign:
self.shouldFailWithSFTPError(sftp.FX_OP_UNSUPPORTED, "setAttrs size", self.shouldFailWithSFTPError(sftp.FX_OP_UNSUPPORTED, "setAttrs size",
@ -408,10 +408,10 @@ class Handler(GridTestMixin, ShouldFailMixin, ReallyEqualMixin, unittest.TestCas
rf.readChunk, 11, 1)) rf.readChunk, 11, 1))
d2.addCallback(lambda ign: rf.getAttrs()) d2.addCallback(lambda ign: rf.getAttrs())
d2.addCallback(lambda attrs: self._compareAttributes(attrs, {'permissions': S_IFREG | 0666, 'size': 10})) d2.addCallback(lambda attrs: self._compareAttributes(attrs, {'permissions': S_IFREG | 0o666, 'size': 10}))
d2.addCallback(lambda ign: self.handler.getAttrs("small", followLinks=0)) d2.addCallback(lambda ign: self.handler.getAttrs("small", followLinks=0))
d2.addCallback(lambda attrs: self._compareAttributes(attrs, {'permissions': S_IFREG | 0666, 'size': 10})) d2.addCallback(lambda attrs: self._compareAttributes(attrs, {'permissions': S_IFREG | 0o666, 'size': 10}))
d2.addCallback(lambda ign: d2.addCallback(lambda ign:
self.shouldFailWithSFTPError(sftp.FX_PERMISSION_DENIED, "writeChunk on read-only handle denied", self.shouldFailWithSFTPError(sftp.FX_PERMISSION_DENIED, "writeChunk on read-only handle denied",
@ -460,10 +460,10 @@ class Handler(GridTestMixin, ShouldFailMixin, ReallyEqualMixin, unittest.TestCas
rf.readChunk, 1011, 1)) rf.readChunk, 1011, 1))
d2.addCallback(lambda ign: rf.getAttrs()) d2.addCallback(lambda ign: rf.getAttrs())
d2.addCallback(lambda attrs: self._compareAttributes(attrs, {'permissions': S_IFREG | 0666, 'size': 1010})) d2.addCallback(lambda attrs: self._compareAttributes(attrs, {'permissions': S_IFREG | 0o666, 'size': 1010}))
d2.addCallback(lambda ign: self.handler.getAttrs(gross, followLinks=0)) d2.addCallback(lambda ign: self.handler.getAttrs(gross, followLinks=0))
d2.addCallback(lambda attrs: self._compareAttributes(attrs, {'permissions': S_IFREG | 0666, 'size': 1010})) d2.addCallback(lambda attrs: self._compareAttributes(attrs, {'permissions': S_IFREG | 0o666, 'size': 1010}))
d2.addCallback(lambda ign: d2.addCallback(lambda ign:
self.shouldFailWithSFTPError(sftp.FX_PERMISSION_DENIED, "writeChunk on read-only handle denied", self.shouldFailWithSFTPError(sftp.FX_PERMISSION_DENIED, "writeChunk on read-only handle denied",
@ -669,10 +669,10 @@ class Handler(GridTestMixin, ShouldFailMixin, ReallyEqualMixin, unittest.TestCas
d2.addCallback(lambda ign: wf.writeChunk(13, "abc")) d2.addCallback(lambda ign: wf.writeChunk(13, "abc"))
d2.addCallback(lambda ign: wf.getAttrs()) d2.addCallback(lambda ign: wf.getAttrs())
d2.addCallback(lambda attrs: self._compareAttributes(attrs, {'permissions': S_IFREG | 0666, 'size': 16})) d2.addCallback(lambda attrs: self._compareAttributes(attrs, {'permissions': S_IFREG | 0o666, 'size': 16}))
d2.addCallback(lambda ign: self.handler.getAttrs("newfile", followLinks=0)) d2.addCallback(lambda ign: self.handler.getAttrs("newfile", followLinks=0))
d2.addCallback(lambda attrs: self._compareAttributes(attrs, {'permissions': S_IFREG | 0666, 'size': 16})) d2.addCallback(lambda attrs: self._compareAttributes(attrs, {'permissions': S_IFREG | 0o666, 'size': 16}))
d2.addCallback(lambda ign: wf.setAttrs({})) d2.addCallback(lambda ign: wf.setAttrs({}))
@ -903,15 +903,15 @@ class Handler(GridTestMixin, ShouldFailMixin, ReallyEqualMixin, unittest.TestCas
def _write_mutable_setattr(wf): def _write_mutable_setattr(wf):
d2 = wf.writeChunk(8, "read-only link from parent") d2 = wf.writeChunk(8, "read-only link from parent")
d2.addCallback(lambda ign: self.handler.setAttrs("mutable", {'permissions': 0444})) d2.addCallback(lambda ign: self.handler.setAttrs("mutable", {'permissions': 0o444}))
d2.addCallback(lambda ign: self.root.get(u"mutable")) d2.addCallback(lambda ign: self.root.get(u"mutable"))
d2.addCallback(lambda node: self.failUnless(node.is_readonly())) d2.addCallback(lambda node: self.failUnless(node.is_readonly()))
d2.addCallback(lambda ign: wf.getAttrs()) d2.addCallback(lambda ign: wf.getAttrs())
d2.addCallback(lambda attrs: self.failUnlessReallyEqual(attrs['permissions'], S_IFREG | 0666)) d2.addCallback(lambda attrs: self.failUnlessReallyEqual(attrs['permissions'], S_IFREG | 0o666))
d2.addCallback(lambda ign: self.handler.getAttrs("mutable", followLinks=0)) d2.addCallback(lambda ign: self.handler.getAttrs("mutable", followLinks=0))
d2.addCallback(lambda attrs: self.failUnlessReallyEqual(attrs['permissions'], S_IFREG | 0444)) d2.addCallback(lambda attrs: self.failUnlessReallyEqual(attrs['permissions'], S_IFREG | 0o444))
d2.addCallback(lambda ign: wf.close()) d2.addCallback(lambda ign: wf.close())
return d2 return d2
@ -932,16 +932,16 @@ class Handler(GridTestMixin, ShouldFailMixin, ReallyEqualMixin, unittest.TestCas
def _write_mutable2_setattr(wf): def _write_mutable2_setattr(wf):
d2 = wf.writeChunk(7, "2") d2 = wf.writeChunk(7, "2")
d2.addCallback(lambda ign: wf.setAttrs({'permissions': 0444, 'size': 8})) d2.addCallback(lambda ign: wf.setAttrs({'permissions': 0o444, 'size': 8}))
# The link isn't made read-only until the file is closed. # The link isn't made read-only until the file is closed.
d2.addCallback(lambda ign: self.root.get(u"mutable2")) d2.addCallback(lambda ign: self.root.get(u"mutable2"))
d2.addCallback(lambda node: self.failIf(node.is_readonly())) d2.addCallback(lambda node: self.failIf(node.is_readonly()))
d2.addCallback(lambda ign: wf.getAttrs()) d2.addCallback(lambda ign: wf.getAttrs())
d2.addCallback(lambda attrs: self.failUnlessReallyEqual(attrs['permissions'], S_IFREG | 0444)) d2.addCallback(lambda attrs: self.failUnlessReallyEqual(attrs['permissions'], S_IFREG | 0o444))
d2.addCallback(lambda ign: self.handler.getAttrs("mutable2", followLinks=0)) d2.addCallback(lambda ign: self.handler.getAttrs("mutable2", followLinks=0))
d2.addCallback(lambda attrs: self.failUnlessReallyEqual(attrs['permissions'], S_IFREG | 0666)) d2.addCallback(lambda attrs: self.failUnlessReallyEqual(attrs['permissions'], S_IFREG | 0o666))
d2.addCallback(lambda ign: wf.close()) d2.addCallback(lambda ign: wf.close())
return d2 return d2
@ -1387,7 +1387,7 @@ class Handler(GridTestMixin, ShouldFailMixin, ReallyEqualMixin, unittest.TestCas
d.addCallback(lambda ign: d.addCallback(lambda ign:
self.shouldFailWithSFTPError(sftp.FX_PERMISSION_DENIED, "makeDirectory newdir2 permissions:0444 denied", self.shouldFailWithSFTPError(sftp.FX_PERMISSION_DENIED, "makeDirectory newdir2 permissions:0444 denied",
self.handler.makeDirectory, "newdir2", self.handler.makeDirectory, "newdir2",
{'permissions': 0444})) {'permissions': 0o444}))
d.addCallback(lambda ign: self.failUnlessEqual(sftpd.all_heisenfiles, {})) d.addCallback(lambda ign: self.failUnlessEqual(sftpd.all_heisenfiles, {}))
d.addCallback(lambda ign: self.failUnlessEqual(self.handler._heisenfiles, {})) d.addCallback(lambda ign: self.failUnlessEqual(self.handler._heisenfiles, {}))

View File

@ -413,7 +413,7 @@ class Asserts(unittest.TestCase):
self.failUnlessEqual("postcondition: othermsg: 'message2' <type 'str'>", m) self.failUnlessEqual("postcondition: othermsg: 'message2' <type 'str'>", m)
class FileUtil(ReallyEqualMixin, unittest.TestCase): class FileUtil(ReallyEqualMixin, unittest.TestCase):
def mkdir(self, basedir, path, mode=0777): def mkdir(self, basedir, path, mode=0o777):
fn = os.path.join(basedir, path) fn = os.path.join(basedir, path)
fileutil.make_dirs(fn, mode) fileutil.make_dirs(fn, mode)
@ -433,16 +433,16 @@ class FileUtil(ReallyEqualMixin, unittest.TestCase):
d = os.path.join(basedir, "doomed") d = os.path.join(basedir, "doomed")
self.mkdir(d, "a/b") self.mkdir(d, "a/b")
self.touch(d, "a/b/1.txt") self.touch(d, "a/b/1.txt")
self.touch(d, "a/b/2.txt", 0444) self.touch(d, "a/b/2.txt", 0o444)
self.touch(d, "a/b/3.txt", 0) self.touch(d, "a/b/3.txt", 0)
self.mkdir(d, "a/c") self.mkdir(d, "a/c")
self.touch(d, "a/c/1.txt") self.touch(d, "a/c/1.txt")
self.touch(d, "a/c/2.txt", 0444) self.touch(d, "a/c/2.txt", 0o444)
self.touch(d, "a/c/3.txt", 0) self.touch(d, "a/c/3.txt", 0)
os.chmod(os.path.join(d, "a/c"), 0444) os.chmod(os.path.join(d, "a/c"), 0o444)
self.mkdir(d, "a/d") self.mkdir(d, "a/d")
self.touch(d, "a/d/1.txt") self.touch(d, "a/d/1.txt")
self.touch(d, "a/d/2.txt", 0444) self.touch(d, "a/d/2.txt", 0o444)
self.touch(d, "a/d/3.txt", 0) self.touch(d, "a/d/3.txt", 0)
os.chmod(os.path.join(d, "a/d"), 0) os.chmod(os.path.join(d, "a/d"), 0)
@ -632,17 +632,17 @@ class FileUtil(ReallyEqualMixin, unittest.TestCase):
workdir = fileutil.abspath_expanduser_unicode(u"test_make_dirs_with_absolute_mode") workdir = fileutil.abspath_expanduser_unicode(u"test_make_dirs_with_absolute_mode")
fileutil.make_dirs(workdir) fileutil.make_dirs(workdir)
abspath = fileutil.abspath_expanduser_unicode(u"a/b/c/d", base=workdir) abspath = fileutil.abspath_expanduser_unicode(u"a/b/c/d", base=workdir)
fileutil.make_dirs_with_absolute_mode(workdir, abspath, 0766) fileutil.make_dirs_with_absolute_mode(workdir, abspath, 0o766)
new_mode = os.stat(os.path.join(workdir, "a", "b", "c", "d")).st_mode & 0777 new_mode = os.stat(os.path.join(workdir, "a", "b", "c", "d")).st_mode & 0o777
self.failUnlessEqual(new_mode, 0766) self.failUnlessEqual(new_mode, 0o766)
new_mode = os.stat(os.path.join(workdir, "a", "b", "c")).st_mode & 0777 new_mode = os.stat(os.path.join(workdir, "a", "b", "c")).st_mode & 0o777
self.failUnlessEqual(new_mode, 0766) self.failUnlessEqual(new_mode, 0o766)
new_mode = os.stat(os.path.join(workdir, "a", "b")).st_mode & 0777 new_mode = os.stat(os.path.join(workdir, "a", "b")).st_mode & 0o777
self.failUnlessEqual(new_mode, 0766) self.failUnlessEqual(new_mode, 0o766)
new_mode = os.stat(os.path.join(workdir, "a")).st_mode & 0777 new_mode = os.stat(os.path.join(workdir, "a")).st_mode & 0o777
self.failUnlessEqual(new_mode, 0766) self.failUnlessEqual(new_mode, 0o766)
new_mode = os.stat(workdir).st_mode & 0777 new_mode = os.stat(workdir).st_mode & 0o777
self.failIfEqual(new_mode, 0766) self.failIfEqual(new_mode, 0o766)
def test_create_long_path(self): def test_create_long_path(self):
""" """

View File

@ -172,7 +172,7 @@ def is_ancestor_path(parent, dirname):
return False return False
return True return True
def make_dirs(dirname, mode=0777): def make_dirs(dirname, mode=0o777):
""" """
An idempotent version of os.makedirs(). If the dir already exists, do An idempotent version of os.makedirs(). If the dir already exists, do
nothing and return without raising an exception. If this call creates the nothing and return without raising an exception. If this call creates the