Ë
    Eü´jty  ã                   ó¨  — 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	m
Z
 d dlmZ d dlmZ d dlmZ d dlmZ d dlmZmZmZm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!m"Z" d
dl#m$Z$m%Z% d
dlm&Z&m'Z'm(Z(m)Z)m*Z*m+Z+ d
dl,m-Z- d
dl.m/Z/m0Z0 d
dl1m2Z2m3Z3 d
dl4m5Z5 d
dl6m7Z7m8Z8 d
dl9m:Z: d
dl;m<Z< d
dl=m>Z>m?Z? dZ@dZAer
d dlBZBd
dlCmDZD e	e)e3dedge<f   ZEe	e<gee?   f   ZF e)dde(i i dddd ejŽ                  d«      «
      ZH G d „ d!eI«      ZJ G d"„ d#eI«      ZK eK«       ZL ejš                  ddd¬$«       G d%„ d&«      «       ZNeOe)eNz  e3f   ZP G d'„ de"«      ZQy)(é    N)Údeque)Ú	AwaitableÚCallableÚSequence)Úsuppress)Úescape)Ú
HTTPStatus)ÚLogger)ÚTYPE_CHECKINGÚAnyÚOptionalÚcast)Úunder_cached_propertyé   )ÚAbstractAccessLoggerÚAbstractStreamWriter)ÚPAUSE_RESUME_READING_ERRORSÚBaseProtocol)ÚDEFAULT_CHUNK_SIZEÚceil_timeout)ÚHttpProcessingErrorÚHttpRequestParserÚHttpVersion10ÚRawRequestMessageÚStreamWriterÚWebSocketReader)ÚBadHttpMethod)Úaccess_loggerÚserver_logger)ÚEMPTY_PAYLOADÚStreamReader)Útcp_keepalive)ÚHTTPExceptionÚHTTPInternalServerError)ÚAccessLogger)ÚBaseRequest)ÚResponseÚStreamResponse)ÚRequestHandlerÚRequestPayloadErrorÚPayloadAccessErroré    )ÚServerr)   zasyncio.Task[None]ÚUNKNOWNú/TFc                   ó   — e Zd ZdZy)r*   zPayload parsing error.N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    úR/root/workspace/ytshorts/venv/lib/python3.12/site-packages/aiohttp/web_protocol.pyr*   r*   N   s   „ Ú r7   r*   c                   ó   — e Zd ZdZy)r+   z-Payload was accessed after response was sent.Nr1   r6   r7   r8   r+   r+   R   s   „ Ú7r7   r+   )Úauto_attribsÚfrozenÚslotsc                   ó,   — e Zd ZU eed<   eed<   eed<   y)Ú_ErrInfoÚstatusÚexcÚmessageN)r2   r3   r4   ÚintÚ__annotations__ÚBaseExceptionÚstrr6   r7   r8   r>   r>   Y   s   … àƒKØ	ÓØ„Lr7   r>   c            !       óT  ‡ — e Zd ZdZdZddeeeej                  ddddde	dd	d
œddde
j                  dedededee   dedededededededededef ˆ fd„Zdefd„Zeded   fd „«       Zedeeeeeef   z  eeef   z  d!z  fd"„«       Zedeeeeeef   z  eeef   z  d!z  fd#„«       Zedefd$„«       ZdLd%ed!z  dd!fd&„Zd'e
j<                  dd!fˆ fd(„Zd)e d!z  dd!fˆ fd*„Z!	 dMd+e"d,e#g d!f   d!z  dd!fd-„Z$dNd.„Z%d/e&dd!fd0„Z'defd1„Z(dNd2„Z)dNd3„Z*d4edd!fd5„Z+dNd6„Z,dNd7„Z-d8e.d9e/d:ed!z  dd!fd;„Z0d<e1d=e1dd!fd>„Z2d<e1d=e1dd!fd?„Z3dNd@„Z4d8e.dAed!z  dBe#e.ge5e/   f   dee/ef   fdC„Z6dNdD„Z7d8e.dEe/dAed!z  dee/ef   fdF„Z8	 	 	 dOd8e.dGed)e d!z  dHed!z  de/f
dI„Z9dJe:de#e.ge5e/   f   fdK„Z;ˆ xZ<S )Pr)   aj  HTTP protocol implementation.

    RequestHandler handles incoming HTTP request. It reads request line,
    request headers and request payload and calls handle_request() method.
    By default it always returns with 404 response.

    RequestHandler handles errors in incoming request, like bad
    status line, bad headers or incomplete payload. If any error occurs,
    connection gets closed.

    keepalive_timeout -- number of seconds before closing
                         keep-alive connection

    tcp_keepalive -- TCP keep-alive is on, default is on

    debug -- enable debug mode

    logger -- custom logger object

    access_log_class -- custom class for access_logger

    access_log -- custom logging object

    access_log_format -- access log format string

    loop -- Optional event loop

    max_line_size -- Optional maximum header line size

    max_field_size -- Optional maximum header field size

    max_headers -- Optional maximum header size

    timeout_ceil_threshold -- Optional value to specify
                              threshold to ceil() timeout
                              values

    )"Úmax_field_sizeÚmax_headersÚmax_line_sizeÚ_request_countÚ
_keepaliveÚ_managerÚ_request_handlerÚ_request_factoryÚ_tcp_keepaliveÚ_next_keepalive_close_timeÚ_keepalive_handleÚ_keepalive_timeoutÚ_lingering_timeÚ	_messagesÚ_max_msg_queue_sizeÚ_msg_queue_resume_sizeÚ_msg_queue_pausedÚ_message_tailÚ_handler_waiterÚ_waiterÚ_task_handlerÚ_payload_parserÚ_data_received_cbÚloggerÚdebugÚ
access_logr   Ú_closeÚ_force_closeÚ_current_requestÚ_timeout_ceil_thresholdÚ_request_in_progressÚ_logging_enabledÚ_cachei.  TFiþ  é€   g      $@é   )Úkeepalive_timeoutr"   r^   Úaccess_log_classr`   Úaccess_log_formatr_   rI   rH   rG   Úlingering_timeÚread_bufsizeÚauto_decompressÚtimeout_ceil_thresholdÚmanagerr-   Úlooprj   r"   r^   rk   r`   rl   r_   rI   rH   rG   rm   rn   ro   rp   c                ó>  •— t         | _        t         dz  | _        d| _        t	        | |||
||t
        |t         ¬«	      }t        ‰| �  ||«       d| _        d| _	        d | _
        || _        |j                  | _        |j                  | _        |
| _        || _        || _        || _        d| _        d | _        || _        t/        |«      | _        t3        «       | _        d| _        d | _        d | _        d | _        d | _        d | _         d| _!        	 t/        |«      | _!        || _$        |	| _%        || _&        |r* |||«      | _'        | jN                  jP                  | _)        nd | _'        d| _)        d| _*        d| _+        d| _,        i | _-        y # tD        tF        f$ r Y Œ}w xY w)Né   F)rI   rG   rH   Úpayload_exceptionro   Úmax_msg_queue_sizer   g        r7   ri   ).ÚMAX_MSG_QUEUE_SIZErU   rV   rW   r   r*   ÚsuperÚ__init__rJ   rK   rc   rL   Úrequest_handlerrM   Úrequest_factoryrN   rI   rH   rG   rO   rP   rQ   rR   ÚfloatrS   r   rT   rX   r]   rZ   rY   r[   r\   rd   Ú	TypeErrorÚ
ValueErrorr^   r_   r`   r   Úenabledrf   ra   rb   re   rg   )Úselfrq   rr   rj   r"   r^   rk   r`   rl   r_   rI   rH   rG   rm   rn   ro   rp   ÚparserÚ	__class__s                     €r8   ry   zRequestHandler.__init__°   sº  ø€ ô* $6ˆÔ ô '9¸AÑ&=ˆÔ#ð "'ˆÔÜ"ØØØØ'Ø)Ø#Ü1Ø+Ü1ô

ˆô 	‰Ñ˜˜vÔ&ð  ˆÔØˆŒØ48ˆÔØ'.ˆŒØ8?×8OÑ8OˆÔØ8?×8OÑ8OˆÔà*ˆÔØ&ˆÔØ,ˆÔà+ˆÔà*-ˆÔ'Ø8<ˆÔØ"3ˆÔÜ$ ^Ó4ˆÔä*/«'ˆŒØ ˆÔØ<@ˆÔà48ˆŒØ<@ˆÔØ8<ˆÔØ$(ˆÔà./ˆÔ$ð	Ü+0Ð1GÓ+HˆDÔ(ð ˆŒØˆŒ
Ø$ˆŒÙÙ>NØÐ-ó?ˆDÔð %)×$6Ñ$6×$>Ñ$>ˆDÕ!à!%ˆDÔØ$)ˆDÔ!àˆŒØ!ˆÔØ$)ˆÔ!Ø&(ˆ�øô% œ:Ð&ò 	Ùð	ús   ÄF
 Æ
FÆFÚreturnc                 ór   — dj                  | j                  j                  | j                  �d«      S d«      S )Nz<{} {}>Ú	connectedÚdisconnected)Úformatr‚   r2   Ú	transport©r€   s    r8   Ú__repr__zRequestHandler.__repr__  s;   € Ø×ÑØ�N‰N×#Ñ#ØŸ>™>Ð5ˆKó
ð 	
à;Ió
ð 	
r7   zssl.SSLContextc                 óT   — | j                   €dS | j                   j                  d«      S )zReturn SSLContext if available.NÚ
sslcontext©rˆ   Úget_extra_infor‰   s    r8   Ússl_contextzRequestHandler.ssl_context  s1   € ð
 �~‰~Ð%ð ð	
ð —‘×.Ñ.¨|Ó<ð	
r7   Nc                 óT   — | j                   €dS | j                   j                  d«      S )zReturn peername if available.NÚpeernamer�   r‰   s    r8   r‘   zRequestHandler.peername  ó1   € ð �~‰~Ð%ð ð	
ð —‘×.Ñ.¨zÓ:ð	
r7   c                 óT   — | j                   €dS | j                   j                  d«      S )zReturn sockname if available.NÚsocknamer�   r‰   s    r8   r”   zRequestHandler.sockname&  r’   r7   c                 ó   — | j                   S ©N)rR   r‰   s    r8   rj   z RequestHandler.keepalive_timeout1  s   € à×&Ñ&Ð&r7   Útimeoutc              ƒ   óþ  K  — d| _         | j                  �| j                  j                  «        | j                  rX| j                  j                  «       | _        	 t        |«      4 ƒd{  –—†  | j                  ƒ d{  –—†  ddd«      ƒd{  –—†  	 t        |«      4 ƒd{  –—†  | j                  �-| j                  j!                  t        j                  «       «       | j"                  �A| j"                  j%                  «       s't        j&                  | j"                  «      ƒ d{  –—†  ddd«      ƒd{  –—†  | j"                  �| j"                  j                  «        | j)                  «        y7 �Œ7 Œù7 Œë# 1 ƒd{  –—†7  sw Y   ŒûxY w# t        j                  t        j                  f$ rE d| _        t        j                  dk\  r't        j                  «       x}r|j                  «       r‚ Y �Œew xY w7 �ŒY7 ŒÕ7 ŒÇ# 1 ƒd{  –—†7  sw Y   Œ×xY w# t        j                  t        j                  f$ r> t        j                  dk\  r't        j                  «       x}r|j                  «       r‚ Y �Œ:w xY w­w)z±Do worker process exit preparations.

        We need to clean up everything and stop accepting requests.
        It is especially important for keep-alive connections.
        TN©é   é   )rb   rQ   Úcancelre   Ú_loopÚcreate_futurerY   r   ÚasyncioÚCancelledErrorÚTimeoutErrorÚsysÚversion_infoÚcurrent_taskÚ
cancellingrc   Ú_cancelr[   ÚdoneÚshieldÚforce_close)r€   r—   Útasks      r8   ÚshutdownzRequestHandler.shutdown5  s  è ø€ ð !ˆÔà×!Ñ!Ð-Ø×"Ñ"×)Ñ)Ô+ð ×$Ò$ð $(§:¡:×#;Ñ#;Ó#=ˆDÔ ð
Ü'¨Ó0÷ /ñ /Ø×.Ñ.×.Ð.÷/÷ /ð	Ü# GÓ,÷ =ñ =Ø×(Ñ(Ð4Ø×)Ñ)×1Ñ1´'×2HÑ2HÓ2JÔKà×%Ñ%Ð1¸$×:LÑ:L×:QÑ:QÔ:SÜ!Ÿ.™.¨×);Ñ);Ó<×<Ð<÷=÷ =ð ×ÑÐ)Ø×Ñ×%Ñ%Ô'à×ÑÕð=/ùØ.øð/ø÷ /÷ /ñ /ûä×*Ñ*¬G×,@Ñ,@ÐAò Ø'+�Ô$ä×$Ñ$¨Ò/Ü!(×!5Ñ!5Ó!7Ð7˜Ð7ØŸ™Ô)àúðúð=ùð
 =øð=ø÷ =÷ =ñ =ûô ×&Ñ&¬×(<Ñ(<Ð=ò 	ä× Ñ  GÒ+Ü$×1Ñ1Ó3Ð3�TÐ3Ø—O‘OÔ%àúð	üsÿ   ‚AI=ÁF Á+E6Á,F Á/E=Á?E9Â E=ÂF ÂE;ÂF ÂH Â$G=Â%H Â(BHÄ*H Ä+HÄ/H Ä:HÄ;H Ä?7I=Å6F Å9E=Å;F Å=FÆFÆFÆF ÆA$G:Ç6I=Ç9G:Ç:I=Ç=H È HÈH ÈHÈ
HÈHÈH ÈAI:É6I=É9I:É:I=rˆ   c                 óÀ  •— t         ‰| �  |«       t        t        j                  |«      }| j
                  rt        |«       | j                  €J ‚| j                  j                  | |«       | j                  }t        j                  dk\  r.t        j                  | j                  «       |d¬«      }|| _        y |j                  | j                  «       «      }|| _        y )N©rš   é   T©rr   Úeager_start)rx   Úconnection_mader   rŸ   Ú	TransportrO   r"   rL   r�   r¢   r£   ÚTaskÚstartÚcreate_taskr[   )r€   rˆ   Úreal_transportrr   rª   r‚   s        €r8   r±   zRequestHandler.connection_madeg  s°   ø€ Ü‰Ñ 	Ô*äœg×/Ñ/°Ó;ˆØ×ÒÜ˜.Ô)à�}‰}Ð(Ð(Ð(Ø�‰×%Ñ% d¨NÔ;à�z‰zˆÜ×Ñ˜wÒ&Ü—<‘< §
¡
£°4ÀTÔJˆDð "ˆÕð ×#Ñ# D§J¡J£LÓ1ˆDØ!ˆÕr7   r@   c                 óh  •— | j                   €y | j                   j                  | |«       | j                   j                  }| j                  «        t        ‰| �  |«       d | _         d | _        d | _        d | _        | j                  �| j                  j                  «        | j                  �(|€t        d«      }| j                  j                  |«       |r&| j                  �| j                  j                  «        d | _        | j                  �"| j                  j                  «        d | _        y y )NzConnection lost)rL   Úconnection_lostÚhandler_cancellationr©   rx   rN   rM   Ú_parserrQ   rœ   rc   ÚConnectionResetErrorr¦   r[   r\   Úfeed_eof)r€   r@   r¹   r‚   s      €r8   r¸   zRequestHandler.connection_lostx  s  ø€ Ø�=‰=Ð ØØ�‰×%Ñ% d¨CÔ0ð  $Ÿ}™}×AÑAÐà×ÑÔÜ‰Ñ Ô$ØˆŒØ $ˆÔØ $ˆÔØˆŒà×!Ñ!Ð-Ø×"Ñ"×)Ñ)Ô+à× Ñ Ð,Øˆ{Ü*Ð+<Ó=�Ø×!Ñ!×)Ñ)¨#Ô.á D×$6Ñ$6Ð$BØ×Ñ×%Ñ%Ô'à!ˆÔà×ÑÐ+Ø× Ñ ×)Ñ)Ô+Ø#'ˆDÕ ð ,r7   r�   Údata_received_cbc                 ó®   — | j                   �J ‚|| _         || _        | j                  r-| j                   j                  | j                  «       d| _        y y )Nr7   )r\   r]   rX   Ú	feed_data)r€   r�   r½   s      r8   Ú
set_parserzRequestHandler.set_parser˜  sV   € ð
 ×#Ñ#Ð+Ð+Ð+à%ˆÔØ!1ˆÔà×ÒØ× Ñ ×*Ñ*¨4×+=Ñ+=Ô>Ø!$ˆDÕð r7   c                  ó   — y r–   r6   r‰   s    r8   Úeof_receivedzRequestHandler.eof_received¦  s   € Ør7   Údatac                 ó¶  — | j                   s| j                  ry | j                  €ú| j                  sî| j                  €J ‚	 | j                  j                  |«      \  }}}|D ]7  \  }}| xj                  dz  c_
        | j                  j                  ||f«       Œ9 | j                  }|r#|�!|j                  «       s|j                  d «       | j                   s2t#        | j                  «      | j$                  k\  r| j'                  «        || _        |r|r|| _        y y y | j                  €$| j                  r|r| xj(                  |z  c_        y |rN| j*                  �| j+                  «        | j                  j                  |«      \  }	}|	r| j-                  «        y y y # t        $ r.}t        d||j                  ¬«      t        fg}d}d}Y d }~�Œsd }~ww xY w)Ni�  )r?   r@   rA   Fr7   r   )rb   ra   r\   Ú	_upgradedrº   r¿   r   r>   rA   r    rJ   rT   ÚappendrZ   r§   Ú
set_resultrW   ÚlenrU   Ú_pause_msg_queue_readingrX   r]   Úclose)
r€   rÃ   ÚmessagesÚupgradedÚtailr@   ÚmsgÚpayloadÚwaiterÚeofs
             r8   Údata_receivedzRequestHandler.data_received©  sµ  € Ø×Ò §¢Øð ×ÑÐ'°·²Ø—<‘<Ð+Ð+Ð+ðØ+/¯<©<×+AÑ+AÀ$Ó+GÑ(�˜( Dð !)ò 6‘��WØ×#Ò# qÑ(Õ#Ø—‘×%Ñ% s¨G nÕ5ð6ð —\‘\ˆFÙ˜FÐ.°v·{±{´}à×!Ñ! $Ô'ð
 ×*Ò*Ü˜Ÿ™Ó'¨4×+CÑ+CÒCà×-Ñ-Ô/à%ˆDŒNÙ™DØ%)�Õ"ð !ˆxð ×!Ñ!Ð)¨d¯nªnÁØ×Ò $Ñ&Öñ Ø×%Ñ%Ð1Ø×&Ñ&Ô(Ø×,Ñ,×6Ñ6°tÓ<‰IˆC�ÙØ—
‘
•ð ð	 øôC 'ò ä S¨c¸3¿;¹;ÔGÌÐWð�ð !�Ø–ûðús   ÁF! Æ!	GÆ*#GÇGc                 ó   — | j                   S r–   )rW   r‰   s    r8   Ú_reading_paused_for_msg_queuez,RequestHandler._reading_paused_for_msg_queueÚ  s   € Ø×%Ñ%Ð%r7   c                 ó€   — d| _         | j                  �	 | j                  j                  «        y y # t        $ r Y y w xY w)NT)rW   rˆ   Úpause_readingr   r‰   s    r8   rÉ   z'RequestHandler._pause_msg_queue_readingÝ  sD   € Ø!%ˆÔØ�>‰>Ð%ðØ—‘×,Ñ,Õ.ð &øô /ò ñ ðús   •1 ±	=¼=c                 ó  — | j                   s4| j                  d«       t        | j                  «      | j                  k\  ry d| _        | j                  s)| j                  �	 | j                  j                  «        y y y # t        $ r Y y w xY w)Nr7   F)
rÅ   rÒ   rÈ   rT   rU   rW   Ú_reading_pausedrˆ   Úresume_readingr   r‰   s    r8   Ú_resume_msg_queue_readingz(RequestHandler._resume_msg_queue_readingç  s�   € Ø�~Š~ð ×Ñ˜sÔ#Ü�4—>‘>Ó" d×&>Ñ&>Ò>ØØ!&ˆÔØ×#Ò#¨¯©Ð(BðØ—‘×-Ñ-Õ/ð )CÐ#øô /ò ñ ðús   Á!A> Á>	B
Â	B
Úvalc                 ón   — || _         | j                  r"| j                  j                  «        d| _        yy)zMSet keep-alive connection mode.

        :param bool val: new state.
        N)rK   rQ   rœ   )r€   rÛ   s     r8   Ú
keep_alivezRequestHandler.keep_aliveø  s3   € ð
 ˆŒØ×!Ò!Ø×"Ñ"×)Ñ)Ô+Ø%)ˆDÕ"ð "r7   c                 ó`   — d| _         | j                  r| j                  j                  «        yy)z�Close connection.

        Stop accepting new pipelining messages and close
        connection when handlers done processing messages.
        TN)ra   rZ   rœ   r‰   s    r8   rÊ   zRequestHandler.close  s'   € ð ˆŒØ�<Š<Ø�L‰L×ÑÕ!ð r7   c                 óº   — d| _         | j                  r| j                  j                  «        | j                  �"| j                  j	                  «        d| _        yy)zForcefully close connection.TN)rb   rZ   rœ   rˆ   rÊ   r‰   s    r8   r©   zRequestHandler.force_close  sG   € à ˆÔØ�<Š<Ø�L‰L×ÑÔ!Ø�>‰>Ð%Ø�N‰N× Ñ Ô"Ø!ˆD�Nð &r7   ÚrequestÚresponseÚtimec                 ó¼   — | j                   rP| j                  �Ct        r|€J ‚| j                  j                  ||| j                  j                  «       |z
  «       y y y r–   )rf   r   r   Úlogr�   râ   )r€   rà   rá   râ   s       r8   Ú
log_accesszRequestHandler.log_access  sX   € ð × Ò  T×%7Ñ%7Ð%CÝØÐ'Ð'Ð'Ø×Ñ×"Ñ" 7¨H°d·j±j·o±oÓ6GÈ$Ñ6NÕOð &DÐ r7   ÚargsÚkwc                 óV   — | j                   r | j                  j                   |i |¤Ž y y r–   )r_   r^   ©r€   ræ   rç   s      r8   Ú	log_debugzRequestHandler.log_debug  s'   € Ø�:Š:ØˆD�K‰K×Ñ˜tÐ* rÓ*ð r7   c                 ó<   —  | j                   j                  |i |¤Ž y r–   )r^   Ú	exceptionré   s      r8   Úlog_exceptionzRequestHandler.log_exception!  s   € Øˆ�‰×Ñ˜tÐ* rÓ*r7   c                 óR  — d | _         | j                  s| j                  sy | j                  }|j	                  «       }| j
                  }||k  r"|j                  || j                  «      | _         y | j                  r,| j                  j                  «       s| j                  «        y y y r–   )rQ   rb   rK   r�   râ   rP   Úcall_atÚ_process_keepaliverZ   r§   r©   )r€   rr   ÚnowÚ
close_times       r8   rð   z!RequestHandler._process_keepalive$  sŠ   € Ø!%ˆÔØ×Ò D§O¢OØà�z‰zˆØ�i‰i‹kˆØ×4Ñ4ˆ
Ø�Òà%)§\¡\°*¸d×>UÑ>UÓ%VˆDÔ"Øð �<Š< §¡× 1Ñ 1Ô 3Ø×ÑÕð !4ˆ<r7   Ú
start_timerz   c              ƒ   óª  K  — d| _         	 	 || _         ||«      ƒ d {  –—† }d | _        	 t        |dd«      rt        j                  dt
        «       | j                  |||«      ƒ d {  –—† \  }}d| _         | j                  �| j                  j                  d «       ||fS 7 Œƒ# d | _        w xY w7 ŒG# t        $ r+}|}| j                  |||«      ƒ d {  –—†7  \  }}Y d }~Œqd }~wt        j                  $ r ‚ t        j                  $ rN}| j                  d|¬«       | j                  |d«      }| j                  |||«      ƒ d {  –—†7  \  }}Y d }~Œãd }~wt        $ r=}| j                  |d|«      }| j                  |||«      ƒ d {  –—†7  \  }}Y d }~�Œ'd }~ww xY w# d| _         | j                  �| j                  j                  d «       w w xY w­w)	NTÚ__http_exception__Fzlreturning HTTPException object is deprecated (#2415) and will be removed, please raise the exception insteadzRequest handler timed out.©Úexc_infoiø  éô  )re   rc   ÚgetattrÚwarningsÚwarnÚDeprecationWarningÚfinish_responser#   rŸ   r    r¡   rê   Úhandle_errorÚ	ExceptionrY   rÇ   )r€   rà   ró   rz   ÚrespÚresetr@   s          r8   Ú_handle_requestzRequestHandler._handle_request5  sÄ  è ø€ ð %)ˆÔ!ð 	6ð-Ø(/�Ô%Ù,¨WÓ5×5�à(,�Õ%ô �tÐ1°5Ô9Ü—‘ð9ô 'ô	ð !%× 4Ñ 4°W¸dÀJÓ O×O‰KˆD�%à(-ˆDÔ%Ø×#Ñ#Ð/Ø×$Ñ$×/Ñ/°Ô5à�Uˆ{Ðð? 6ùà(,�Õ%úð. Pùô- ò 	PØˆDØ $× 4Ñ 4°W¸dÀJÓ O×OÐO‰KˆD•%ûÜ×%Ñ%ò 	ØÜ×#Ñ#ò 	PØ�N‰NÐ7À#ˆNÔFØ×$Ñ$ W¨cÓ2ˆDØ $× 4Ñ 4°W¸dÀJÓ O×OÐO‰KˆD•%ûÜò 	PØ×$Ñ$ W¨c°3Ó7ˆDØ $× 4Ñ 4°W¸dÀJÓ O×OÐO‰KˆD–%ûð	Pûð ).ˆDÔ%Ø×#Ñ#Ð/Ø×$Ñ$×/Ñ/°Õ5ð 0üsº   ‚GŒB$ žB"ŸB$ £B2 «=F Á(B0Á)F Á02GÂ"B$ Â$	B-Â-B2 Â0F Â2	FÂ;C!ÃCÃC!ÃF Ã!)FÄ
;EÅEÅEÅF ÅFÅ)FÆFÆ	FÆF ÆFÆF Æ1GÇGc           	   ƒ   ó  K  — | j                   }| j                  }|€J ‚| j                  }d}| j                  €J ‚| j                  €J ‚| j
                  �sß| j                  s1	 |j                  «       | _        | j                  ƒ d{  –—†  d| _        | j                  j                  «       \  }}| j                  �| j                  j                  «        | j                  r2t        | j                  «      | j                  k  r| j                  «        | j                   r|j#                  «       nd}|xj$                  dz  c_        t'        | |«      }t)        |t*        «      r| j-                  |«      }	t.        }n| j                  }	| j                  ||| || j0                  xs t3        j4                  |«      «      }
	 | j7                  |
||	«      }t8        j:                  dk\  rt3        j<                  ||d¬«      }n|j?                  |«      }	 |ƒ d{  –—† \  }}~|r<| jC                  d«       	 d|
_"        | jF                  �€ð|��í| jC                  d«       �nÚtI        |jJ                  «      | _&        |jO                  «       sù| jP                  }| j
                  s¤|r¢| jC                  d	|«       |j#                  «       }||z   }	 |jO                  «       sj||k  retS        ||z
  «      4 ƒd{  –—†  |jU                  «       ƒ d{  –—†  ddd«      ƒd{  –—†  |j#                  «       }|jO                  «       s||k  rŒe|jO                  «       s-| j
                  s!| jC                  d«       | j]                  «        |j_                  t`        «       d|
_"        | jF                  €|�| jC                  d«       	 | jL                  r`| jj                  sT| j
                  sH|j#                  «       |z   }|| _6        | jn                  €#|jq                  || jr                  «      | _7        nn| j
                  s�Œß| j
                  s/d| _        | jF                  �| jF                  j]                  «        yyy7 �Œê# d| _        w xY w7 �Œl# t@        $ r< | jC                  d«       Y d|
_"        | jF                  �Œ}|€Œ€| jC                  d«       Œ’w xY w7 �ŒÝ7 �ŒÈ7 �Œ»# 1 ƒd{  –—†7  sw Y   �ŒÌxY w# t2        jV                  t2        jX                  f$ r> t8        j:                  d
k\  r't3        j4                  «       x}r|j[                  «       r‚ Y �Œ	w xY w# t2        jV                  $ r# | jC                  d«       | jc                  «        ‚ td        $ r.}| jg                  d|¬«       | jc                  «        Y d}~�Œ!d}~wth        $ r | jc                  «        ‚ w xY w# d|
_"        | jF                  €|�| jC                  d«       w w w xY w­w)a_  Process incoming request.

        It reads request line, request headers and request payload, then
        calls handle_request() method. Subclass has to override
        handle_request(). start() handles various exceptions in request
        or response handling. Connection is being closed always unless
        keep_alive(True) specified.
        Nr   r­   Tr¯   z&Ignored premature client disconnectionz'Ignored premature client disconnection.z(Ignored premature client disconnection 2z'Start lingering close timer for %s sec.r™   zUncompleted request.zUnhandled exceptionrö   ):r�   rL   rR   rN   rM   rb   rT   rž   rZ   Úpopleftrº   Úmessage_consumedrW   rÈ   rV   rÚ   rf   râ   Úrequests_countr   Ú
isinstancer>   Ú_make_error_handlerÚERRORr[   rŸ   r¤   r  r¢   r£   r³   rµ   ÚConnectionErrorrê   Ú_taskrˆ   ÚboolrÝ   rK   Úis_eofrS   r   Úreadanyr    r¡   r¥   rÊ   Úset_exceptionÚ_PAYLOAD_ACCESS_ERRORr©   rÿ   rí   rD   ra   rP   rQ   rï   rð   )r€   rr   rq   rj   r   rA   rÏ   r´   Úwriterrz   rà   Úcororª   r  rm   rñ   Úend_tÚtr@   rò   s                       r8   r´   zRequestHandler.start`  sL  è ø€ ð �z‰zˆØ—-‘-ˆØÐ"Ð"Ð"Ø ×3Ñ3ÐØˆØ×$Ñ$Ð0Ð0Ð0Ø×$Ñ$Ð0Ð0Ð0à×#Ó#Ø—>’>ð(à#'×#5Ñ#5Ó#7�D”LØŸ,™,×&Ð&à#'�D”Là#Ÿ~™~×5Ñ5Ó7ÑˆG�Wð �|‰|Ð'Ø—‘×-Ñ-Ô/à×&Ò&Ü˜Ÿ™Ó'¨4×+FÑ+FÒFà×.Ñ.Ô0ð $(×#8Ò#8�D—I‘I”K¸dˆEà×"Ò" aÑ'Õ"Ü! $¨Ó-ˆFÜ˜'¤8Ô,à"&×":Ñ":¸7Ó"C�Ü‘à"&×"7Ñ"7�ð
 ×+Ñ+ØØØØØ×"Ñ"Ò@¤g×&:Ñ&:¸4Ó&@óˆGðCNà×+Ñ+¨G°U¸OÓL�Ü×#Ñ# wÒ.Ü"Ÿ<™<¨°4ÀTÔJ‘Dà×+Ñ+¨DÓ1�DðØ(,§*‘K�D˜%ð ÙØ—N‘NÐ#MÔNØð` !%�”Ø—>‘>Ñ)¨dÑ.>Ø—N‘NÐ#LÖMô_ #' t§¡Ó"7�”ð —~‘~Ô'Ø%)×%9Ñ%9�NØ×,Ò,±ØŸ™ØEÀ~ôð #Ÿi™i›k˜Ø # nÑ 4˜ð&Ø&-§n¡nÔ&6¸3Àº;Ü+7¸À¹Ó+D÷ !<ñ !<à*1¯/©/Ó*;×$;Ð$;÷!<÷ !<ð '+§i¡i£k ð	 '.§n¡nÔ&6¸3À»;ð #Ÿ>™>Ô+°D×4EÒ4EØŸ™Ð'=Ô>ØŸ
™
œà×%Ñ%Ô&;Ô<ð !%�”Ø—>‘>Ð)¨dÐ.>Ø—N‘NÐ#LÕMà�Š t§{¢{¸4×;LÒ;Là!ŸY™Y›[Ð+<Ñ<�
Ø2<�Ô/Ø×)Ñ)Ð1Ø-1¯\©\Ø" D×$;Ñ$;ó.�DÕ*ð ðy ×#Ô#ð~ × Ò Ø!%ˆDÔØ�~‰~Ð)Ø—‘×$Ñ$Õ&ð *ð !ðu 'úà#'�D•Lúð^ #-úÜ&ò Ø—N‘NÐ#KÔLØðl !%�”Ø—>‘>Ñ)¨dÑ.>Ø—N‘NÐ#LÕMðuúð4!<ùà$;ùð!<ù÷ !<÷ !<ò !<ûô !(× 6Ñ 6¼×8LÑ8LÐMò &ä #× 0Ñ 0°GÒ ;Ü*1×*>Ñ*>Ó*@Ð%@ QÐ%@Ø$%§L¡L¤Nà %úð&ûô ×)Ñ)ò Ø—‘ÐGÔHØ× Ñ Ô"ØÜò #Ø×"Ñ"Ð#8À3Ð"ÔGØ× Ñ ×"Ò"ûÜ ò Ø× Ñ Ô"Øðûð !%�”Ø—>‘>Ð)¨dÐ.>Ø—N‘NÐ#LÕMð /?Ð)üsD  ‚A XÁ#$Q4 ÂQ1ÂQ4 ÂD1XÆ>AU ÈR ÈR ÈR ÈU È1*XÉA+U Ë'S* Ë.SË/S* Ë2SÌSÌSÌS* ÌSÌ)S* ÍAU ÎB XÐ5<XÑ1Q4 Ñ4	Q=Ñ=XÒ R ÒSÒU ÒXÒ2XÒ5XÓSÓU ÓS* ÓSÓS* ÓS'ÓSÓS'Ó"S* Ó*AUÕU Õ
UÕU Õ=WÖ#V4Ö.W Ö4W×W ×*W?×?Xr   c              ƒ   óˆ  K  — |j                  «        | j                  �¨| j                  j                  d«       d| _        | j                  rz| j                  j                  | j                  «      \  }}}|| _        |D ]7  \  }}| xj                  dz  c_        | j                  j                  ||f«       Œ9 | j                  �J ‚	 |j                  }		  |	|«      ƒ d{  –—†  |j'                  «       ƒ d{  –—†  | j+                  |||«       |dfS # t        $ rx |€| j                  d«       n| j                  d|›�«       t        «       }
t        |
j                  |
j                   |
j"                  |
j$                  ¬«      }|j                  }	Y ŒÀw xY w7 Œ·7 Œ¡# t(        $ r | j+                  |||«       |dfcY S w xY w­w)a   Prepare the response and write_eof, then log access.

        This has to
        be called within the context of any exception so the access logger
        can get exception information. Returns True if the client disconnects
        prematurely.
        NFr   z+Missing return statement on request handlerz3Web-handler should return a response instance, got )r?   ÚreasonÚtextÚheadersT)Ú_finishrº   Úset_upgradedrÅ   rX   r¿   rJ   rT   rÆ   rZ   ÚprepareÚAttributeErrorrí   r$   r'   r?   r  r  r  Ú	write_eofr
  rå   )r€   rà   r   ró   rË   rÅ   rÍ   rÎ   rÏ   Úprepare_methr@   s              r8   rý   zRequestHandler.finish_responseõ  s¦  è ø€ ð 	�‰ÔØ�<‰<Ð#Ø�L‰L×%Ñ% eÔ,Ø"ˆDŒNØ×!Ò!Ø,0¯L©L×,BÑ,BÀ4×CUÑCUÓ,VÑ)�˜) TØ%)�Ô"Ø$,ò :‘L�C˜Ø×'Ò'¨1Ñ,Õ'Ø—N‘N×)Ñ)¨3°¨.Õ9ð:ð
 —|‘|Ð+Ð+Ð+ð	(ØŸ<™<ˆLð	Ù˜wÓ'×'Ð'Ø—.‘.Ó"×"Ð"ð
 	�‰˜  zÔ2Ø�Uˆ{Ðøô) ò 	(Øˆ|Ø×"Ñ"Ð#PÕQà×"Ñ"ØIÈ$ÈÐRôô *Ó+ˆCÜØ—z‘z¨#¯*©*¸3¿8¹8ÈSÏ[É[ôˆDð  Ÿ<™<ŠLð	(úð (øØ"ùÜò 	Ø�O‰O˜G T¨:Ô6Ø˜�:Òð	üsm   ‚CGÃD ÃF Ã FÃ!F Ã8FÃ9F Ã=GÄA>FÆGÆFÆGÆF ÆF Æ F?Æ<GÆ>F?Æ?Gr?   rA   c                 óF  — | j                   dk(  r9t        |t        «      r)| j                  j	                  d|j
                  |¬«       n| j                  d|j
                  |¬«       |j                  j                  dkD  rt        d«      ‚d}|t        j                  k(  r×t        j                  j                  › dt        j                  j                  › �}t        j                  j                  }d}| j                  r,t        t         «      5  t#        j$                  «       }ddd«       d	|j&                  j)                  d
d«      v r"|rt+        |«      }d|› d�}d|› d|› d|› d�}d	}n|r|}|dz   |z   }t-        |||¬«      }	|	j/                  «        |	S # 1 sw Y   ŒuxY w)z›Handle errors.

        Returns HTTP response with specific status code. Logs additional
        information. It always closes current connection.
        r   zError handling request from %srö   r   zMResponse is sent already, cannot send another response with the error messagez
text/plainú Nz	text/htmlÚAcceptÚ z<h2>Traceback:</h2>
<pre>z</pre>z<html><head><title>z</title></head><body>
<h1>z</h1>
z
</body></html>
z

)r?   r  Úcontent_type)rJ   r  r   r^   r_   Úremoterí   r  Úoutput_sizer
  r	   ÚINTERNAL_SERVER_ERRORÚvalueÚphraseÚdescriptionr   rÿ   Ú	tracebackÚ
format_excr  ÚgetÚhtml_escaper'   r©   )
r€   rà   r?   r@   rA   ÚctÚtitlerÎ   Útbr   s
             r8   rþ   zRequestHandler.handle_error$  s¨  € ð ×Ñ !Ò#¬
°3¼Ô(Fð
 �K‰K×ÑØ0°'·.±.È3ð õ ð ×ÑØ0°'·.±.È3ð ô ð
 �>‰>×%Ñ%¨Ò)Ü!ð)óð ð
 ˆØ”Z×5Ñ5Ò5Ü!×7Ñ7×=Ñ=Ð>¸aÄ
×@`Ñ@`×@gÑ@gÐ?hÐiˆEÜ×2Ñ2×>Ñ>ˆCØˆBØ�zŠzÜœiÓ(ñ 0Ü"×-Ñ-Ó/�B÷0ð ˜gŸo™o×1Ñ1°(¸BÓ?Ñ?ÙÜ$ R›�BØ6°r°d¸&ÐA�CðØ#˜Wð %*Ø*/¨ð 1Ø˜Ð/ð1ð ð !‘áØ�CØ &™.¨3Ñ.�ä˜v¨GÀ"ÔEˆØ×ÑÔàˆ÷-0ð 0ús   ÄFÆF Úerr_infoc                 ó0   ‡ ‡— dt         dt        fˆˆ fd„}|S )Nrà   rƒ   c              “   óp   •K  — ‰j                  | ‰j                  ‰j                  ‰j                  «      S ­wr–   )rþ   r?   r@   rA   )rà   r1  r€   s    €€r8   Úhandlerz3RequestHandler._make_error_handler.<locals>.handlere  s1   øè ø€ Ø×$Ñ$Ø˜Ÿ™¨(¯,©,¸×8HÑ8Hóð ùs   ƒ36)r&   r(   )r€   r1  r4  s   `` r8   r  z"RequestHandler._make_error_handlerb  s   ù€ ð	¤;ð 	´>ö 	ð
 ˆr7   )g      .@r–   )rƒ   N)rø   NN)=r2   r3   r4   r5   Ú	__slots__r   r%   r   Ú
LOG_FORMATr   rŸ   ÚAbstractEventLoopr|   r  r
   Útyper   rE   rB   ry   rŠ   r   r   r�   Útupler‘   r”   Úpropertyrj   r«   ÚBaseTransportr±   rD   r¸   r   r   rÀ   rÂ   ÚbytesrÒ   rÔ   rÉ   rÚ   rÝ   rÊ   r©   r&   r(   rå   r   rê   rí   rð   r   r  r´   rý   rþ   r>   r  Ú__classcell__)r‚   s   @r8   r)   r)   c   sõ  ø„ ñ%ðN#€IðV $(Ø"Ø&Ø7CØ*Ø!-×!8Ñ!8ØØ!ØØ"Ø $Ø.Ø $Ø()ò'Z)àðZ)ð ×'Ñ'ð	Z)ð !ðZ)ð ðZ)ð ðZ)ð Ð3Ñ4ðZ)ð ðZ)ð ðZ)ð ðZ)ð ðZ)ð ðZ)ð ðZ)ð  ð!Z)ð" ð#Z)ð$ ð%Z)ð& !&õ'Z)ðx
˜#ó 
ð ð
˜XÐ&6Ñ7ò 
ó ð
ð ð
à	ˆu�S˜#˜s CÐ'Ñ(Ñ	(¨5°°c°©?Ñ	:¸TÑ	Aò
ó ð
ð ð
à	ˆu�S˜#˜s CÐ'Ñ(Ñ	(¨5°°c°©?Ñ	:¸TÑ	Aò
ó ð
ð ð' 5ò 'ó ð'ñ0 e¨d¡lð 0¸dó 0ðd"¨×)>Ñ)>ð "À4õ "ð"( =°4Ñ#7ð (¸Dõ (ðF 7;ñ%àð%ð # 2 t 8Ñ,¨tÑ3ð%ð 
ó	%óð/ %ð /¨Dó /ðb&¨tó &óóð"*˜dð * tó *ó"ó"ðPØ"ðPØ.<ðPØDIÈDÁLðPà	óPð+˜sð +¨#ð +°$ó +ð+ 3ð +¨cð +°dó +óð")àð)ð ˜D‘Lð)ð " ; -°¸>Ñ1JÐ"JÑKð	)ð
 
ˆ~˜tÐ#Ñ	$ó)óVS'ðj-Ø"ð-Ø*8ð-ØFKÈdÁlð-à	ˆ~˜tÐ#Ñ	$ó-ðd Ø$(Ø"ñ<àð<ð ð<ð ˜TÑ!ð	<ð
 �t‘ð<ð 
ó<ð|Ø ðà	�;�- ¨>Ñ!:Ð:Ñ	;÷r7   )RrŸ   Úasyncio.streamsr¢   r*  rú   Úcollectionsr   Úcollections.abcr   r   r   Ú
contextlibr   Úhtmlr   r-  Úhttpr	   Úloggingr
   Útypingr   r   r   r   ÚattrÚyarlÚ	propcacher   Úabcr   r   Úbase_protocolr   r   Úhelpersr   r   r   r   r   r   r   r   Úhttp_exceptionsr   rä   r   r   Ústreamsr    r!   Útcp_helpersr"   Úweb_exceptionsr#   r$   Úweb_logr%   Úweb_requestr&   Úweb_responser'   r(   Ú__all__rw   ÚsslÚ
web_serverr-   Ú_RequestFactoryÚ_RequestHandlerÚURLr	  rÿ   r*   r+   r  Úsr>   r9  Ú_MsgTyper)   r6   r7   r8   ú<module>r[     s_  ðÛ Û Û 
Û Û Ý ß 9Ñ 9Ý Ý &Ý Ý ß 5Ó 5ã Û Ý +ç ;ß Dß 5÷÷ õ +ß -ß 0Ý &ß BÝ !Ý $ß 2à
I€ð
 Ð áÛå"ð àØØØØðð ðñ	€ð ˜K˜=¨)°NÑ*CÐCÑD€áØØØØØØØØ	Ø	Ø€D‡H�HˆSƒMó	€ô!˜)ô !ô8˜ô 8ñ +Ó,Ð ð €‡��T $¨dÔ3÷ð ó 4ðð Ð" XÑ-¨|Ð;Ñ<€ôG�\õ Gr7   