
     f%                    r    d dl mZ  G d d          Z G d d          Zd Z G d d          Zd	d
lmZ dS )    )annotationsc                  ,    e Zd ZdZddZd Zd Z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
    Nc                "    || _         || _        d S N)etagdate)selfr   r	   s      `/var/www/api.educacionweb.es/myenv/lib/python3.11/site-packages/werkzeug/datastructures/range.py__init__zIfRange.__init__   s     				    c                    | 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__strr   s    r   __repr__zIfRange.__repr__   *    74::&77T7777r   NN)r!   
__module____qualname____doc__r   r   r   r#    r   r   r   r      s_                   8 8 8 8 8r   r   c                  <    e Zd ZdZd Zd Zd Zd Zd Zd Z	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
    c                z    || _         || _        |D ])\  }}|| |dk     s||k    rt          ||f d          *d S )Nr   z is not a valid range.)unitsranges
ValueError)r
   r-   r.   startends        r   r   zRange.__init__/   sh    
   	J 	JJE3}eaii5C<< UCL!H!H!HIII	J 	Jr   c                    | 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   )r-   lenr.   r   is_byte_range_validmin)r
   lengthr0   r1   s       r   range_for_lengthzRange.range_for_length:   s    
 :  FNc$+6F6F!6K6K4[^
s;Cqyy#E377 	+#c6****tr   c                z    |                      |          }|#t          | j        |d         |d         |          S dS )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   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   -r4   =,)r.   appendr"   r-   join)r
   r.   beginr1   s       r   r   zRange.to_headerS   s    + 	4 	4JE3{UaZZkkkkSZZHHHH22q223333*11sxx//111r   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   r?   r4   /)r9   r-   )r
   r8   ranges      r   to_content_range_headerzRange.to_content_range_header]   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__f   r   r   c                R    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 	J 	J     2 2 2       8 8 8 8 8r   r+   c                8      fd} fd}t          ||          S )Nc                $    t          |           S r   )getattr)r
   names    r   fgetz _callback_property.<locals>.fgetn   s    tT"""r   c                f    t          | |           | j        |                     |            d S d S 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   sG    # # # # #! ! ! ! !
 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dS )r;   zDRepresents the content range header.

    .. versionadded:: 0.7
    Nc                    t          j        |||          s
J d            || _        |                     ||||           d S )NBad range provided)r   r6   rR   set)r
   r-   r0   stopr8   rR   s         r   r   zContentRange.__init__   sK    'tV<<RR>RRRR"fe,,,,,r   _units_start_stop_lengthr3   c                    t          j        |||          s
J d            || _        || _        || _        || _        | j        |                     |            dS dS )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   sj    '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r-   )rZ   r   s    r   unsetzContentRange.unset   s"     	t4(((((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   r?   r4   rF   )r-   r8   r0   r[   )r
   r8   s     r   r   zContentRange.to_header   sq    :2;FF[F:j--V---*DDtzDDDIMDDFDDDr   c                    | j         d uS r   rb   r   s    r   __bool__zContentRange.__bool__   s    z%%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%   )Nr3   )r!   r&   r'   r(   r   rV   r-   r0   r[   r8   rZ   rc   r   rg   r   r#   r)   r   r   r;   r;   y   s         
- - - - x((Ex((E g&&D	**F! ! ! !) ) )	E 	E 	E& & &     8 8 8 8 8r   r;      )r   N)
__future__r   r   r+   rV   r;   r   r   r)   r   r   <module>rl      s    " " " " " "8 8 8 8 8 8 8 8<H8 H8 H8 H8 H8 H8 H8 H8V	  	  	 78 78 78 78 78 78 78 78v        r   