372
|
1 |
# httprangereader.py - just what it says
|
|
2 |
#
|
|
3 |
# Copyright 2005 Matt Mackall <mpm@selenic.com>
|
|
4 |
#
|
|
5 |
# This software may be used and distributed according to the terms
|
|
6 |
# of the GNU General Public License, incorporated herein by reference.
|
|
7 |
|
|
8 |
import byterange, urllib2
|
|
9 |
|
|
10 |
class httprangereader:
|
|
11 |
def __init__(self, url):
|
|
12 |
self.url = url
|
|
13 |
self.pos = 0
|
|
14 |
def seek(self, pos):
|
|
15 |
self.pos = pos
|
|
16 |
def read(self, bytes=None):
|
|
17 |
opener = urllib2.build_opener(byterange.HTTPRangeHandler())
|
|
18 |
urllib2.install_opener(opener)
|
|
19 |
req = urllib2.Request(self.url)
|
|
20 |
end = ''
|
|
21 |
if bytes: end = self.pos + bytes
|
|
22 |
req.add_header('Range', 'bytes=%d-%s' % (self.pos, end))
|
|
23 |
f = urllib2.urlopen(req)
|
|
24 |
return f.read()
|