§
    •Mºfa  ã                   ób   — d dl mZ d dlmZ d dlmZmZ  G d„ d¦  «        Z G d„ d¦  «        ZdS )	é    )ÚBytesIO)ÚSpooledTemporaryFile)ÚAsyncToSyncÚsync_to_asyncc                   ó   — e Zd ZdZd„ Zd„ ZdS )Ú
WsgiToAsgizG
    Wraps a WSGI application to make it into an ASGI application.
    c                 ó   — || _         d S ©N)Úwsgi_application©Úselfr   s     úK/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/asgiref/wsgi.pyÚ__init__zWsgiToAsgi.__init__   s   € Ø 0ˆÔÐÐó    c              ƒ   óT   K  —  t          | j        ¦  «        |||¦  «        ƒ d{V —† 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Úsends       r   Ú__call__zWsgiToAsgi.__call__   s@   è è € ð 8Õ  Ô!6Ñ7Ô7¸¸wÈÑMÔMÐMÐMÐMÐMÐMÐMÐMÐMÐMr   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   © r   r   r   r      sA   € € € € € ðð ð1ð 1ð 1ðNð Nð Nð Nð Nr   r   c                   óB   — e Zd ZdZd„ Zd„ Zd„ Zdd„Zed„ ¦   «         Z	dS )	r   z;
    Per-socket instance of a wrapped WSGI application
    c                 ó0   — || _         d| _        d | _        d S )NF)r   Úresponse_startedÚresponse_content_lengthr   s     r   r   zWsgiToAsgiInstance.__init__   s    € Ø 0ˆÔØ %ˆÔØ'+ˆÔ$Ð$Ð$r   c              ƒ   ó   K  — |d         dk    rt          d¦  «        ‚|| _        t          d¬¦  «        5 }	  |¦   «         ƒ d {V —†}|d         dk    rt          d¦  «        ‚|                     |                     d	d
¦  «        ¦  «         |                     d¦  «        snŒk|                     d¦  «         t          |¦  «        | _        |                      |¦  «        ƒ d {V —† d d d ¦  «         d S # 1 swxY w Y   d S )NÚtypeÚhttpz&WSGI wrapper received a non-HTTP scopei   )Úmax_sizeTzhttp.requestz0WSGI wrapper received a non-HTTP-request messageÚbodyr   Ú	more_bodyr   )	Ú
ValueErrorr   r   ÚwriteÚgetÚseekr   Ú	sync_sendÚrun_wsgi_app)r   r   r   r   r$   Úmessages         r   r   zWsgiToAsgiInstance.__call__"   sY  è è € Ø�Œ=˜FÒ"Ð"ÝÐEÑFÔFÐFØˆŒ
Ý!¨5Ð1Ñ1Ô1ð 	*°TðØ ' ¡	¤	˜/˜/˜/˜/˜/˜/�Ø˜6”? nÒ4Ð4Ý$Ð%WÑXÔXÐXØ—
’
˜7Ÿ;š; v¨sÑ3Ô3Ñ4Ô4Ð4Ø—{’{ ;Ñ/Ô/ð Øðð �IŠI�a‰LŒLˆLå(¨Ñ.Ô.ˆDŒNà×#Ò# DÑ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)ð	*ð 	*ð 	*ñ 	*ô 	*ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*øøøð 	*ð 	*ð 	*ð 	*ð 	*ð 	*s   µB1C3Ã3C7Ã:C7c                 óæ  — |                      dd¦  «                             d¦  «                             d¦  «        }|d                              d¦  «                             d¦  «        }|                     |¦  «        r|t	          |¦  «        d…         }|d         |||d                              d	¦  «        d
|d         z  d|                      dd¦  «        |t          ¦   «         ddddœ}d|v r0|d         d         |d<   t          |d         d         ¦  «        |d<   n
d|d<   d|d<   |                      d¦  «        �|d         d         |d<   | j                              dg ¦  «        D ]ƒ\  }}|                     d¦  «        }|dk    rd}n4|dk    rd}n+d |                     ¦   «          	                    d!d"¦  «        z  }|                     d¦  «        }||v r||         d#z   |z   }|||<   Œ„|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_NAMEr7   Ú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_names	            r   Úbuild_environz WsgiToAsgiInstance.build_environ5   s  € ð —i’i ¨RÑ0Ô0×7Ò7¸Ñ?Ô?×FÒFÀxÑPÔPˆØ˜&”M×(Ò(¨Ñ0Ô0×7Ò7¸ÑAÔAˆ	Ø×Ò Ñ,Ô,ð 	6Ø!¥# kÑ"2Ô"2Ð"4Ð"4Ô5ˆIà# HœoØ&Ø"Ø! .Ô1×8Ò8¸ÑAÔAØ(¨5°Ô+@Ñ@Ø"Ø$Ÿyšy¨°6Ñ:Ô:ØÝ"™9œ9Ø $Ø!%Ø"ð
ð 
ˆð �uÐÐØ%*¨8¤_°QÔ%7ˆG�MÑ"Ý%(¨¨x¬¸Ô);Ñ%<Ô%<ˆG�MÑ"Ð"à%0ˆG�MÑ"Ø%)ˆG�MÑ"à�9Š9�XÑÔÐ*Ø%*¨8¤_°QÔ%7ˆG�MÑ"ð  œ:Ÿ>š>¨)°RÑ8Ô8ð 	,ð 	,‰KˆD�%Ø—;’;˜xÑ(Ô(ˆDØÐ'Ò'Ð'Ø!1��Ø˜Ò'Ð'Ø!/��à!*¨T¯ZªZ©\¬\×-AÒ-AÀ#ÀsÑ-KÔ-KÑ!K�à—L’L Ñ*Ô*ˆEØ Ð(Ð(Ø Ô/°#Ñ5¸Ñ=�Ø&+ˆG�NÑ#Ð#Øˆr   Nc                 óŒ  — | j         r!|d                              |d         ¦  «        ‚t          | d¦  «        r|€t          d¦  «        ‚|                     dd¦  «        \  }}t          |¦  «        }d„ |D ¦   «         }d| _        |D ]1\  }}|                     ¦   «         dk    rt          |¦  «        | _        Œ2d	||d
œ| _        dS )z/
        WSGI start_response callable.
        r7   é   Úresponse_startNz=You cannot call start_response a second time without exc_infoú c                 óŒ   — g | ]A\  }}|                      ¦   «                              d ¦  «        |                     d ¦  «        f‘ŒBS )r5   )ÚlowerrL   )Ú.0rV   rW   s      r   ú
<listcomp>z5WsgiToAsgiInstance.start_response.<locals>.<listcomp>v   sS   € ð 
ð 
ð 
á��eð �ZŠZ‰\Œ\× Ò  Ñ)Ô)¨5¯<ª<¸Ñ+@Ô+@ÐAð
ð 
ð 
r   rF   zhttp.response.start)r!   ÚstatusrE   )	r   Úwith_tracebackÚhasattrr&   ÚsplitÚintr   r_   r\   )	r   rb   Úresponse_headersÚexc_infoÚstatus_coderJ   rE   rV   rW   s	            r   Ústart_responsez!WsgiToAsgiInstance.start_responsef   sü   € ð
 Ô ð 	:Ø˜1”+×,Ò,¨X°a¬[Ñ9Ô9Ð9å�4Ð)Ñ*Ô*ð 	¨xÐ/?ÝØOñô ð ð  Ÿš c¨1Ñ-Ô-‰ˆ�QÝ˜+Ñ&Ô&ˆð
ð 
à/ð
ñ 
ô 
ˆð
 (,ˆÔ$Ø+ð 	:ð 	:‰KˆD�%Ø�zŠz‰|Œ|Ð/Ò/Ð/Ý/2°5©z¬z�Ô,øð *Ø!Øð
ð 
ˆÔÐÐr   c                 ó  — |                       | j        |¦  «        }d}|                      || j        ¦  «        D ]�}| j        s!d| _        |                      | j        ¦  «         | j        �'| j        |z
  }t          |¦  «        |k    r
|d|…         }|                      d|ddœ¦  «         |t          |¦  «        z  }|| j        k    r nŒ‘| j        s!d| _        |                      | 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!   )	rY   r   r   rj   r   r*   r\   r   rO   )r   r$   rU   Ú
bytes_sentÚoutputÚbytes_alloweds         r   r+   zWsgiToAsgiInstance.run_wsgi_app†   s4  € ð ×$Ò$ T¤Z°Ñ6Ô6ˆàˆ
Ø×+Ò+¨G°TÔ5HÑIÔIð 	ð 	ˆFàÔ(ð 4Ø(,�Ô%Ø—’˜tÔ2Ñ3Ô3Ð3àÔ+Ð7à $Ô <¸zÑ I�Ý�v‘;”; Ò.Ð.Ø# N ] NÔ3�FØ�NŠNØ-°vÈDÐQÐQñô ð ð �#˜f™+œ+Ñ%ˆJà˜TÔ9Ò9Ð9Ø�ð :ð Ô$ð 	0Ø$(ˆDÔ!Ø�NŠN˜4Ô.Ñ/Ô/Ð/Ø�Š˜Ð 4Ð5Ñ6Ô6Ð6Ð6Ð6r   r
   )
r   r   r   r   r   r   rY   rj   r   r+   r   r   r   r   r      s|   € € € € € ðð ð,ð ,ð ,ð
*ð *ð *ð&/ð /ð /ðb
ð 
ð 
ð 
ð@ ð7ð 7ñ „]ð7ð 7ð 7r   r   N)	Úior   Útempfiler   Úasgiref.syncr   r   r   r   r   r   r   ú<module>rr      s­   ðØ Ð Ð Ð Ð Ð Ø )Ð )Ð )Ð )Ð )Ð )à 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3ðNð Nð Nð Nð Nñ Nô Nð Nð"N7ð N7ð N7ð N7ð N7ñ N7ô N7ð N7ð N7ð N7r   