Ë
    ¹ûàg6  ã                   ó"  — d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZm	Z	 d dl
mZ d dlmZ d dlmZmZ d dlmZ d dlmZmZmZmZmZmZmZ d d	lmZ d d
lmZ  ej>                  d«      Z d„ Z! G d„ de«      Z" G d„ dejF                  «      Z$y)é    N)Úaclosing)ÚThreadSensitiveContextÚsync_to_async)Úsettings)Úsignals)ÚRequestAbortedÚRequestDataTooBig)Úbase)ÚFileResponseÚHttpRequestÚHttpResponseÚHttpResponseBadRequestÚHttpResponseServerErrorÚ	QueryDictÚparse_cookie)Úset_script_prefix)Úcached_propertyzdjango.requestc                 ón   — t         j                  rt         j                  S | j                  dd«      xs dS )zM
    Return the script prefix to use from either the scope or a setting.
    Ú	root_pathÚ )r   ÚFORCE_SCRIPT_NAMEÚget)Úscopes    úW/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/django/core/handlers/asgi.pyÚget_script_prefixr      s/   € ô ×!Ò!Ü×)Ñ)Ð)Ø�9‰9�[ "Ó%Ò+¨Ð+ó    c                   óŠ   ‡ — e Zd ZdZdZd„ Zed„ «       Zˆ fd„Zd„ Z	d„ Z
d„ Z ee	e
«      Z ee«      Zed	„ «       Zˆ fd
„Zˆ xZS )ÚASGIRequestzv
    Custom request subclass that decodes from an ASGI-standard request dict
    and wraps request body handling.
    é<   c                 óŒ  — || _         d| _        d| _        d | _        |d   | _        t        |«      | _        | j                  r$|d   j                  | j                  «      | _        n
|d   | _        | j                   d   j                  «       | _
        | j                   j                  dd«      }t        |t        «      r|j                  «       }| j                  || j                  | j                  dddœ| _        | j                   j                  d«      rZ| j                   d   d	   | j                  d
<   | j                  d
   | j                  d<   | j                   d   d   | j                  d<   | j                   j                  d«      rH| j                   d   d	   | j                  d<   t!        | j                   d   d   «      | j                  d<   nd| j                  d<   d| j                  d<   | 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                  v r| j                  |   dz   |z   }|| j                  |<   ŒŽ | j%                  | j                  «       || _        d | _        y )NFÚpathÚmethodÚquery_stringr   T)ÚREQUEST_METHODÚQUERY_STRINGÚSCRIPT_NAMEÚ	PATH_INFOzwsgi.multithreadzwsgi.multiprocessÚclientr   ÚREMOTE_ADDRÚREMOTE_HOSTé   ÚREMOTE_PORTÚserverÚSERVER_NAMEÚSERVER_PORTÚunknownÚ0ÚheadersÚlatin1zcontent-lengthÚCONTENT_LENGTHzcontent-typeÚCONTENT_TYPEzHTTP_%sú-Ú_ú,)r   Ú_post_parse_errorÚ_read_startedÚresolver_matchr!   r   Úscript_nameÚremoveprefixÚ	path_infoÚupperr"   r   Ú
isinstanceÚbytesÚdecodeÚMETAÚstrÚreplaceÚ_set_content_type_paramsÚ_stream)Úselfr   Ú	body_filer#   ÚnameÚvalueÚcorrected_names          r   Ú__init__zASGIRequest.__init__0   sn  € ØˆŒ
Ø!&ˆÔØ"ˆÔØ"ˆÔØ˜&‘MˆŒ	Ü,¨UÓ3ˆÔØ×Òà" 6™]×7Ñ7¸×8HÑ8HÓIˆD�Nà" 6™]ˆDŒNà—j‘j Ñ*×0Ñ0Ó2ˆŒà—z‘z—~‘~ n°bÓ9ˆÜ�l¤EÔ*Ø'×.Ñ.Ó0ˆLà"Ÿk™kØ(Ø×+Ñ+ØŸ™à $Ø!%ñ
ˆŒ	ð �:‰:�>‰>˜(Ô#Ø'+§z¡z°(Ñ';¸AÑ'>ˆD�I‰I�mÑ$Ø'+§y¡y°Ñ'?ˆD�I‰I�mÑ$Ø'+§z¡z°(Ñ';¸AÑ'>ˆD�I‰I�mÑ$Ø�:‰:�>‰>˜(Ô#Ø'+§z¡z°(Ñ';¸AÑ'>ˆD�I‰I�mÑ$Ü'*¨4¯:©:°hÑ+?ÀÑ+BÓ'CˆD�I‰I�mÒ$à'0ˆD�I‰I�mÑ$Ø'*ˆD�I‰I�mÑ$àŸ:™:Ÿ>™>¨)°RÓ8ò 	.‰KˆD�%Ø—;‘;˜xÓ(ˆDØÐ'Ò'Ø!1‘Ø˜Ò'Ø!/‘à!*¨T¯Z©Z«\×-AÑ-AÀ#ÀsÓ-KÑ!K�ð —L‘L Ó*ˆEØ §¡Ñ*ØŸ	™	 .Ñ1°CÑ7¸%Ñ?�Ø(-ˆD�I‰I�nÒ%ð	.ð 	×%Ñ% d§i¡iÔ0à ˆŒà"ˆÕr   c                 ó2   — t        | j                  d   «      S )Nr%   )r   rC   ©rH   s    r   ÚGETzASGIRequest.GETk   s   € ä˜Ÿ™ >Ñ2Ó3Ð3r   c                 óZ   •— | j                   j                  d«      xs t        ‰| �  «       S )NÚscheme)r   r   ÚsuperÚ_get_scheme©rH   Ú	__class__s    €r   rT   zASGIRequest._get_schemeo   s#   ø€ Ø�z‰z�~‰~˜hÓ'Ò@¬5©7Ñ+>Ó+@Ð@r   c                 óR   — t        | d«      s| j                  «        | j                  S )NÚ_post)ÚhasattrÚ_load_post_and_filesrX   rO   s    r   Ú	_get_postzASGIRequest._get_postr   s"   € Ü�t˜WÔ%Ø×%Ñ%Ô'Ø�z‰zÐr   c                 ó   — || _         y ©N)rX   )rH   Úposts     r   Ú	_set_postzASGIRequest._set_postw   s	   € Øˆ�
r   c                 óR   — t        | d«      s| j                  «        | j                  S )NÚ_files)rY   rZ   ra   rO   s    r   Ú
_get_fileszASGIRequest._get_filesz   s"   € Ü�t˜XÔ&Ø×%Ñ%Ô'Ø�{‰{Ðr   c                 óL   — t        | j                  j                  dd«      «      S )NÚHTTP_COOKIEr   )r   rC   r   rO   s    r   ÚCOOKIESzASGIRequest.COOKIES‚   s   € ä˜DŸI™IŸM™M¨-¸Ó<Ó=Ð=r   c                 óV   •— t         ‰| �  «        | j                  j                  «        y r]   )rS   ÚcloserG   rU   s    €r   rg   zASGIRequest.close†   s   ø€ Ü‰‰ŒØ�‰×ÑÕr   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úbody_receive_timeoutrM   r   rP   rT   r[   r_   rb   ÚpropertyÚPOSTÚFILESre   rg   Ú__classcell__©rV   s   @r   r   r   &   ss   ø„ ñð Ðò9#ðv ñ4ó ð4ôAòò
òñ
 �I˜yÓ)€DÙ�ZÓ €Eàñ>ó ð>÷ð r   r   c                   ón   ‡ — e Zd ZdZeZdZˆ fd„Zd„ Zd„ Z	d„ Z
d„ Zd„ Zd	„ Zˆ fd
„Zd„ Zed„ «       Zˆ xZS )ÚASGIHandlerzHandler for ASGI requests.i   c                 óF   •— t         ‰| �  «        | j                  d¬«       y )NT)Úis_async)rS   rM   Úload_middlewarerU   s    €r   rM   zASGIHandler.__init__’   s   ø€ Ü‰ÑÔØ×Ñ dÐÕ+r   c              ƒ   óð   K  — |d   dk7  rt        d|d   z  «      ‚t        «       4 ƒd{  –—†  | j                  |||«      ƒ d{  –—†  ddd«      ƒd{  –—†  y7 Œ07 Œ7 Œ	# 1 ƒd{  –—†7  sw Y   yxY w­w)zV
        Async entrypoint - parses the request and hands off to get_response.
        ÚtypeÚhttpz5Django can only handle ASGI/HTTP connections, not %s.N)Ú
ValueErrorr   Úhandle)rH   r   ÚreceiveÚsends       r   Ú__call__zASGIHandler.__call__–   s   è ø€ ð �‰=˜FÒ"ÜØGÈ%ÐPVÉ-ÑWóð ô *Ó+÷ 	4ñ 	4Ø—+‘+˜e W¨dÓ3×3Ð3÷	4÷ 	4ñ 	4øØ3øð	4ø÷ 	4÷ 	4ñ 	4üsV   ‚(A6ªA«A6®A!ÁAÁA!Á
A6ÁAÁA6ÁA!ÁA6Á!A3Á'A*Á(A3Á/A6c              ƒ   óì  ‡ K  — 	 ‰ j                  |«      ƒ d{  –—† }t        t        |«      «       t        j
                  j                  ‰ j                  |¬«      ƒ d{  –—†  ‰ j                  ||«      \  }}|€M|j                  «        ‰ j                  ||«      ƒ d{  –—†   t        |j                  «      «       ƒ d{  –—†  yˆ fd„}t        j                  ‰ j                  |«      «      t        j                   |||«      «      g}t        j                  |t        j                   ¬«      ƒ d{  –—†  |D ]?  }	|	j#                  «       r	 |	j%                  «        Œ%|	j)                  «        	 |	ƒ d{  –—†  ŒA 	 |d   j%                  «       }
 t        |
j                  «      «       ƒ d{  –—†  |j                  «        y7 �Œ­# t        $ r Y yw xY w7 �Œx7 �Œ:7 �Œ7 Œª# t        $ r Y Œ±t&        $ r |j                  «        ‚ w xY w7 Œ’# t        j*                  $ r Y Œåw xY w7 Œu# t        j*                  $ r6 t        j,                  j                  ‰ j                  ¬«      ƒ d{  –—†7   Y Œ»w xY w­w)zK
        Handles the ASGI request. Called via the __call__ method.
        N)Úsenderr   c              “   ó´   •K  — ‰j                  | «      ƒ d {  –—† }	 ‰j                  ||«      ƒ d {  –—†  |S 7 Œ!7 Œ# t        j                  $ r Y |S w xY w­wr]   )Úrun_get_responseÚsend_responseÚasyncioÚCancelledError)Úrequestr}   ÚresponserH   s      €r   Úprocess_requestz+ASGIHandler.handle.<locals>.process_request¸   sa   øè ø€ Ø!×2Ñ2°7Ó;×;ˆHðØ×(Ñ(¨°4Ó8×8Ð8ð
 ˆOð <øà8ùÜ×)Ñ)ò ààˆOð	üs:   ƒA˜:™Až> ³<´> ¸A¼> ¾AÁAÁAÁA)Úreturn_whenr+   )r€   )Ú	read_bodyr   r   r   r   Úrequest_startedÚasendrV   Úcreate_requestrg   rƒ   r   r„   Úcreate_taskÚlisten_for_disconnectÚwaitÚFIRST_COMPLETEDÚdoneÚresultÚAssertionErrorÚcancelr…   Úrequest_finished)rH   r   r|   r}   rI   r†   Úerror_responserˆ   ÚtasksÚtaskr‡   s   `          r   r{   zASGIHandler.handle¤   s(  øè ø€ ð
	Ø"Ÿn™n¨WÓ5×5ˆIô 	Ô+¨EÓ2Ô3Ü×%Ñ%×+Ñ+°4·>±>ÈÐ+ÓO×OÐOà"&×"5Ñ"5°e¸YÓ"GÑˆ�Øˆ?Ø�O‰OÔØ×$Ñ$ ^°TÓ:×:Ð:Ø5”- × 4Ñ 4Ó5Ó7×7Ð7Øô	ô  ×Ñ × :Ñ :¸7Ó CÓDÜ×Ñ¡°¸Ó >Ó?ð
ˆô �l‰l˜5¬g×.EÑ.EÔF×FÐFàò 	ˆDØ�y‰yŒ{ðØ—K‘K•Mð —‘”ðØ—J‘Jð	ð&	2Ø˜Q‘x—‘Ó(ˆHð 0”- §¡Ó/Ó1×1Ð1à�‰Õð{ 6úÜò 	Ùð	úð 	Pùð
 ;ùØ7ùð, 	Gùô &ò áÜ%ò Ø—O‘OÔ%Øðúð ùÜ×-Ñ-ò áðúð 2ùô ×%Ñ%ò 	HÜ×*Ñ*×0Ñ0¸¿¹Ð0ÓG×GÓGð	Hüs  ƒI4…G	 ™GšG	 žAI4Á GÁ!A I4Â!GÂ"!I4ÃGÃA2I4Ä6G!Ä7I4ÅG#Å!I4Å3HÅ8HÅ9HÅ=I4Æ H( ÆI4Æ0H&Æ1I4ÇG	 Ç		GÇI4ÇGÇI4ÇI4ÇI4Ç!I4Ç#	HÇ,I4Ç.HÈI4ÈHÈH#È I4È"H#È#I4È(A I1É(I+É)I1É.I4É0I1É1I4c              ƒ   ój   K  —  |«       ƒ d{  –—† }|d   dk(  r
t        «       ‚J d|d   z  «       ‚7 Œ#­w)z&Listen for disconnect from the client.Nrx   úhttp.disconnectz+Invalid ASGI message after request body: %s)r   )rH   r|   Úmessages      r   r�   z!ASGIHandler.listen_for_disconnecté   s>   è ø€ á›	—/ˆØ�6‰?Ð/Ò/Ü Ó"Ð"àUÐCÀgÈfÁoÑUÓUˆuð	 "ús   ‚3�1Ž$3c              ƒ   ó¨   K  — | j                  |«      ƒ d{  –—† }| j                  |_        t        |t        «      r| j
                  |_        |S 7 Œ8­w)zGet async response.N)Úget_response_asyncrV   Ú_handler_classr@   r   Ú
chunk_sizeÚ
block_size)rH   r†   r‡   s      r   r‚   zASGIHandler.run_get_responseñ   sI   è ø€ ð ×0Ñ0°Ó9×9ˆØ"&§.¡.ˆÔô �h¤Ô-Ø"&§/¡/ˆHÔØˆð :ús   ‚A—A˜9Ac              ƒ   ó:  K  — t        j                  t        j                  d¬«      }	  |«       ƒ d{  –—† }|d   dk(  r|j	                  «        t        «       ‚d|v r|j                  |d   «       |j                  dd«      snŒ]|j                  d	«       |S 7 Œe­w)
z+Reads an HTTP body from an ASGI connection.zw+b)Úmax_sizeÚmodeNrx   r›   ÚbodyÚ	more_bodyFr   )	ÚtempfileÚSpooledTemporaryFiler   ÚFILE_UPLOAD_MAX_MEMORY_SIZErg   r   Úwriter   Úseek)rH   r|   rI   rœ   s       r   rŠ   zASGIHandler.read_bodyü   s˜   è ø€ ô ×1Ñ1Ü×9Ñ9Àô
ˆ	ð Ù#›I—oˆGØ�v‰Ð"3Ò3Ø—‘Ô!ä$Ó&Ð&à˜Ñ Ø—‘ ¨¡Ô0à—;‘;˜{¨EÔ2Øð ð 	�‰�qÔØÐð &ús   ‚1B³B´A&Bc                 óì   — 	 | j                  ||«      dfS # t        $ r; t        j                  dt	        j
                  «       ddi¬«       dt        «       fcY S t        $ r dt        dd¬«      fcY S w xY w)	z‰
        Create the Request object and returns either (request, None) or
        (None, response) if there is an error response.
        Nz Bad Request (UnicodeDecodeError)Ústatus_codei�  )Úexc_infoÚextraz413 Payload too largei�  )Ústatus)	Úrequest_classÚUnicodeDecodeErrorÚloggerÚwarningÚsysr®   r   r	   r   )rH   r   rI   s      r   r�   zASGIHandler.create_request  s‚   € ð

	KØ×%Ñ% e¨YÓ7¸Ð=Ð=øÜ!ò 	2Ü�N‰NØ2ÜŸ™›Ø$ cÐ*ð ô ð
 Ô/Ó1Ð1Ò1Ü ò 	KØœÐ&=ÀcÔJÐJÒJð	Kús   ‚ –AA3ÁA3Á2A3c                 ó¨   •— 	 t         ‰| �  |||«      S # t        $ r4 t        t        j
                  rt        j                  «       ndd¬«      cY S w xY w)z#Last-chance handler for exceptions.zInternal Server Errorz
text/plain)Úcontent_type)rS   Úhandle_uncaught_exceptionÚ	Exceptionr   r   ÚDEBUGÚ	tracebackÚ
format_exc)rH   r†   Úresolverr®   rV   s       €r   r¸   z%ASGIHandler.handle_uncaught_exception"  sP   ø€ ð	Ü‘7Ñ4°W¸hÈÓQÐQøÜò 	Ü*Ü*2¯.ª.”	×$Ñ$Ô&Ð>UØ)ôò ð	ús   ƒ ”:AÁAc           	   ƒ   óÈ  K  — g }|j                  «       D ]l  \  }}t        |t        «      r|j                  d«      }t        |t        «      r|j                  d«      }|j	                  t        |«      t        |«      f«       Œn |j                  j                  «       D ]B  }|j	                  d|j                  d¬«      j                  d«      j                  «       f«       ŒD  |d|j                  |dœ«      ƒ d{  –—†  |j                  rVt        t        |«      «      4 ƒd{  –—† }|2 3 d{  –—† }| j                  |«      D ]  \  }	}
 |d	|	d
dœ«      ƒ d{  –—†  Œ Œ7| j                  |j                  «      D ]  \  }	} |d	|	| dœ«      ƒ d{  –—†  Œ y7 ŒŸ7 Œx7 Œo7 ŒF6 ddd«      ƒd{  –—†7   n# 1 ƒd{  –—†7  sw Y   nxY w |dd	i«      ƒ d{  –—†7   y7 ŒK­w)z)Encode and send a response out over ASGI.Úasciir3   s
   Set-Cookier   )Úheaderzhttp.response.start)rx   r°   r2   Nzhttp.response.bodyT)rx   r¥   r¦   rx   )Úitemsr@   rD   ÚencodeÚappendrA   ÚcookiesÚvaluesÚoutputÚstripr­   Ú	streamingr   ÚaiterÚchunk_bytesÚcontent)rH   r‡   r}   Úresponse_headersrÀ   rK   ÚcrË   ÚpartÚchunkr7   Úlasts               r   rƒ   zASGIHandler.send_response.  s   è ø€ ð ÐØ%Ÿ^™^Ó-ò 	C‰MˆF�EÜ˜&¤#Ô&ØŸ™ wÓ/�Ü˜%¤Ô%ØŸ™ XÓ.�Ø×#Ñ#¤U¨6£]´E¸%³LÐ$AÕBð	Cð ×!Ñ!×(Ñ(Ó*ò 	ˆAØ×#Ñ#Ø §¡° Ó 3× :Ñ :¸7Ó C× IÑ IÓ KÐLõð	ñ
 à-Ø"×.Ñ.Ø+ñó
÷ 	
ð 	
ð ×Òô
  ¤ h£Ó0÷ ð °GØ")÷ 
ð 
˜$Ø$(×$4Ñ$4°TÓ$:ò 	™˜˜qÙ"à(<Ø(-ð .2ñó÷ ñ ñ	ð  $×/Ñ/°×0@Ñ0@ÓAò ‘��tÙà 4Ø %Ø)- Xñó÷ ñ ñð=	
øðøð
øðøð #*÷÷ ÷ ÷ ó úñ ˜Ð 4Ð5Ó6×6Ò6ð
ús¨   ‚C:G"Ã<FÃ=(G"Ä%FÄ&G"Ä)F7Ä,F$Ä0F Ä1F$Ä4'F7ÅF"
ÅF7Å#1G"ÆG ÆG"ÆG"Æ F$Æ"F7Æ$F7Æ%G"Æ0F3Æ1G"Æ7G	Æ=G Æ>G	ÇG"ÇGÇG"c              #   óÚ   K  — d}|s|df–— y|t        |«      k  rN|||| j                  z    || j                  z   t        |«      k\  f–— || j                  z  }|t        |«      k  rŒMyy­w)z
        Chunks some data up so it can be sent in reasonable size messages.
        Yields (chunk, last_chunk) tuples.
        r   TN)Úlenr    )ÚclsÚdataÚpositions      r   rÊ   zASGIHandler.chunk_bytese  sy   è ø€ ð ˆÙØ˜�*ÒØØœ˜T›Ò"à�X ¨3¯>©>Ñ 9Ð:Ø˜CŸN™NÑ*¬s°4«yÑ8ðò ð ˜Ÿ™Ñ&ˆHð œ˜T›Õ"ùs   ‚A&A+Á)A+)rh   ri   rj   rk   r   r±   r    rM   r~   r{   r�   r‚   rŠ   r�   r¸   rƒ   ÚclassmethodrÊ   rp   rq   s   @r   rs   rs   ‹   sV   ø„ Ù$à€Mà€Jô,ò4òCòJVò	òò*Kô"
ò5ðn ñ'ó ô'r   rs   )%r„   Úloggingrµ   r§   r»   Ú
contextlibr   Úasgiref.syncr   r   Údjango.confr   Údjango.corer   Údjango.core.exceptionsr   r	   Údjango.core.handlersr
   Údjango.httpr   r   r   r   r   r   r   Údjango.urlsr   Údjango.utils.functionalr   Ú	getLoggerr³   r   r   ÚBaseHandlerrs   © r   r   ú<module>rä      sx   ðÛ Û Û 
Û Û Ý ç >å  Ý ß DÝ %÷÷ ñ õ *Ý 3à	ˆ×	Ñ	Ð+Ó	,€ò,ôb�+ô bôJi'�$×"Ñ"õ i'r   