o
    lfa                     @   sH   d dl mZ d dlmZ d dlmZmZ G dd dZG dd dZdS )	    )BytesIO)SpooledTemporaryFile)AsyncToSyncsync_to_asyncc                   @   s    e Zd ZdZdd Zdd ZdS )
WsgiToAsgizG
    Wraps a WSGI application to make it into an ASGI application.
    c                 C   s
   || _ d S N)wsgi_applicationselfr    r   P/var/www/ticemtrilhas/avaliacao_env/lib/python3.10/site-packages/asgiref/wsgi.py__init__   s   
zWsgiToAsgi.__init__c                    s   t | j|||I dH  dS )z
        ASGI application instantiation point.
        We return a new WsgiToAsgiInstance here with the WSGI app
        and the scope, ready to respond when it is __call__ed.
        N)WsgiToAsgiInstancer   )r
   scopereceivesendr   r   r   __call__   s   zWsgiToAsgi.__call__N)__name__
__module____qualname____doc__r   r   r   r   r   r   r      s    r   c                   @   s>   e Zd ZdZdd Zdd Zdd Zdd	d
Zedd Z	dS )r   z;
    Per-socket instance of a wrapped WSGI application
    c                 C   s   || _ d| _d | _d S )NF)r   response_startedresponse_content_lengthr	   r   r   r   r      s   
zWsgiToAsgiInstance.__init__c                    s   |d dkrt d|| _tdd<}	 | I d H }|d dkr%t d||d	d
 |ds4nq|d t|| _| |I d H  W d    d S 1 sRw   Y  d S )Ntypehttpz&WSGI wrapper received a non-HTTP scopei   )max_sizeTzhttp.requestz0WSGI wrapper received a non-HTTP-request messagebody    	more_bodyr   )	
ValueErrorr   r   writegetseekr   	sync_sendrun_wsgi_app)r
   r   r   r   r   messager   r   r   r   "   s"   


"zWsgiToAsgiInstance.__call__c           	      C   s`  | dddd}|d dd}||r#|t|d }|d |||d d	d
|d  d| dd|t dddd}d|v rY|d d |d< t|d d |d< nd|d< d|d< | ddurp|d d |d< | j dg D ]6\}}|d}|dkrd}n|dkrd}n
d | 	d!d" }|d}||v r|| d# | }|||< qw|S )$zM
        Builds a scope and request body into a WSGI environ object.
        	root_path utf8latin1pathNmethodquery_stringasciizHTTP/%shttp_version)   r   schemer   TF)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serverr   SERVER_NAMEr/   SERVER_PORT	localhost80clientREMOTE_ADDRheaderscontent-lengthCONTENT_LENGTHzcontent-typeCONTENT_TYPEzHTTP_%s-_,)
r!   encodedecode
startswithlenr   strr   upperreplace)	r
   r   r   script_name	path_infoenvironnamevaluecorrected_namer   r   r   build_environ5   sH   





z WsgiToAsgiInstance.build_environNc           	      C   s   | j r|d |d t| dr|du rtd|dd\}}t|}dd |D }d| _|D ]\}}| d	kr@t|| _q1d
||d| _dS )z/
        WSGI start_response callable.
        r/      response_startNz=You cannot call start_response a second time without exc_info c                 S   s(   g | ]\}}|  d |d fqS )r-   )lowerrD   ).0rN   rO   r   r   r   
<listcomp>v   s    z5WsgiToAsgiInstance.start_response.<locals>.<listcomp>r>   zhttp.response.start)r   statusr=   )	r   with_tracebackhasattrr   splitintr   rU   rS   )	r
   rX   response_headersexc_infostatus_coderB   r=   rN   rO   r   r   r   start_responsef   s(   
z!WsgiToAsgiInstance.start_responsec                 C   s   |  | j|}d}| || jD ]:}| jsd| _| | j | jdur4| j| }t||kr4|d| }| d|dd |t|7 }|| jkrJ nq| jsWd| _| | j | ddi dS )z
        Called in a subthread to run the WSGI app. We encapsulate like
        this so that the start_response callable is called in the same thread.
        r   TNzhttp.response.body)r   r   r   r   )	rQ   r   r   r`   r   r#   rS   r   rG   )r
   r   rM   
bytes_sentoutputbytes_allowedr   r   r   r$      s*   



zWsgiToAsgiInstance.run_wsgi_appr   )
r   r   r   r   r   r   rQ   r`   r   r$   r   r   r   r   r      s    
1 r   N)	ior   tempfiler   asgiref.syncr   r   r   r   r   r   r   r   <module>   s
    