o
    é’Oj  ã                   @   sŽ   d dl Z d dlZd dlmZ d dlmZmZ d dlmZm	Z	m
Z
mZmZ dZG dd„ dƒZG dd	„ d	ƒZG d
d„ deƒZde	defdd„ZdS )é    N)ÚNoReturn)ÚHeadersÚMutableHeaders)ÚASGIAppÚMessageÚReceiveÚScopeÚSend)ztext/event-streamc                	   @   sB   e Zd Zddedededdfdd	„Zd
edededdfdd„Z	dS )ÚGZipMiddlewareéô  é	   ÚappÚminimum_sizeÚcompresslevelÚreturnNc                 C   s   || _ || _|| _d S ©N)r   r   r   ©Úselfr   r   r   © r   ú_/var/www/html/pharmsmart-cdr-gen/venv/lib/python3.10/site-packages/starlette/middleware/gzip.pyÚ__init__   s   
zGZipMiddleware.__init__ÚscopeÚreceiveÚsendc                 Ã   sz   �|d dkr|   |||¡I d H  d S t|d�}d| dd¡v r+t| j | j| jd�}nt| j | jƒ}||||ƒI d H  d S )NÚtypeÚhttp)r   ÚgzipúAccept-EncodingÚ )r   )r   r   ÚgetÚGZipResponderr   r   ÚIdentityResponder)r   r   r   r   ÚheadersÚ	responderr   r   r   Ú__call__   s   €
zGZipMiddleware.__call__)r   r   )
Ú__name__Ú
__module__Ú__qualname__r   Úintr   r   r   r	   r$   r   r   r   r   r
      s    r
   c                   @   sn   e Zd ZU eed< dededdfdd„Zded	e	d
e
ddfdd„Zdeddfdd„Zdededefdd„ZdS )r!   Úcontent_encodingr   r   r   Nc                 C   s.   || _ || _t| _i | _d| _d| _d| _d S )NF)r   r   Úunattached_sendr   Úinitial_messageÚstartedÚcontent_encoding_setÚcontent_type_is_excluded)r   r   r   r   r   r   r   #   s   
zIdentityResponder.__init__r   r   r   c                 Ã   s"   �|| _ |  ||| j¡I d H  d S r   )r   r   Úsend_with_compression©r   r   r   r   r   r   r   r$   ,   s   €zIdentityResponder.__call__Úmessagec                 Ã   sb  �|d }|dkr%|| _ t| j d d�}d|v | _| dd¡ t¡| _d S |dkrH| js/| jrH| js>d	| _|  | j ¡I d H  |  |¡I d H  d S |dkró| jsód	| _| d
d¡}| dd¡}t	|ƒ| j
k rz|sz|  | j ¡I d H  |  |¡I d H  d S |sº| j|dd�}t| j d d�}| d¡ ||d
 kr§| j|d< tt	|ƒƒ|d< ||d
< |  | j ¡I d H  |  |¡I d H  d S | j|d	d�}t| j d d�}| d¡ ||d
 krà| j|d< |d= ||d
< |  | j ¡I d H  |  |¡I d H  d S |dk�r| d
d¡}| dd¡}| j||d�|d
< |  |¡I d H  d S |dk�r/|  | j ¡I d H  |  |¡I d H  d S d S )Nr   zhttp.response.startr"   )Úrawzcontent-encodingzcontent-typer   zhttp.response.bodyTÚbodyó    Ú	more_bodyF)r5   r   zContent-EncodingzContent-Lengthzhttp.response.pathsend)r+   r   r-   r   Ú
startswithÚDEFAULT_EXCLUDED_CONTENT_TYPESr.   r,   r   Úlenr   Úapply_compressionr   Úadd_vary_headerr)   Ústr)r   r1   Úmessage_typer"   r3   r5   r   r   r   r/   0   s^   €






ýz'IdentityResponder.send_with_compressionr3   r5   c                C   s   |S )zÚApply compression on the response body.

        If more_body is False, any compression file should be closed. If it
        isn't, it won't be closed automatically until all background tasks
        complete.
        r   ©r   r3   r5   r   r   r   r9   m   s   z#IdentityResponder.apply_compression)r%   r&   r'   r;   Ú__annotations__r   r(   r   r   r   r	   r$   r   r/   ÚbytesÚboolr9   r   r   r   r   r!       s   
 	=r!   c                	       sh   e Zd ZdZddedededdf‡ fdd	„Zd
edede	ddf‡ fdd„Z
dededefdd„Z‡  ZS )r    r   r   r   r   r   r   Nc                    s0   t ƒ  ||¡ t ¡ | _tjd| j|d�| _d S )NÚwb)ÚmodeÚfileobjr   )Úsuperr   ÚioÚBytesIOÚgzip_bufferr   ÚGzipFileÚ	gzip_filer   ©Ú	__class__r   r   r   z   s   
zGZipResponder.__init__r   r   r   c              	   ƒ   sz   �| j �/ | j� tƒ  |||¡I d H  W d   ƒ n1 sw   Y  W d   ƒ d S W d   ƒ d S 1 s6w   Y  d S r   )rG   rI   rD   r$   r0   rJ   r   r   r$   €   s   €PÿzGZipResponder.__call__r3   r5   c                C   s>   | j  |¡ |s| j  ¡  | j ¡ }| j d¡ | j ¡  |S )Nr   )rI   ÚwriteÚcloserG   ÚgetvalueÚseekÚtruncater=   r   r   r   r9   „   s   


zGZipResponder.apply_compression)r   )r%   r&   r'   r)   r   r(   r   r   r   r	   r$   r?   r@   r9   Ú__classcell__r   r   rJ   r   r    w   s
     r    r1   r   c                 Ã   s
   �t dƒ‚)Nzsend awaitable not set)ÚRuntimeError)r1   r   r   r   r*   �   s   €r*   )r   rE   Útypingr   Ústarlette.datastructuresr   r   Ústarlette.typesr   r   r   r   r	   r7   r
   r!   r    r*   r   r   r   r   Ú<module>   s    W