summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGiampaolo Rodolà <g.rodola@gmail.com>2010-08-04 10:36:18 (GMT)
committerGiampaolo Rodolà <g.rodola@gmail.com>2010-08-04 10:36:18 (GMT)
commitf96482e91a1e1806a3d17b18a1307bbd67d30c15 (patch)
tree0a803ada36625a91dac3434db0f0fe33bfee8440
parent226e945fe5da51658017e0d216f1d4ddae645fce (diff)
downloadcpython-f96482e91a1e1806a3d17b18a1307bbd67d30c15.zip
cpython-f96482e91a1e1806a3d17b18a1307bbd67d30c15.tar.gz
cpython-f96482e91a1e1806a3d17b18a1307bbd67d30c15.tar.bz2
as per discussion with antoine revert changes made in 83708 as the user useing ftplib's readline methods is supposed to always use a binary file
-rw-r--r--Lib/ftplib.py25
-rw-r--r--Lib/test/test_ftplib.py36
-rw-r--r--Misc/ACKS1
-rw-r--r--Misc/NEWS2
4 files changed, 12 insertions, 52 deletions
diff --git a/Lib/ftplib.py b/Lib/ftplib.py
index ada7475..b593fa1 100644
--- a/Lib/ftplib.py
+++ b/Lib/ftplib.py
@@ -493,15 +493,9 @@ class FTP:
while 1:
buf = fp.readline()
if not buf: break
- if isinstance(buf, str):
- if not buf.endswith(CRLF):
- if buf[-1] in CRLF: buf = buf[:-1]
- buf = buf + CRLF
- buf = bytes(buf, self.encoding)
- else:
- if not buf.endswith(B_CRLF):
- if buf[-1:] in B_CRLF: buf = buf[:-1]
- buf = buf + B_CRLF
+ if buf[-2:] != B_CRLF:
+ if buf[-1] in B_CRLF: buf = buf[:-1]
+ buf = buf + B_CRLF
conn.sendall(buf)
if callback: callback(buf)
conn.close()
@@ -777,15 +771,9 @@ else:
while 1:
buf = fp.readline()
if not buf: break
- if isinstance(buf, str):
- if not buf.endswith(CRLF):
- if buf[-1] in CRLF: buf = buf[:-1]
- buf = buf + CRLF
- buf = bytes(buf, self.encoding)
- else:
- if not buf.endswith(B_CRLF):
- if buf[-1:] in B_CRLF: buf = buf[:-1]
- buf = buf + B_CRLF
+ if buf[-2:] != B_CRLF:
+ if buf[-1] in B_CRLF: buf = buf[:-1]
+ buf = buf + B_CRLF
conn.sendall(buf)
if callback: callback(buf)
# shutdown ssl layer
@@ -795,7 +783,6 @@ else:
conn.close()
return self.voidresp()
-
__all__.append('FTP_TLS')
all_errors = (Error, IOError, EOFError, ssl.SSLError)
diff --git a/Lib/test/test_ftplib.py b/Lib/test/test_ftplib.py
index ce9a2d3..c8d0d88 100644
--- a/Lib/test/test_ftplib.py
+++ b/Lib/test/test_ftplib.py
@@ -24,7 +24,6 @@ threading = support.import_module('threading')
# the dummy data returned by server over the data channel when
# RETR, LIST and NLST commands are issued
RETR_DATA = 'abcde12345\r\n' * 1000
-RETR_TEXT = 'abcd\xe912345\r\n' * 1000
LIST_DATA = 'foo\r\nbar\r\n'
NLST_DATA = 'foo\r\nbar\r\n'
@@ -38,7 +37,7 @@ class DummyDTPHandler(asynchat.async_chat):
self.baseclass.last_received_data = ''
def handle_read(self):
- self.baseclass.last_received_data += self.recv(1024).decode('latin-1')
+ self.baseclass.last_received_data += self.recv(1024).decode('ascii')
def handle_close(self):
# XXX: this method can be called many times in a row for a single
@@ -50,7 +49,7 @@ class DummyDTPHandler(asynchat.async_chat):
self.dtp_conn_closed = True
def push(self, what):
- super(DummyDTPHandler, self).push(what.encode('latin-1'))
+ super(DummyDTPHandler, self).push(what.encode('ascii'))
def handle_error(self):
raise
@@ -69,7 +68,6 @@ class DummyFTPHandler(asynchat.async_chat):
self.last_received_data = ''
self.next_response = ''
self.rest = None
- self.current_type = 'a'
self.push('220 welcome')
def collect_incoming_data(self, data):
@@ -177,16 +175,7 @@ class DummyFTPHandler(asynchat.async_chat):
self.push('257 "pwd ok"')
def cmd_type(self, arg):
- # ASCII type
- if arg.lower() == 'a':
- self.current_type = 'a'
- self.push('200 type ok')
- # Binary type
- elif arg.lower() == 'i':
- self.current_type = 'i'
- self.push('200 type ok')
- else:
- self.push('504 unsupported type')
+ self.push('200 type ok')
def cmd_quit(self, arg):
self.push('221 quit ok')
@@ -205,10 +194,7 @@ class DummyFTPHandler(asynchat.async_chat):
offset = int(self.rest)
else:
offset = 0
- if self.current_type == 'i':
- self.dtp.push(RETR_DATA[offset:])
- else:
- self.dtp.push(RETR_TEXT[offset:])
+ self.dtp.push(RETR_DATA[offset:])
self.dtp.close_when_done()
self.rest = None
@@ -525,7 +511,7 @@ class TestFTPClass(TestCase):
def test_retrlines(self):
received = []
self.client.retrlines('retr', received.append)
- self.assertEqual(''.join(received), RETR_TEXT.replace('\r\n', ''))
+ self.assertEqual(''.join(received), RETR_DATA.replace('\r\n', ''))
def test_storbinary(self):
f = io.BytesIO(RETR_DATA.encode('ascii'))
@@ -544,7 +530,7 @@ class TestFTPClass(TestCase):
self.client.storbinary('stor', f, rest=r)
self.assertEqual(self.server.handler_instance.rest, str(r))
- def test_storlines_bytes(self):
+ def test_storlines(self):
f = io.BytesIO(RETR_DATA.replace('\r\n', '\n').encode('ascii'))
self.client.storlines('stor', f)
self.assertEqual(self.server.handler_instance.last_received_data, RETR_DATA)
@@ -554,16 +540,6 @@ class TestFTPClass(TestCase):
self.client.storlines('stor foo', f, callback=lambda x: flag.append(None))
self.assertTrue(flag)
- def test_storlines_str(self):
- f = io.StringIO(RETR_TEXT.replace('\r\n', '\n'))
- self.client.storlines('stor', f)
- self.assertEqual(self.server.handler_instance.last_received_data, RETR_TEXT)
- # test new callback arg
- flag = []
- f.seek(0)
- self.client.storlines('stor foo', f, callback=lambda x: flag.append(None))
- self.assertTrue(flag)
-
def test_nlst(self):
self.client.nlst()
self.assertEqual(self.client.nlst(), NLST_DATA.split('\r\n')[:-1])
diff --git a/Misc/ACKS b/Misc/ACKS
index 99a250b..bb00e0f 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -896,4 +896,3 @@ Uwe Zessin
Tarek Ziadé
Peter Åstrand
Alexander Shigin
-Robert DeVaughn
diff --git a/Misc/NEWS b/Misc/NEWS
index 3402cb9..98b8da1 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -37,8 +37,6 @@ Extensions
Library
-------
-- Issue #6822: ftplib's storlines method doesn't work with text files.
-
- Issue #2944: asyncore doesn't handle connection refused correctly.
- Issue #4184: Private attributes on smtpd.SMTPChannel made public and