o
    ùT·j   ã                   @  sÎ   d dl mZ d dlZd dlZd dlZd dlZd dlmZmZ d dl	m
Z
 d dlZd dlZd dlmZmZ d dlmZ d dlmZ d dlmZmZmZ ejd	ed
d� ddd„ZG dd„ dƒZG dd„ dƒZdS )é    )ÚannotationsN)ÚCallableÚMutableMapping)ÚAny)ÚObjectReceiveStreamÚObjectSendStream)Úcreate_collapsing_task_group)ÚStarletteDeprecationWarning)ÚReceiveÚScopeÚSendz˜starlette.middleware.wsgi is deprecated and will be removed in a future release. Please refer to https://github.com/abersheeran/a2wsgi as a replacement.é   )Ú
stacklevelÚscoper   ÚbodyÚbytesÚreturnúdict[str, Any]c           	      C  sL  |   dd¡ d¡ d¡}| d  d¡ d¡}| |¡r#|t|ƒd… }| d ||| d  d	¡d
| d › �d|   dd¡t |¡tjddddœ}|   d¡pLd}|d |d< |d |d< |   d¡rf| d d |d< |   dg ¡D ]7\}}| d¡}|dkr|d}n|dkrƒd}nd|› � 	¡  
d d!¡}| d¡}||v rŸ|| d" | }|||< ql|S )#zE
    Builds a scope and request body into a WSGI environ object.
    Ú	root_pathÚ Úutf8Úlatin1ÚpathNÚmethodÚquery_stringÚasciizHTTP/Úhttp_version)é   r   ÚschemeÚhttpTF)ÚREQUEST_METHODÚSCRIPT_NAMEÚ	PATH_INFOÚQUERY_STRINGÚSERVER_PROTOCOLzwsgi.versionzwsgi.url_schemez
wsgi.inputzwsgi.errorszwsgi.multithreadzwsgi.multiprocesszwsgi.run_onceÚserver)Ú	localhostéP   r   ÚSERVER_NAMEr   ÚSERVER_PORTÚclientÚREMOTE_ADDRÚheaderszcontent-lengthÚCONTENT_LENGTHzcontent-typeÚCONTENT_TYPEÚHTTP_ú-Ú_ú,)ÚgetÚencodeÚdecodeÚ
startswithÚlenÚioÚBytesIOÚsysÚstdoutÚupperÚreplace)	r   r   Úscript_nameÚ	path_infoÚenvironr%   ÚnameÚvalueÚcorrected_name© rD   ú\/home/dinkstrade/pdmp-scanner/venv/lib/python3.10/site-packages/starlette/middleware/wsgi.pyÚbuild_environ   sD   

ô



rF   c                   @  s    e Zd Zddd„Zddd„ZdS )ÚWSGIMiddlewareÚappúCallable[..., Any]r   ÚNonec                 C  s
   || _ d S ©N)rH   )ÚselfrH   rD   rD   rE   Ú__init__O   s   
zWSGIMiddleware.__init__r   r   Úreceiver
   Úsendr   c                 Ã  s2   �|d dks	J ‚t | j|ƒ}|||ƒI d H  d S )NÚtyper   )ÚWSGIResponderrH   )rL   r   rN   rO   Ú	responderrD   rD   rE   Ú__call__R   s   €zWSGIMiddleware.__call__N)rH   rI   r   rJ   )r   r   rN   r
   rO   r   r   rJ   )Ú__name__Ú
__module__Ú__qualname__rM   rS   rD   rD   rD   rE   rG   N   s    
rG   c                   @  sT   e Zd ZU ded< ded< d#dd„Zd$dd„Zd%dd„Z	d&d'dd„Zd(d!d"„ZdS ))rQ   z*ObjectSendStream[MutableMapping[str, Any]]Ústream_sendz-ObjectReceiveStream[MutableMapping[str, Any]]Ústream_receiverH   rI   r   r   r   rJ   c                 C  s<   || _ || _d | _d | _t tj¡\| _| _	d| _
d | _d S )NF)rH   r   ÚstatusÚresponse_headersÚanyioÚcreate_memory_object_streamÚmathÚinfrW   rX   Úresponse_startedÚexc_info)rL   rH   r   rD   rD   rE   rM   \   s   
zWSGIResponder.__init__rN   r
   rO   r   c              
   Ã  s  �d}d}|r|ƒ I d H }||  dd¡7 }|  dd¡}|st| j|ƒ}tƒ 4 I d H š<}| | j|¡ | j4 I d H š tj 	| j
|| j¡I d H  W d   ƒI d H  n1 I d H sWw   Y  W d   ƒI d H  n1 I d H slw   Y  | jd ur…| jd  | jd | jd ¡‚d S )	Nó    Tr   Ú	more_bodyFr   r   r   )r3   rF   r   r   Ú
start_soonÚsenderrW   r[   Ú	to_threadÚrun_syncÚwsgiÚstart_responser`   Úwith_traceback)rL   rN   rO   r   rb   Úmessager@   Ú
task_grouprD   rD   rE   rS   e   s$   €ý*ÿ(þ
ÿzWSGIResponder.__call__c              	   Ã  sf   �| j 4 I d H š | j 2 z3 d H W }||ƒI d H  q6 W d   ƒI d H  d S 1 I d H s,w   Y  d S rK   )rX   )rL   rO   rj   rD   rD   rE   rd   u   s   €ÿ.ÿzWSGIResponder.senderNrY   ÚstrrZ   úlist[tuple[str, str]]r`   r   c                 C  sZ   || _ | js+d| _| dd¡\}}t|ƒ}dd„ |D ƒ}tj | jjd||dœ¡ d S d S )NTú r   c                 S  s0   g | ]\}}|  ¡  d ¡ ¡ |  ¡  d ¡f‘qS )r   )Ústripr4   Úlower)Ú.0rA   rB   rD   rD   rE   Ú
<listcomp>…   s    ÿÿz0WSGIResponder.start_response.<locals>.<listcomp>zhttp.response.start)rP   rY   r,   )	r`   r_   ÚsplitÚintr[   Úfrom_threadÚrunrW   rO   )rL   rY   rZ   r`   Ústatus_code_stringr1   Ústatus_coder,   rD   rD   rE   rh   z   s    þýþøzWSGIResponder.start_responser@   r   rh   c                 C  sH   |   ||¡D ]}tj | jjd|ddœ¡ qtj | jjdddœ¡ d S )Nzhttp.response.bodyT)rP   r   rb   ra   )rP   r   )rH   r[   ru   rv   rW   rO   )rL   r@   rh   ÚchunkrD   rD   rE   rg   ’   s   
þzWSGIResponder.wsgi)rH   rI   r   r   r   rJ   )rN   r
   rO   r   r   rJ   )rO   r   r   rJ   rK   )rY   rl   rZ   rm   r`   r   r   rJ   )r@   r   rh   rI   r   rJ   )	rT   rU   rV   Ú__annotations__rM   rS   rd   rh   rg   rD   rD   rD   rE   rQ   X   s   
 

	
	ürQ   )r   r   r   r   r   r   )Ú
__future__r   r8   r]   r:   ÚwarningsÚcollections.abcr   r   Útypingr   Úanyio.from_threadr[   Úanyio.to_threadÚ	anyio.abcr   r   Ústarlette._utilsr   Ústarlette.exceptionsr	   Ústarlette.typesr
   r   r   ÚwarnrF   rG   rQ   rD   rD   rD   rE   Ú<module>   s*    ü
4
