
    h%                    ^    S SK Jr   " S S5      r " S S5      rS r " S S5      rS	S
KJr  g)    )annotationsc                  4    \ rS rSrSrS	S jrS rS rS 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      rC:\Users\ROHAN GUPTA\OneDrive\Desktop\mathbuddy-assessment\venv\Lib\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%   
__module____qualname____firstlineno____doc__r   r   r   r'   __static_attributes__ r   r   r   r      s     8r   r   c                  B    \ rS rSrSrS rS rS rS rS r	S r
S	 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   r5   r6   startends        r   r   Range.__init__/   sB    
  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   )r5   lenr6   r   is_byte_range_validmin)r   lengthr8   r9   s       r   range_for_lengthRange.range_for_length:   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   r=   )rB   ContentRanger5   )r   rA   rngs      r   make_content_rangeRange.make_content_rangeJ   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   -r=   =,)r6   appendr&   r5   join)r   r6   beginr9   s       r   r   Range.to_headerS   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   rJ   r=   /)rB   r5   )r   rA   ranges      r   to_content_range_headerRange.to_content_range_header]   sJ     %%f-jj\58*AeAhl^1VHEEr   c                "    U R                  5       $ r   r   r   s    r   r   Range.__str__f   r   r   c                N    S[        U 5      R                   S[        U 5      < S3$ r   r#   r   s    r   r'   Range.__repr__i   r)   r   )r6   r5   N)r%   r+   r,   r-   r.   r   rB   rG   r   rT   r   r'   r/   r0   r   r   r2   r2   "   s+    
	J 2 8r   r2   c                2   ^  U 4S jnU 4S jn[        X5      $ )Nc                   > [        U T5      $ r   )getattr)r   names    r   fget _callback_property.<locals>.fgetn   s    tT""r   c                ^   > [        U TU5        U R                  b  U R                  U 5        g g r   )setattr	on_update)r   valuer]   s     r   fset _callback_property.<locals>.fsetq   s*    dE">>%NN4  &r   )property)r]   r^   rd   s   `  r   _callback_propertyrg   m   s    #!
 Dr   c                      \ rS rSrSrSS jr\" S5      r\" S5      r\" S5      r	\" S5      r
SS	 jrS
 rS rS rS rS rSrg)rE   y   z<Represents the content range header.

.. versionadded:: 0.7
Nc                z    [         R                  " X#U5      (       d   S5       eXPl        U R                  X#XA5        g )NBad range provided)r   r?   rb   set)r   r5   r8   stoprA   rb   s         r   r   ContentRange.__init__   s4    ''V<<R>RR<"f,r   _units_start_stop_lengthc                    [         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.rk   N)r   r?   ro   rp   rq   rr   rb   )r   r8   rm   rA   r5   s        r   rl   ContentRange.set   sP    ''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r5   )rl   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!   rJ   r=   rR   )r5   rA   r8   rm   )r   rA   s     r   r   ContentRange.to_header   ss    ::;;F[[F::jj\VH--**Qtzzl!DIIM?!F8DDr   c                    U R                   S L$ r   rv   r   s    r   __bool__ContentRange.__bool__   s    zz%%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   )rr   rp   rq   ro   rb   r*   )Nr<   )r%   r+   r,   r-   r.   r   rg   r5   r8   rm   rA   rl   rw   r   r}   r   r'   r/   r0   r   r   rE   rE   y   sW    
- x(Ex(E g&D	*F!)	E& 8r   rE      )r   N)
__future__r   r   r2   rg   rE   r   r   r0   r   r   <module>r      s4    "8 8<H8 H8V	 78 78v r   