o
    NK&hæ	  ã                   @  sd   d dl mZ d dlZd dlmZ d dlmZmZmZ d dl	m
Z
 er(d dlmZ G dd„ de
ƒZdS )	é    )ÚannotationsN)ÚTYPE_CHECKING)ÚHeaderNotFoundÚInvalidRangeTypeÚRangeNotSatisfiable)ÚRange)ÚRequestc                   @  s&   e Zd ZdZdZdd	d
„Zdd„ ZdS )ÚContentRangeHandlerzäParse and process the incoming request headers to extract the content range information.

    Args:
        request (Request): The incoming request object.
        stats (os.stat_result): The stats of the file being served.
    )ÚstartÚendÚsizeÚtotalÚheadersÚrequestr   Ústatsúos.stat_resultÚreturnÚNonec           	      C  sx  |j | _|j dd ¡}|d u rtdƒ‚tttj| 	d¡ƒƒ\}}}|dkr-t
d |¡| ƒ‚tttj| 	d¡ƒƒ\}}}z|rBt|ƒnd | _W n tyU   td |¡| ƒ‚w z|r]t|ƒnd | _W n typ   td |¡| ƒ‚w | jd u r‡| jd u r€td| ƒ‚| jd	 | _n| jd u r™| j| j | _| jd	 | _| j| jkr¤td| ƒ‚| j| j d	 | _d
d| j| j| jf i| _d S )NÚrangezRange Header Not Foundú=Úbytesz{} is not a valid Range Typeú-z!'{}' is invalid for Content Rangez$Invalid for Content Range parametersé   zContent-Rangezbytes %s-%s/%s)Úst_sizer   r   Úgetoner   ÚtupleÚmapÚstrÚstripÚ	partitionr   ÚformatÚintr
   Ú
ValueErrorr   r   r   )	Úselfr   r   Ú_rangeÚunitÚ_ÚvalueÚstart_bÚend_b© r*   úO/var/www/html/venv/lib/python3.10/site-packages/sanic/handlers/content_range.pyÚ__init__   sT   
ÿ
ÿÿ
ÿÿ

ÿ
ÿÿ
ÿzContentRangeHandler.__init__c                 C  s   t | dƒo	| jdkS )Nr   r   )Úhasattrr   )r#   r*   r*   r+   Ú__bool__K   s   zContentRangeHandler.__bool__N)r   r   r   r   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__r,   r.   r*   r*   r*   r+   r	      s
    
.r	   )Ú
__future__r   ÚosÚtypingr   Úsanic.exceptionsr   r   r   Úsanic.models.protocol_typesr   Úsanicr   r	   r*   r*   r*   r+   Ú<module>   s    