Ë
    8ø»jÝ  ã            
      ó
  — d dl m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mZ e	rd dlmZ d dlmZ eZej+                  d«      d    Z	  ej.                  e«      Z	  G d	„ d
e«      Z e edd¬«       edd¬«       edd¬«       edd¬«       edd¬«      ¬«      Z G d„ d«      Z G d„ de«      Z G d„ dej<                  «      Zdd„Z  G d„ dejB                  «      Z"dd„Z#ejI                   e"«       «       y)é    )ÚannotationsN)Ú
ContextVar)ÚTYPE_CHECKINGÚAnyÚ
NamedTuple)ÚForeÚStyle)ÚCallable)ÚResourceClientBaseú.c                  óD   — e Zd ZU dZded<   ded<   ded<   ded<   ded<   y	)
Ú
LogContextz\Request context details for logging (attempt, client method, HTTP method, resource ID, URL).zContextVar[int | None]ÚattemptzContextVar[str | None]Úclient_methodÚmethodÚresource_idÚurlN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__© ó    úL/var/www/html/GAP/venv/lib/python3.12/site-packages/apify_client/_logging.pyr   r      s#   … Ùfà#Ó#Ø)Ó)Ø"Ó"Ø'Ó'Ø	Ôr   r   r   )Údefaultr   r   r   r   )r   r   r   r   r   c                  ó:   — e Zd ZdZdd„Zej                  dœdd„Zy)Ú
LoggerOncea  Emits each log message at most once, keyed by an explicit string.

    Useful for diagnostic warnings that would otherwise spam the log when the same condition recurs (per-request
    misconfiguration warnings, repeated fallback paths, etc.). Deduplication scope follows the lifetime of the
    instance - a module-level instance gives process-wide dedup; an attribute on a class gives per-instance dedup.

    Safe to call from multiple threads, since the sync client can be used from several threads at once.
    c                ób   — || _         t        «       | _        t        j                  «       | _        y ©N)Ú_loggerÚsetÚ_seenÚ	threadingÚLockÚ_lock)ÚselfÚloggers     r   Ú__init__zLoggerOnce.__init__8   s    € ØˆŒÜ"›uˆŒ
Ü—^‘^Ó%ˆ�
r   )Úlevelc               óä   — | j                   5  || j                  v r
	 ddd«       y| j                  j                  |«       ddd«       | j                  j	                  ||«       y# 1 sw Y   Œ&xY w)aU  Log `message` at `level` the first time `key` is seen on this instance; later calls are no-ops.

        Args:
            message: The message to log.
            key: Deduplication key. Two calls with the same key emit at most once.
            level: Standard `logging` level (e.g. `logging.WARNING`). Defaults to `logging.INFO`.
        N)r&   r#   Úaddr!   Úlog)r'   ÚmessageÚkeyr*   s       r   r-   zLoggerOnce.log=   sa   € ð �Z‰Zñ 	 Ø�d—j‘jÑ Ø÷	 ð 	 ð �J‰J�N‰N˜3Ô÷	 ð
 	�‰×Ñ˜ Õ(÷	 ð 	 ús   �A&¦A&Á&A/N)r(   úlogging.LoggerÚreturnÚNone)r.   Ústrr/   r3   r*   Úintr1   r2   )r   r   r   r   r)   ÚloggingÚINFOr-   r   r   r   r   r   .   s   „ ñó&ð
 ;B¿,¹,ö )r   r   c                  ó   — e Zd ZdZdd„Zy)ÚWithLogDetailsClientzNMetaclass that wraps public methods to inject client details into log context.c                óÎ   — |j                  «       D ];  \  }}|j                  d«      rŒt        j                  |«      sŒ.t	        |«      ||<   Œ= t
        j                  | |||«      S )zDWrap all public methods in the class with logging context injection.Ú_)ÚitemsÚ
startswithÚinspectÚ
isfunctionÚ&_injects_client_details_to_log_contextÚtypeÚ__new__)ÚclsÚnameÚbasesÚattrsÚ	attr_nameÚ
attr_values         r   rA   zWithLogDetailsClient.__new__Q   s_   € à%*§[¡[£]ò 	VÑ!ˆI�zØ×'Ñ'¨Õ,´×1CÑ1CÀJÕ1OÜ#IÈ*Ó#U��iÒ ð	Vô �|‰|˜C  u¨eÓ4Ð4r   N)rC   r3   rD   ÚtuplerE   Údictr1   r8   )r   r   r   r   rA   r   r   r   r8   r8   N   s
   „ ÙXô5r   r8   c                  ó$   ‡ — e Zd ZdZdˆ fd„Zˆ xZS )ÚRedirectLogFormatterz<Log formatter that prepends colored logger name to messages.c                ó�   •— t         j                  › d|j                  › dt        j                  › �}t
        ‰| �  |«      }|› d|› �S )zÈFormat log by prepending colored logger name.

        Args:
            record: The log record to format.

        Returns:
            Formatted log message with colored logger name prefix.
        ú[ú]z -> )r   ÚCYANrC   r	   Ú	RESET_ALLÚsuperÚformat)r'   ÚrecordÚformatted_logger_nameÚformatted_messageÚ	__class__s       €r   rR   zRedirectLogFormatter.format]   sL   ø€ ô $(§9¡9 +¨Q¨v¯{©{¨m¸1¼U¿_¹_Ð<MÐ NÐÜ!™G™N¨6Ó2ÐØ'Ð(¨Ð->Ð,?Ð@Ð@r   )rS   úlogging.LogRecordr1   r3   )r   r   r   r   rR   Ú__classcell__)rV   s   @r   rK   rK   Z   s   ø„ ÙF÷Añ Ar   rK   c                ó¤  — t        j                  | «      }d|_        t        |j                  «      D ]  }|j                  |«       Œ t        |j                  «      D ]  }|j                  |«       Œ t        j                  «       }|j                  t        «       «       |j                  |«       |j                  t         j                  «       |S )zöCreate a logger for redirecting logs from another Actor.

    Args:
        name: Logger name. Use dot notation for hierarchy (e.g., "apify.xyz" creates "xyz" under "apify").

    Returns:
        Configured logger with RedirectLogFormatter.
    F)r5   Ú	getLoggerÚ	propagateÚlistÚhandlersÚremoveHandlerÚfiltersÚremoveFilterÚStreamHandlerÚsetFormatterrK   Ú
addHandlerÚsetLevelÚDEBUG)rC   Ú	to_loggerÚhandlerÚ
log_filters       r   Úcreate_redirect_loggerri   k   s¶   € ô ×!Ñ! $Ó'€IØ€IÔô ˜	×*Ñ*Ó+ò )ˆØ×Ñ Õ(ð)ä˜9×,Ñ,Ó-ò +ˆ
Ø×Ñ˜zÕ*ð+ô ×#Ñ#Ó%€GØ×ÑÔ-Ó/Ô0Ø×Ñ˜Ô!Ø×Ñ”w—}‘}Ô%ØÐr   c                  ó   — e Zd ZdZdd„Zy)Ú_ContextInjectingFilterz=Filter that injects current log context into all log records.c                ób  — t         j                  j                  «       |_        t         j                  j                  «       |_        t         j                  j                  «       |_        t         j
                  j                  «       |_        t         j                  j                  «       |_        y)z(Add log context variables to the record.T)Úlog_contextr   Úgetr   r   r   r   )r'   rS   s     r   Úfilterz_ContextInjectingFilter.filter‡   ss   € ä*×8Ñ8×<Ñ<Ó>ˆÔÜ(×4Ñ4×8Ñ8Ó:ˆÔÜ#×*Ñ*×.Ñ.Ó0ˆŒÜ —_‘_×(Ñ(Ó*ˆŒ
Ü$×,Ñ,×0Ñ0Ó2ˆŒØr   N)rS   rW   r1   Úbool)r   r   r   r   ro   r   r   r   rk   rk   „   s
   „ ÙGôr   rk   c                ó  ‡ — t        j                  ‰ «      r t        j                  ‰ «      dˆ fd„«       }|S t        j                  ‰ «      r t        j                  ‰ «      dˆ fd„«       }|S t        j                  ‰ «      dˆ fd„«       }|S )zRWrap a method to inject resource client details into log context before execution.c              Ÿ  óÜ   •K  — t         j                  j                  ‰j                  «       t         j                  j                  | j
                  «        ‰| g|¢­i |¤Žƒ d {  –—† S 7 Œ­wr    ©rm   r   r"   r   r   Ú_resource_id©Úresource_clientÚargsÚkwargsÚfuns      €r   Úasync_wrapperz=_injects_client_details_to_log_context.<locals>.async_wrapper•   sV   øè ø€ ä×%Ñ%×)Ñ)¨#×*:Ñ*:Ô;Ü×#Ñ#×'Ñ'¨×(DÑ(DÔEá˜_Ð>¨tÒ>°vÑ>×>Ð>Ð>ús   ƒA"A,Á%A*Á&A,c               óî   •K  — t         j                  j                  ‰j                  «       t         j                  j                  | j
                  «        ‰| g|¢­i |¤Ž2 3 d {  –—† }|­–— Œ7 Œ
6 y ­wr    rs   )rv   rw   rx   Úitemry   s       €r   Úasync_generator_wrapperzG_injects_client_details_to_log_context.<locals>.async_generator_wrapper    sg   øè ø€ ä×%Ñ%×)Ñ)¨#×*:Ñ*:Ô;Ü×#Ñ#×'Ñ'¨×(DÑ(DÔEá! /ÐC°DÒC¸FÑC÷ ð �dØ”
ðøÑCùs*   ƒAA5Á"A3Á&A1Á'A3Á*A5Á1A3Á3A5c                óÀ   •— t         j                  j                  ‰j                  «       t         j                  j                  | j
                  «        ‰| g|¢­i |¤ŽS r    rs   ru   s      €r   Úwrapperz7_injects_client_details_to_log_context.<locals>.wrapperª   sL   ø€ ä×!Ñ!×%Ñ% c×&6Ñ&6Ô7Ü×Ñ×#Ñ# O×$@Ñ$@ÔAá�?Ð4 TÒ4¨VÑ4Ð4r   )rv   Ú_BaseClientrw   r   rx   r   r1   r   )r=   ÚiscoroutinefunctionÚ	functoolsÚwrapsÚisasyncgenfunction)ry   rz   r}   r   s   `   r   r?   r?   ‘   s‡   ø€ ä×"Ñ" 3Ô'ä	�‰˜Ó	ô	?ó 
ð	?ð Ðä×!Ñ! #Ô&ä	�‰˜Ó	ô	ó 
ð	ð 'Ð&ä‡_�_�SÓô5ó ð5ð €Nr   )rC   r3   r1   r0   )ry   r
   r1   r
   )%Ú
__future__r   r‚   r=   r5   r$   Úcontextvarsr   Útypingr   r   r   Úcoloramar   r	   Úcollections.abcr
   Ú/apify_client._resource_clients._resource_clientr   r€   r   ÚsplitÚlogger_namerZ   r(   r   rm   r   r@   r8   Ú	FormatterrK   ri   ÚFilterrk   r?   Ú	addFilterr   r   r   ú<module>r�      sÿ   ðÝ "ã Û Û Û Ý "ß 1Ñ 1ç  áÝ(åRà$€Kð �n‰n˜SÓ! !Ñ$€Ø 5à	ˆ×	Ñ	˜;Ó	'€Ø )ô �ô  ñ Ù�y¨$Ô/Ù˜_°dÔ;Ù�h¨Ô-Ù˜=°$Ô7Ù�5 $Ô'ô€÷)ñ )ô@	5˜4ô 	5ôA˜7×,Ñ,ô Aó"ô2
˜gŸn™nô 
ó ðF × Ñ Ñ(Ó*Õ +r   