Ñò ›å¼Jc @ s¶ d d k Z d d k Z d d k Z d d k Z d d k Z d Z y d d k l Z Wn% e j o Z d d k l Z n Xd e f d „ ƒ YZ d e i f d „ ƒ YZ d e f d „ ƒ YZ d d d „ ƒ YZ d e i f d „ ƒ YZ d d k l Z l Z l Z l Z l Z l Z l Z d d k Z d d k Z d d k Z d d k Z d d k Z d e i f d „ ƒ YZ d e i! f d „ ƒ YZ! d a" d „ Z# d „ Z$ d „ Z% d S( iÿÿÿÿN( t StringIOt RangeErrorc B s e Z d Z RS( s6 Error raised when an unsatisfiable range is requested.( t __name__t __module__t __doc__( ( ( s8 /usr/lib/python2.6/site-packages/urlgrabber/byterange.pyR " s t HTTPRangeHandlerc B s e Z d Z d „ Z d „ Z RS( sº Handler that enables HTTP Range headers. This was extremely simple. The Range header is a HTTP feature to begin with so all this class does is tell urllib2 that the "206 Partial Content" reponse from the HTTP server is what we expected. Example: import urllib2 import byterange range_handler = range.HTTPRangeHandler() opener = urllib2.build_opener(range_handler) # install it urllib2.install_opener(opener) # create Request and set Range header req = urllib2.Request('http://www.python.org/') req.header['Range'] = 'bytes=30-50' f = urllib2.urlopen(req) c C s1 t i | | | i ƒ ƒ } | | _ | | _ | S( N( t urllibt addinfourlt get_full_urlt codet msg( t selft reqt fpR R t hdrst r( ( s8 /usr/lib/python2.6/site-packages/urlgrabber/byterange.pyt http_error_206> s c C s t d ƒ ‚ d S( Ns Requested Range Not Satisfiable( R ( R R R R R R ( ( s8 /usr/lib/python2.6/site-packages/urlgrabber/byterange.pyt http_error_416E s ( R R R R R ( ( ( s8 /usr/lib/python2.6/site-packages/urlgrabber/byterange.pyR &