
    +h%                    ^    d dl mZ  G d d      Z G d d      Zd Z G d d      Zd	d
lmZ y)    )annotationsc                  *    e Zd ZdZddZd Zd Zd Zy)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
    Nc                     || _         || _        y N)etagdate)selfr   r	   s      P/var/www/html/venv/lib/python3.12/site-packages/werkzeug/datastructures/range.py__init__zIfRange.__init__   s     		    c                    | j                   t        j                  | j                         S | j                  t        j                  | j                        S y)-Converts the object back into an HTTP header. )r	   http	http_dater   
quote_etagr
   s    r   	to_headerzIfRange.to_header   s?    99 >>$)),,99 ??499--r   c                "    | j                         S r   r   r   s    r   __str__zIfRange.__str__       ~~r   c                L    dt        |       j                   dt        |       dS N< >type__name__strr   s    r   __repr__zIfRange.__repr__   &    4:&&'qTQ77r   NN)r!   
__module____qualname____doc__r   r   r   r#    r   r   r   r      s     8r   r   c                  :    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
y	)
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
    c                r    || _         || _        |D ]$  \  }}|||dk  s||k\  st        ||f d       y )Nr   z is not a valid range.)unitsranges
ValueError)r
   r-   r.   startends        r   r   zRange.__init__/   sS    
   	JJE3}eai5C< UCL>1G!HII	Jr   c                    | j                   dk7  s|t        | j                        dk7  ry| j                  d   \  }}||}|dk  r||z  }t        j                  |||      r|t        ||      fS y)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   )r-   lenr.   r   is_byte_range_validmin)r
   lengthr0   r1   s       r   range_for_lengthzRange.range_for_length:   sy    
 :: FNc$++6F!6K[[^
s;Cqy##E37#c6***r   c                f    | j                  |      }|t        | j                  |d   |d   |      S y)zCreates a :class:`~werkzeug.datastructures.ContentRange` object
        from the current range and given content length.
        Nr   r4   )r9   ContentRanger-   )r
   r8   rngs      r   make_content_rangezRange.make_content_rangeJ   s9     ##F+?

CFCFFCCr   c                    g }| j                   D ]E  \  }}|%|j                  |dk\  r| dn
t        |             -|j                  | d|dz
          G | j                   ddj	                  |       S )r   r   -r4   =,)r.   appendr"   r-   join)r
   r.   beginr1   s       r   r   zRange.to_headerS   s}    ++ 	4JE3{UaZqkSZHqq	23		4
 **Qsxx/011r   c                j    | j                  |      }| | j                   d|d    d|d   dz
   d| S y)z\Converts the object into `Content-Range` HTTP header,
        based on given length
        Nr   r   r?   r4   /)r9   r-   )r
   r8   ranges      r   to_content_range_headerzRange.to_content_range_header]   sJ     %%f-jj\58*AeAhl^1VHEEr   c                "    | j                         S r   r   r   s    r   r   zRange.__str__f   r   r   c                L    dt        |       j                   dt        |       dS r   r   r   s    r   r#   zRange.__repr__i   r$   r   N)r!   r&   r'   r(   r   r9   r=   r   rH   r   r#   r)   r   r   r+   r+   "   s+    
	J 2 8r   r+   c                0      fd} fd}t        ||      S )Nc                    t        |       S r   )getattr)r
   names    r   fgetz _callback_property.<locals>.fgetn   s    tT""r   c                \    t        | |       | j                  | j                  |        y y r   )setattr	on_update)r
   valuerN   s     r   fsetz _callback_property.<locals>.fsetq   s*    dE">>%NN4  &r   )property)rN   rO   rT   s   `  r   _callback_propertyrV   m   s    #!
 D$r   c                  ~    e Zd ZdZddZ ed      Z ed      Z ed      Z ed      Z	ddZ
d	 Zd
 Zd Zd Zd Zy)r;   zDRepresents the content range header.

    .. versionadded:: 0.7
    Nc                v    t        j                  |||      sJ d       || _        | j                  ||||       y )NBad range provided)r   r6   rR   set)r
   r-   r0   stopr8   rR   s         r   r   zContentRange.__init__   s9    ''tV<R>RR<"fe,r   _units_start_stop_lengthc                    t        j                  |||      sJ d       || _        || _        || _        || _        | j                  | j                  |        yy)z#Simple method to update the ranges.rY   N)r   r6   r\   r]   r^   r_   rR   )r
   r0   r[   r8   r-   s        r   rZ   zContentRange.set   sW    ''tV<R>RR<
>>%NN4  &r   c                ,    | j                  ddd       y)zcSets the units to `None` which indicates that the header should
        no longer be used.
        Nr-   )rZ   r   s    r   unsetzContentRange.unset   s     	t4(r   c                    | j                   y| j                  d}n| j                  }| j                  | j                    d| S | j                    d| j                   d| j                  dz
   d| S )Nr   *z */r   r?   r4   rF   )r-   r8   r0   r[   )r
   r8   s     r   r   zContentRange.to_header   ss    ::;;F[[F::jj\VH--**Qtzzl!DIIM?!F8DDr   c                    | j                   d uS r   rb   r   s    r   __bool__zContentRange.__bool__   s    zz%%r   c                "    | j                         S r   r   r   s    r   r   zContentRange.__str__   r   r   c                L    dt        |       j                   dt        |       dS r   r   r   s    r   r#   zContentRange.__repr__   r$   r   r%   )Nr3   )r!   r&   r'   r(   r   rV   r-   r0   r[   r8   rZ   rc   r   rg   r   r#   r)   r   r   r;   r;   y   sW    
- x(Ex(E g&D	*F!)	E& 8r   r;      )r   N)
__future__r   r   r+   rV   r;   r   r   r)   r   r   <module>rl      s4    "8 8<H8 H8V	 78 78v r   