o
    Þ­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Zd dlZd dlm	Z	m
Z
 d dlmZmZmZ e de¡ ddd„ZG dd„ dƒZG dd„ dƒZdS )é    )ÚannotationsN)ÚObjectReceiveStreamÚObjectSendStream)Ú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.Úscoper   ÚbodyÚbytesÚreturnúdict[str, typing.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© r=   úV/var/www/html/CropPilot/venv/lib/python3.10/site-packages/starlette/middleware/wsgi.pyÚbuild_environ   sD   

ô



r?   c                   @  s    e Zd Zddd„Zddd„ZdS )ÚWSGIMiddlewareÚappú typing.Callable[..., typing.Any]r   ÚNonec                 C  s
   || _ d S ©N)rA   )ÚselfrA   r=   r=   r>   Ú__init__J   s   
zWSGIMiddleware.__init__r   r   Úreceiver   Úsendr   c                 Ã  s2   �|d dks	J ‚t | j|ƒ}|||ƒI d H  d S )NÚtyper   )ÚWSGIResponderrA   )rE   r   rG   rH   Ú	responderr=   r=   r>   Ú__call__M   s   €zWSGIMiddleware.__call__N)rA   rB   r   rC   )r   r   rG   r   rH   r   r   rC   )Ú__name__Ú
__module__Ú__qualname__rF   rL   r=   r=   r=   r>   r@   I   s    
r@   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 ))rJ   z8ObjectSendStream[typing.MutableMapping[str, typing.Any]]Ústream_sendz;ObjectReceiveStream[typing.MutableMapping[str, typing.Any]]Ústream_receiverA   rB   r   r   r   rC   c                 C  s<   || _ || _d | _d | _t tj¡\| _| _	d| _
d | _d S )NF)rA   r   ÚstatusÚresponse_headersÚanyioÚcreate_memory_object_streamÚmathÚinfrP   rQ   Úresponse_startedÚexc_info)rE   rA   r   r=   r=   r>   rF   W   s   ÿ
zWSGIResponder.__init__rG   r   rH   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 sXw   Y  W d   ƒI d H  n1 I d H smw   Y  | jd ur†| jd  | jd | jd ¡‚d S )	Nó    Tr	   Ú	more_bodyFr   r   é   )r,   r?   r   rT   Úcreate_task_groupÚ
start_soonÚsenderrP   Ú	to_threadÚrun_syncÚwsgiÚstart_responserY   Úwith_traceback)rE   rG   rH   r	   r[   Úmessager9   Ú
task_groupr=   r=   r>   rL   b   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 rD   )rQ   )rE   rH   re   r=   r=   r>   r_   r   s   €ÿ.ÿzWSGIResponder.senderNrR   ÚstrrS   úlist[tuple[str, str]]rY   ú
typing.Anyc                 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   )Ústripr-   Úlower)Ú.0r:   r;   r=   r=   r>   Ú
<listcomp>‚   s    ÿÿz0WSGIResponder.start_response.<locals>.<listcomp>zhttp.response.start)rI   rR   r%   )	rY   rX   ÚsplitÚintrT   Úfrom_threadÚrunrP   rH   )rE   rR   rS   rY   Ústatus_code_stringr*   Ústatus_coder%   r=   r=   r>   rc   w   s    þýþøzWSGIResponder.start_responser9   r   rc   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)rI   r	   r[   rZ   )rI   r	   )rA   rT   rq   rr   rP   rH   )rE   r9   rc   Úchunkr=   r=   r>   rb   �   s   
þÿzWSGIResponder.wsgi)rA   rB   r   r   r   rC   )rG   r   rH   r   r   rC   )rH   r   r   rC   rD   )rR   rg   rS   rh   rY   ri   r   rC   )r9   r   rc   rB   r   rC   )	rM   rN   rO   Ú__annotations__rF   rL   r_   rc   rb   r=   r=   r=   r>   rJ   S   s   
 


	ürJ   )r   r   r	   r
   r   r   )Ú
__future__r   r1   rV   r3   ÚtypingÚwarningsrT   Ú	anyio.abcr   r   Ústarlette.typesr   r   r   ÚwarnÚDeprecationWarningr?   r@   rJ   r=   r=   r=   r>   Ú<module>   s     ý
4
