Ë
    RPf5"  ã                  ój  — d dl mZ d dlZd dl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mZmZ d dlmZmZmZmZmZ ej0                  egej2                  e   f   Zej0                  eegej2                  e   f   Z ej8                  d	«      Z G d
„ de«      Z G d„ d«      Z G d„ de«      Z y)é    )ÚannotationsN)ÚObjectReceiveStreamÚObjectSendStream)Úcollapse_excgroups)ÚBackgroundTask)ÚClientDisconnectÚRequest)ÚContentStreamÚResponseÚStreamingResponse)ÚASGIAppÚMessageÚReceiveÚScopeÚSendÚTc                  ó,   ‡ — e Zd ZdZdˆ fd„Zdd„Zˆ xZS )Ú_CachedRequesta  
    If the user calls Request.body() from their dispatch function
    we cache the entire request body in memory and pass that to downstream middlewares,
    but if they call Request.stream() then all we do is send an
    empty body so that downstream things don't hang forever.
    c                ól   •— t         ‰| �  ||«       d| _        d| _        | j	                  «       | _        y )NF)ÚsuperÚ__init__Ú_wrapped_rcv_disconnectedÚ_wrapped_rcv_consumedÚstreamÚ_wrapped_rc_stream)ÚselfÚscopeÚreceiveÚ	__class__s      €úS/var/www/fastapitest/venv/lib/python3.12/site-packages/starlette/middleware/base.pyr   z_CachedRequest.__init__   s0   ø€ Ü‰Ñ˜ Ô(Ø).ˆÔ&Ø%*ˆÔ"Ø"&§+¡+£-ˆÕó    c              ƒ  ó"  K  — | j                   rddiS | j                  rJ| j                  rd| _         ddiS | j                  «       ƒ d {  –—† }|d   dk7  rt	        d|d   › �«      ‚|S t        | dd «      �d| _        d| j                  ddœS | j                  rd| _        dd	ddœS 	 | j                  «       }|j                  «       ƒ d {  –—† }| j                  | _        d|| j                   dœS 7 Œ§7 Œ(# t        $ r d| _         ddicY S w xY w­w)
NÚtypeúhttp.disconnectTzUnexpected message received: Ú_bodyzhttp.requestF)r#   ÚbodyÚ	more_bodyr!   )r   r   Ú_is_disconnectedr   ÚRuntimeErrorÚgetattrr%   Ú_stream_consumedr   Ú	__anext__r   )r   Úmsgr   Úchunks       r    Úwrapped_receivez_CachedRequest.wrapped_receive#   sU  è ø€ à×)Ò)ð Ð-Ð.Ð.à×%Ò%ð ×$Ò$ð 26�Ô.ØÐ 1Ð2Ð2ð Ÿ™›×&ˆCØ�6‰{Ð/Ò/ô #Ð%BÀ3ÀvÁ;À-Ð#PÓQÐQØˆJô �4˜ $Ó'Ð3à)-ˆDÔ&à&ØŸ
™
Ø"ñð ð
 ×"Ò"ð *.ˆDÔ&à&ØØ"ñð ð3ØŸ™›�Ø$×.Ñ.Ó0×0�Ø-1×-BÑ-B�Ô*à*Ø!Ø%)×%:Ñ%:Ð!:ñð ðA 'øð< 1ùô $ò 3Ø15�Ô.ØÐ 1Ð2Ò2ð3üsI   ‚ADÁ	C1Á
ADÂ'#C5 Ã
C3Ã%C5 Ã0DÃ3C5 Ã5DÄ	DÄDÄD)r   r   r   r   ©Úreturnr   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r/   Ú__classcell__©r   s   @r    r   r      s   ø„ ñõ0÷:3r!   r   c                  ó2   — e Zd Zddd„Zdd„Z	 	 	 	 	 	 dd„Zy)	ÚBaseHTTPMiddlewareNc                óH   — || _         |€| j                  | _        y || _        y ©N)ÚappÚdispatchÚdispatch_func)r   r<   r=   s      r    r   zBaseHTTPMiddleware.__init__a   s!   € ØˆŒØ.6Ð.>˜TŸ]™]ˆÕÀHˆÕr!   c              ƒ  ó  ‡ ‡‡‡‡	K  — ‰d   dk7  r‰ j                  ‰||«      ƒ d {  –—†  y t        ‰|«      }|j                  Š	t        j                  «       Šdˆˆˆ ˆˆ	fd„}t        «       5  t        j                  «       4 ƒd {  –—† Š‰ j                  ||«      ƒ d {  –—† } |‰‰	|«      ƒ d {  –—†  ‰j                  «        d d d «      ƒd {  –—†  d d d «       y 7 Œ¸7 Œ[7 ŒC7 Œ37 Œ# 1 ƒd {  –—†7  sw Y   Œ%xY w# 1 sw Y   y xY w­w)Nr#   Úhttpc              “  ó  •‡‡‡	‡
‡K  — d Št        j                  «       \  ŠŠ	dˆˆfd„Šdˆ	ˆfd„}dˆfd„Š
dˆˆˆˆˆ
ˆfd„}‰j                  |«       ‰j                  |«       	 ‰	j                  «       ƒ d {  –—† }|j	                  dd «      }|d   dk(  r|�‰	j                  «       ƒ d {  –—† }|d   d	k(  sJ ‚dˆˆ	fd
„}t        |d    |«       |¬«      }|d   |_        |S 7 Œk7 Œ9# t         j
                  $ r ‰�‰‚t        d«      ‚w xY w­w)Nc               “  óV  •‡K  — ‰j                  «       rddiS t        j                  «       4 ƒd {  –—† Šdˆfd„} ‰j                  | ‰j                  «        | ‰«      ƒ d {  –—† }d d d «      ƒd {  –—†  ‰j                  «       rddiS S 7 Œ\7 Œ,7 Œ# 1 ƒd {  –—†7  sw Y   Œ.xY w­w)Nr#   r$   c              “  óf   •K  —  | «       ƒ d {  –—† }‰j                   j                  «        |S 7 Œ ­wr;   )Úcancel_scopeÚcancel)ÚfuncÚresultÚ
task_groups     €r    Úwrapz[BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.receive_or_disconnect.<locals>.wrapz   s,   øè ø€ Ù'+£v§˜Ø"×/Ñ/×6Ñ6Ô8Ø%˜ð ".ús   ƒ1Ž/�!1)rF   z(typing.Callable[[], typing.Awaitable[T]]r1   r   )Úis_setÚanyioÚcreate_task_groupÚ
start_soonÚwait)rI   ÚmessagerH   Úresponse_sentr/   s     @€€r    Úreceive_or_disconnectzMBaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.receive_or_disconnectt   s«   ùè ø€ Ø ×'Ñ'Ô)Ø"Ð$5Ð6Ð6ä ×2Ñ2Ó4÷ :ð :¸
õ&ð
 ×)Ñ)¨$°×0BÑ0BÔCÙ$(¨Ó$9×9�G÷:÷ :ð !×'Ñ'Ô)Ø"Ð$5Ð6Ð6à�ð:øð :øð:ø÷ :÷ :ñ :üsV   „-B)±B²B)µ.BÁ#BÁ$BÁ(B)Á3BÁ4B)ÂBÂB)ÂB&ÂBÂB&Â"B)c               “  ób   •K  — ‰j                  «       ƒ d {  –—†  ‰ j                  «        y 7 Œ­wr;   )rN   Úclose)Úrecv_streamrP   s   €€r    Ú"close_recv_stream_on_response_sentzZBaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.close_recv_stream_on_response_sent‡   s*   øè ø€ Ø#×(Ñ(Ó*×*Ð*Ø×!Ñ!Õ#ð +ús   ƒ/—-˜/c              “  óx   •K  — 	 ‰j                  | «      ƒ d {  –—†  y 7 Œ# t        j                  $ r Y y w xY w­wr;   )ÚsendrK   ÚBrokenResourceError)rO   Úsend_streams    €r    Úsend_no_errorzEBaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.send_no_error‹   s7   øè ø€ ðØ%×*Ñ*¨7Ó3×3Ò3ùÜ×0Ñ0ò áðüs(   ƒ:…! ™š! ž:Ÿ! ¡7´:¶7·:c               “  óâ   •K  — ‰4 ƒd {  –—†  	 ‰j                  ‰‰‰«      ƒ d {  –—†  d d d «      ƒd {  –—†  y 7 Œ17 Œ# t        $ r} | ŠY d } ~ Œ%d } ~ ww xY w7 Œ!# 1 ƒd {  –—†7  sw Y   y xY w­wr;   )r<   Ú	Exception)ÚexcÚapp_excrQ   r   r   rZ   rY   s    €€€€€€r    Úcoroz<BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro’   so   øè ø€ ð '÷ &ñ &ð&Ø"Ÿh™h uÐ.CÀ]ÓS×SÐS÷&÷ &ñ &øàSùÜ$ò &Ø"%�ûð&úð&ø÷ &÷ &ñ &üsq   ƒA/Š<‹A/ŽA�A ¦>§A «A/¶A·A/¾A Á 	AÁ	AÁAÁAÁAÁA/ÁA,Á A#Á!A,Á(A/Úinfor#   úhttp.response.debugzNo response returned.zhttp.response.startc                ó
  •K  — ‰4 ƒd {  –—†  ‰2 3 d {  –—† } | d   dk(  sJ ‚| j                  dd«      }|r|­–— | j                  dd«      rŒ? d d d «      ƒd {  –—†  ‰�‰‚y 7 Œ[7 ŒR6 Œ7 Œ# 1 ƒd {  –—†7  sw Y   ŒxY w­w)Nr#   zhttp.response.bodyr&   r!   r'   F)Úget)rO   r&   r^   rT   s     €€r    Úbody_streamzCBaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.body_streamª   sŸ   øè ø€ Ø&÷ "ñ "Ø)4÷ "ð "˜gØ& v™Ð2FÒFÐFÐFØ&Ÿ{™{¨6°3Ó7˜ÙØ"&›JØ&Ÿ{™{¨;¸Õ>Ø!÷"÷ "ð Ð&Ø!�Mð 'ð"øð"ø¨øð"ø÷ "÷ "ñ "üsj   ƒBŠA&‹BŽA.‘A*•A(–A*™6A.ÁA.ÁBÁA,Á
BÁ(A*Á*A.Á,BÁ.B Á4A7Á5B Á<BÚstatus)Ústatus_codeÚcontentr`   Úheadersr0   )r1   ÚNone)rO   r   r1   ri   )r1   z"typing.AsyncGenerator[bytes, None])	rK   Úcreate_memory_object_streamrM   r   rc   ÚEndOfStreamr)   Ú_StreamingResponseÚraw_headers)ÚrequestrU   r_   rO   r`   rd   Úresponser^   rQ   rT   rZ   rY   rP   r   r   rH   r/   s          @@@@@€€€€€r    Ú	call_nextz.BaseHTTPMiddleware.__call__.<locals>.call_nextn   s   ýè ø€ Ø(,ˆGô (-×'HÑ'HÓ'JÑ$ˆK˜öö&$õ÷&ò &ð ×!Ñ!Ð"DÔEØ×!Ñ! $Ô'ð<Ø +× 3Ñ 3Ó 5×5�Ø—{‘{ 6¨4Ó0�Ø˜6‘?Ð&;Ò;ÀÐ@PØ$/×$7Ñ$7Ó$9×9�Gð ˜6‘?Ð&;Ò;Ð;Ð;ö"ô *Ø# HÑ-±{³}È4ôˆHð $+¨9Ñ#5ˆHÔ ØˆOð9 6øð :ùÜ×$Ñ$ò <ØÐ&Ø!�MÜ"Ð#:Ó;Ð;ð<üsB   ˆADÁ$C' Á7C#Á83C' Â+C%Â,C' Â03DÃ#C' Ã%C' Ã'#D
Ä
D)rn   r	   r1   r   )	r<   r   r/   rK   ÚEventr   rL   r>   Úset)
r   r   r   rW   rn   rp   ro   rP   rH   r/   s
   ``     @@@r    Ú__call__zBaseHTTPMiddleware.__call__e   sý   üè ø€ Ø�‰=˜FÒ"Ø—(‘(˜5 '¨4Ó0×0Ð0Øä  ¨Ó0ˆØ!×1Ñ1ˆÜŸ™›ˆ÷M	ñ M	ô^  Ó!ñ 	$Ü×.Ñ.Ó0÷ $ð $°JØ!%×!3Ñ!3°G¸YÓ!G×G�Ù˜u o°tÓ<×<Ð<Ø×!Ñ!Ô#÷$÷ $÷	$ð 	$ðm 1øðn$øØGøØ<øð$ø÷ $÷ $ñ $ú÷	$ð 	$üs”   ‡D
¦C§AD
Á,C>ÂC!ÂC>Â	C)ÂC#Â C)Â1C%Â2C)ÃC>ÃC'ÃC>Ã
D
Ã!C>Ã#C)Ã%C)Ã'C>Ã)C;	Ã/C2Ã0C;	Ã7C>Ã>DÄD
c              ƒ  ó   K  — t        «       ‚­wr;   )ÚNotImplementedError)r   rn   rp   s      r    r=   zBaseHTTPMiddleware.dispatchÃ   s   è ø€ ô "Ó#Ð#ùs   ‚r;   )r<   r   r=   zDispatchFunction | Noner1   ri   )r   r   r   r   rW   r   r1   ri   )rn   r	   rp   ÚRequestResponseEndpointr1   r   )r2   r3   r4   r   rs   r=   © r!   r    r9   r9   `   s,   „ ôMó\$ð|$Øð$Ø+Bð$à	ô$r!   r9   c                  óR   ‡ — e Zd Z	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 dˆ fd„Zdˆ fd„Zˆ xZS )rl   c                ó:   •— || _         t        ‰| �	  |||||«       y r;   )Ú_infor   r   )r   rg   rf   rh   Ú
media_typeÚ
backgroundr`   r   s          €r    r   z_StreamingResponse.__init__Ê   s!   ø€ ð ˆŒ
Ü‰Ñ˜ +¨w¸
ÀJÕOr!   c              ƒ  ó”   •K  — | j                   r |d| j                   dœ«      ƒ d {  –—†  t        ‰| �	  |«      ƒ d {  –—† S 7 Œ7 Œ­w)Nra   )r#   r`   )rz   r   Ústream_response)r   rW   r   s     €r    r~   z"_StreamingResponse.stream_responseÖ   sC   øè ø€ Ø�:Š:ÙÐ 5¸t¿z¹zÑJÓK×KÐKÜ‘WÑ,¨TÓ2×2Ð2ð LøØ2ús    ƒ%A¨A©A¿AÁ AÁA)éÈ   NNNN)rg   r
   rf   Úintrh   ztyping.Mapping[str, str] | Noner{   z
str | Noner|   zBackgroundTask | Noner`   z&typing.Mapping[str, typing.Any] | Noner1   ri   )rW   r   r1   ri   )r2   r3   r4   r   r~   r6   r7   s   @r    rl   rl   É   so   ø„ ð Ø37Ø!%Ø,0Ø7;ð
Pàð
Pð ð
Pð 1ð	
Pð
 ð
Pð *ð
Pð 5ð
Pð 
õ
P÷3ñ 3r!   rl   )!Ú
__future__r   ÚtypingrK   Ú	anyio.abcr   r   Ústarlette._utilsr   Ústarlette.backgroundr   Ústarlette.requestsr   r	   Ústarlette.responsesr
   r   r   Ústarlette.typesr   r   r   r   r   ÚCallableÚ	Awaitablerv   ÚDispatchFunctionÚTypeVarr   r   r9   rl   rw   r!   r    ú<module>r�      sª   ðÝ "ã ã ß ;å /Ý /ß 8ß JÑ Jß BÕ Bà Ÿ/™/¨7¨)°V×5EÑ5EÀhÑ5OÐ*OÑPÐ Ø—?‘?ØÐ%Ð&¨×(8Ñ(8¸Ñ(BÐBñÐ ð €F‡N�N�3Ó€ôH3�Wô H3÷Vf$ñ f$ôR3Ð*õ 3r!   