def parse_content_range()

in alibabacloud_oss_v2/utils.py [0:0]


def parse_content_range(content_range: str) -> Tuple[int, int, int]:
    """
    Parses the content range header
    accepts bytes 22-33/42 and bytes 22-33/* format
    """
    if not content_range:
        raise ValueError("Invalid content-range header, it is none or empty.")

    if not content_range.startswith('bytes '):
        raise ValueError("Invalid content-range header, it dose not start with bytes.")

    vals = content_range.split(" ")[1].split("/")

    if len(vals) != 2:
        raise ValueError(f'Invalid content-range header: {content_range}')

    rvals = vals[0].split("-")

    if len(rvals) != 2:
        raise ValueError(f'Invalid content-range header: {content_range}')

    start = int(rvals[0])
    if start < 0:
        raise ValueError(f'Invalid content-range header: {start}')

    end = int(rvals[1])
    if end < 0:
        raise ValueError(f'Invalid content-range header: {end}')

    if vals[1] == "*":
        size = -1
    else:
        size = int(vals[1])
        if size <= 0:
            raise ValueError(f'Invalid content-range header: {size}')

    return start, end, size