
    F\h
                         S SK r S SKrSSKJr  \R                  " SSS/5      r " S S\ R                  5      r " S	 S
\5      rg)    N   )_BaseTestCaseContext_LoggingWatcherrecordsoutputc                   *    \ rS rSrSrS rS rS rSrg)_CapturingHandler
   zE
A logging handler capturing all (raw and formatted) logging output.
c                 d    [         R                  R                  U 5        [        / / 5      U l        g N)loggingHandler__init__r   watcherselfs    $/usr/lib/python3.13/unittest/_log.pyr   _CapturingHandler.__init__   s"      &&r2.    c                     g r    r   s    r   flush_CapturingHandler.flush   s    r   c                     U R                   R                  R                  U5        U R                  U5      nU R                   R                  R                  U5        g r   )r   r   appendformatr   )r   recordmsgs      r   emit_CapturingHandler.emit   s@    ##F+kk&!""3'r   )r   N)	__name__
__module____qualname____firstlineno____doc__r   r   r   __static_attributes__r   r   r   r	   r	   
   s    /(r   r	   c                   .    \ rS rSrSrSrS rS rS rSr	g)	_AssertLogsContext   z6A context manager for assertLogs() and assertNoLogs() z"%(levelname)s:%(name)s:%(message)sc                     [         R                  " X5        X l        U(       a%  [        R                  R                  X35      U l        O[        R                  U l        S U l        X@l	        g r   )
r   r   logger_namer   _nameToLevelgetlevelINFOr   no_logs)r   	test_caser+   r.   r0   s        r   r   _AssertLogsContext.__init__!   sH    %%d6& --11%?DJ DJr   c                    [        U R                  [        R                  5      (       a  U R                  =ol        O&[        R
                  " U R                  5      =ol        [        R                  " U R                  5      n[        5       nUR                  U R                  5        UR                  U5        UR                  U l        UR                  S S  U l        UR                  U l        UR                   U l        U/Ul        UR                  U R                  5        SUl        U R$                  (       a  g UR                  $ )NF)
isinstancer+   r   Loggerlogger	getLogger	FormatterLOGGING_FORMATr	   setLevelr.   setFormatterr   handlersold_handlers	old_level	propagateold_propagater0   )r   r6   	formatterhandlers       r   	__enter___AssertLogsContext.__enter__+   s    d&&77#'#3#33F[#*#4#4T5E5E#FFF[%%d&9&9:	#%$Y'"OOA.#--")

# <<r   c                    U R                   U R                  l        U R                  U R                  l        U R                  R                  U R                  5        Ub  gU R                  (       aY  [        U R                  R                  5      S:  a5  U R                  SR                  U R                  R                  5      5        g g [        U R                  R                  5      S:X  aT  U R                  SR                  [        R                  " U R                   5      U R                  R"                  5      5        g g )NFr   zUnexpected logs found: {!r}z-no logs of level {} or higher triggered on {})r=   r6   r<   r@   r?   r:   r>   r0   lenr   r   _raiseFailurer   r   r   getLevelNamer.   name)r   exc_type	exc_valuetbs       r   __exit___AssertLogsContext.__exit__?   s    #00 $ 2 2T^^,<<4<<''(1,""188++ - 4<<''(A-""CVG00<dkk>N>NOQ .r   )	r.   r6   r+   r   r0   r=   r>   r@   r   N)
r!   r"   r#   r$   r%   r9   r   rC   rM   r&   r   r   r   r(   r(      s    @9N(Qr   r(   )	r   collectionscaser   
namedtupler   r   r	   r(   r   r   r   <module>rR      sK      & (():*3X)>@( ($:Q- :Qr   