Your IP : 216.73.216.213
B
��vP� � @ sX d dl Z ddgZe jde jd�Ze �d�ZG dd� de�ZG dd� de�Zdd
d�Z dS )
� N�Range�ContentRangezbytes *= *(\d*) *- *(\d*))�flagsz'bytes (?:(\d+)-(\d+)|[*])/(?:(\d+)|[*])c @ sL e Zd ZdZdd� Zdd� Zdd� Zdd � Zd
d� Zdd
� Z e
dd� �ZdS )r z*
Represents the Range header.
c C s, |d ks|dkst d| ��|| _|| _d S )Nr zBad range end: %r)�AssertionError�start�end)�selfr r � r �@/opt/alt/python37/lib/python3.7/site-packages/webob/byterange.py�__init__
s zRange.__init__c C s\ |dkrdS | j | j }}|dkr6|}|dk r6||7 }t|||�rTt||�}||fS dS dS )z�
*If* there is only one range, and *if* it is satisfiable by
the given length, then return a (start, end) non-inclusive range
of bytes to serve. Otherwise return None
Nr )r r �_is_content_range_valid�min)r �lengthr r �stopr r r
�range_for_length s
zRange.range_for_lengthc C s* | � |�}|dkrdS t|d |d |�S )a%
Works like range_for_length; returns None or a ContentRange object
You can use it like::
response.content_range = req.range.content_range(response.content_length)
Though it's still up to you to actually serve that content range!
Nr � )r r )r r �ranger r r
�
content_range% s
zRange.content_rangec C sB | j | j }}|d kr2d| }|dkr.|d7 }|S d||d f S )Nzbytes=%sr �-zbytes=%s-%sr )r r )r �s�e�rr r r
�__str__4 s z
Range.__str__c C s d| j j| j| jf S )Nz
%s(%r, %r))� __class__�__name__r r )r r r r
�__repr__= s zRange.__repr__c C s t | j| jf�S )N)�iterr r )r r r r
�__iter__B s zRange.__iter__c C sn t �|p
d�}|sdS |�� \}}|s6| t|� d�S t|�}|sL| |d�S t|�d }||krddS | ||�S )zL
Parse the header; may return None if header is invalid
� Nr )� _rx_range�match�groups�int)�cls�header�mr r r r r
�parseE s
zRange.parseN)r �
__module__�__qualname__�__doc__r r r r r r �classmethodr&