+
    PV-j'!  ã                   ó¦   € ^ RI t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIHt ^ RI	H
t
HtHt ^RIHt ^RIHt ^RIHt  ! R R]4      t ! R	 R
]4      tR# )é    N)ÚIterable)ÚCallableÚClassVarÚ
NamedTuple)ÚAbstractAccessLogger)ÚBaseRequest)ÚStreamResponsec                   ó,   a € ] tR t^t o V 3R ltRtV tR# )Ú	KeyMethodc                óx   <€ V ^8„  d   Qh/ S[ S[S[ S[ 3,          ,          ;R&   S[S[S[S[.S[ 3,          ;R&   # )é   ÚkeyÚmethod)ÚstrÚtupler   r   r	   Úfloat)ÚformatÚ__classdict__s   "€Ú`/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/aiohttp/web_log.pyÚ__annotate__ÚKeyMethod.__annotate__   s9   ø‡ ‚ Ù	‰u‘S™#�X�Õ	Ññ á‘k¡>±5Ð9¹3Ð>Õ?Ñ?ò ó    © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__)r   s   @r   r   r      s   ø‡ ‡ „ r   r   c                   ó~  a a€ ] tR t^t oRtRRRRRRRR	R
RRRRRRRRRRRRR/tRt]P                  ! R4      t	]P                  ! R4      t
/ tRtRt]3V3R lV 3R llltV3R lR  lt]V3R! lR" l4       t]V3R# lR$ l4       t]V3R% lR& l4       t]V3R' lR( l4       t]V3R) lR* l4       t]V3R+ lR, l4       t]V3R- lR. l4       t]V3R/ lR0 l4       t]V3R1 lR2 l4       t]V3R3 lR4 l4       t]V3R5 lR6 l4       t]V3R7 lR8 l4       tV3R9 lR: lt]V3R; lR< l4       t V3R= lR> lt!V3R? lt"R@t#Vt$V ;t%# )AÚAccessLoggeraX  Helper object to log access.

Usage:
    log = logging.getLogger("spam")
    log_format = "%a %{User-Agent}i"
    access_logger = AccessLogger(log, log_format)
    access_logger.log(request, response, time)

Format:
    %%  The percent sign
    %a  Remote IP-address (IP-address of proxy if using reverse proxy)
    %t  Time when the request was started to process
    %P  The process ID of the child that serviced the request
    %r  First line of request
    %s  Response status code
    %b  Size of response in bytes, including HTTP headers
    %T  Time taken to serve the request, in seconds
    %Tf Time taken to serve the request, in seconds with floating fraction
        in .06f format
    %D  Time taken to serve the request, in microseconds
    %{FOO}i  request.headers['FOO']
    %{FOO}o  response.headers['FOO']
    %{FOO}e  os.environ['FOO']

ÚaÚremote_addressÚtÚrequest_start_timeÚPÚ
process_idÚrÚfirst_request_lineÚsÚresponse_statusÚbÚresponse_sizeÚTÚrequest_timeÚTfÚrequest_time_fracÚDÚrequest_time_microÚiÚrequest_headerÚoÚresponse_headerz/%a %t "%r" %s %b "%{Referer}i" "%{User-Agent}i"z.%(\{([A-Za-z0-9\-_]+)\}([ioe])|[atPrsbOD]|Tf?)z(%[^s])Ng        c                ó>   <€ V ^8„  d   QhRS[ P                  RS[RR/# )r   ÚloggerÚ
log_formatÚreturnN)ÚloggingÚLoggerr   )r   r   s   "€r   r   ÚAccessLogger.__annotate__E   s'   ø€ ÷ ;ñ ;™wŸ~™~ð ;¹3ð ;ÐPTñ ;r   c                óÜ   <€ \         SV `  WR7       \        P                  P	                  V4      pV'       g%   V P                  V4      pV\        P                  V&   Vw  V n        V n        R# )z‘Initialise the logger.

logger is a logger object to be used for logging.
log_format is a string with apache compatible log format description.

)r;   N)ÚsuperÚ__init__r"   Ú_FORMAT_CACHEÚgetÚcompile_formatÚ_log_formatÚ_methods)Úselfr:   r;   Ú_compiled_formatÚ	__class__s   &&& €r   rB   ÚAccessLogger.__init__E   s_   ø€ ô 	‰Ñ˜ÐÔ7ä'×5Ñ5×9Ñ9¸*ÓEÐßØ#×2Ñ2°:Ó>ÐØ5EŒL×&Ñ& zÑ2à*:Ñ'ˆÔ˜$ž-r   c                óL   <€ V ^8„  d   QhRS[ RS[S[ S[S[,          3,          /# )r   r;   r<   )r   r   Úlistr   )r   r   s   "€r   r   r?   U   s)   ø€ ÷ '#ñ '#©ð '#±±s¹DÁ½OÐ7KÕ1Lñ '#r   c           	     óf  € \        4       pV P                  P                  V4       FÎ  pV^,          R8X  dE   V P                  V^ ,          ,          p\	        \
        RV^ ,          ,          4      p\        WE4      pMhV P                  V^,          ,          V^,          3p\	        \
        RV^,          ,          4      p\        V\        P                  ! WS^,          4      4      pVP                  V4       KÐ  	  V P                  P                  RV4      pV P                  P                  RV4      pW3# )al  Translate log_format into form usable by modulo formatting

All known atoms will be replaced with %s
Also methods for formatting of those atoms will be added to
_methods in appropriate order

For example we have log_format = "%a %t"
This format will be translated to "%s %s"
Also contents of _methods will be
[self._format_a, self._format_t]
These method will be called and results will be passed
to translated string format.

Each _format_* method receive 'args' which is list of arguments
given to self.log

Exceptions are _format_e, _format_i and _format_o methods which
also receive key name (by functools.partial)

Ú z
_format_%sz%sz%\1)rM   Ú	FORMAT_REÚfindallÚLOG_FORMAT_MAPÚgetattrr"   r   Ú	functoolsÚpartialÚappendÚsubÚ
CLEANUP_RE)rH   r;   ÚmethodsÚatomÚformat_key1ÚmÚ
key_methodÚformat_key2s   &&      r   rE   ÚAccessLogger.compile_formatU   sò   € ô. “&ˆà—N‘N×*Ñ*¨:Ö6ˆDØ�A�w˜"Œ}Ø"×1Ñ1°$°qµ'Õ:�ÜœL¨,¸¸a½Õ*@ÓA�Ü& {Ó6‘
à#×2Ñ2°4¸µ7Õ;¸TÀ!½WÐE�ÜœL¨,¸¸a½Õ*@ÓA�Ü& {´I×4EÒ4EÀaÈaÍÓ4QÓR�
à�N‰N˜:Ö&ñ 7ð —^‘^×'Ñ'¨¨zÓ:ˆ
Ø—_‘_×(Ñ(¨°Ó<ˆ
ØÐ"Ð"r   c          
      ó8   <€ V ^8„  d   QhRS[ RS[RS[RS[RS[ /# ©r   r   ÚrequestÚresponseÚtimer<   ©r   r   r	   r   )r   r   s   "€r   r   r?      s5   ø€ ÷ -ñ -Ùð-Ù&ð-Ù2@ð-ÙHMð-á	ñ-r   c                óF   € Vf   R# VP                   P                  V R4      # )Nz(no headers)Ú-©ÚheadersrD   ©r   rb   rc   rd   s   &&&&r   Ú	_format_iÚAccessLogger._format_i~   s%   € ð Š?Ù!ð �‰×"Ñ" 3¨Ó,Ð,r   c          
      ó8   <€ V ^8„  d   QhRS[ RS[RS[RS[RS[ /# ra   re   )r   r   s   "€r   r   r?   ‰   s5   ø€ ÷ .ñ .Ùð.Ù&ð.Ù2@ð.ÙHMð.á	ñ.r   c                ó:   € VP                   P                  V R 4      # )rg   rh   rj   s   &&&&r   Ú	_format_oÚAccessLogger._format_oˆ   s   € ð
 ×Ñ×#Ñ# C¨Ó-Ð-r   c                ó2   <€ V ^8„  d   QhRS[ RS[RS[RS[/# ©r   rb   rc   rd   r<   ©r   r	   r   r   )r   r   s   "€r   r   r?   �   s*   ø€ ÷ -ñ -™;ð -±.ð -Éð -ÑRUñ -r   c                ó6   € V f   R# V P                   pVe   V# R# )Nrg   )Úremote)rb   rc   rd   Úips   &&& r   Ú	_format_aÚAccessLogger._format_a�   s"   € àŠ?ÙØ�^‰^ˆØ’^ˆrÐ,¨Ð,r   c                ó4   <€ V ^8„  d   QhRS[ P                   /# ©r   r<   )Údatetime)r   r   s   "€r   r   r?   —   s   ø€ ÷ 5ñ 5¡× 1Ñ 1ñ 5r   c                óP  € V P                   e%   \        P                  ! 4       V P                  8¼  dÍ   \        P                  ! 4       P
                  p\        P                  ! \        P                  ! VR7      4      ;V n         p\        P                  P                  V4      pV\        P                  ! ^R7      ,           pTP                  VP                  ^8¼  d   ^M^ ^ ^ R7      pVP                  4       V n        V# \        P                  P                  V P                   4      # )N©Úseconds)Úminutes)ÚminuteÚsecondÚmicrosecond)Ú
_cached_tzÚtime_modrd   Ú_cached_tz_expiresÚ	localtimeÚ	tm_gmtoffr{   ÚtimezoneÚ	timedeltaÚnowÚreplacer€   Ú	timestamp)ÚclsÚgmtoffÚtzrŠ   Úds   &    r   Ú_get_local_timeÚAccessLogger._get_local_time–   sÏ   € à�>‰>Ò!¤X§]¢]£_¸×8NÑ8NÔ%NÜ×'Ò'Ó)×3Ñ3ˆFÜ"*×"3Ò"3´H×4FÒ4FÈvÔ4VÓ"WÐWˆCŒN˜Rä×#Ñ#×'Ñ'¨Ó+ˆCà”h×(Ò(°Ô4Õ4ˆAØ—	‘	 q§x¡x°2¤~¡¸1ÀQÐTU�	ÓVˆAØ%&§[¡[£]ˆCÔ"ØˆJä× Ñ ×$Ñ$ S§^¡^Ó4Ð4r   c                ó2   <€ V ^8„  d   QhRS[ RS[RS[RS[/# rr   rs   )r   r   s   "€r   r   r?   ¦   s*   ø€ ÷ =ñ =™;ð =±.ð =Éð =ÑRUñ =r   c                óˆ   € \         P                  4       pV\        P                  ! VR 7      ,
          pVP	                  R4      # )r}   z[%d/%b/%Y:%H:%M:%S %z])r"   r‘   r{   r‰   Ústrftime)rb   rc   rd   rŠ   Ú
start_times   &&&  r   Ú	_format_tÚAccessLogger._format_t¥   s7   € ä×*Ñ*Ó,ˆØœ8×-Ò-°dÔ;Õ;ˆ
Ø×"Ñ"Ð#;Ó<Ð<r   c                ó2   <€ V ^8„  d   QhRS[ RS[RS[RS[/# rr   rs   )r   r   s   "€r   r   r?   ¬   ó*   ø€ ÷ $ñ $™;ð $±.ð $Éð $ÑRUñ $r   c                ó:   € R \         P                  ! 4       ,          # )z<%s>)ÚosÚgetpid©rb   rc   rd   s   &&&r   Ú	_format_PÚAccessLogger._format_P«   s   € àœŸ	š	›Õ#Ð#r   c                ó2   <€ V ^8„  d   QhRS[ RS[RS[RS[/# rr   rs   )r   r   s   "€r   r   r?   °   s0   ø€ ÷ jñ j™;ð j±.ð jÉð jÑRUñ jr   c                ó    € V f   R# V P                    RV P                   RV P                  P                   RV P                  P                   2# )Nrg   Ú z HTTP/Ú.)r   Úpath_qsÚversionÚmajorÚminorrž   s   &&&r   Ú	_format_rÚAccessLogger._format_r¯   sK   € àŠ?ÙØ—.‘.Ð!  7§?¡?Ð"3°6¸'¿/¹/×:OÑ:OÐ9PÐPQÐRY×RaÑRa×RgÑRgÐQhÐiÐir   c                ó2   <€ V ^8„  d   QhRS[ RS[RS[RS[/# rr   ©r   r	   r   Úint)r   r   s   "€r   r   r?   ¶   s*   ø€ ÷ ñ ™;ð ±.ð Éð ÑRUñ r   c                ó   € VP                   # ©N)Ústatusrž   s   &&&r   Ú	_format_sÚAccessLogger._format_sµ   s   € à�‰Ðr   c                ó2   <€ V ^8„  d   QhRS[ RS[RS[RS[/# rr   r¬   )r   r   s   "€r   r   r?   º   rš   r   c                ó   € VP                   # r¯   )Úbody_lengthrž   s   &&&r   Ú	_format_bÚAccessLogger._format_b¹   s   € à×#Ñ#Ð#r   c                ó2   <€ V ^8„  d   QhRS[ RS[RS[RS[/# rr   rs   )r   r   s   "€r   r   r?   ¾   s*   ø€ ÷  ñ  ™;ð  ±.ð  Éð  ÑRUñ  r   c                ó*   € \        \        V4      4      # r¯   ©r   Úroundrž   s   &&&r   Ú	_format_TÚAccessLogger._format_T½   s   € ä”5˜“;ÓÐr   c                ó2   <€ V ^8„  d   QhRS[ RS[RS[RS[/# rr   rs   )r   r   s   "€r   r   r?   Â   s*   ø€ ÷ ñ ™Kð ±>ð Éð ÑSVñ r   c                ó   € R V,          # )z%06fr   rž   s   &&&r   Ú
_format_TfÚAccessLogger._format_TfÁ   s   € à˜�}Ðr   c                ó2   <€ V ^8„  d   QhRS[ RS[RS[RS[/# rr   rs   )r   r   s   "€r   r   r?   Æ   s*   ø€ ÷ *ñ *™;ð *±.ð *Éð *ÑRUñ *r   c                ó8   € \        \        VR ,          4      4      # )i@B rº   rž   s   &&&r   Ú	_format_DÚAccessLogger._format_DÅ   s   € ä”5˜ �Ó(Ó)Ð)r   c                ó~   <€ V ^8„  d   QhRS[ RS[RS[RS[S[S[S[S[S[3,          ,          S[3,          ,          /# rr   )r   r	   r   r   r   r   )r   r   s   "€r   r   r?   É   sO   ø€ ÷ Yñ YÙ"ðYÙ.<ðYÙDIðYá	‘%™™e¡C© H�oÕ-©sÐ2Õ3Õ	4ñYr   c           
     ó^   € V P                    UUu. uF  w  rEWE! WV4      3NK  	  upp# u uppi r¯   )rG   )rH   rb   rc   rd   r   r   s   &&&&  r   Ú_format_lineÚAccessLogger._format_lineÉ   s0   € ð KOÏ-Ê-ÔXÉ-¹;¸3��f˜W°Ó5Ó6É-ÒXÐXùÓXs   �)c                ó    <€ V ^8„  d   QhRS[ /# rz   )Úbool)r   r   s   "€r   r   r?   Ï   s   ø€ ÷ 6ñ 6™ñ 6r   c                óT   € V P                   P                  \        P                  4      # )zCheck if logger is enabled.)r:   ÚisEnabledForr=   ÚINFO)rH   s   &r   ÚenabledÚAccessLogger.enabledÎ   s   € ð �{‰{×'Ñ'¬¯©Ó5Ð5r   c                ó0   <€ V ^8„  d   QhRS[ RS[RS[RR/# )r   rb   rc   rd   r<   N)r   r	   r   )r   r   s   "€r   r   r?   Ô   s*   ø€ ÷ 6ñ 6™;ð 6±.ð 6Éð 6ÐRVñ 6r   c                óÈ  €  V P                  WV4      p\        4       p\        4       pV FP  w  rxVP                  V4       \	        V\
        4      '       d   W†V&   K2  Vw  ršVP                  V	/ 4      pW‹V
&   W¶V	&   KR  	  V P                  P                  V P                  \        V4      ,          VR 7       R#   \         d     T P                  P                  R4        R# i ; i))ÚextrazError in loggingN)rÈ   rM   ÚdictrV   Ú
isinstancer   rD   r:   ÚinforF   r   Ú	ExceptionÚ	exception)rH   rb   rc   rd   Úfmt_infoÚvaluesrÓ   r   ÚvalueÚk1Úk2Údcts   &&&&        r   ÚlogÚAccessLogger.logÔ   sÂ   € ð	6Ø×(Ñ(¨¸DÓAˆHä“VˆFÜ59³VˆEÛ&‘
�Ø—‘˜eÔ$ä˜c¤3×'Ò'Ø!&˜#“Jà ‘F�BØ*/¯)©)°B¸Ó*;�CØ#˜‘GØ #˜"“Iñ 'ð �K‰K×Ñ˜T×-Ñ-´°f³Õ=ÀUÐÖKøÜô 	6Ø�K‰K×!Ñ!Ð"4×5ð	6ús   ‚B3B7 Â7&C!Ã C!c                ó¼   <€ V ^8„  d   Qh/ S[ S[S[S[S[S[,          3,          3,          ;R&   S[S[P                  R,          ,          ;R&   S[S[,          ;R&   # )r   rC   Nrƒ   r…   )	rÔ   r   r   rM   r   r   r{   rˆ   r   )r   r   s   "€r   r   r?      s^   ø‡ ‚ ñX ™™U¡3©©Y­Ð#7Õ8Ð8Õ9Ñ>ñY ñ\ ™×*Ñ*¨TÕ1Õ2Ñ9ñ] ñ^ !¡�Ñ-ò_ r   )rF   rG   )&r   r   r   r   Ú__doc__rR   Ú
LOG_FORMATÚreÚcompilerP   rX   rC   rƒ   r…   rB   rE   Ústaticmethodrk   ro   rw   Úclassmethodr‘   r—   rŸ   r©   r±   r¶   r¼   rÀ   rÄ   rÈ   ÚpropertyrÏ   rß   r   r   r    Ú__classcell__)rJ   r   s   @@r   r"   r"      sÃ  ù‡ € ñð6 	ÐØÐ!Øˆ\ØÐ!ØÐØˆ_Øˆ^ØÐ!ØÐ!ØÐØÐð€Nð C€JØ—
’
ÐLÓM€IØ—’˜JÓ'€JØ<>€Mà59€JØ*-ÐàAK÷ ;õ ;÷ '#ð '#ðR ÷-ó ð-ð ÷.ó ð.ð ÷-ó ð-ð ÷5ó ð5ð ÷=ó ð=ð
 ÷$ó ð$ð ÷jó ðjð
 ÷ó ðð ÷$ó ð$ð ÷ ó ð ð ÷ó ðð ÷*ó ð*÷Yð Yð
 ÷6ó ð6÷
6ð 6÷A … r   r"   )r{   rT   r=   rœ   rä   rd   r„   Úcollections.abcr   Útypingr   r   r   Úabcr   Úweb_requestr   Úweb_responser	   r   r"   r   r   r   Ú<module>rï      sF   ðÛ Û Û Û 	Û 	Û Ý $ß 1Ñ 1å %Ý $Ý (ô@�
ô @ô
S6Ð'ö S6r   