§
    Ètºf!"  ã                  ó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    ú^/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/logger/test/test_stdlib.pyÚnextLiner#      s=   € õ ˜!‰_Œ_€Få•c”k &Ô"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å*;Ñ*=Ô*=Ñ'ˆÔ˜DœKØŒ×"Ò" 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øÝ)ð 	ð 	ð 	Ø�IŠI�a‰LŒLˆLˆLˆLˆLˆLˆLˆLøøøøð	øøø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ØˆH�U‰OŒOˆOˆOàÔ!Ô)¨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  € ð
 •*”/ÝŒN�JÔ,ÝŒM�:œ?ÝŒM�:Ô-ÝŒN�JÔ,ÝÔ�zÔ2ð
ˆð ˆØ*×0Ò0Ñ2Ô2ð 	!ð 	!‰NˆE�7ØˆEð Ð Ø%*��kÑ"õ #& g¡,¤,ˆE�,Ñà�MŠM˜%Ñ Ô Ð Ð à'˜$œ-¨Ð0‰ˆ�Ø×Ò�˜W™œ¥s¨<Ñ'8Ô'8Ñ9Ô9Ð9õ •s˜7‘|”|Ñ$Ô$ð 	Jð 	JˆAØ×Ò˜W QœZÔ/°¸´¸<Ô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ž   € õ
 %™JœJÑˆ�'ØŸ-š-¨Ñ+Ô+‰ˆ�à×Ò�˜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Ñ)Ô)Ð)Ø×Ò�˜W QœZœ^Ñ,Ô,¨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À¹L¼LÑ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Ñ)Ô)Ð)Ø×Ò�˜W QœZœ^Ñ,Ô,¨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Ü   ó   € Ø�‰EˆEˆEˆEr$   ú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Û   € ð
	ð 	ð 	ð 	ð	 ØˆL‰NŒNˆNˆNøÝ ð 	 ð 	 ð 	 Ý‘i”iˆGˆGˆGð	 øøøõ  ¨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ï   € ð	ð 	ð 	ð 	ð	#ØˆL‰NŒNˆNˆNøÝ ð 	#ð 	#ð 	#Ý‘i”iˆGØ× Ò Ñ"Ô"Ð"Ð"Ð"ð	#øøøõ  ¨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   € õ ‰YŒY€FÝÔ&€HÝ˜6¨G¸TÐBÑBÔB€FÝ˜(Ñ#Ô#€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ð !6ðHu3ð u3ð u3ð u3ð u3˜XÔ.ñ u3ô u3ð u3ðpð ð ð ð $ð $ð $ð $ð $�jÔ(ñ $ô $ð $ð $ð $r$   