From 64e9392fb90399ae96802ae96a25d29553361bd9 Mon Sep 17 00:00:00 2001 From: Chris Mayo Date: Mon, 22 Apr 2019 19:34:46 +0100 Subject: [PATCH 1/2] Get FtpServerTest working by updating to current pyftpdlib API --- tests/checker/ftpserver.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/tests/checker/ftpserver.py b/tests/checker/ftpserver.py index eeb09eb9..5c0cde73 100644 --- a/tests/checker/ftpserver.py +++ b/tests/checker/ftpserver.py @@ -50,31 +50,34 @@ class FtpServerTest (LinkCheckTest): def start_server (host, port): - def line_logger(msg): + def line_logger(self, msg): if "kill" in msg: raise KeyboardInterrupt() try: - from pyftpdlib import ftpserver + from pyftpdlib.authorizers import DummyAuthorizer + from pyftpdlib.handlers import FTPHandler + from pyftpdlib.servers import FTPServer + from pyftpdlib import __ver__ as pyftpdlib_version except ImportError: pytest.skip("pyftpdlib is not available") return - authorizer = ftpserver.DummyAuthorizer() + authorizer = DummyAuthorizer() datadir = os.path.join(os.path.dirname(__file__), 'data') authorizer.add_anonymous(datadir) # Instantiate FTP handler class - ftp_handler = ftpserver.FTPHandler + ftp_handler = FTPHandler ftp_handler.authorizer = authorizer ftp_handler.timeout = TIMEOUT - ftpserver.logline = line_logger + ftp_handler.logline = line_logger # Define a customized banner (string returned when client connects) - ftp_handler.banner = "pyftpdlib %s based ftpd ready." % ftpserver.__ver__ + ftp_handler.banner = "pyftpdlib %s based ftpd ready." % pyftpdlib_version # Instantiate FTP server class and listen to host:port address = (host, port) - server = ftpserver.FTPServer(address, ftp_handler) + server = FTPServer(address, ftp_handler) port = server.address[1] t = threading.Thread(None, server.serve_forever) t.start() From f60810b050e516eb0cea06f8725d0c9910518604 Mon Sep 17 00:00:00 2001 From: Chris Mayo Date: Mon, 22 Apr 2019 19:34:46 +0100 Subject: [PATCH 2/2] Fix Python 3 "TypeError: decoding str is not supported" in FtpUrl.cwd --- linkcheck/checker/ftpurl.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/linkcheck/checker/ftpurl.py b/linkcheck/checker/ftpurl.py index 874c1df7..d244715a 100644 --- a/linkcheck/checker/ftpurl.py +++ b/linkcheck/checker/ftpurl.py @@ -25,6 +25,8 @@ except ImportError: # Python 3 from io import StringIO +from builtins import bytes + from .. import log, LOG_CHECK, LinkCheckerError, mimeutil from . import proxysupport, httpurl, internpaturl, get_index_html from .const import WARN_FTP_MISSING_SLASH @@ -116,7 +118,9 @@ class FtpUrl (internpaturl.InternPatternUrl, proxysupport.ProxySupport): Change to URL parent directory. Return filename of last path component. """ - path = self.urlparts[2].encode(self.filename_encoding, 'replace') + path = self.urlparts[2] + if isinstance(path, bytes): + path = path.decode(self.filename_encoding, 'replace') dirname = path.strip('/') dirs = dirname.split('/') filename = dirs.pop()