summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrtomayko <rtomayko>2004-12-12 05:17:07 +0000
committerrtomayko <rtomayko>2004-12-12 05:17:07 +0000
commitbbe5dac3c4037e87bd8e51066e7cf44b5f0f4411 (patch)
tree3d08e340ab8b07982bcef463605395219984811b
parentacf14c5617e0e08afad03295c2b026ad202a1df2 (diff)
downloadurlgrabber-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.py5
-rw-r--r--test/test_grabber.py17
-rw-r--r--urlgrabber/byterange.py9
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!