
    %hl                        S SK Jr  S SKJr  S SKrS SKJr  \R                  (       a  S SK	r
\R                  " S5      r " S S5      r " S S5      r " S	 S
\R                  \   5      r " S S5      rSSKJr  g)    )annotationsN)datetimeTc                  D    \ rS rSrSrS	S
S jjrSS jrSS jrSS jrSr	g)IfRange   zVery 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                    Xl         X l        g N)etagdate)selfr   r   s      U/var/www/auris/envauris/lib/python3.13/site-packages/werkzeug/datastructures/range.py__init__IfRange.__init__   s     		    c                    U R                   b   [        R                  " U R                   5      $ U R                  b   [        R                  " U R                  5      $ g)-Converts the object back into an HTTP header. )r   http	http_dater   
quote_etagr   s    r   	to_headerIfRange.to_header   s?    99 >>$)),,99 ??499--r   c                "    U R                  5       $ r
   r   r   s    r   __str__IfRange.__str__$       ~~r   c                N    S[        U 5      R                   S[        U 5      < S3$ N< >type__name__strr   s    r   __repr__IfRange.__repr__'   &    4:&&'qTQ77r   )r   r   NN)r   
str | Noner   zdatetime | Nonereturnr(   )
r'   
__module____qualname____firstlineno____doc__r   r   r   r)   __static_attributes__ r   r   r   r      s     8r   r   c                  j    \ rS rSrSr      SS jrSS jrSS jrSS jrSS jr	SS jr
SS	 jrS
rg)Range+   a<  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                v    Xl         X l        U H'  u  p4Ub  Uc  M  US:  d  X4:  d  M  [        X44 S35      e   g )Nr   z is not a valid range.)unitsranges
ValueError)r   r:   r;   startends        r   r   Range.__init__8   sD     
  JE}eai5< UL>1G!HII !r   c                    U R                   S:w  d  Ub  [        U R                  5      S:w  a  gU R                  S   u  p#Uc  UnUS:  a  X!-  n[        R                  " X#U5      (       a  U[        X15      4$ g)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   lengthr=   r>   s       r   range_for_lengthRange.range_for_lengthE   st    
 :: FNc$++6F!6K[[^
;Cqy##E77#c***r   c                h    U R                  U5      nUb  [        U R                  US   US   U5      $ g)zqCreates a :class:`~werkzeug.datastructures.ContentRange` object
from the current range and given content length.
Nr   rB   )rG   ContentRanger:   )r   rF   rngs      r   make_content_rangeRange.make_content_rangeU   s9     ##F+?

CFCFFCCr   c                    / nU R                    HH  u  p#Uc'  UR                  US:  a  U S3O
[        U5      5        M/  UR                  U SUS-
   35        MJ     U R                   SSR	                  U5       3$ )r   r   -rB   =,)r;   appendr(   r:   join)r   r;   beginr>   s       r   r   Range.to_header^   sv    ++JE{UaZqkSZHqq	23	 &
 **Qsxx/011r   c                l    U R                  U5      nUb   U R                   SUS    SUS   S-
   SU 3$ g)zLConverts the object into `Content-Range` HTTP header,
based on given length
Nr#   r   rO   rB   /)rG   r:   )r   rF   ranges      r   to_content_range_headerRange.to_content_range_headerh   sJ     %%f-jj\58*AeAhl^1VHEEr   c                "    U R                  5       $ r
   r   r   s    r   r   Range.__str__q   r   r   c                N    S[        U 5      R                   S[        U 5      < S3$ r!   r%   r   s    r   r)   Range.__repr__t   r+   r   )r;   r:   N)r:   r(   r;   z%cabc.Sequence[tuple[int, int | None]]r/   None)rF   
int | Noner/   ztuple[int, int] | None)rF   r`   r/   ContentRange | Noner.   )rF   r`   r/   r-   )r'   r0   r1   r2   r3   r   rG   rL   r   rY   r   r)   r4   r5   r   r   r7   r7   +   sF    
JJ"GJ	J 2 8r   r7   c                      \ rS rSrS	S jr\R                  S
S j5       r\R                  SS j5       r      SS jrSS jrSr	g)_CallbackPropertyx   c                    SU 3U l         g )N_attr)r   ownernames      r   __set_name___CallbackProperty.__set_name__y   s    vJ	r   c                    g r
   r5   r   instanceri   s      r   __get___CallbackProperty.__get__|   s    ?Br   c                    g r
   r5   rn   s      r   rp   rq   ~   s    ORr   c                >    Uc  U $ UR                   U R                     $ r
   )__dict__rh   rn   s      r   rp   rq      s$     K  ++r   c                r    X!R                   U R                  '   UR                  b  UR                  U5        g g r
   )rt   rh   	on_update)r   ro   values      r   __set___CallbackProperty.__set__   s3    ',$))$)x( *r   rg   N)ri   type[ContentRange]rj   r(   r/   r_   )ro   r_   ri   r_   r/   zte.Self)ro   rJ   ri   rz   r/   r   )ro   ra   ri   ztype[ContentRange] | Noner/   zte.Self | T)ro   rJ   rw   r   r/   r_   )
r'   r0   r1   r2   rk   toverloadrp   rx   r4   r5   r   r   rc   rc   x   sO     ZZB BZZR R,+,4M,	,)r   rc   c                      \ rS rSr% Sr  S           SS
 jjr\" 5       rS\S'   \" 5       r	S\S'   \" 5       r
S\S'   \" 5       rS\S	'     S         SS jjrSS jrSS jrSS jrSS jrSS jrSrg)rJ      z<Represents the content range header.

.. versionadded:: 0.7
Nr:   r-   r=   r`   stoprF   c                4    XPl         U R                  X#XA5        g r
   )rv   set)r   r:   r=   r   rF   rv   s         r   r   ContentRange.__init__   s     #f,r   c                    [         R                  " XU5      (       d   S5       eX@l        Xl        X l        X0l        U R                  b  U R                  U 5        gg)z#Simple method to update the ranges.zBad range providedN)r   rD   _units_start_stop_lengthrv   )r   r=   r   rF   r:   s        r   r   ContentRange.set   sR     ''V<<R>RR<"'"'!%
#)>>%NN4  &r   c                &    U R                  SSSS9  g)zSSets the units to `None` which indicates that the header should
no longer be used.
N)r:   )r   r   s    r   unsetContentRange.unset   s     	t4(r   c                    U R                   c  gU R                  c  SnOU R                  nU R                  c  U R                    SU 3$ U R                    SU R                   SU R                  S-
   SU 3$ )Nr   *z */r#   rO   rB   rW   )r   r   r   r   )r   rF   s     r   r   ContentRange.to_header   st    ;;<< #F\\F;;kk]#fX..++a}Adjj1n-=QvhGGr   c                    U R                   S L$ r
   )r   r   s    r   __bool__ContentRange.__bool__   s    {{$&&r   c                "    U R                  5       $ r
   r   r   s    r   r   ContentRange.__str__   r   r   c                N    S[        U 5      R                   S[        U 5      < S3$ r!   r%   r   s    r   r)   ContentRange.__repr__   r+   r   )r   r   r   r   rv   r,   )r:   r-   r=   r`   r   r`   rF   r`   rv   z*cabc.Callable[[ContentRange], None] | Noner/   r_   )NrA   )
r=   r`   r   r`   rF   r`   r:   r-   r/   r_   )r/   r_   r.   )r/   bool)r'   r0   r1   r2   r3   r   rc   r:   __annotations__r=   r   rF   r   r   r   r   r   r)   r4   r5   r   r   rJ   rJ      s     "@D	-	- 	- 		-
 	- >	- 
	- *+E:+)+E:+ )*D***,FJ, "#!! ! 	!
 ! 
! )	H' 8r   rJ      )r   )
__future__r   collections.abcabccabctypingr{   r   TYPE_CHECKINGtyping_extensionsteTypeVarr   r   r7   Genericrc   rJ   r   r   r5   r   r   <module>r      se    "   ??"IIcN8 8<J8 J8Z)		! ).C8 C8N r   