
    rp0jty                        S SK r S SKr S SKrS SKrS SKrS SKJr  S SKJrJ	r	J
r
  S SKJr  S SKJr  S SKJr  S SKJr  S SKJrJrJrJr  S SKrS SKrS S	KJr  S
SKJrJr  S
SK J!r!J"r"  S
SK#J$r$J%r%  S
SKJ&r&J'r'J(r(J)r)J*r*J+r+  S
SK,J-r-  S
SK.J/r/J0r0  S
SK1J2r2J3r3  S
SK4J5r5  S
SK6J7r7J8r8  S
SK9J:r:  S
SK;J<r<  S
SK=J>r>J?r?  Sr@SrA\(       a
  S SKBrBS
SKCJDrD  \	\)\3S\S/\<4   rE\	\</\\?   4   rF\)" SS\(0 0 SSSS\R                  " S5      5
      rH " S  S!\I5      rJ " S" S#\I5      rK\K" 5       rL\R                  " SSSS$9 " S% S&5      5       rN\O\)\N-  \34   rP " S' S\"5      rQg)(    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                       \ rS rSrSrSrg)r*   N   zPayload parsing error. N__name__
__module____qualname____firstlineno____doc____static_attributes__r2       N/home/wildlama/miniconda3/lib/python3.13/site-packages/aiohttp/web_protocol.pyr*   r*   N   s     r:   r*   c                       \ rS rSrSrSrg)r+   R   z-Payload was accessed after response was sent.r2   Nr3   r2   r:   r;   r+   r+   R   s    7r:   r+   )auto_attribsfrozenslotsc                   4    \ rS rSr% \\S'   \\S'   \\S'   Srg)_ErrInfoY   statusexcmessager2   N)	r4   r5   r6   r7   int__annotations__BaseExceptionstrr9   r2   r:   r;   rB   rB   Y   s    K	Lr:   rB   c            !         ^  \ rS rSrSrSrSS\\\\R                  SSSSS	\
SS
S.SSS\R                  S\S\S\S\\   S\S\S\S\S\S\S\S\S\S\4 U 4S jjjrS\4S jr\S\S    4S! j5       r\S\\\\\\4   -  \\\4   -  S"-  4S# j5       r\S\\\\\\4   -  \\\4   -  S"-  4S$ j5       r\S\4S% j5       rSNS&\S"-  SS"4S' jjrS(\R>                  SS"4U 4S) jjr S*\!S"-  SS"4U 4S+ jjr" SOS,\#S-\$/ S"4   S"-  SS"4S. jjr%SPS/ jr&S0\'SS"4S1 jr(S\4S2 jr)SPS3 jr*SPS4 jr+S5\SS"4S6 jr,SPS7 jr-SPS8 jr.S9\/S:\0S;\S"-  SS"4S< jr1S=\2S>\2SS"4S? jr3S=\2S>\2SS"4S@ jr4SPSA jr5S9\/SB\S"-  SC\$\//\6\0   4   S\\0\4   4SD jr7SPSE jr8S9\/SF\0SB\S"-  S\\0\4   4SG jr9   SQS9\/SH\S*\!S"-  SI\S"-  S\04
SJ jjr:SK\;S\$\//\6\0   4   4SL jr<SMr=U =r>$ )Rr)   c   a  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"   rd   access_log_classrf   access_log_formatre   rO   rN   rM   lingering_timeread_bufsizeauto_decompresstimeout_ceil_thresholdmanagerr-   looprp   r"   rd   rq   rf   rr   re   rO   rN   rM   rs   rt   ru   rv   c                0  > [         U l        [         S-  U l        SU l        [	        U UUU
UU[
        U[         S9	n[        TU ]  UU5        SU l        SU l	        S U l
        Xl        UR                  U l        UR                  U l        Xl        Xl        Xl        X@l        SU l        S U l        X0l        [/        U5      U l        [3        5       U l        SU l        S U l        S U l        S U l        S U l        S U l         SU l!         [/        U5      U l!        XPl$        Xl%        Xpl&        U(       a)  U" Xx5      U l'        U RN                  RP                  U l)        OS U l'        SU l)        SU l*        SU l+        SU l,        0 U l-        g ! [D        [F        4 a     Nf = f)N   F)rO   rM   rN   payload_exceptionru   max_msg_queue_sizer   g        r:   ro   ).MAX_MSG_QUEUE_SIZEr[   r\   r]   r   r*   super__init__rP   rQ   ri   rR   request_handlerrS   request_factoryrT   rO   rN   rM   rU   rV   rW   rX   floatrY   r   rZ   r^   rc   r`   r_   ra   rb   rj   	TypeError
ValueErrorrd   re   rf   r   enabledrl   rg   rh   rk   rm   )selfrw   rx   rp   r"   rd   rq   rf   rr   re   rO   rN   rM   rs   rt   ru   rv   parser	__class__s                     r;   r   RequestHandler.__init__   s   * $6  '9A&=# "'"')#1+1

 	v&  48'.8?8O8O8?8O8O*&,+*-'8<"3$^4*/' <@48<@8<$(./$	+01G+HD( 
$>N?D %)$6$6$>$>D!!%D$)D!!$)!&(% :& 		s   F FFreturnc                 t    SR                  U R                  R                  U R                  b  S5      $ S5      $ )Nz<{} {}>	connecteddisconnected)formatr   r4   	transportr   s    r;   __repr__RequestHandler.__repr__  s;    NN##>>5K
 	
;I
 	
r:   zssl.SSLContextc                 V    U R                   c  S$ U R                   R                  S5      $ )zReturn SSLContext if available.N
sslcontextr   get_extra_infor   s    r;   ssl_contextRequestHandler.ssl_context  s1    
 ~~% 	
 ..|<	
r:   Nc                 V    U R                   c  S$ U R                   R                  S5      $ )zReturn peername if available.Npeernamer   r   s    r;   r   RequestHandler.peername  1     ~~% 	
 ..z:	
r:   c                 V    U R                   c  S$ U R                   R                  S5      $ )zReturn sockname if available.Nsocknamer   r   s    r;   r   RequestHandler.sockname&  r   r:   c                     U R                   $ N)rX   r   s    r;   rp    RequestHandler.keepalive_timeout1  s    &&&r:   timeoutc                 j  #    SU l         U R                  b  U R                  R                  5         U R                  (       aX  U R                  R                  5       U l         [        U5       ISh  vN   U R                  I Sh  vN   SSS5      ISh  vN    [        U5       ISh  vN   U R                  b.  U R                  R!                  [        R                  " 5       5        U R"                  bG  U R"                  R%                  5       (       d(  [        R&                  " U R"                  5      I Sh  vN   SSS5      ISh  vN   U R"                  b  U R"                  R                  5         U R)                  5         g GN GN N! , ISh  vN  (       d  f       GN= f! [        R                  [        R                  4 aQ    SU l        [        R                  S:  a2  [        R                  " 5       =n(       a  UR                  5       (       a  e  GNf = f GNw N N! , ISh  vN  (       d  f       N= f! [        R                  [        R                  4 aJ    [        R                  S:  a2  [        R                  " 5       =n(       a  UR                  5       (       a  e  GNaf = f7f)zDo worker process exit preparations.

We need to clean up everything and stop accepting requests.
It is especially important for keep-alive connections.
TN      )rh   rW   cancelrk   _loopcreate_futurer_   r   asyncioCancelledErrorTimeoutErrorsysversion_infocurrent_task
cancellingri   _cancelra   doneshieldforce_close)r   r   tasks      r;   shutdownRequestHandler.shutdown5  s     !!!-""))+ $$ $(::#;#;#=D 
'00.... 10	#G,,((4))11'2H2H2JK%%1$:L:L:Q:Q:S:S!..););<<< -, )%%'= 1. 1000**G,@,@A '+$$$/!(!5!5!777)) -
 = -,,, &&(<(<= 	  G+$1133T3OO%%	s  AJ3"F) 1F2F) 5FF	F
F) FF) I *H!+I .BH(9H$:H(>I 	H&
I 8J3F) 	FF) F&FF&!F) $J3&F) )A1HJ3HJ3!I $H(&I (H?.H1/H?;I >J3?I A*J0,J3/J00J3r   c                   > [         TU ]  U5        [        [        R                  U5      nU R
                  (       a  [        U5        U R                  c   eU R                  R                  X5        U R                  n[        R                  S:  a%  [        R                  " U R                  5       USS9nOUR                  U R                  5       5      nX@l        g )Nr      Trx   eager_start)r~   connection_mader   r   	TransportrU   r"   rR   r   r   r   Taskstartcreate_taskra   )r   r   real_transportrx   r   r   s        r;   r   RequestHandler.connection_madeg  s    	*g//;.)}}(((%%d;zzw&<<

4TJD##DJJL1D!r:   rE   c                 |  > U R                   c  g U R                   R                  X5        U R                   R                  nU R                  5         [        TU ]  U5        S U l         S U l        S U l        S U l        U R                  b  U R                  R                  5         U R                  b)  Uc  [        S5      nU R                  R                  U5        U(       a'  U R                  b  U R                  R                  5         S U l        U R                  b"  U R                  R                  5         S U l        g g )NzConnection lost)rR   connection_losthandler_cancellationr   r~   rT   rS   _parserrW   r   ri   ConnectionResetErrorr   ra   rb   feed_eof)r   rE   r   r   s      r;   r   RequestHandler.connection_lostx  s   == %%d0  $}}AA$ $ $!!-""))+  ,{*+<=!!))#.D$6$6$B%%'!+  ))+#'D  ,r:   r   data_received_cbc                     U R                   b   eXl         X l        U R                  (       a-  U R                   R                  U R                  5        SU l        g g )Nr:   )rb   rc   r^   	feed_data)r   r   r   s      r;   
set_parserRequestHandler.set_parser  sR    
 ##+++%!1  **4+=+=>!$D r:   c                     g r   r2   r   s    r;   eof_receivedRequestHandler.eof_received  s    r:   datac                 0   U R                   (       d  U R                  (       a  g U R                  Gc  U R                  (       Gd  U R                  c   e U R                  R                  U5      u  p#nU H6  u  pgU =R                  S-  sl
        U R                  R                  Xg45        M8     U R                  nU(       a)  Ub&  UR                  5       (       d  UR                  S 5        U R                   (       d3  [#        U R                  5      U R$                  :  a  U R'                  5         X0l        U(       a  U(       a  X@l        g g g U R                  c.  U R                  (       a  U(       a  U =R(                  U-  sl        g U(       aS  U R*                  b  U R+                  5         U R                  R                  U5      u  pU	(       a  U R-                  5         g g g ! [         a*  n[        SXUR                  S9[        4/nSnSn S nAGNS nAff = f)Ni  )rD   rE   rF   Fr:   r   )rh   rg   rb   	_upgradedr   r   r   rB   rF   r    rP   rZ   appendr`   r   
set_resultr]   lenr[   _pause_msg_queue_readingr^   rc   close)
r   r   messagesupgradedtailrE   msgpayloadwaitereofs
             r;   data_receivedRequestHandler.data_received  s    '<<++++/<<+A+A$+G(D !)##q(#%%sn5 !) \\FF.v{{}}!!$'
 **'4+C+CC--/%ND%)" !x !!)dnn$& %%1&&(,,66t<IC

 	 C ' Sc;;GW !s   G! !
H+HHc                     U R                   $ r   )r]   r   s    r;   _reading_paused_for_msg_queue,RequestHandler._reading_paused_for_msg_queue  s    %%%r:   c                     SU l         U R                  b   U R                  R                  5         g g ! [         a     g f = f)NT)r]   r   pause_readingr   r   s    r;   r   'RequestHandler._pause_msg_queue_reading  sD    !%>>%,,. & /  s   2 
??c                 4   U R                   (       d5  U R                  S5        [        U R                  5      U R                  :  a  g SU l        U R                  (       d*  U R                  b   U R                  R                  5         g g g ! [         a     g f = f)Nr:   F)
r   r   r   rZ   r[   r]   _reading_pausedr   resume_readingr   r   s    r;   _resume_msg_queue_reading(RequestHandler._resume_msg_queue_reading  s    ~~ s#4>>"d&>&>>!&##(B--/ )C# /  s   -B
 

BBvalc                 v    Xl         U R                  (       a"  U R                  R                  5         SU l        gg)z=Set keep-alive connection mode.

:param bool val: new state.
N)rQ   rW   r   )r   r   s     r;   
keep_aliveRequestHandler.keep_alive  s1    
 !!""))+%)D" "r:   c                 j    SU l         U R                  (       a  U R                  R                  5         gg)zwClose connection.

Stop accepting new pipelining messages and close
connection when handlers done processing messages.
TN)rg   r`   r   r   s    r;   r   RequestHandler.close  s'     <<LL! r:   c                     SU l         U R                  (       a  U R                  R                  5         U R                  b"  U R                  R	                  5         SU l        gg)zForcefully close connection.TN)rh   r`   r   r   r   r   s    r;   r   RequestHandler.force_close  sG     <<LL!>>%NN  "!DN &r:   requestresponsetimec                     U R                   (       aV  U R                  bH  [        (       a  Uc   eU R                  R                  XU R                  R                  5       U-
  5        g g g r   )rl   r   r   logr   r   )r   r   r   r   s       r;   
log_accessRequestHandler.log_access  sX       T%7%7%C}'''""7djjoo6G$6NO &D r:   argskwc                 `    U R                   (       a  U R                  R                   " U0 UD6  g g r   )re   rd   r   r   r   s      r;   	log_debugRequestHandler.log_debug  s%    ::KKt*r* r:   c                 <    U R                   R                  " U0 UD6  g r   )rd   	exceptionr  s      r;   log_exceptionRequestHandler.log_exception!  s    t*r*r:   c                 x   S U l         U R                  (       d  U R                  (       d  g U R                  nUR	                  5       nU R
                  nX#:  a!  UR                  X0R                  5      U l         g U R                  (       a1  U R                  R                  5       (       d  U R                  5         g g g r   )rW   rh   rQ   r   r   rV   call_at_process_keepaliver`   r   r   )r   rx   now
close_times       r;   r  !RequestHandler._process_keepalive$  s    !%DOOzziik44
%)\\*>U>U%VD" << 1 1 3 3 !4<r:   
start_timer   c                   #    SU l           Xl        U" U5      I S h  vN nS U l         [        USS5      (       a  [        R                  " S[
        5        U R                  XU5      I S h  vN u  pESU l         U R                  b  U R                  R                  S 5        XE4$  N! S U l        f = f NF! [         a)  nUnU R                  XU5      I S h  vN  u  pE S nANpS nAf[        R                   a    e [        R                   aI  nU R                  SUS9  U R                  US5      nU R                  XU5      I S h  vN  u  pE S nANS nAf[         a;  nU R                  USU5      nU R                  XU5      I S h  vN  u  pE S nAGN"S nAff = f! SU l         U R                  b  U R                  R                  S 5        f f = f7f)	NT__http_exception__Fzlreturning HTTPException object is deprecated (#2415) and will be removed, please raise the exception insteadzRequest handler timed out.exc_infoi    )rk   ri   getattrwarningswarnDeprecationWarningfinish_responser#   r   r   r   r  handle_error	Exceptionr_   r   )r   r   r  r   respresetrE   s          r;   _handle_requestRequestHandler._handle_request5  s     %)! 	6-(/%,W55(,% t15999 '	 !% 4 4WJ OOKD(-D%##/$$//5{? 6(,%. P-  	PD $ 4 4WJ OOOKD%%% 	## 	PNN7#NF$$Wc2D $ 4 4WJ OOOKD% 	P$$Wc37D $ 4 4WJ OOOKD%	P ).D%##/$$//5 0s   GB' B%B' B5 AF ,B3-F 32G%B' '	B00B5 3F 5
F?C#CC#F #+F7EEEF F(FF
FF FF 2GGc           	        #    U R                   nU R                  nUc   eU R                  nSnU R                  c   eU R                  c   eU R
                  (       Gd9  U R                  (       d1   UR                  5       U l        U R                  I Sh  vN   SU l        U R                  R                  5       u  pVU R                  b  U R                  R                  5         U R                  (       a3  [        U R                  5      U R                  ::  a  U R                  5         U R                   (       a  UR#                  5       OSnU=R$                  S-  sl        ['        X5      n[)        U[*        5      (       a  U R-                  U5      n	[.        nOU R                  n	U R                  UUU UU R0                  =(       d    [2        R4                  " U5      5      n
 U R7                  XU	5      n[8        R:                  S:  a  [2        R<                  " XSS9nOUR?                  U5      n UI Sh  vN u  pMAU(       a>  U RC                  S5         SU
l"        U RF                  Gc.  UGb*  U RC                  S5        GO[I        URJ                  5      U l&        URO                  5       (       Gd  U RP                  nU R
                  (       d  U(       a  U RC                  S	U5        UR#                  5       nX-   n URO                  5       (       dr  UU:  al  [S        UU-
  5       ISh  vN   URU                  5       I Sh  vN   SSS5      ISh  vN   UR#                  5       nURO                  5       (       d  UU:  a  Ml  URO                  5       (       d2  U R
                  (       d!  U RC                  S5        U R]                  5         UR_                  [`        5        SU
l"        U RF                  c  Ub  U RC                  S5        U RL                  (       ak  U Rj                  (       dZ  U R
                  (       dI  UR#                  5       U-   nUU l6        U Rn                  c!  URq                  UU Rr                  5      U l7        OOU R
                  (       d  GM9  U R
                  (       d0  SU l        U RF                  b  U RF                  R]                  5         ggg GNE! SU l        f = f GN! [@         aA    U RC                  S5         SU
l"        U RF                  b  M  Uc  M  U RC                  S5        M  f = f GN GN GN! , ISh  vN  (       d  f       GN= f! [2        RV                  [2        RX                  4 aJ    [8        R:                  S
:  a2  [2        R4                  " 5       =n(       a  UR[                  5       (       a  e  GNHf = f! [2        RV                   a#    U RC                  S5        U Rc                  5         e [d         a+  nU Rg                  SUS9  U Rc                  5          SnAGNUSnAf[h         a    U Rc                  5         e f = f! SU
l"        U RF                  c  Ub  U RC                  S5        f f f = f7f)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   rR   rX   rT   rS   rh   rZ   r   r`   popleftr   message_consumedr]   r   r\   r   rl   r   requests_countr   
isinstancerB   _make_error_handlerERRORra   r   r   r  r   r   r   r   ConnectionErrorr  _taskr   boolr   rQ   is_eofrY   r   readanyr   r   r   r   set_exception_PAYLOAD_ACCESS_ERRORr   r  r  rI   rg   rV   rW   r
  r  )r   rx   rw   rp   r  rF   r   r   writerr   r   coror   r  rs   r  end_ttrE   r  s                       r;   r   RequestHandler.start`  sH     zz--""" 33$$000$$000###>>(#'#5#5#7DL,,&&#'DL#~~557G ||'--/&&'4+F+FF..0 $(#8#8DIIKdE""a'"!$-F'8,,"&":":7"C"&"7"7
 ++""@g&:&:4&@GCN++GOL##w."<<TJD++D1D(,*KD NN#MN` !%>>)d.>NN#LM_ #'t"7 ~~''%)%9%9N,,E~ #iik # 4&&-nn&6&63;+7+D+D*1//*;$;$; ,E+D '+iik	 '.nn&6&63; #>>++D4E4E'=>

%%&;< !%>>)d.>NN#LMt{{4;L;L!YY[+<<
2</))1-1\\"D$;$;.D* y ###~   !%D~~)$$& * !u '#'DL^ #-& NN#KLl !%>>)d.>NN#LMu4 ,E$; ,E+D+D+D !( 6 68L8LM & # 0 0G ;*1*>*>*@%@Q%@$%LLNN %& )) GH  " #""#83"G  ""    " !%>>)d.>NN#LM /?)sQ  A-Z0$S SS EZ AW .S+ 3S(4S+ :W Z)Z-Z A:W ;-U (T9)U ,U T<UU T?/U AW B6ZAZS 	S%%Z(S+ +T6W ZZ"Z5T66W 9U <U?U UU	UU A*WW 
WW ?Y X3-Y 3YY ,ZZr  c                   #    UR                  5         U R                  b  U R                  R                  S5        SU l        U R                  (       ay  U R                  R                  U R                  5      u  pEnX`l        U H6  u  pxU =R                  S-  sl        U R                  R                  Xx45        M8     U R                  b   e UR                  n	 U	" U5      I Sh  vN   UR'                  5       I Sh  vN   U R+                  XU5        US4$ ! [         aw    Uc  U R                  S5        OU R                  SU< 35        [        5       n
[        U
R                  U
R                   U
R"                  U
R$                  S9nUR                  n	 Nf = f N N! [(         a    U R+                  XU5        US4s $ f = f7f)zPrepare 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 )rD   reasontextheadersT)_finishr   set_upgradedr   r^   r   rP   rZ   r   r`   prepareAttributeErrorr  r$   r'   rD   r4  r5  r6  	write_eofr'  r   )r   r   r  r  r   r   r   r   r   prepare_methrE   s              r;   r  RequestHandler.finish_response  s     	<<#LL%%e,"DN!!,0LL,B,B4CUCU,V)T%)"$,LC''1,'NN))3.9 %-
 ||+++	(<<L	w'''.."""
 	z2U{)  	(|""#PQ""I$R *+Czz#**388S[[D  <<L	( (" 	OOG:6:	sm   C
GD F  %F&F  =F>F  GA>FGFGF  F    G GGGrD   rF   c                 p   U R                   S:X  a;  [        U[        5      (       a&  U R                  R	                  SUR
                  US9  OU R                  SUR
                  US9  UR                  R                  S:  a  [        S5      eSnU[        R                  :X  a  [        R                  R                   S[        R                  R                   3n[        R                  R                  nSnU R                  (       a-  [        [         5         ["        R$                  " 5       nSSS5        S	UR&                  R)                  S
S5      ;   a'  U(       a  [+        U5      nSU S3nSU SU SU S3nS	nOU(       a  UnUS-   U-   n[-        X$US9n	U	R/                  5         U	$ ! , (       d  f       N= f)zHandle 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

)rD   r5  content_type)rP   r$  r   rd   re   remoter  r.  output_sizer'  r	   INTERNAL_SERVER_ERRORvaluephrasedescriptionr   r  	traceback
format_excr6  gethtml_escaper'   r   )
r   r   rD   rE   rF   cttitler   tbr  s
             r;   r  RequestHandler.handle_error$  s    !#
3(F(F
 KK0'..3   0'..3  
 >>%%)!) 
 Z555!77==>a
@`@`@g@g?hiE22>>CBzzi("--/B ) goo11(B??$RB6rd&AC#W %**/ 1/1  !C&.3.v"E- )(s   F''
F5err_infoc                 4   ^ ^ S[         S[        4UU 4S jjnU$ )Nr   r   c                 p   >#    TR                  U TR                  TR                  TR                  5      $ 7fr   )r  rD   rE   rF   )r   rQ  r   s    r;   handler3RequestHandler._make_error_handler.<locals>.handlere  s0     $$(,,8H8H s   36)r&   r(   )r   rQ  rT  s   `` r;   r%  "RequestHandler._make_error_handlerb  s"    	; 	> 	 	
 r:   )%rm   rg   ri   rc   rh   r_   rQ   rW   rX   rY   rl   rR   r[   r^   rZ   r]   r\   rV   r   rb   rP   rT   rS   rk   ra   rU   rj   r   r`   rf   r   re   rd   rM   rN   rO   r   )g      .@r   )r   N)r  NN)?r4   r5   r6   r7   r8   	__slots__r   r%   r   
LOG_FORMATr   r   AbstractEventLoopr   r)  r
   typer   rJ   rG   r   r   r   r   r   tupler   r   propertyrp   r   BaseTransportr   rI   r   r   r   r   r   bytesr   r   r   r   r   r   r   r&   r(   r   r   r  r  r  r   r  r   r  r  rB   r%  r9   __classcell__)r   s   @r;   r)   r)   c   s    %N#IV $("&7C*!-!8!8!" $. $()'Z)Z) ''	Z) !Z) Z) Z) 34Z) Z) Z) Z) Z) Z) Z)  !Z)" #Z)$ %Z)& !&'Z) Z)x
# 
 
X&67 
 
 
	uS#sC'(	(5c?	:T	A
 
 
	uS#sC'(	(5c?	:T	A
 
 '5 ' '0edl 0d 0d")>)> "4 ""(=4#7 (D (F 7;%% #2t8,t3% 
	%/% /D /b&t &"*d *t *""P"P.<PDIDLP	P+s +# +$ ++3 +c +d +")) DL) ";->1J"JK	)
 
~t#	$)VS'j-"-*8-FKdl-	~t#	$-d $("<< < T!	<
 t< 
<| 	;->!::	; r:   )Rr   asyncio.streamsr   rI  r  collectionsr   collections.abcr   r   r   
contextlibr   htmlr   rL  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__r}   ssl
web_serverr-   _RequestFactory_RequestHandlerURLr&  r  r*   r+   r-  srB   r[  _MsgTyper)   r2   r:   r;   <module>r}     s[     
    9 9  &   5 5   + ; D 5  + - 0 & B ! $ 2
I
  "  	 K=)N*CCD		HHSM	!) !8 8 +,  T$d3  4 "X-|;<G\ Gr:   