(header, maxlen=0)
Yield (start, end) ranges parsed from a HTTP Range header. Skip
        unsatisfiable ranges. The end index is non-inclusive.
Yield (start, end) ranges parsed from a HTTP Range header. Skip
        unsatisfiable ranges. The end index is non-inclusive.
Yield ( start end ) ranges parsed from a HTTP Range header . Skip unsatisfiable ranges . The end index is non - inclusive .
def parse_range_header(header, maxlen=0):
    ''' Yield (start, end) ranges parsed from a HTTP Range header. Skip
        unsatisfiable ranges. The end index is non-inclusive.'''
    if not header or header[:6] != 'bytes=': return
    ranges = [r.split('-', 1) for r in header[6:].split(',') if '-' in r]
    for start, end in ranges:
        try:
            if not start:  # bytes=-100    -> last 100 bytes
                start, end = max(0, maxlen-int(end)), maxlen
            elif not end:  # bytes=100-    -> all but the first 99 bytes
                start, end = int(start), maxlen
            else:          # bytes=100-200 -> bytes 100-200 (inclusive)
                start, end = int(start), min(int(end)+1, maxlen)
            if 0 <= start < end <= maxlen:
                yield start, end
        except ValueError:
            pass
def parse_range_header ( header , maxlen = 0 ) : if not header or header [ : 6 ] != 'bytes=' : return ranges = [ r . split ( '-' , 1 ) for r in header [ 6 : ] . split ( ',' ) if '-' in r ] for start , end in ranges : try : if not start : # bytes=-100    -> last 100 bytes start , end = max ( 0 , maxlen - int ( end ) ) , maxlen elif not end : # bytes=100-    -> all but the first 99 bytes start , end = int ( start ) , maxlen else : # bytes=100-200 -> bytes 100-200 (inclusive) start , end = int ( start ) , min ( int ( end ) + 1 , maxlen ) if 0 <= start < end <= maxlen : yield start , end except ValueError : pass