
    /hl                        d dl mZ d dlmZ d dlZd dlmZ ej        rd dl	Z
 ej        d          Z G d d          Z G d d          Z G d	 d
ej        e                   Z G d d          ZddlmZ dS )    )annotationsN)datetimeTc                  4    e Zd ZdZdddZdd
ZddZddZdS )IfRangezVery simple object that represents the `If-Range` header in parsed
    form.  It will either have neither a etag or date or one of either but
    never both.

    .. versionadded:: 0.7
    Netag
str | Nonedatedatetime | Nonec                "    || _         || _        d S N)r   r
   )selfr   r
   s      P/var/www/html/venv/lib/python3.11/site-packages/werkzeug/datastructures/range.py__init__zIfRange.__init__   s     				    returnstrc                    | j         t          j        | j                   S | j        t          j        | j                  S dS )-Converts the object back into an HTTP header.N )r
   http	http_dater   
quote_etagr   s    r   	to_headerzIfRange.to_header   s;    9 >$),,,9 ?49---rr   c                *    |                                  S r   r   r   s    r   __str__zIfRange.__str__$       ~~r   c                R    dt          |           j         dt          |           dS N< >type__name__r   r   s    r   __repr__zIfRange.__repr__'   *    74::&77T7777r   NN)r   r	   r
   r   r   r   )r'   
__module____qualname____doc__r   r   r   r(    r   r   r   r      ss                       8 8 8 8 8 8r   r   c                  J    e Zd ZdZddZddZddZddZddZddZ	ddZ
dS )RangeaX  Represents a ``Range`` header. All methods only support only
    bytes as the unit. Stores a list of ranges if given, but the methods
    only work if only one range is provided.

    :raise ValueError: If the ranges provided are invalid.

    .. versionchanged:: 0.15
        The ranges passed in are validated.

    .. versionadded:: 0.7
    unitsr   ranges%cabc.Sequence[tuple[int, int | None]]r   Nonec                z    || _         || _        |D ])\  }}|| |dk     s||k    rt          ||f d          *d S )Nr   z is not a valid range.)r2   r3   
ValueError)r   r2   r3   startends        r   r   zRange.__init__8   sj     
   	J 	JJE3}eaii5C<< UCL!H!H!HIII	J 	Jr   length
int | Nonetuple[int, int] | Nonec                    | j         dk    s|t          | j                  dk    rdS | j        d         \  }}||}|dk     r||z  }t          j        |||          r|t          ||          fS dS )zIf the range is for bytes, the length is not None and there is
        exactly one range and it is satisfiable it returns a ``(start, stop)``
        tuple, otherwise `None`.
        bytesN   r   )r2   lenr3   r   is_byte_range_validmin)r   r:   r8   r9   s       r   range_for_lengthzRange.range_for_lengthE   s    
 :  FNc$+6F6F!6K6K4[^
s;Cqyy#E377 	+#c6****tr   ContentRange | Nonec                z    |                      |          }|#t          | j        |d         |d         |          S dS )zCreates a :class:`~werkzeug.datastructures.ContentRange` object
        from the current range and given content length.
        Nr   r?   )rC   ContentRanger2   )r   r:   rngs      r   make_content_rangezRange.make_content_rangeU   s?     ##F++?
CFCFFCCCtr   c                    g }| j         D ]R\  }}|.|                    |dk    r| dnt          |                     5|                    | d|dz
              S| j         dd                    |           S )r   Nr   -r?   =,)r3   appendr   r2   join)r   r3   beginr9   s       r   r   zRange.to_header^   s    + 	4 	4JE3{UaZZkkkkSZZHHHH22q223333*11sxx//111r   r	   c                v    |                      |          }|!| j         d|d          d|d         dz
   d| S dS )z\Converts the object into `Content-Range` HTTP header,
        based on given length
        Nr#   r   rJ   r?   /)rC   r2   )r   r:   ranges      r   to_content_range_headerzRange.to_content_range_headerh   sT     %%f--jEE58EEeAhlEEVEEEtr   c                *    |                                  S r   r   r   s    r   r   zRange.__str__q   r   r   c                R    dt          |           j         dt          |           dS r!   r%   r   s    r   r(   zRange.__repr__t   r)   r   N)r2   r   r3   r4   r   r5   )r:   r;   r   r<   )r:   r;   r   rD   r+   )r:   r;   r   r	   )r'   r,   r-   r.   r   rC   rH   r   rS   r   r(   r/   r   r   r1   r1   +   s        
 
J J J J       2 2 2 2          8 8 8 8 8 8r   r1   c                  j    e Zd ZddZej        dd
            Zej        dd            ZddZddZdS )_CallbackPropertyownertype[ContentRange]namer   r   r5   c                    d| | _         d S )N_)attr)r   rX   rZ   s      r   __set_name__z_CallbackProperty.__set_name__y   s    JJ			r   instancete.Selfc                    d S r   r/   r   r_   rX   s      r   __get__z_CallbackProperty.__get__|   s    ?Bsr   rF   r   c                    d S r   r/   rb   s      r   rc   z_CallbackProperty.__get__~   s    ORsr   rD   type[ContentRange] | Nonete.Self | Tc                .    || S |j         | j                 S r   )__dict__r]   rb   s      r   rc   z_CallbackProperty.__get__   s     K ++r   valuec                `    ||j         | j        <   |j        |                    |           d S d S r   )rh   r]   	on_update)r   r_   ri   s      r   __set__z_CallbackProperty.__set__   s<    ',$)$)x((((( *)r   N)rX   rY   rZ   r   r   r5   )r_   r5   rX   r5   r   r`   )r_   rF   rX   rY   r   r   )r_   rD   rX   re   r   rf   )r_   rF   ri   r   r   r5   )r'   r,   r-   r^   toverloadrc   rl   r/   r   r   rW   rW   x   s            ZBBB ZBZRRR ZR, , , ,) ) ) ) ) )r   rW   c                      e Zd ZU dZ	 	 dddZ e            Zded<    e            Zded<    e            Z	ded<    e            Z
ded<   	 	 dddZddZddZddZddZddZdS )rF   zDRepresents the content range header.

    .. versionadded:: 0.7
    Nr2   r	   r8   r;   stopr:   rk   *cabc.Callable[[ContentRange], None] | Noner   r5   c                D    || _         |                     ||||           d S r   )rk   set)r   r2   r8   rp   r:   rk   s         r   r   zContentRange.__init__   s)     #fe,,,,,r   r>   c                    t          j        |||          s
J d            || _        || _        || _        || _        | j        |                     |            dS dS )z#Simple method to update the ranges.zBad range providedN)r   rA   _units_start_stop_lengthrk   )r   r8   rp   r:   r2   s        r   rs   zContentRange.set   sl     'tV<<RR>RRRR"'"'!%
#)>%NN4      &%r   c                6    |                      ddd           dS )zcSets the units to `None` which indicates that the header should
        no longer be used.
        N)r2   )rs   r   s    r   unsetzContentRange.unset   s"     	t4(((((r   r   c                    | j         dS | j        d}n| j        }| j        | j          d| S | j          d| j         d| j        dz
   d| S )Nr   *z */r#   rJ   r?   rQ   )ru   rx   rv   rw   )r   r:   s     r   r   zContentRange.to_header   sq    ;2< #FF\F;k..f...+GGGGdj1nGGvGGGr   boolc                    | j         d uS r   )ru   r   s    r   __bool__zContentRange.__bool__   s    {$&&r   c                *    |                                  S r   r   r   s    r   r   zContentRange.__str__   r   r   c                R    dt          |           j         dt          |           dS r!   r%   r   s    r   r(   zContentRange.__repr__   r)   r   r*   )r2   r	   r8   r;   rp   r;   r:   r;   rk   rq   r   r5   )Nr>   )
r8   r;   rp   r;   r:   r;   r2   r	   r   r5   )r   r5   r+   )r   r}   )r'   r,   r-   r.   r   rW   r2   __annotations__r8   rp   r:   rs   rz   r   r   r   r(   r/   r   r   rF   rF      s6          "@D	- 	- 	- 	- 	- *)++E++++))++E++++ )(**D******,,F,,,, "#! ! ! ! ! ) ) ) )	H 	H 	H 	H' ' ' '       8 8 8 8 8 8r   rF      )r   )
__future__r   collections.abcabccabctypingrm   r   TYPE_CHECKINGtyping_extensionsteTypeVarr   r   r1   GenericrW   rF   r   r   r/   r   r   <module>r      s@   " " " " " "                ? #""""AIcNN8 8 8 8 8 8 8 8<J8 J8 J8 J8 J8 J8 J8 J8Z) ) ) ) )	! ) ) ).C8 C8 C8 C8 C8 C8 C8 C8N        r   