
    Yf!"                    H   d Z ddl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mZ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 ddlmZmZ ddl m!Z! ddl"m#Z# ddZ$ G d d          Z% G d dej&                  Z'ddZ( G d dej)                  Z*dS )z+
Test cases for L{twisted.logger._format}.
    )annotationsN)getsourcefile)BytesIOTextIOWrapper)	Formatter	LogRecordStreamHandler	getLogger)ListOptionalTuple)BrokenMethodImplementation)verifyObject)currentframe)Failure)unittest   )ILogObserverLogEvent)LogLevel)STDLibLogObserverreturnTuple[Optional[str], int]c                     t          d          } t          t          j        | j        d                            | j        dz   fS )z
    Retrive the file name and line number immediately after where this function
    is called.

    @return: the file name and line number
       __name__)r   r   sysmodules	f_globalsf_lineno)callers    Q/var/www/html/env/lib/python3.11/site-packages/twisted/logger/test/test_stdlib.pynextLiner#      s=     !__Fck&"2:">?@@!     c                  *    e Zd ZdZd	dZd	dZd
dZdS )StdlibLoggingContainerzF
    Continer for a test configuration of stdlib logging objects.
    r   Nonec                   t          d          | _        | j                                        | _        | j                            t
          j                   t                      | _        | j        	                    | j                   t                      \  | _        | _        | j        	                    | j                   d S )N )r
   
rootLoggergetEffectiveLeveloriginalLevelsetLevel
py_loggingDEBUGBufferedHandlerbufferedHandler
addHandlerhandlerAndBytesIOstreamHandleroutputselfs    r"   __init__zStdlibLoggingContainer.__init__.   s    #B--!_>>@@  !1222.00""4#7888*;*=*='DK""4#566666r$   c                $   | j                             | j                   | j                             | j                   | j                             | j                   | j                                         | j                                         dS )z#
        Close the logger.
        N)r*   r-   r,   removeHandlerr1   r4   closer5   r6   s    r"   r;   zStdlibLoggingContainer.close:   s~     	  !3444%%d&:;;;%%d&8999  """r$   strc                Z    | j                                                             d          S )zd
        Get the output to the underlying stream as text.

        @return: the output text
        utf-8)r5   getvaluedecoder6   s    r"   outputAsTextz#StdlibLoggingContainer.outputAsTextD   s&     {##%%,,W555r$   Nr   r'   )r   r<   )r   
__module____qualname____doc__r8   r;   rA    r$   r"   r&   r&   )   sZ         
7 
7 
7 
7   6 6 6 6 6 6r$   r&   c                  j    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S )STDLibLogObserverTestsz)
    Tests for L{STDLibLogObserver}.
    r   r'   c                    t                      }	 t          t          |           dS # t          $ r }|                     |           Y d}~dS d}~ww xY w)z=
        L{STDLibLogObserver} is an L{ILogObserver}.
        N)r   r   r   r   fail)r7   observeres      r"   test_interfacez%STDLibLogObserverTests.test_interfaceR   sd     %&&	x00000) 	 	 	IIaLLLLLLLLL	s   ' 
AAAr&   c                V    t                      }|                     |j                   |S )zj
        Create a logging object we can use to test with.

        @return: a stdlib-style logger
        )r&   
addCleanupr;   )r7   loggers     r"   	py_loggerz STDLibLogObserverTests.py_logger\   s(     ())%%%r$   eventsr   Tuple[List[LogRecord], str]c                    |                                  }t          t          j        dz             }|D ]} ||           |j        j        |                                fS )z
        Send one or more events to Python's logging module, and capture the
        emitted L{LogRecord}s and output stream as a string.

        @param events: events

        @return: a tuple: (records, output)
        r   )
stackDepth)rQ   r   defaultStackDepthr1   recordsrA   )r7   rR   plrK   events        r"   logEventzSTDLibLogObserverTests.logEventf   sr     ^^$ ):
 
 
  	 	EHUOOOO!)2??+<+<<<r$   c                    |                      i           \  }}|                     t          |          d           |                     |d         j        d           dS )z
        Logger name.
        r   r   twistedN)rZ   assertEquallennamer7   rW   r5   s      r"   	test_namez STDLibLogObserverTests.test_name|   sW     --++Wq))))44444r$   c                   dt           j        t          j        t           j        t          j        t           j        t          j        t           j        t          j        t           j	        t          j
        t           j        i}g }|                                D ]5\  }}i }|||d<   t          |          |d<   |                    |           6 | j        | \  }}|                     t#          |          t#          |                     t%          t#          |                    D ]/}|                     ||         j        ||         d                    0dS )z
        Log levels.
        N	log_level
py_levelno)r.   INFOr   debugr/   infowarnWARNINGerrorERRORcriticalCRITICALitemsintappendrZ   r]   r^   rangelevelno)	r7   levelMappingrR   levelpyLevelrY   rW   r5   is	            r"   test_levelsz"STDLibLogObserverTests.test_levels   s4   
 */NJ,M:?M:-NJ,z2
 *0022 	! 	!NE7E  %*k" #&g,,E,MM%    '$-0Ws<'8'8999 s7||$$ 	J 	JAWQZ/<1HIIII	J 	Jr$   c                b   t                      \  }}|                     i           \  }}|                     t          |          d           |                     |d         j        |           |                     |d         j        |           |                     |d         j                   dS )zb
        C{pathname}, C{lineno}, C{exc_info}, C{func} is set properly on
        records.
        r   r   N)r#   rZ   r]   r^   pathnamelinenoassertIsNoneexc_info)r7   filenamelogLinerW   r5   s        r"   test_callerInfoz&STDLibLogObserverTests.test_callerInfo   s    
 %JJ'--++Wq))),h777*G444'!*-.....r$   c                <   t          dd          }|                     |          \  }}|                     t          |          d           |                     t	          |d         j                  d           |                     |d         j        d           dS )	zL
        Basic formattable event passes the format along correctly.
        Hello, {who}!dude
log_formatwhor   r   zHello, dude!rF   N)dictrZ   r]   r^   r<   msgargsr7   rY   rW   r5   s       r"   test_basicFormatz'STDLibLogObserverTests.test_basicFormat   s     V<<<--..Wq)))WQZ^,,n==="-----r$   c                
   t          dd          }|                     |          \  }}|                     t          |          d           |                     |                    d          t          |                     dS )z<
        Basic formattable event renders correctly.
        r   r   r   r   z:Hello, dude!
N)r   rZ   r]   r^   
assertTrueendswithreprr   s       r"   test_basicFormatRenderedz/STDLibLogObserverTests.test_basicFormatRendered   st     V<<<--..Wq)))(9::DLLIIIIIr$   c                    |                      i           \  }}|                     t          |          d           |                     t          |d         j                  d           dS )z'
        Event with no format.
        r   r   r)   N)rZ   r]   r^   r<   r   r`   s      r"   test_noFormatz$STDLibLogObserverTests.test_noFormat   s_     --++Wq)))WQZ^,,b11111r$   c                   dd}	  |             n# t           $ r t                      }Y nw xY wt          dd|          }|                     |          \  }}|                     t          |          d           |                     d|           |                     d|           |                     d	|           d
S )zK
        An event with a failure logs the failure details as well.
        r   r'   c                     ddz   d S Nr   r   rF   rF   r$   r"   failing_funcz9STDLibLogObserverTests.test_failure.<locals>.failing_func       EEEEr$   Hi mommer   r   log_failurer   in failing_funcZeroDivisionErrorNrB   )r   r   r   rZ   r]   r^   assertInr7   r   failurerY   rW   r5   s         r"   test_failurez#STDLibLogObserverTests.test_failure   s    
	 	 	 		 LNNNN  	  	  	 iiGGG	  dHHH--..Wq)))h''''000)622222s   
 ,,c                   dd}	  |             n2# t           $ r% t                      }|                                 Y nw xY wt          dd|          }|                     |          \  }}|                     t          |          d           |                     d|           |                     d|           |                     d	|           d
S )z
        A cleaned Failure object has a fake traceback object; make sure that
        logging such a failure still results in the exception details being
        logged.
        r   r'   c                     ddz   d S r   rF   rF   r$   r"   r   z@STDLibLogObserverTests.test_cleanedFailure.<locals>.failing_func   r   r$   r   r   r   r   r   r   NrB   )r   r   cleanFailurer   rZ   r]   r^   r   r   s         r"   test_cleanedFailurez*STDLibLogObserverTests.test_cleanedFailure   s    	 	 	 		#LNNNN  	# 	# 	#iiG  """""	# dHHH--..Wq)))h''''000)622222s   
 ,A A NrB   )r   r&   )rR   r   r   rS   )r   rC   rD   rE   rM   rQ   rZ   ra   rw   r   r   r   r   r   r   rF   r$   r"   rH   rH   M   s              = = = =,5 5 5 5!J !J !J !JF/ / / /"	. 	. 	. 	.J J J J2 2 2 23 3 3 3*3 3 3 3 3 3r$   rH   ,tuple[StreamHandler[TextIOWrapper], BytesIO]c                     t                      } t          j        }t          | dd          }t	          |          }t          |          }|                    |           || fS )z
    Construct a 2-tuple of C{(StreamHandler, BytesIO)} for testing interaction
    with the 'logging' module.

    @return: handler and io object
    r>   
)encodingnewline)r   r.   BASIC_FORMATr   r   r	   setFormatter)r5   templatestream	formatterhandlers        r"   r3   r3     sa     YYF&H6GTBBBF(##IF##G###F?r$   c                  "    e Zd ZdZd	dZd
dZdS )r0   zN
    A L{py_logging.Handler} that remembers all logged records in a list.
    r   r'   c                R    t           j                            |            g | _        dS )z5
        Initialize this L{BufferedHandler}.
        N)r.   Handlerr8   rW   r6   s    r"   r8   zBufferedHandler.__init__  s&     	##D)))(*r$   recordr   c                :    | j                             |           dS )z&
        Remember the record.
        N)rW   rp   )r7   r   s     r"   emitzBufferedHandler.emit!  s      	F#####r$   NrB   )r   r   r   r'   )r   rC   rD   rE   r8   r   rF   r$   r"   r0   r0     sF         + + + +$ $ $ $ $ $r$   r0   )r   r   )r   r   )+rE   
__future__r   loggingr.   r   inspectr   ior   r   r   r   r	   r
   typingr   r   r   zope.interface.exceptionsr   zope.interface.verifyr   twisted.python.compatr   twisted.python.failurer   twisted.trialr   _interfacesr   r   _levelsr   _stdlibr   r#   r&   TestCaserH   r3   r   r0   rF   r$   r"   <module>r      s    # " " " " "     



 ! ! ! ! ! ! % % % % % % % % B B B B B B B B B B B B ( ( ( ( ( ( ( ( ( ( @ @ @ @ @ @ . . . . . . . . . . . . * * * * * * " " " " " " 0 0 0 0 0 0 0 0       ' ' ' ' ' '   !6 !6 !6 !6 !6 !6 !6 !6Hu3 u3 u3 u3 u3X. u3 u3 u3p    $ $ $ $ $j( $ $ $ $ $r$   