mirror of
https://github.com/facebook/sapling.git
synced 2024-10-08 07:49:11 +03:00
fc7f3bb592
My last patch changed httprangereader.read to read only the specified amount of data from the connection, to prevent it from returning more than what was asked. I just realized that this could lead to the connection not being closed. In practice, it looks like the connection is closed just fine, but it's probably safer to read everything and then return only what's necessary.
29 lines
856 B
Python
29 lines
856 B
Python
# 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
|
|
|
|
class httprangereader(object):
|
|
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 = ''
|
|
if bytes:
|
|
end = self.pos + bytes - 1
|
|
req.add_header('Range', 'bytes=%d-%s' % (self.pos, end))
|
|
f = urllib2.urlopen(req)
|
|
data = f.read()
|
|
if bytes:
|
|
data = data[:bytes]
|
|
return data
|