U
    ){f                     @  s   d dl mZ d dlZd dlmZ d dlmZ d dlmZm	Z	m
Z
mZ ddlmZmZmZmZmZmZ G dd	 d	eZG d
d dZG dd dZddddddZdS )    )annotationsN)partial)BytesIO)CallableListOptionalTuple   )ASGIFrameworkASGIReceiveCallableASGISendCallable	HTTPScopeScopeWSGIFrameworkc                   @  s   e Zd ZdS )InvalidPathErrorN)__name__
__module____qualname__ r   r   U/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/hypercorn/app_wrappers.pyr      s   r   c                   @  s4   e Zd ZdddddZdddd	d	dd
ddZdS )ASGIWrapperr
   None)appreturnc                 C  s
   || _ d S Nr   )selfr   r   r   r   __init__   s    zASGIWrapper.__init__r   r   r   r   scopereceivesend
sync_spawn	call_soonr   c                   s   |  |||I d H  d S r   r   r   r   r    r!   r"   r#   r   r   r   __call__   s    zASGIWrapper.__call__N)r   r   r   r   r%   r   r   r   r   r      s   r   c                   @  s`   e Zd ZddddddZddd	d
d
ddddZddd	d
d
ddddZdd
ddddZdS )WSGIWrapperr   intr   )r   max_body_sizer   c                 C  s   || _ || _d S r   )r   r(   )r   r   r(   r   r   r   r   &   s    zWSGIWrapper.__init__r   r   r   r   r   c                   sl   |d dkr&|  |||||I d H  nB|d dkrF|ddiI d H  n"|d dkrVd S td|d  d S )NtypehttpZ	websocketzwebsocket.closeZlifespanzUnknown scope type, )handle_http	Exceptionr$   r   r   r   r%   *   s    zWSGIWrapper.__call__r   c           	        s   t  }| I d H }||dd t|| jkrb|ddg dI d H  |ddddI d H  d S |d	sqpqzt||}W n* tk
r   |dd
g dI d H  Y nX || j|t||I d H  |ddddI d H  d S )Nbody    http.response.starti  r)   statusheadershttp.response.bodyFr)   r-   	more_bodyr5   i  )		bytearrayextendgetlenr(   _build_environr   run_appr   )	r   r   r    r!   r"   r#   r-   messageenvironr   r   r   r+   ;   s    
zWSGIWrapper.handle_httpdict)r=   r!   r   c              	     s   dd dddddd fdd}|  ||}s>td	|d
 d z|D ]}|d|dd qTW 5 t|dr|  X d S )NFstrzList[Tuple[str, str]]zOptional[Exception]r   )r1   response_headersexc_infor   c                   s.   |  dd\}}t|dd |D  dd S )N r	   c                 S  s(   g | ] \}}|  d |d fqS )zlatin-1)lowerencode).0namevaluer   r   r   
<listcomp>d   s   z?WSGIWrapper.run_app.<locals>.start_response.<locals>.<listcomp>T)splitr'   )r1   r@   rA   raw_r2   Zresponse_startedstatus_coder   r   start_response[   s    z+WSGIWrapper.run_app.<locals>.start_responsez$WSGI app did not call start_responser/   r0   closer3   Tr4   )N)r   RuntimeErrorhasattrrO   )r   r=   r!   rN   Zresponse_bodyoutputr   rL   r   r;   V   s     
zWSGIWrapper.run_appN)r   r   r   r   r%   r+   r;   r   r   r   r   r&   %   s   r&   r   bytesr>   )r   r-   r   c                 C  s\  |  dpd}| d }|  dd}||rN|t|d  }|dkrH|nd}nt | d |dd	|dd	| d
 d|d |d d| d  d|  ddt|tjdddd}|  dd k	r| d d |d< |  dg D ]r\}}|d	}|dkrd}	n$|dkrd}	nd|	 
dd }	|d	}
|	|krN||	 d  |
 }
|
||	< q|S )!Nserver)	localhostP   path	root_path /methodutf8latin1Zquery_stringasciir   r	   zHTTP/%shttp_version)r	   r   schemer*   TF)REQUEST_METHODZSCRIPT_NAMEZ	PATH_INFOZQUERY_STRINGZSERVER_NAMEZSERVER_PORTZSERVER_PROTOCOLzwsgi.versionzwsgi.url_schemez
wsgi.inputzwsgi.errorszwsgi.multithreadzwsgi.multiprocesszwsgi.run_onceclientZREMOTE_ADDRr2   zcontent-lengthZCONTENT_LENGTHzcontent-typeZCONTENT_TYPEzHTTP_%s-rK   ,)r8   
startswithr9   r   rD   decoder   sysstdoutupperreplace)r   r-   rT   rW   script_namer=   raw_nameZ	raw_valuerF   Zcorrected_namerG   r   r   r   r:   x   sH    








r:   )
__future__r   rg   	functoolsr   ior   typingr   r   r   r   r
   r   r   r   r   r   r,   r   r   r&   r:   r   r   r   r   <module>   s    
S