o
    6d%                     @  sN   d dl mZ G dd dZG dd dZdd ZG dd	 d	Zd
dlmZ dS )    )annotationsc                   @  s2   e Zd ZdZdddZdd Zdd Zd	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                 C  s   || _ || _d S N)etagdate)selfr   r    r   tC:\Users\jesus\OneDrive\Desktop\erpjis_fastapi\backend\jisbackend\Lib\site-packages\werkzeug/datastructures/range.py__init__   s   
zIfRange.__init__c                 C  s0   | j durt| j S | jdurt| jS dS )-Converts the object back into an HTTP header.N )r   httpZ	http_dater   Z
quote_etagr   r   r   r	   	to_header   s
   

zIfRange.to_headerc                 C     |   S r   r   r   r   r   r	   __str__      zIfRange.__str__c                 C     dt | j dt| dS N< >type__name__strr   r   r   r	   __repr__      zIfRange.__repr__NN)r   
__module____qualname____doc__r
   r   r   r   r   r   r   r	   r      s    
r   c                   @  sH   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
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                 C  sP   || _ || _|D ]\}}|d u s|d ur%|dk s||kr%t||f dqd S )Nr   z is not a valid range.)unitsranges
ValueError)r   r$   r%   startendr   r   r	   r
   /   s    zRange.__init__c                 C  sn   | j dks|du st| jdkrdS | jd \}}|du r'|}|dk r'||7 }t|||r5|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   lengthr'   r(   r   r   r	   range_for_length:   s    zRange.range_for_lengthc                 C  s.   |  |}|durt| j|d |d |S dS )zCreates a :class:`~werkzeug.datastructures.ContentRange` object
        from the current range and given content length.
        Nr   r*   )r/   ContentRanger$   )r   r.   rngr   r   r	   make_content_rangeJ   s   
zRange.make_content_rangec                 C  sl   g }| j D ]%\}}|du r||dkr| dnt| q|| d|d   q| j dd| S )r   Nr   -r*   =,)r%   appendr   r$   join)r   r%   beginr(   r   r   r	   r   S   s   "zRange.to_headerc                 C  s>   |  |}|dur| j d|d  d|d d  d| S dS )z\Converts the object into `Content-Range` HTTP header,
        based on given length
        Nr   r   r3   r*   /)r/   r$   )r   r.   ranger   r   r	   to_content_range_header]   s   
(zRange.to_content_range_headerc                 C  r   r   r   r   r   r   r	   r   f   r   zRange.__str__c                 C  r   r   r   r   r   r   r	   r   i   r   zRange.__repr__N)r   r    r!   r"   r
   r/   r2   r   r;   r   r   r   r   r   r	   r#   "   s    	
	r#   c                   s"    fdd} fdd}t ||S )Nc                   s
   t |  S r   )getattrr   namer   r	   fgetn      
z _callback_property.<locals>.fgetc                   s(   t |  | | jd ur| |  d S d S r   )setattr	on_update)r   valuer=   r   r	   fsetq   s   
z _callback_property.<locals>.fset)property)r>   r?   rD   r   r=   r	   _callback_propertym   s   
rF   c                   @  sl   e Zd ZdZdddZedZedZedZedZ	dd
dZ
dd Zdd Zdd Zdd Zdd ZdS )r0   zDRepresents the content range header.

    .. versionadded:: 0.7
    Nc                 C  s0   t |||sJ d|| _| |||| d S )NBad range provided)r   r,   rB   set)r   r$   r'   stopr.   rB   r   r   r	   r
      s   zContentRange.__init___units_start_stop_lengthr)   c                 C  sJ   t |||sJ d|| _|| _|| _|| _| jdur#| |  dS dS )z#Simple method to update the ranges.rG   N)r   r,   rJ   rK   rL   rM   rB   )r   r'   rI   r.   r$   r   r   r	   rH      s   
zContentRange.setc                 C  s   | j dddd dS )zcSets the units to `None` which indicates that the header should
        no longer be used.
        Nr$   )rH   r   r   r   r	   unset   s   zContentRange.unsetc                 C  sb   | j d u rdS | jd u rd}n| j}| jd u r| j  d| S | j  d| j d| jd  d| S )Nr   *z */r   r3   r*   r9   )r$   r.   r'   rI   )r   r.   r   r   r	   r      s   


$zContentRange.to_headerc                 C  s
   | j d uS r   rN   r   r   r   r	   __bool__   r@   zContentRange.__bool__c                 C  r   r   r   r   r   r   r	   r      r   zContentRange.__str__c                 C  r   r   r   r   r   r   r	   r      r   zContentRange.__repr__r   )Nr)   )r   r    r!   r"   r
   rF   r$   r'   rI   r.   rH   rO   r   rQ   r   r   r   r   r   r	   r0   y   s    


r0      )r   N)
__future__r   r   r#   rF   r0   r   r   r   r   r   r	   <module>   s    K;