def parse_http_range()

in alibabacloud_oss_v2/utils.py [0:0]


def parse_http_range(range_header: str) -> Tuple[int, int]:
    """
    Parses the range header
    It only accepts single ranges.
    """
    if not range_header:
        raise ValueError("Invalid range header, it is none or empty.")

    if not range_header.startswith("bytes="):
        raise ValueError("Invalid range header, doesn't start with bytes=.")

    if range_header.count(',') > 0:
        raise ValueError("Invalid range header, contains multiple ranges which isn't supported.")

    dash = range_header.find('-')
    if dash < 0:
        raise ValueError("Invalid range header, contains no '-'")

    start_str = range_header[6:dash].strip()
    end_str = range_header[dash+1:].strip()

    start = -1
    if len(start_str) > 0:
        start = int(start_str)
        if start < 0:
            raise ValueError(f'Invalid range header: {start_str} in {range_header}')

    end = -1
    if len(end_str) > 0:
        end = int(end_str)
        if end < 0:
            raise ValueError(f'Invalid range header: {end_str} in {range_header}')

    return start, end