Ë
    £#ij  ã                   ó\   — d dl Z 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	y)	é    N)Údefaultdict)ÚSpooledTemporaryFile)ÚAsyncToSyncÚsync_to_asyncc                   ó   — e Zd ZdZdd„Zd„ Zy)Ú
WsgiToAsgizG
    Wraps a WSGI application to make it into an ASGI application.
    c                 ó    — || _         || _        y ©N)Úwsgi_applicationÚduplicate_header_limit©Úselfr   r   s      úF/var/www/html/office/venv/lib/python3.12/site-packages/asgiref/wsgi.pyÚ__init__zWsgiToAsgi.__init__   s   € Ø 0ˆÔØ&<ˆÕ#ó    c              ƒ   óp   K  —  t        | j                  | j                  «      |||«      ƒ d{  –—†  y7 Œ­w)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   )r   ÚscopeÚreceiveÚsends       r   Ú__call__zWsgiToAsgi.__call__   s8   è ø€ ð UÔ  ×!6Ñ!6¸×8SÑ8SÓTØ�7˜Dó
÷ 	
ò 	
ús   ‚,6®4¯6N©éd   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   © r   r   r   r      s   „ ñó=ó
r   r   c                   ó<   — e Zd ZdZdd„Zd„ Zd„ Zd	d„Zed„ «       Z	y)
r   z;
    Per-socket instance of a wrapped WSGI application
    c                 ó<   — || _         || _        d| _        d | _        y )NF)r   r   Úresponse_startedÚresponse_content_lengthr   s      r   r   zWsgiToAsgiInstance.__init__!   s"   € Ø 0ˆÔØ&<ˆÔ#Ø %ˆÔØ'+ˆÕ$r   c              ƒ   ó¬  K  — |d   dk7  rt        d«      ‚|| _        t        d¬«      5 }	  |«       ƒ d {  –—† }|d   dk7  rt        d«      ‚|j                  |j	                  dd	«      «       |j	                  d
«      snŒV|j                  d«       t        |«      | _        | j                  |«      ƒ d {  –—†  d d d «       y 7 ŒŽ7 Œ# 1 sw Y   y xY w­w)NÚtypeÚhttpz&WSGI wrapper received a non-HTTP scopei   )Úmax_sizez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__'   sÐ   è ø€ Ø�‰=˜FÒ"ÜÐEÓFÐFØˆŒ
Ü!¨5Ô1ð 	*°TàÙ '£	Ÿ/�Ø˜6‘? nÒ4Ü$Ð%WÓXÐXØ—
‘
˜7Ÿ;™; v¨sÓ3Ô4Ø—{‘{ ;Ô/Øð ð �I‰I�aŒLä(¨Ó.ˆDŒNà×#Ñ# DÓ)×)Ð)÷	*ð 	*ð *øð *ø÷	*ð 	*üs?   ‚'C©CµC¶B CÂ6CÂ7CÂ;	CÃCÃCÃCÃCc                 ó"  — |j                  dd«      j                  d«      j                  d«      }|d   j                  d«      j                  d«      }|j                  |«      r|t	        |«      d }|d   |||d   j                  d	«      d
|d   z  d|j                  dd«      |t
        j                  ddddœ}d|v r |d   d   |d<   t        |d   d   «      |d<   n
d|d<   d|d<   |j                  d«      �|d   d   |d<   t        t        «      }| j                  j                  dg «      D ]°  \  }}|j                  d«      }|dk(  rd}	n+|dk(  rd}	n#d |j                  «       j                  d!d"«      z  }	|j                  d«      }| j                  r6t	        ||	   «      | j                  k\  rt        d#|	› d$| j                  › �«      ‚||	   j                  |«       Œ² |j!                  «       D ]  \  }}
d%j#                  |
«      ||<   Œ |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ú-Ú_zToo many duplicate headers: z exceeds limit ofú,)r+   ÚencodeÚdecodeÚ
startswithÚlenÚsysÚstderrÚstrr   Úlistr   ÚupperÚreplacer   r)   ÚappendÚitemsÚjoin)r   r   r'   Úscript_nameÚ	path_infoÚenvironÚ_headersÚnameÚvalueÚcorrected_nameÚvaluess              r   Úbuild_environz WsgiToAsgiInstance.build_environ:   s@  € ð —i‘i ¨RÓ0×7Ñ7¸Ó?×FÑFÀxÓPˆØ˜&‘M×(Ñ(¨Ó0×7Ñ7¸ÓAˆ	Ø×Ñ Ô,Ø!¤# kÓ"2Ð"4Ð5ˆIà# H™oØ&Ø"Ø! .Ñ1×8Ñ8¸ÓAØ(¨5°Ñ+@Ñ@Ø"Ø$Ÿy™y¨°6Ó:ØÜŸ:™:Ø $Ø!%Ø"ñ
ˆð �uÑØ%*¨8¡_°QÑ%7ˆG�MÑ"Ü%(¨¨x©¸Ñ);Ó%<ˆG�MÒ"à%0ˆG�MÑ"Ø%)ˆG�MÑ"à�9‰9�XÓÐ*Ø%*¨8¡_°QÑ%7ˆG�MÑ"ô œtÓ$ˆØŸ:™:Ÿ>™>¨)°RÓ8ò 	3‰KˆD�%Ø—;‘;˜xÓ(ˆDØÐ'Ò'Ø!1‘Ø˜Ò'Ø!/‘à!*¨T¯Z©Z«\×-AÑ-AÀ#ÀsÓ-KÑ!K�à—L‘L Ó*ˆEà×+Ò+Ü˜ Ñ0Ó1°T×5PÑ5PÒPä Ø2°>Ð2BÐBSØ×2Ñ2Ð3ð5óð ð �^Ñ$×+Ñ+¨EÕ2ð%	3ð& %ŸN™NÓ,ò 	-‰LˆD�&ØŸH™H VÓ,ˆG�DŠMð	-àˆr   Nc                 óÌ  — | j                   r|d   j                  |d   «      ‚t        | d«      r|€t        d«      ‚|j	                  dd«      \  }}t        |«      }|D ��cg c]5  \  }}|j                  «       j                  d«      |j                  d«      f‘Œ7 }}}d| _        |D ])  \  }}|j                  «       dk(  sŒt        |«      | _        Œ+ d	||d
œ| _	        yc c}}w )z/
        WSGI start_response callable.
        r:   é   Úresponse_startNz=You cannot call start_response a second time without exc_infoú r8   rI   úhttp.response.start©r$   ÚstatusrH   )
r!   Úwith_tracebackÚhasattrr)   ÚsplitÚintÚlowerrO   r"   rg   )	r   rk   Úresponse_headersÚexc_infoÚstatus_coderM   r`   ra   rH   s	            r   Ústart_responsez!WsgiToAsgiInstance.start_responset   sú   € ð
 × Ò Ø˜1‘+×,Ñ,¨X°a©[Ó9Ð9ä�4Ð)Ô*¨xÐ/?ÜØOóð ð  Ÿ™ c¨1Ó-‰ˆ�QÜ˜+Ó&ˆð  0÷
á��eð �Z‰Z‹\× Ñ  Ó)¨5¯<©<¸Ó+@ÒAð
ˆñ 
ð
 (,ˆÔ$Ø+ò 	:‰KˆD�%Ø�z‰z‹|Ð/Ó/Ü/2°5«z�Õ,ð	:ð
 *Ø!Øñ
ˆÕùó
s   Á":C c                 ó˜  — 	 | j                  | j                  |«      }d	}| j	                  || j
                  «      D ]’  }| j                  s"d
| _        | j                  | j                  «       | j                  �"| j                  |z
  }t        |«      |kD  r|d| }| j                  d|d
dœ«       |t        |«      z  }|| j                  k(  sŒ’ n | j                  s"d
| _        | j                  | j                  «       | j                  ddi«       y# t        $ r- | j                  dddgdœ«       | j                  dddœ«       Y yw xY w)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.
        ri   i�  )s   content-types
   text/plainrj   zhttp.response.bodys'   Bad Request: Too many duplicate headers)r$   r'   Nr   T)r$   r'   r(   r$   )
rd   r   r)   r-   r   rt   r!   rg   r"   rR   )r   r'   r^   Ú
bytes_sentÚoutputÚbytes_alloweds         r   r.   zWsgiToAsgiInstance.run_wsgi_app”   sX  € ð	Ø×(Ñ(¨¯©°TÓ:ˆGð$ ˆ
Ø×+Ñ+¨G°T×5HÑ5HÓIò 	ˆFà×(Ò(Ø(,�Ô%Ø—‘˜t×2Ñ2Ô3à×+Ñ+Ð7à $× <Ñ <¸zÑ I�Ü�v“; Ò.Ø# N ]Ð3�FØ�N‰NØ-°vÈDÑQôð œ#˜f›+Ñ%ˆJà˜T×9Ñ9Ó9Ùð#	ð& ×$Ò$Ø$(ˆDÔ!Ø�N‰N˜4×.Ñ.Ô/Ø�‰˜Ð 4Ð5Õ6øôQ ò 	à�N‰Nà1Ø!Ø @ÐAñôð �N‰Nà0ØFñôñ ð	ús   ‚D Ä3E	ÅE	r   r
   )
r   r   r   r   r   r   rd   rt   r   r.   r   r   r   r   r      s1   „ ñó,ò*ò&8ót
ð@ ñ07ó ñ07r   r   )
rS   Úcollectionsr   Útempfiler   Úasgiref.syncr   r   r   r   r   r   r   ú<module>r|      s'   ðÛ 
Ý #Ý )ç 3÷
ñ 
÷(i7ò i7r   