From cc68a81326a61cb4f6f731f9ee0a84a867f5c32c Mon Sep 17 00:00:00 2001 From: Brian Warner Date: Tue, 31 Mar 2015 09:41:55 -0700 Subject: [PATCH] bump Twisted dep to 11.1.0, thus simplify IntishPermissions --- src/allmydata/_auto_deps.py | 4 +++- src/allmydata/frontends/ftpd.py | 29 ++++++++++++++--------------- src/allmydata/test/test_ftp.py | 11 +++-------- 3 files changed, 20 insertions(+), 24 deletions(-) diff --git a/src/allmydata/_auto_deps.py b/src/allmydata/_auto_deps.py index 3c00f61d..a42bc17b 100644 --- a/src/allmydata/_auto_deps.py +++ b/src/allmydata/_auto_deps.py @@ -110,10 +110,12 @@ if sys.platform == "win32": # which includes the fix to . # * The SFTP frontend depends on Twisted 11.0.0 to fix the SSH server # rekeying bug + # * The FTP frontend depends on Twisted >=11.1.0 for + # filepath.Permissions # * We don't want Twisted >= 12.2.0 to avoid a dependency of its endpoints # code on pywin32. # - "Twisted >= 11.0.0, <= 12.1.0", + "Twisted >= 11.1.0, <= 12.1.0", # * We need Nevow >= 0.9.33 to avoid a bug in Nevow's setup.py # which imported twisted at setup time. diff --git a/src/allmydata/frontends/ftpd.py b/src/allmydata/frontends/ftpd.py index dbcb8318..b00bd934 100644 --- a/src/allmydata/frontends/ftpd.py +++ b/src/allmydata/frontends/ftpd.py @@ -62,18 +62,16 @@ class WriteFile: class NoParentError(Exception): pass -if hasattr(filepath, "Permissions"): - # filepath.Permissions was added in Twisted-11.1.0, but we're compatible - # back to 11.0.0 (on windows). Fortunately we don't really need to - # provide anything more than an int until Twisted-15.0.0 . - class IntishPermissions(filepath.Permissions): - def __init__(self, statModeInt): - self.statModeInt = statModeInt - filepath.Permissions.__init__(self, statModeInt) - def __and__(self, other): - return self.statModeInt & other -else: - IntishPermissions = lambda statModeInt: statModeInt +# filepath.Permissions was added in Twisted-11.1.0, which we require. Twisted +# <15.0.0 expected an int, and only does '&' on it. Twisted >=15.0.0 expects +# a filepath.Permissions. This satisfies both. + +class IntishPermissions(filepath.Permissions): + def __init__(self, statModeInt): + self._tahoe_statModeInt = statModeInt + filepath.Permissions.__init__(self, statModeInt) + def __and__(self, other): + return self._tahoe_statModeInt & other class Handler: implements(ftp.IFTPShell) @@ -214,10 +212,11 @@ class Handler: elif key == "directory": value = isdir elif key == "permissions": - # Twisted-14.0.2 expected an int, and used it in a rendering - # function that did (mode & NUMBER). Twisted-15.0.0 expects a + # Twisted-14.0.2 (and earlier) expected an int, and used it + # in a rendering function that did (mode & NUMBER). + # Twisted-15.0.0 expects a # twisted.python.filepath.Permissions , and calls its - # .shorthand() method. Try to provide both. + # .shorthand() method. This provides both both. value = IntishPermissions(0600) elif key == "hardlinks": value = 1 diff --git a/src/allmydata/test/test_ftp.py b/src/allmydata/test/test_ftp.py index d3e3082b..9457e540 100644 --- a/src/allmydata/test/test_ftp.py +++ b/src/allmydata/test/test_ftp.py @@ -79,11 +79,6 @@ class Handler(GridTestMixin, ReallyEqualMixin, unittest.TestCase): actual_list, expected_list)) for (a, b) in zip(actual_list, expected_list): (name, meta) = a - # convert meta.permissions to int for comparison. When we run - # against many (but not all) versions of Twisted, this is a - # filepath.Permissions object, not an int - meta = list(meta) - meta[2] = meta[2] & 0xffffffff (expected_name, expected_meta) = b self.failUnlessReallyEqual(name, expected_name) self.failUnlessReallyEqual(meta, expected_meta) @@ -98,12 +93,12 @@ class Handler(GridTestMixin, ReallyEqualMixin, unittest.TestCase): expected_root = [ ('loop', - [0, True, 0600, 1, self.FALL_OF_BERLIN_WALL, 'alice', 'alice', '??']), + [0, True, ftpd.IntishPermissions(0600), 1, self.FALL_OF_BERLIN_WALL, 'alice', 'alice', '??']), ('immutable', - [23, False, 0600, 1, self.TURN_OF_MILLENIUM, 'alice', 'alice', '??']), + [23, False, ftpd.IntishPermissions(0600), 1, self.TURN_OF_MILLENIUM, 'alice', 'alice', '??']), ('mutable', # timestamp should be 0 if no timestamp metadata is present - [0, False, 0600, 1, 0, 'alice', 'alice', '??'])] + [0, False, ftpd.IntishPermissions(0600), 1, 0, 'alice', 'alice', '??'])] d.addCallback(lambda root: self._compareDirLists(root, expected_root)) -- 2.37.2