ó
    ªRj  ã                   ó\   • S SK r S SKJr  S SKJr  S SKJrJr   " S S5      r " S S5      r	g)	é    N)Údefaultdict)ÚSpooledTemporaryFile)ÚAsyncToSyncÚsync_to_asyncc                   ó(   • \ rS rSrSrSS jrS rSrg)Ú
WsgiToAsgié   z?
Wraps a WSGI application to make it into an ASGI application.
c                 ó   • Xl         X l        g ©N)Úwsgi_applicationÚduplicate_header_limit©Úselfr   r   s      Ú8D:\diplom_project\venv\Lib\site-packages\asgiref/wsgi.pyÚ__init__ÚWsgiToAsgi.__init__   s   € Ø 0ÔØ&<Õ#ó    c              ƒ   ón   #   • [        U R                  U R                  5      " XU5      I Sh  v•N   g N7f)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__ÚWsgiToAsgi.__call__   s1   é € ô ! ×!6Ñ!6¸×8SÑ8SÔTØ˜Dó
÷ 	
ó 	
ùs   ‚+5­3®5)r   r   N©éd   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   Ú__static_attributes__© r   r   r   r      s   † ñô=õ
r   r   c                   óH   • \ rS rSrSrS
S jrS rS rSS jr\	S 5       r
S	rg)r   é   z3
Per-socket instance of a wrapped WSGI application
c                 ó8   • Xl         X l        SU l        S U l        g )NF)r   r   Úresponse_startedÚresponse_content_lengthr   s      r   r   ÚWsgiToAsgiInstance.__init__!   s   € Ø 0ÔØ&<Ô#Ø %ˆÔØ'+ˆÕ$r   c              ƒ   ó¾  #   • US   S:w  a  [        S5      eXl        [        SS9 n U" 5       I S h  v•N nUS   S:w  a  [        S5      eUR                  UR	                  SS	5      5        UR	                  S
5      (       d  OM]  UR                  S5        [        U5      U l        U R                  U5      I S h  v•N   S S S 5        g  N• N! , (       d  f       g = f7f)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   Ú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Ó)×)Ð)÷ 2Ð1ñ *ñ *÷ 2Õ1üs?   ‚$C¦C²C³BCÂ:C
Â;CÂ?	CÃCÃ
CÃ
CÃCc                 ó@  • UR                  SS5      R                  S5      R                  S5      nUS   R                  S5      R                  S5      nUR                  U5      (       a  U[	        U5      S nUS   UUUS   R                  S	5      S
US   -  SUR                  SS5      U[
        R                  SSSS.nSU;   a   US   S   US'   [        US   S   5      US'   O
SUS'   SUS'   UR                  S5      b  US   S   US'   [        [        5      nU R                  R                  S/ 5       H¶  u  pxUR                  S5      nUS:X  a  Sn	O,US:X  a  Sn	O#S UR                  5       R                  S!S"5      -  n	UR                  S5      nU R                  (       a6  [	        Xi   5      U R                  :¼  a  [        S#U	 S$U R                   35      eXi   R                  U5        M¸     UR!                  5        H  u  pzS%R#                  U
5      XW'   M     U$ )&z=
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_NAMErB   Ú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Ú,)r2   ÚencodeÚdecodeÚ
startswithÚlenÚsysÚstderrÚstrr   Úlistr   ÚupperÚreplacer   r0   ÚappendÚitemsÚjoin)r   r   r.   Úscript_nameÚ	path_infoÚenvironÚ_headersÚnameÚvalueÚcorrected_nameÚvaluess              r   Úbuild_environÚ 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‰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ñ% 9ð& %ŸN™NÖ,‰LˆDØŸH™H VÓ,ˆG‹Mñ -àˆr   Nc                 óê  • U R                   (       a  US   R                  US   5      e[        U S5      (       a  Uc  [        S5      eUR	                  SS5      u  pE[        U5      nU VVs/ s H5  u  pgUR                  5       R                  S5      UR                  S5      4PM7     nnnSU l        U H+  u  pgUR                  5       S:X  d  M  [        U5      U l        M-     S	UUS
.U l	        gs  snnf )z
WSGI start_response callable.
rB   é   Úresponse_startNz=You cannot call start_response a second time without exc_infoÚ r@   rQ   úhttp.response.start©r+   ÚstatusrP   )
r'   Úwith_tracebackÚhasattrr0   ÚsplitÚintÚlowerrW   r(   rp   )	r   rt   Úresponse_headersÚexc_infoÚstatus_coderU   rh   ri   rP   s	            r   Ústart_responseÚ!WsgiToAsgiInstance.start_responset   sõ   € ð
 × × Ø˜1‘+×,Ñ,¨X°a©[Ó9Ð9ä�4Ð)×*Ñ*¨xÑ/?ÜØOóð ð  Ÿ™ c¨1Ó-‰ˆÜ˜+Ó&ˆñ  0ô
â/‘�ð �Z‰Z‹\× Ñ  Ó)¨5¯<©<¸Ó+@ÓAÙ/ð 	ñ 
ð
 (,ˆÔ$Û+‰KˆDØ�z‰z‹|Ð/Õ/Ü/2°5«z�Ö,ñ ,ð
 *Ø!Øñ
ˆÕùó
s   Á,<C/c                 ó´  •  U R                  U R                  U5      nS	nU R	                  X R
                  5       Hš  nU R                  (       d"  S
U l        U R                  U R                  5        U R                  b#  U R                  U-
  n[        U5      U:”  a  USU nU R                  SUS
S.5        U[        U5      -  nX0R                  :X  d  Mš    O   U R                  (       d"  S
U l        U R                  U R                  5        U R                  SS05        g! [         a-    U R                  SSS/S.5        U R                  SSS.5         gf = f)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.
rr   i�  )s   content-types
   text/plainrs   zhttp.response.bodys'   Bad Request: Too many duplicate headers)r+   r.   Nr   T)r+   r.   r/   r+   )
rl   r   r0   r4   r   r}   r'   rp   r(   rZ   )r   r.   rf   Ú
bytes_sentÚoutputÚbytes_alloweds         r   r5   ÚWsgiToAsgiInstance.run_wsgi_app”   sP  € ð	Ø×(Ñ(¨¯©°TÓ:ˆGð$ ˆ
Ø×+Ñ+¨G×5HÑ5HÖIˆFà×(×(Ø(,�Ô%Ø—‘˜t×2Ñ2Ô3à×+Ñ+Ñ7à $× <Ñ <¸zÑ I�Ü�v“; Ó.Ø# N ]Ð3�FØ�N‰NØ-°vÈDÑQôð œ#˜f›+Ñ%ˆJà×9Ñ9Õ9Ùñ# Jð& ×$×$Ø$(ˆDÔ!Ø�N‰N˜4×.Ñ.Ô/Ø�‰˜Ð 4Ð5Õ6øôQ ó 	à�N‰Nà1Ø!Ø @ÐAñôð �N‰Nà0ØFñôñ ð	ús   ‚D  Ä 4EÅE)r   r(   rp   r'   r   r4   r   r   r   )r   r   r   r    r!   r   r   rl   r}   r   r5   r"   r#   r   r   r   r      s1   † ñô,ò*ò&8ôt
ð@ ñ07ó ó07r   r   )
r[   Úcollectionsr   Útempfiler   Úasgiref.syncr   r   r   r   r#   r   r   Ú<module>r‡      s'   ðÛ 
Ý #Ý )ç 3÷
ñ 
÷(i7ò i7r   