
    tf)                         d Z ddlmZ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 dd	lmZ dd
lmZmZ ddlmZmZ ddlmZ  G d de          Z G d d          Z G d dej                  ZdS )z+
Test cases for L{twisted.logger._logger}.
    )ListOptionalTypecast)implementer)NamedConstant)Failure)unittest   )formatEvent)globalLogPublisher)ILogObserverLogEvent)InvalidLogLevelErrorLogLevelLoggerc            	       :    e Zd ZdZ	 ddedee         deddfdZdS )	
TestLoggerz^
    L{Logger} with an overridden C{emit} method that keeps track of received
    events.
    Nlevelformatkwargsreturnc                     t          t                    dt          dd f fd            }t          j        |           	 t          j         ||fi | t          j        |           n# t          j        |           w xY w|||d _        d S )Neventr   c                     | _         d S N)r   r   selfs    ^/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/logger/test/test_logger.pyobserverz!TestLogger.emit.<locals>.observer    s    DJJJ    )r   r   r   )	r   r   r   r   addObserverr   emitremoveObserveremitted)r   r   r   r   r!   s   `    r    r$   zTestLogger.emit   s     
\	"	"	H 	 	 	 	 	 	 
#	"	 	&x000	8KeV66v666-h7777-h7777 
 
s    A) )A?r   )	__name__
__module____qualname____doc__r   r   strobjectr$    r"   r    r   r      sa          =A
 
"
,4SM
LR
	
 
 
 
 
 
r"   r   c                   P    e Zd ZdZ e            Zddee         ddfdZdefdZ	dS )LogComposedObjectz3
    A regular object, with a logger attached.
    Nstater   c                     || _         d S r   r0   )r   r0   s     r    __init__zLogComposedObject.__init__8   s    


r"   c                     d| j          dS )Nz<LogComposedObject >r2   )r   s    r    __str__zLogComposedObject.__str__;   s    2TZ2222r"   r   )
r'   r(   r)   r*   r   logr   r+   r3   r6   r-   r"   r    r/   r/   1   sq          *,,C hsm t    3 3 3 3 3 3 3r"   r/   c                       e Zd ZdZddZddZddZddZddZdd	Z	dd
Z
ddZddZddZddZddZddZddZddZddZdS )LoggerTestsz
    Tests for L{Logger}.
    r   Nc                     d}t          |          }|                     t          |          dt          |           d           dS )z"
        repr() on Logger
        blearghz<Logger r5   N)r   assertEqualrepr)r   	namespacer7   s      r    	test_reprzLoggerTests.test_reprD   sJ     	Yc$AtI$A$A$ABBBBBr"   c                 b    t                      }|                     |j        t                     dS )z3
        Default namespace is module name.
        N)r   r<   r>   r'   r   r7   s     r    test_namespaceDefaultz!LoggerTests.test_namespaceDefaultL   s+     hh11111r"   c                     g }t          dt          t                    t                                 |                     |d         j        d           dS )z
        Default namespace is C{"<unknown>"} when a logger is created from a
        context in which is can't be determined automatically and no namespace
        was specified.
        zresult.append(Logger())r   r   z	<unknown>N)execdictr   localsr<   r>   )r   results     r    test_namespaceOMGItsTooHardz'LoggerTests.test_namespaceOMGItsTooHardS   sX      "%HH	
 	
 	

 	,k:::::r"   c                    t                      }d                    |j        |j        j                  }|                     t          t          |j                  j	        |           |                     t          t          t                   t           j                  j	        |           |                     t          t          t                   t           j                  j        t                      |                     t          t          |j                  j        |           |                     t                      j                   dS )z
        Default namespace for classes using L{Logger} as a descriptor is the
        class name they were retrieved from.
        z{}.{}N)r/   r   r(   	__class__r'   r<   r   r   r7   r>   r   assertIssourceassertIsNoner   )r   objexpectedNamespaces      r    test_namespaceAttributez#LoggerTests.test_namespaceAttributea   s   
  !!#NNNM"
 

 	j#'22<>OPPPj!#4#899CEV	
 	
 	
 	j!#4#899@BS	
 	
 	
 	d:sw//6<<<&((/*****r"   c                     g  G fdd          }|j                             d           |                     t                    d           |                     d         d         d           dS )zH
        When used as a descriptor, the observer is propagated.
        c                   F    e Zd Z e ee j                            ZdS )5LoggerTests.test_descriptorObserver.<locals>.MyObjectr!   N)r'   r(   r)   r   r   r   appendr7   )observeds   r    MyObjectrS   }   s/        &$$|X_"E"EFFFCCCr"   rW   hello   r   
log_formatN)r7   infor<   len)r   rW   rV   s     @r    test_descriptorObserverz#LoggerTests.test_descriptorObserverw   s     $&	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	'"""X***!\2G<<<<<r"   c                 N   t          d          }t          t          |j                  }|                    d           |                     d|j                   |                     |j        d         |           t          |j                  }|                     d|           dS )z
        On instances that have a L{Logger} class attribute, the C{log_source}
        key is available to format strings.
        rX   zHello, {log_source}.
log_sourcez!Hello, <LogComposedObject hello>.N)	r/   r   r   r7   errorassertInr   r<   r   )r   rN   r7   stuffs       r    !test_sourceAvailableForFormattingz-LoggerTests.test_sourceAvailableForFormatting   s    
  ((:sw''		()))lCI...<0#666CI&&95AAAAAr"   c                    t                      }t          j                    D ]}d}|                    |j                  }t          ||j                  } ||||j                   |                     |j        d         |           |                     |j        d         |           |                     |j        d         d         |           |                     t          |d          d	           |                     |j
        d
         |           |                     |j
        d         |           |                     |j
        d         t                     |                     |j
        d                    |                     |j
        d         |           |                     t          |j
                  |           dS )z]
        Test that log levels and messages are emitted correctly for
        Logger.
        zThis is a {level_name} message)
level_name)junkre   r   r   r   rf   r   zNo event observed.rZ   	log_levellog_namespacer_   N)r   r   iterconstantsr   namegetattrr<   r&   
assertTruehasattrr   r'   rM   r   )r   r7   r   r   message	logMethods         r    test_basicLoggerzLoggerTests.test_basicLogger   s   
 ll+-- 	> 	>E5Fmmuzm::GUZ00IIf7uzBBBB S[15999S[2F;;;S[26:GDDDOOGC113GHHHSY|4f===SY{3U;;;SY7BBBci5666SYv.888[33W====)	> 	>r"   c                      t          t                    dt          ddf fd             G fdd          t          t          j                                                   dS )z>
        C{log_source} event key refers to the class.
        r   r   Nc                 @                         | d                    d S Nr_   r<   )r   Thingor   s    r    r!   z0LoggerTests.test_sourceOnClass.<locals>.observer   $    U<0&99999r"   c                   (    e Zd Z e           ZdS ).LoggerTests.test_sourceOnClass.<locals>.ThingorT   Nr'   r(   r)   r   r7   rT   s   r    ru   rx      !        *h///CCCr"   ru   r   r   r   r   r   r7   r[   )r   ru   r!   s   `@@r    test_sourceOnClasszLoggerTests.test_sourceOnClass   s    
 
\	"	"	:H 	: 	: 	: 	: 	: 	: 	: 
#	"	:	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	Z$$))+++++r"   c                      t          t                    dt          ddf fd             G fdd          } |            t          t          j                                                   dS )zA
        C{log_source} event key refers to the instance.
        r   r   Nc                 @                         | d                    d S rs   rt   )r   r   thingos    r    r!   z3LoggerTests.test_sourceOnInstance.<locals>.observer   rv   r"   c                   (    e Zd Z e           ZdS )1LoggerTests.test_sourceOnInstance.<locals>.ThingorT   Nry   rT   s   r    ru   r      rz   r"   ru   r{   )r   ru   r!   r   s   ` @@r    test_sourceOnInstancez!LoggerTests.test_sourceOnInstance   s    
 
\	"	"	:H 	: 	: 	: 	: 	: 	: 	: 
#	"	:	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 Z$$))+++++r"   c                      t          t                    dt          ddf fd            }t          |          }|                                 dS )z5
        C{log_source} event key is L{None}.
        r   r   Nc                 >                         | d                    d S rs   )rM   r   s    r    r!   z0LoggerTests.test_sourceUnbound.<locals>.observer   s"    eL122222r"   rT   r   r   r   r   r[   )r   r!   r7   s   `  r    test_sourceUnboundzLoggerTests.test_sourceUnbound   sg    
 
\	"	"	3H 	3 	3 	3 	3 	3 	3 
#	"	3 (+++




r"   c                    t                      }	 t          d          # t          $ r |                    d           Y nw xY w|                     t                    }|                     t          |          d           |                     |j        d         t          j                   |                     |j        d         d           dS )z?
        Test that log.failure() emits the right data.
        zbaloney!WhoopsrY   r   r   N)	r   RuntimeErrorfailureflushLoggedErrorsr<   r\   r&   r   criticalr   r7   errorss      r    test_defaultFailurezLoggerTests.test_defaultFailure   s     ll	"z*** 	" 	" 	"KK!!!!!	" ''55Va(((W-x/@AAAX.99999s    A Ac                    t                      }|                    ddt          j        dd           |                     |j        d         d           |                     |j        d         t          j                   |                     |j        d         |j                   |                     |j        d	                    d
S )zQ
        Make sure that kwargs conflicting with args don't pass through.
        *#z*namespace*z*source*)rZ   rg   rh   r_   rZ   rg   rh   r_   N)r   warnr   r`   r<   r   r>   rM   rA   s     r    test_conflictingKwargsz"LoggerTests.test_conflictingKwargs   s     lln'! 	 	
 	
 	
 	<0#666;/????3S]CCC#)L122222r"   c                     t                      }|                    d           |                     t                    }|                     t          |          d           dS )zA
        Test passing in a bogus log level to C{emit()}.
        z*bogus*rY   N)r   r$   r   r   r<   r\   r   s      r    test_logInvalidLogLevelz#LoggerTests.test_logInvalidLogLevel   sU     ll''(<==Va(((((r"   c                     t          t                    dt          ddffd            t          t                    dt          ddf fd            t                                        dg            dS )	zE
        Tracing keeps track of forwarding to the publisher.
        r   r   Nc                      |            d S r   r-   )r   r!   s    r    	publisherz)LoggerTests.test_trace.<locals>.publisher  s    HUOOOOOr"   c                 F                         | d         fg           d S )N	log_tracert   )r   r7   r   r   s    r    r!   z(LoggerTests.test_trace.<locals>.observer  s,    U;/3	2B1CDDDDDr"   rT   zHello.)r   r   )r   r7   r!   r   s   `@@@r    
test_tracezLoggerTests.test_trace  s    
 
\	"	"	X 	$ 	 	 	 	 	 
#	"	 
\	"	"	EH 	E 	E 	E 	E 	E 	E 	E 	E 
#	"	E ),,,R(((((r"   c                 B   g t          t                    dt          ddffd            }t          |          }d G fdd          }|                    d	 |            
          5 }ddz   ddd           n# 1 swxY w Y   |                     |j        d           |                     |j        d           |                     t                    d           \  }g dd<   |d         }|                     d           |                     t          |          d           |                     d           |                     |j
        t                     |                    d |            
          5 }|                     |j        d           |                     |j        d           ddd           n# 1 swxY w Y   |                     d           |                     |j        d           |                     |j        d           dS )z
        The L{Logger.failuresHandled} context manager catches any
        L{BaseException} and converts it into a logged L{Failure}.
        r   r   Nc                 2                         |            d S r   rU   r   eventss    r    loggedz0LoggerTests.test_failuresHandled.<locals>.logged      MM%     r"   rT   r   c                        e Zd Zdef fdZdS )2LoggerTests.test_failuresHandled.<locals>.Reprabler   c                     dz  d dS )NrY   z<repr r5   r-   )r   reprds    r    __repr__z;LoggerTests.test_failuresHandled.<locals>.Reprable.__repr__&  s    
(((((r"   N)r'   r(   r)   r+   r   )r   s   r    Reprabler   %  s:        )# ) ) ) ) ) ) ) )r"   r   z*while testing failure handling for {value})valuerY   FTlog_failurez+while testing failure handling for <repr 1>zsucceeding for {value})r   r   r   r   failuresHandledr<   	succeededfailedr\   r   typeZeroDivisionError)	r   r   r7   r   	operationfop2r   r   s	          @@r    test_failuresHandledz LoggerTests.test_failuresHandled  s   
 	\	"	"	!( 	!t 	! 	! 	! 	! 	! 
#	"	! &)))	) 	) 	) 	) 	) 	) 	) 	) 	) 	)   8

 ! 
 
 	EE	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	,e444)4000Va(((qqq	M*"""!N	
 	
 	
 	"""!2333  !9 LL 	0PSS]E222SZ///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	"""---U+++++s$   .B  BB7GGGc                 Z   g t          t                    dt          ddffd            }t          |          }|                    d          }d}|5 }d}ddd           n# 1 swxY w Y   |                     |d           |                     |d           |                     g            d}dd	}|5 } |             ddd           n# 1 swxY w Y   |                     t                    d
           \  }|d         }|                     |j        t                     dS )z
        The L{Logger.failureHandler} context manager can safely be shared
        amongst multiple invocations and converts L{BaseException} into logged
        L{Failure}s.
        r   r   Nc                 2                         |            d S r   r   r   s    r    r   z/LoggerTests.test_failureHandler.<locals>.loggedJ  r   r"   rT   rX   FTc                      t                      r   )KeyboardInterruptr-   r"   r    	raisebasez2LoggerTests.test_failureHandler.<locals>.raisebaseY  s    #%%%r"   rY   r   r   N)
r   r   r   r   failureHandlerrK   r<   r\   r   r   )	r   r   r7   r   successfhr   r   r   s	           @r    test_failureHandlerzLoggerTests.test_failureHandlerB  s    	\	"	"	!( 	!t 	! 	! 	! 	! 	! 
#	"	! &)))++G44 	rG	 	 	 	 	 	 	 	 	 	 	 	 	 	 	b$$'''$$$	& 	& 	& 	&  	rIKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	Va(((=!!233333s$   A%%A),A):CCCr   )r'   r(   r)   r*   r?   rB   rH   rP   r]   rc   rp   r|   r   r   r   r   r   r   r   r   r-   r"   r    r9   r9   ?   sg        C C C C2 2 2 2; ; ; ;+ + + +,= = = =B B B B> > > >:, , , ,, , , ,
 
 
 
: : : : 3 3 3 3&	) 	) 	) 	)) ) ) ) ), ), ), ),V 4  4  4  4  4  4r"   r9   N)r*   typingr   r   r   r   zope.interfacer   
constantlyr   twisted.python.failurer	   twisted.trialr
   _formatr   _globalr   _interfacesr   r   _levelsr   r   _loggerr   r   r/   TestCaser9   r-   r"   r    <module>r      sv    . - - - - - - - - - - - & & & & & & $ $ $ $ $ $ * * * * * * " " " " " " ! ! ! ! ! ! ( ( ( ( ( ( 0 0 0 0 0 0 0 0 4 4 4 4 4 4 4 4      
 
 
 
 
 
 
 
43 3 3 3 3 3 3 3c4 c4 c4 c4 c4(# c4 c4 c4 c4 c4r"   