diff options
author | rtomayko <rtomayko> | 2004-12-12 05:17:07 +0000 |
---|---|---|
committer | rtomayko <rtomayko> | 2004-12-12 05:17:07 +0000 |
commit | bbe5dac3c4037e87bd8e51066e7cf44b5f0f4411 (patch) | |
tree | 3d08e340ab8b07982bcef463605395219984811b | |
parent | acf14c5617e0e08afad03295c2b026ad202a1df2 (diff) | |
download | urlgrabber-bbe5dac3c4037e87bd8e51066e7cf44b5f0f4411.tar.gz |
Fix for RH bug #140387
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=140387
-rw-r--r-- | test/base_test_code.py | 5 | ||||
-rw-r--r-- | test/test_grabber.py | 17 | ||||
-rw-r--r-- | urlgrabber/byterange.py | 9 |
3 files changed, 27 insertions, 4 deletions
diff --git a/test/base_test_code.py b/test/base_test_code.py index 5aca4c4..eb4e33d 100644 --- a/test/base_test_code.py +++ b/test/base_test_code.py @@ -3,9 +3,14 @@ from munittest import * base_http = 'http://www.linux.duke.edu/projects/urlgrabber/test/' base_ftp = 'ftp://localhost/test/' +# set to a proftp server only. we're working around a couple of +# bugs in their implementation in byterange.py. +base_proftp = 'ftp://localhost/test/' + reference_data = ''.join( [str(i)+'\n' for i in range(20000) ] ) ref_http = base_http + 'reference' ref_ftp = base_ftp + 'reference' +ref_proftp = base_proftp + 'reference' short_reference_data = ' '.join( [str(i) for i in range(10) ] ) short_ref_http = base_http + 'short_reference' short_ref_ftp = base_ftp + 'short_reference' diff --git a/test/test_grabber.py b/test/test_grabber.py index e602e25..4478c24 100644 --- a/test/test_grabber.py +++ b/test/test_grabber.py @@ -21,7 +21,7 @@ """grabber.py tests""" -# $Id: test_grabber.py,v 1.20 2004/08/20 19:30:24 mstenner Exp $ +# $Id: test_grabber.py,v 1.21 2004/12/12 05:17:07 rtomayko Exp $ import sys import os @@ -371,11 +371,24 @@ class FTPRegetTests(RegetTestBase, TestCase): self.assertEquals(data[:self.hl], '0'*self.hl) self.assertEquals(data[self.hl:], self.ref[self.hl:]) +class ProFTPDSucksTests(TestCase): + def setUp(self): + self.url = ref_proftp + try: + fo = urllib2.urlopen(self.url).close() + except IOError: + raise + self.skip() + + def test_restart_workaround(self): + inst = grabber.URLGrabber() + rslt = inst.urlread(self.url, range=(500, 1000)) + class HTTPRegetTests(FTPRegetTests): def setUp(self): RegetTestBase.setUp(self) self.url = short_ref_http - + def test_older_check_timestamp(self): # define this here rather than in the FTP tests because currently, # we get no timestamp information back from ftp servers. diff --git a/urlgrabber/byterange.py b/urlgrabber/byterange.py index ca4bf81..cd80d35 100644 --- a/urlgrabber/byterange.py +++ b/urlgrabber/byterange.py @@ -17,7 +17,7 @@ # This file is part of urlgrabber, a high-level cross-protocol url-grabber # Copyright 2002-2004 Michael D. Stenner, Ryan Tomayko -# $Id: byterange.py,v 1.6 2004/03/31 17:02:00 mstenner Exp $ +# $Id: byterange.py,v 1.7 2004/12/12 05:17:07 rtomayko Exp $ import os import stat @@ -358,7 +358,12 @@ class ftpwrapper(urllib.ftpwrapper): cmd = 'RETR ' + file conn = self.ftp.ntransfercmd(cmd, rest) except ftplib.error_perm, reason: - if str(reason)[:3] != '550': + if str(reason)[:3] == '501': + # workaround for REST not supported error + fp, retrlen = self.retrfile(file, type) + fp = RangeableFileObject(fp, (rest,'')) + return (fp, retrlen) + elif str(reason)[:3] != '550': raise IOError, ('ftp error', reason), sys.exc_info()[2] if not conn: # Set transfer mode to ASCII! |