Fix ftp 'ls' to work with current Twisted-15.0.0

refs ticket:2394

It's kind of a hack, but Twisted changed the API and I couldn't find a
cleaner way to detect which form of "permissions" value the Twisted FTP
server wants.

I've manually tested it against 14.0.2 and 15.0.0.
This commit is contained in:
Brian Warner 2015-03-25 18:23:33 -07:00
parent 96c5574657
commit 26c8abadec

View File

@ -6,6 +6,7 @@ from twisted.application import service, strports
from twisted.internet import defer
from twisted.internet.interfaces import IConsumer
from twisted.cred import portal
from twisted.python import filepath
from twisted.protocols import ftp
from allmydata.interfaces import IDirectoryNode, ExistingChildError, \
@ -61,6 +62,19 @@ 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
class Handler:
implements(ftp.IFTPShell)
def __init__(self, client, rootnode, username, convergence):
@ -200,7 +214,11 @@ class Handler:
elif key == "directory":
value = isdir
elif key == "permissions":
value = 0600
# 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.python.filepath.Permissions , and calls its
# .shorthand() method. Try to provide both.
value = IntishPermissions(0600)
elif key == "hardlinks":
value = 1
elif key == "modified":