Ë
    ÑÕ°jz  ã                  óì   — 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 y)é    )ÚannotationsN)ÚdatetimeÚTc                  ó2   — e Zd ZdZddd„Zd	d„Zd	d„Zd	d„Zy)
ÚIfRangez½Very 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      úS/var/www/mission/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?   € à�9‰9Ð Ü—>‘> $§)¡)Ó,Ð,Ø�9‰9Ð Ü—?‘? 4§9¡9Ó-Ð-Ø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
   ú
str | Noner   zdatetime | None©Úreturnr$   )r#   Ú
__module__Ú__qualname__Ú__doc__r   r   r   r%   © r   r   r   r      s   „ ñôóó ô8r   r   c                  óT   — 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
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   r2   r3   ÚstartÚends        r   r   zRange.__init__8   sU   € ð ˆŒ
ð ˆŒà ò 	J‰JˆE�3Øˆ} ¡°e¸a²iÀ5ÈCÃ<Ü  U¨C L >Ð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)z·If 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   Úlengthr5   r6   s       r   Úrange_for_lengthzRange.range_for_lengthE   sy   € ð
 �:‰:˜Ò  F N´c¸$¿+¹+Ó6FÈ!Ò6KØØ—[‘[ ‘^‰
ˆˆsØˆ;ØˆCØ�qŠyØ˜‘�Ü×#Ñ# E¨3°Ô7Øœ#˜c 6Ó*Ð*Ð*Ør   c                óf   — | j                  |«      }|�t        | j                  |d   |d   |«      S y)z�Creates a :class:`~werkzeug.datastructures.ContentRange` object
        from the current range and given content length.
        Nr   r9   )r>   ÚContentRanger2   )r   r=   Úrngs      r   Úmake_content_rangezRange.make_content_rangeU   s9   € ð ×#Ñ# FÓ+ˆØˆ?Ü §
¡
¨C°©F°C¸±F¸FÓ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   ú-r9   ú=ú,)r3   Úappendr$   r2   Újoin)r   r3   Úbeginr6   s       r   r   zRange.to_header^   s}   € àˆØŸ+™+ò 	4‰JˆE�3Øˆ{Ø—‘¨U°aªZ   q™k¼SÀ»ZÕHà—‘   q¨¨q©¨	Ð2Õ3ð		4ð
 —*‘*�˜Q˜sŸx™x¨Ó/Ð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   rD   r9   ú/)r>   r2   )r   r=   Úranges      r   Úto_content_range_headerzRange.to_content_range_headerh   sJ   € ð ×%Ñ% fÓ-ˆØÐØ—j‘j�\  5¨¡8 *¨A¨e°A©h¸©l¨^¸1¸V¸HÐEÐEØr   c                ó"   — | j                  «       S r	   r   r   s    r   r   zRange.__str__q   r   r   c                óL   — dt        | «      j                  › dt        | «      ›d�S r   r!   r   s    r   r%   zRange.__repr__t   r&   r   N)r2   r$   r3   z%cabc.Sequence[tuple[int, int | None]]r*   ÚNone)r=   ú
int | Noner*   ztuple[int, int] | None)r=   rQ   r*   úContentRange | Noner)   )r=   rQ   r*   r(   )r#   r+   r,   r-   r   r>   rB   r   rM   r   r%   r.   r   r   r0   r0   +   sF   „ ñ
ðJØðJØ"GðJà	óJóó ó2óó ô8r   r0   c                  ó|   — e Zd Zdd„Zej
                  dd„«       Zej
                  d	d„«       Z	 	 	 	 	 	 d
d„Zdd„Zy)Ú_CallbackPropertyc                ó   — d|› �| _         y )NÚ_)Úattr)r   ÚownerÚnames      r   Ú__set_name__z_CallbackProperty.__set_name__y   s   € Ø˜�v�Jˆ�	r   c                 ó   — y r	   r.   ©r   ÚinstancerX   s      r   Ú__get__z_CallbackProperty.__get__|   s   € Ø?Br   c                 ó   — y r	   r.   r\   s      r   r^   z_CallbackProperty.__get__~   s   € ØORr   c                ó<   — |€| S |j                   | j                     S r	   )Ú__dict__rW   r\   s      r   r^   z_CallbackProperty.__get__€   s$   € ð ÐØˆKà× Ñ  §¡Ñ+Ð+r   c                ór   — ||j                   | j                  <   |j                  �|j                  |«       y y r	   )ra   rW   Ú	on_update)r   r]   Úvalues      r   Ú__set__z_CallbackProperty.__set__ˆ   s5   € Ø',ˆ×Ñ˜$Ÿ)™)Ñ$à×ÑÐ)Ø×Ñ˜xÕ(ð *r   N)rX   útype[ContentRange]rY   r$   r*   rP   )r]   rP   rX   rP   r*   zte.Self)r]   r@   rX   rf   r*   r   )r]   rR   rX   ztype[ContentRange] | Noner*   zte.Self | T)r]   r@   rd   r   r*   rP   )r#   r+   r,   rZ   ÚtÚoverloadr^   re   r.   r   r   rT   rT   x   sO   „ óð ‡Z�ZÚBó ØBØ‡Z�ZÚRó ØRð,Ø+ð,Ø4Mð,à	ó,ô)r   rT   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y)r@   zDRepresents the content range header.

    .. versionadded:: 0.7
    Nr2   r(   r5   rQ   Ústopr=   c                ó:   — || _         | j                  ||||«       y r	   )rc   Úset)r   r2   r5   rj   r=   rc   s         r   r   zContentRange.__init__•   s   € ð #ˆŒØ�‰�˜˜f eÕ,r   c                ó´   — t        j                  |||«      sJ d«       ‚|| _        || _        || _        || _        | j                  �| j                  | «       yy)z#Simple method to update the ranges.zBad range providedN)r   r;   Ú_unitsÚ_startÚ_stopÚ_lengthrc   )r   r5   rj   r=   r2   s        r   rl   zContentRange.setª   sY   € ô ×'Ñ'¨¨t°VÔ<ÐRÐ>RÓRÐ<Ø"'ˆŒØ"'ˆŒØ!%ˆŒ
Ø#)ˆŒØ�>‰>Ð%Ø�N‰N˜4Õ ð &r   c                ó,   — | j                  ddd¬«       y)zcSets the units to `None` which indicates that the header should
        no longer be used.
        N)r2   )rl   r   s    r   ÚunsetzContentRange.unsetº   s   € ð 	�‰��t 4ˆÕ(r   c                óè   — | j                   €y| j                  €d}n| j                  }| j                  €| j                   › d|› �S | j                   › d| j                  › d| j                  dz
  › d|› �S )Nr   Ú*z */r   rD   r9   rK   )rn   rq   ro   rp   )r   r=   s     r   r   zContentRange.to_headerÀ   st   € Ø�;‰;ÐØØ�<‰<ÐØ #‰Fà—\‘\ˆFØ�;‰;ÐØ—k‘k�] # f XÐ.Ð.Ø—+‘+�˜a §¡˜}¨A¨d¯j©j¸1©nÐ-=¸Q¸v¸hÐGÐGr   c                ó   — | j                   d uS r	   )rn   r   s    r   Ú__bool__zContentRange.__bool__Ë   s   € Ø�{‰{ $Ð&Ð&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'   )r2   r(   r5   rQ   rj   rQ   r=   rQ   rc   z*cabc.Callable[[ContentRange], None] | Noner*   rP   )Nr8   )
r5   rQ   rj   rQ   r=   rQ   r2   r(   r*   rP   )r*   rP   r)   )r*   Úbool)r#   r+   r,   r-   r   rT   r2   Ú__annotations__r5   rj   r=   rl   rs   r   rw   r   r%   r.   r   r   r@   r@   �   sÝ   … ñð "Ø@Dð	-àð	-ð ð	-ð ð		-ð
 ð	-ð >ð	-ð 
ó	-ñ *Ó+€Eˆ:Ó+á)Ó+€Eˆ:Ó+ñ )Ó*€Dˆ*Ó*á*Ó,€FˆJÓ,ð "Ø#ð!àð!ð ð!ð ð	!ð
 ð!ð 
ó!ó )ó	Hó'ó ô8r   r@   é   )r   )Ú
__future__r   Úcollections.abcÚabcÚcabcÚtypingrg   r   ÚTYPE_CHECKINGÚtyping_extensionsÚteÚTypeVarr   r   r0   ÚGenericrT   r@   r   r   r.   r   r   ú<module>r‡      sg   ðÝ "å Û Ý à‡?‚?Û"à€A‡I�IˆcƒN€÷8ñ 8÷<J8ñ J8ôZ)˜Ÿ	™	 !™ô )÷.C8ñ C8öN r   