httprangereader.py
28 lines
| 856 B
| text/x-python
|
PythonLexer
/ mercurial / httprangereader.py
|
r372 | # httprangereader.py - just what it says | ||
# | ||||
# Copyright 2005 Matt Mackall <mpm@selenic.com> | ||||
# | ||||
# This software may be used and distributed according to the terms | ||||
# of the GNU General Public License, incorporated herein by reference. | ||||
import byterange, urllib2 | ||||
|
r1559 | class httprangereader(object): | ||
|
r372 | def __init__(self, url): | ||
self.url = url | ||||
self.pos = 0 | ||||
def seek(self, pos): | ||||
self.pos = pos | ||||
def read(self, bytes=None): | ||||
opener = urllib2.build_opener(byterange.HTTPRangeHandler()) | ||||
urllib2.install_opener(opener) | ||||
req = urllib2.Request(self.url) | ||||
end = '' | ||||
|
r2138 | if bytes: | ||
end = self.pos + bytes - 1 | ||||
|
r372 | req.add_header('Range', 'bytes=%d-%s' % (self.pos, end)) | ||
f = urllib2.urlopen(req) | ||||
|
r2161 | data = f.read() | ||
if bytes: | ||||
data = data[:bytes] | ||||
return data | ||||