§
    £”j  ã                   ój   — 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	dS )	é    N)Údefaultdict)ÚSpooledTemporaryFile)ÚAsyncToSyncÚsync_to_asyncc                   ó    — e Zd ZdZdd„Zd„ ZdS )Ú
WsgiToAsgizG
    Wraps a WSGI application to make it into an ASGI application.
    éd   c                 ó"   — || _         || _        d S ©N)Úwsgi_applicationÚduplicate_header_limit©Úselfr   r   s      ú[/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/asgiref/wsgi.pyÚ__init__zWsgiToAsgi.__init__   s   € Ø 0ˆÔØ&<ˆÔ#Ð#Ð#ó    c              ƒ   ó`   K  —  t          | j        | 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   )r   ÚscopeÚreceiveÚsends       r   Ú__call__zWsgiToAsgi.__call__   s]   è è € ð UÕ  Ô!6¸Ô8SÑTÔTØ�7˜Dñ
ô 
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
r   N©r	   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   © r   r   r   r      sA   € € € € € ðð ð=ð =ð =ð =ð
ð 
ð 
ð 
ð 
r   r   c                   óD   — e Zd ZdZd	d„Zd„ Zd„ Zd
d„Zed„ ¦   «         Z	dS )r   z;
    Per-socket instance of a wrapped WSGI application
    r	   c                 ó>   — || _         || _        d| _        d | _        d S )NF)r   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
          j        ddddœ}d|v r0|d         d         |d<   t          |d         d         ¦  «        |d<   n
d|d<   d|d<   |                      d¦  «        �|d         d         |d<   t          t          ¦  «        }| j
                              dg ¦  «        D ]Æ\  }}|                     d¦  «        }|dk    rd}	n4|dk    rd}	n+d |                     ¦   «                              d!d"¦  «        z  }	|                     d¦  «        }| j        r8t	          ||	         ¦  «        | j        k    rt          d#|	› d$| j        › �¦  «        ‚||	                              |¦  «         ŒÇ|                     ¦   «         D ]\  }}
d%                     |
¦  «        ||<   Œ|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Ô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Ñ:Ô:ØÝœ:Ø $Ø!%Ø"ð
ð 
ˆð �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Ô8ð 	3ð 	3‰KˆD�%Ø—;’;˜xÑ(Ô(ˆDØÐ'Ò'Ð'Ø!1��Ø˜Ò'Ð'Ø!/��à!*¨T¯ZªZ©\¬\×-AÒ-AÀ#ÀsÑ-KÔ-KÑ!K�à—L’L Ñ*Ô*ˆEàÔ+ðå˜ Ô0Ñ1Ô1°TÔ5PÒPÐPå ð5°>ð 5ð 5ØÔ2ð5ð 5ñô ð ð �^Ô$×+Ò+¨EÑ2Ô2Ð2Ð2Ø$ŸNšNÑ,Ô,ð 	-ð 	-‰LˆD�&ØŸHšH VÑ,Ô,ˆG�D‰MˆMØˆ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.
        r:   é   Úresponse_startNz=You cannot call start_response a second time without exc_infoú c                 óŒ   — g | ]A\  }}|                      ¦   «                              d ¦  «        |                     d ¦  «        f‘ŒBS )r8   )ÚlowerrO   )Ú.0r`   ra   s      r   ú
<listcomp>z5WsgiToAsgiInstance.start_response.<locals>.<listcomp>„   sS   € ð 
ð 
ð 
á��eð �ZŠZ‰\Œ\× Ò  Ñ)Ô)¨5¯<ª<¸Ñ+@Ô+@ÐAð
ð 
ð 
r   rI   úhttp.response.start©r$   ÚstatusrH   )	r!   Úwith_tracebackÚhasattrr)   ÚsplitÚintr"   rj   rg   )	r   ro   Úresponse_headersÚexc_infoÚstatus_coderM   rH   r`   ra   s	            r   Ústart_responsez!WsgiToAsgiInstance.start_responset   sü   € ð
 Ô ð 	:Ø˜1”+×,Ò,¨X°a¬[Ñ9Ô9Ð9å�4Ð)Ñ*Ô*ð 	¨xÐ/?ÝØOñô ð ð  Ÿš c¨1Ñ-Ô-‰ˆ�QÝ˜+Ñ&Ô&ˆð
ð 
à/ð
ñ 
ô 
ˆð
 (,ˆÔ$Ø+ð 	:ð 	:‰KˆD�%Ø�zŠz‰|Œ|Ð/Ò/Ð/Ý/2°5©z¬z�Ô,øð *Ø!Øð
ð 
ˆÔÐÐr   c                 ó   — 	 |                       | j        |¦  «        }nC# t          $ r6 |                      dddgdœ¦  «         |                      dddœ¦  «         Y dS w xY w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.
        rm   i�  )s   content-types
   text/plainrn   zhttp.response.bodys'   Bad Request: Too many duplicate headers)r$   r'   Nr   T)r$   r'   r(   r$   )
rd   r   r)   r-   r   rw   r!   rg   r"   rR   )r   r'   r^   Ú
bytes_sentÚoutputÚbytes_alloweds         r   r.   zWsgiToAsgiInstance.run_wsgi_app”   s³  € ð	Ø×(Ò(¨¬°TÑ:Ô:ˆGˆGøÝð 	ð 	ð 	à�NŠNà1Ø!Ø @ÐAðð ñô ð ð �NŠNà0ØFðð ñô ð ð ˆFˆFð	øøøð" ˆ
Ø×+Ò+¨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Ð6s   ‚ ž<AÁAr   r   )
r   r   r   r   r   r   rd   rw   r   r.   r   r   r   r   r      s�   € € € € € ðð ð,ð ,ð ,ð ,ð*ð *ð *ð&8ð 8ð 8ðt
ð 
ð 
ð 
ð@ ð07ð 07ñ „]ð07ð 07ð 07r   r   )
rS   Úcollectionsr   Útempfiler   Úasgiref.syncr   r   r   r   r   r   r   ú<module>r      s®   ðØ 
€
€
€
Ø #Ð #Ð #Ð #Ð #Ð #Ø )Ð )Ð )Ð )Ð )Ð )à 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3ð
ð 
ð 
ð 
ð 
ñ 
ô 
ð 
ð(i7ð i7ð i7ð i7ð i7ñ i7ô i7ð i7ð i7ð i7r   