Minimal changes to make ftplib work. Basically, this opens the stream in

text mode and encodes commands being sent.  The default encoding is ASCII,
there's a class/instance variable 'encoding' you could set to change it.
This commit is contained in:
Guido van Rossum 2007-07-17 20:45:57 +00:00
parent 93adc5dfaf
commit 52b8976a03

View file

@ -94,7 +94,7 @@ class FTP:
below for details). below for details).
The download/upload functions first issue appropriate TYPE The download/upload functions first issue appropriate TYPE
and PORT or PASV commands. and PORT or PASV commands.
''' '''
debugging = 0 debugging = 0
host = '' host = ''
@ -103,6 +103,7 @@ class FTP:
file = None file = None
welcome = None welcome = None
passiveserver = 1 passiveserver = 1
encoding = "ASCII"
# Initialization method (called by class instantiation). # Initialization method (called by class instantiation).
# Initialize host to localhost, port to standard ftp port # Initialize host to localhost, port to standard ftp port
@ -128,7 +129,7 @@ class FTP:
self.timeout = timeout self.timeout = timeout
self.sock = socket.create_connection((self.host, self.port), self.timeout) self.sock = socket.create_connection((self.host, self.port), self.timeout)
self.af = self.sock.family self.af = self.sock.family
self.file = self.sock.makefile('rb') self.file = self.sock.makefile('r', encoding=self.encoding)
self.welcome = self.getresp() self.welcome = self.getresp()
return self.welcome return self.welcome
@ -167,7 +168,7 @@ class FTP:
def putline(self, line): def putline(self, line):
line = line + CRLF line = line + CRLF
if self.debugging > 1: print('*put*', self.sanitize(line)) if self.debugging > 1: print('*put*', self.sanitize(line))
self.sock.sendall(line) self.sock.sendall(line.encode(self.encoding))
# Internal: send one command to the server (through putline()) # Internal: send one command to the server (through putline())
def putcmd(self, line): def putcmd(self, line):
@ -403,7 +404,7 @@ class FTP:
if callback is None: callback = print_line if callback is None: callback = print_line
resp = self.sendcmd('TYPE A') resp = self.sendcmd('TYPE A')
conn = self.transfercmd(cmd) conn = self.transfercmd(cmd)
fp = conn.makefile('rb') fp = conn.makefile('r', encoding=self.encoding)
while 1: while 1:
line = fp.readline() line = fp.readline()
if self.debugging > 2: print('*retr*', repr(line)) if self.debugging > 2: print('*retr*', repr(line))