From f96482e91a1e1806a3d17b18a1307bbd67d30c15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Giampaolo=20Rodol=C3=A0?= Date: Wed, 4 Aug 2010 10:36:18 +0000 Subject: 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 --- Lib/ftplib.py | 25 ++++++------------------- Lib/test/test_ftplib.py | 36 ++++++------------------------------ Misc/ACKS | 1 - Misc/NEWS | 2 -- 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 -- cgit v0.12