author | Matt Mackall <mpm@selenic.com> |
Fri, 15 Sep 2006 16:00:16 -0500 | |
changeset 3098 | c27d1e1798a3 |
parent 2859 | 345bac2bc4ec |
permissions | -rw-r--r-- |
372 | 1 |
# httprangereader.py - just what it says |
2 |
# |
|
2859 | 3 |
# Copyright 2005, 2006 Matt Mackall <mpm@selenic.com> |
372 | 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 |
||
1559
59b3639df0a9
Convert all classes to new-style classes by deriving them from object.
Eric Hopper <hopper@omnifarious.org>
parents:
372
diff
changeset
|
10 |
class httprangereader(object): |
372 | 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 = '' |
|
2138
f5046cab9e2e
Fix revlog-ng interaction with old-http.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
1559
diff
changeset
|
21 |
if bytes: |
f5046cab9e2e
Fix revlog-ng interaction with old-http.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
1559
diff
changeset
|
22 |
end = self.pos + bytes - 1 |
372 | 23 |
req.add_header('Range', 'bytes=%d-%s' % (self.pos, end)) |
24 |
f = urllib2.urlopen(req) |
|
2161
12e11413ca19
Fix just introduced possible old-http bug
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
2138
diff
changeset
|
25 |
data = f.read() |
12e11413ca19
Fix just introduced possible old-http bug
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
2138
diff
changeset
|
26 |
if bytes: |
12e11413ca19
Fix just introduced possible old-http bug
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
2138
diff
changeset
|
27 |
data = data[:bytes] |
12e11413ca19
Fix just introduced possible old-http bug
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
2138
diff
changeset
|
28 |
return data |