Your IP : 216.73.216.213


Current Path : /opt/alt/python37/lib/python3.7/site-packages/webob/__pycache__/
Upload File :
Current File : //opt/alt/python37/lib/python3.7/site-packages/webob/__pycache__/byterange.cpython-37.pyc

B

��vP��@sXddlZddgZejdejd�Ze�d�ZGdd�de�ZGdd�de�Zdd
d�Z	dS)
�N�Range�ContentRangezbytes *= *(\d*) *- *(\d*))�flagsz'bytes (?:(\d+)-(\d+)|[*])/(?:(\d+)|[*])c@sLeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	e
dd��ZdS)rz*
        Represents the Range header.
    cCs,|dks|dkstd|��||_||_dS)NrzBad range end: %r)�AssertionError�start�end)�selfrr�r	�@/opt/alt/python37/lib/python3.7/site-packages/webob/byterange.py�__init__
szRange.__init__cCs\|dkrdS|j|j}}|dkr6|}|dkr6||7}t|||�rTt||�}||fSdSdS)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)rr�_is_content_range_valid�min)r�lengthrr�stopr	r	r
�range_for_lengths
zRange.range_for_lengthcCs*|�|�}|dkrdSt|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�)rr)rr�ranger	r	r
�
content_range%s

zRange.content_rangecCsB|j|j}}|dkr2d|}|dkr.|d7}|Sd||dfS)Nzbytes=%sr�-zbytes=%s-%sr)rr)r�s�e�rr	r	r
�__str__4sz
Range.__str__cCsd|jj|j|jfS)Nz
%s(%r, %r))�	__class__�__name__rr)rr	r	r
�__repr__=szRange.__repr__cCst|j|jf�S)N)�iterrr)rr	r	r
�__iter__BszRange.__iter__cCsnt�|p
d�}|sdS|��\}}|s6|t|�d�St|�}|sL||d�St|�d}||krddS|||�S)zL
            Parse the header; may return None if header is invalid
        �Nr)�	_rx_range�match�groups�int)�cls�header�mrrr	r	r
�parseEs
zRange.parseN)r�
__module__�__qualname__�__doc__rrrrrr�classmethodr&r	r	r	r
rs	c@s<eZdZdZdd�Zdd�Zdd�Zdd	�Zed
d��Z	dS)
rz�
    Represents the Content-Range header

    This header is ``start-stop/length``, where start-stop and length
    can be ``*`` (represented as None in the attributes).
    cCs4t|||�std|||f��||_||_||_dS)NzBad start:stop/length: %r-%r/%r)r�
ValueErrorrrr)rrrrr	r	r
rbszContentRange.__init__cCsd|jj|fS)Nz<%s %s>)rr)rr	r	r
rjszContentRange.__repr__cCsP|jdkrd}n|j}|jdkr6|jdks.t�d|S|jd}d|j||fS)N�*z
bytes */%srzbytes %s-%s/%s)rrrr)rrrr	r	r
rms


zContentRange.__str__cCst|j|j|jg�S)zs
            Mostly so you can unpack this, like:

                start, stop, length = res.content_range
        )rrrr)rr	r	r
rxszContentRange.__iter__cCsht�|p
d�}|sdS|��\}}}|r<t|�}t|�d}|oFt|�}t|||dd�s\dS||||�S)zL
            Parse the header.  May return None if it cannot parse.
        rNrT)�response)�_rx_content_ranger r!r"r)r#�valuer%rr�lr	r	r
r&�szContentRange.parseN)
rr'r(r)rrrrr*r&r	r	r	r
rYsFcCs�|dk|dkkrdS|dkr,|dkp*|dkS|dkrLd|koF|kSS||krXdS|rh||krhdSd|koz|kSSdS)NFrr	)rrrr-r	r	r
r�sr)F)
�re�__all__�compile�Irr.�objectrrrr	r	r	r
�<module>s
Q9