+
    üÐj!"  ã                  óR  € R t ^ RIHt ^ RIt^ RIt^ RIHt ^ RIH	t	H
t
 ^ RIHtHtHtHt ^ RIHtHtHt ^ RIHt ^ RIHt ^ R	IHt ^ R
IHt ^ RIHt ^RIHtHt ^RI H!t! ^RI"H#t# R R lt$ ! R R4      t% ! R R]PL                  4      t'R R lt( ! R R]PR                  4      t*R# )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)ÚSTDLibLogObserverc               ó   € V ^8„  d   QhRR/# )é   ÚreturnzTuple[Optional[str], int]© )Úformats   "ÚA/usr/lib/python3/dist-packages/twisted/logger/test/test_stdlib.pyÚ__annotate__r      s   € ÷ ñ Ð+ñ ó    c                 ó    € \        ^4      p \        \        P                  V P                  R,          ,          4      V P
                  ^,           3# )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    r   ÚnextLiner%      s?   € ô ˜!‹_€Fä”c—k‘k &×"2Ñ"2°:Õ">Õ?Ó@Ø�‰˜!Õðð r   c                  ó>   € ] tR t^)tRtR R ltR R ltR R ltRtR	# )
ÚStdlibLoggingContainerz>
Continer for a test configuration of stdlib logging objects.
c               ó   € V ^8„  d   QhRR/# ©r   r   ÚNoner   )r   s   "r   r   Ú#StdlibLoggingContainer.__annotate__.   s   € ÷ 
7ñ 
7˜$ñ 
7r   c                	ó–  € \        R 4      V n        V P                  P                  4       V n        V P                  P	                  \
        P                  4       \        4       V n        V P                  P                  V P                  4       \        4       w  V n        V n        V P                  P                  V P                  4       R# )Ú N)r	   Ú
rootLoggerÚgetEffectiveLevelÚoriginalLevelÚsetLevelÚ
py_loggingÚDEBUGÚBufferedHandlerÚbufferedHandlerÚ
addHandlerÚhandlerAndBytesIOÚstreamHandlerÚoutput©Úselfs   &r   Ú__init__ÚStdlibLoggingContainer.__init__.   s‡   € Ü# B›-ˆŒà!Ÿ_™_×>Ñ>Ó@ˆÔØ�‰× Ñ ¤×!1Ñ!1Ô2ä.Ó0ˆÔØ�‰×"Ñ" 4×#7Ñ#7Ô8ä*;Ó*=Ñ'ˆÔ˜DœKØ�‰×"Ñ" 4×#5Ñ#5Ö6r   c               ó   € V ^8„  d   QhRR/# r)   r   )r   s   "r   r   r+   :   s   € ÷ ñ �tñ r   c                óL  € V P                   P                  V P                  4       V P                   P                  V P                  4       V P                   P                  V P
                  4       V P
                  P                  4        V P                  P                  4        R# )z
Close the logger.
N)r.   r1   r0   ÚremoveHandlerr5   r8   Úcloser9   r:   s   &r   rA   ÚStdlibLoggingContainer.close:   sn   € ð 	�‰× Ñ  ×!3Ñ!3Ô4Ø�‰×%Ñ% d×&:Ñ&:Ô;Ø�‰×%Ñ% d×&8Ñ&8Ô9Ø×Ñ× Ñ Ô"Ø�‰×ÑÖr   c               ó   € V ^8„  d   QhRR/# )r   r   Ústrr   )r   s   "r   r   r+   D   s   € ÷ 6ñ 6˜cñ 6r   c                óT   € V P                   P                  4       P                  R4      # )zL
Get the output to the underlying stream as text.

@return: the output text
úutf-8)r9   ÚgetvalueÚdecoder:   s   &r   ÚoutputAsTextÚ#StdlibLoggingContainer.outputAsTextD   s"   € ð �{‰{×#Ñ#Ó%×,Ñ,¨WÓ5Ð5r   )r5   r0   r9   r.   r8   N)	r   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r<   rA   rI   Ú__static_attributes__r   r   r   r'   r'   )   s   † ñõ
7õ÷6ñ 6r   r'   c                  óž   € ] tR t^MtRtR R ltR R ltR R ltR R	 ltR
 R lt	R R lt
R R ltR R ltR R ltR R ltR R ltRtR# )ÚSTDLibLogObserverTestsz!
Tests for L{STDLibLogObserver}.
c               ó   € V ^8„  d   QhRR/# r)   r   )r   s   "r   r   Ú#STDLibLogObserverTests.__annotate__R   s   € ÷ ñ  ñ r   c                ó�   € \        4       p \        \        V4       R#   \         d   pT P	                  T4        Rp?R# Rp?ii ; i)z-
L{STDLibLogObserver} is an L{ILogObserver}.
N)r   r   r   r   Úfail)r;   ÚobserverÚes   &  r   Útest_interfaceÚ%STDLibLogObserverTests.test_interfaceR   s8   € ô %Ó&ˆð	Üœ xÖ0øÜ)ô 	Ø�I‰I�a�LŠLûð	ús   Œ žA©A Á Ac               ó   € V ^8„  d   QhRR/# )r   r   r'   r   )r   s   "r   r   rS   \   s   € ÷ ñ Ð1ñ r   c                óP   € \        4       pV P                  VP                  4       V# )zR
Create a logging object we can use to test with.

@return: a stdlib-style logger
)r'   Ú
addCleanuprA   )r;   Úloggers   & r   Ú	py_loggerÚ STDLibLogObserverTests.py_logger\   s!   € ô (Ó)ˆØ�‰˜Ÿ™Ô%Øˆr   c               ó    € V ^8„  d   QhRRRR/# )r   Úeventsr   r   zTuple[List[LogRecord], str]r   )r   s   "r   r   rS   f   s   € ÷ =ñ = ð =Ð-Hñ =r   c                óÒ   € V P                  4       p\        \        P                  ^,           R7      pV F  pV! V4       K  	  VP                  P                  VP                  4       3# )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)
)Ú
stackDepth)r^   r   ÚdefaultStackDepthr5   ÚrecordsrI   )r;   ra   ÚplrV   Úevents   &*   r   ÚlogEventÚSTDLibLogObserverTests.logEventf   s`   € ð �^‰^ÓˆÜ$ô )×:Ñ:Øõô
ˆó ˆEÙ�UŽOñ ð ×!Ñ!×)Ñ)¨2¯?©?Ó+<Ð<Ð<r   c               ó   € V ^8„  d   QhRR/# r)   r   )r   s   "r   r   rS   |   s   € ÷ 5ñ 5˜4ñ 5r   c                ó¨   € V P                  / 4      w  rV P                  \        V4      ^4       V P                  V^ ,          P                  R4       R# )z
Logger name.
ÚtwistedN)rh   ÚassertEqualÚlenÚname©r;   re   r9   s   &  r   Ú	test_nameÚ STDLibLogObserverTests.test_name|   s@   € ð Ÿ-™-¨Ó+‰ˆà×Ñœ˜W› qÔ)Ø×Ñ˜ �Ÿ™¨)Ö4r   c               ó   € V ^8„  d   QhRR/# r)   r   )r   s   "r   r   rS   …   s   € ÷ !Jñ !J˜Tñ !Jr   c                óÞ  € R\         P                  \        P                  \         P                  \        P
                  \         P                  \        P                  \         P                  \        P                  \         P                  \        P                  \         P                  /p. pVP                  4        F.  w  r4/ pVe   W5R&   \        V4      VR&   VP                  V4       K0  	  V P                  ! V!  w  rgV P!                  \#        V4      \#        V4      4       \%        \#        V4      4       F2  pV P!                  Wh,          P&                  W(,          R,          4       K4  	  R# )z
Log levels.
NÚ	log_levelÚ
py_levelno)r2   ÚINFOr   Údebugr3   ÚinfoÚwarnÚWARNINGÚerrorÚERRORÚcriticalÚCRITICALÚitemsÚintÚappendrh   rm   rn   ÚrangeÚlevelno)	r;   ÚlevelMappingra   ÚlevelÚpyLevelrg   re   r9   Úis	   &        r   Útest_levelsÚ"STDLibLogObserverTests.test_levels…   s  € ð
 ”*—/‘/Ü�N‰NœJ×,Ñ,Ü�M‰Mœ:Ÿ?™?Ü�M‰Mœ:×-Ñ-Ü�N‰NœJ×,Ñ,Ü×Ñœz×2Ñ2ð
ˆð ˆØ*×0Ñ0Ö2‰NˆEØˆEð Ò Ø%*�kÑ"ô #& g£,ˆE�,Ñà�M‰M˜%Ö ñ 3ð Ÿ-š-¨Ñ0‰ˆØ×Ñœ˜W›¤s¨<Ó'8Ô9ô ”s˜7“|Ö$ˆAØ×Ñ˜W�Z×/Ñ/°µ¸<Õ1HÖIó %r   c               ó   € V ^8„  d   QhRR/# r)   r   )r   s   "r   r   rS   ¨   s   € ÷ /ñ / ñ /r   c                óJ  € \        4       w  rV P                  / 4      w  r4V P                  \        V4      ^4       V P                  V^ ,          P                  V4       V P                  V^ ,          P
                  V4       V P                  V^ ,          P                  4       R# )zJ
C{pathname}, C{lineno}, C{exc_info}, C{func} is set properly on
records.
N)r%   rh   rm   rn   ÚpathnameÚlinenoÚassertIsNoneÚexc_info)r;   ÚfilenameÚlogLinere   r9   s   &    r   Útest_callerInfoÚ&STDLibLogObserverTests.test_callerInfo¨   s~   € ô
 %›JÑˆØŸ-™-¨Ó+‰ˆà×Ñœ˜W› qÔ)Ø×Ñ˜ �×,Ñ,¨hÔ7Ø×Ñ˜ �×*Ñ*¨GÔ4Ø×Ñ˜' !�*×-Ñ-Ö.r   c               ó   € V ^8„  d   QhRR/# r)   r   )r   s   "r   r   rS   ¹   s   € ÷ 	.ñ 	. $ñ 	.r   c                ó  € \        RRR7      pV P                  V4      w  r#V P                  \        V4      ^4       V P                  \	        V^ ,          P
                  4      R4       V P                  V^ ,          P                  R4       R# )z<
Basic formattable event passes the format along correctly.
úHello, {who}!Údude©Ú
log_formatÚwhozHello, dude!Nr   )Údictrh   rm   rn   rD   ÚmsgÚargs©r;   rg   re   r9   s   &   r   Útest_basicFormatÚ'STDLibLogObserverTests.test_basicFormat¹   si   € ô  °VÔ<ˆØŸ-™-¨Ó.‰ˆà×Ñœ˜W› qÔ)Ø×Ñœ˜W Q�ZŸ^™^Ó,¨nÔ=Ø×Ñ˜ �Ÿ™¨"Ö-r   c               ó   € V ^8„  d   QhRR/# r)   r   )r   s   "r   r   rS   Ä   s   € ÷ Jñ J¨$ñ Jr   c                óÐ   € \        RRR7      pV P                  V4      w  r#V P                  \        V4      ^4       V P	                  VP                  R4      \        V4      4       R# )z,
Basic formattable event renders correctly.
r—   r˜   r™   z:Hello, dude!
N)rœ   rh   rm   rn   Ú
assertTrueÚendswithÚreprrŸ   s   &   r   Útest_basicFormatRenderedÚ/STDLibLogObserverTests.test_basicFormatRenderedÄ   sP   € ô  °VÔ<ˆØŸ-™-¨Ó.‰ˆà×Ñœ˜W› qÔ)Ø�‰˜Ÿ™Ð(9Ó:¼DÀ»LÖIr   c               ó   € V ^8„  d   QhRR/# r)   r   )r   s   "r   r   rS   Î   s   € ÷ 2ñ 2˜tñ 2r   c                óº   € V P                  / 4      w  rV P                  \        V4      ^4       V P                  \        V^ ,          P                  4      R4       R# )z
Event with no format.
r-   N)rh   rm   rn   rD   r�   rp   s   &  r   Útest_noFormatÚ$STDLibLogObserverTests.test_noFormatÎ   sE   € ð Ÿ-™-¨Ó+‰ˆà×Ñœ˜W› qÔ)Ø×Ñœ˜W Q�ZŸ^™^Ó,¨bÖ1r   c               ó   € V ^8„  d   QhRR/# r)   r   )r   s   "r   r   rS   ×   s   € ÷ 3ñ 3˜dñ 3r   c                ó<  € R R lp V! 4        \        RRXR7      pV P                  V4      w  rEV P	                  \        V4      ^4       V P                  RV4       V P                  RV4       V P                  RV4       R#   \          d    \        4       p L‹i ; i)	z;
An event with a failure logs the failure details as well.
c               ó   € V ^8„  d   QhRR/# r)   r   )r   s   "r   r   Ú9STDLibLogObserverTests.test_failure.<locals>.__annotate__Ü   ó   € ÷ 	ñ 	˜dñ 	r   c                 ó   € ^^ ,           R# ©é   Nr   r   r   r   Úfailing_funcÚ9STDLibLogObserverTests.test_failure.<locals>.failing_funcÜ   ó   € Ø��EˆEr   úHi momÚme©rš   r›   Úlog_failureúin failing_funcÚZeroDivisionErrorN)r½   r   rœ   rh   rm   rn   ÚassertIn©r;   rµ   Úfailurerg   re   r9   s   &     r   Útest_failureÚ#STDLibLogObserverTests.test_failure×   s‰   € õ
	ð	 ÙŒNô  ¨dÀÔHˆØŸ-™-¨Ó.‰ˆà×Ñœ˜W› qÔ)Ø�‰�h Ô'Ø�‰Ð'¨Ô0Ø�‰Ð)¨6Ö2øô !ô 	 Ü“iŠGð	 ús   ˆB ÂBÂBc               ó   € V ^8„  d   QhRR/# r)   r   )r   s   "r   r   rS   ì   s   € ÷ 3ñ 3 Tñ 3r   c                ó\  € R R lp V! 4        \        RRXR7      pV P	                  V4      w  rEV P                  \        V4      ^4       V P                  RV4       V P                  RV4       V P                  RV4       R#   \          d    \        4       pTP                  4         L›i ; i)	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.
c               ó   € V ^8„  d   QhRR/# r)   r   )r   s   "r   r   Ú@STDLibLogObserverTests.test_cleanedFailure.<locals>.__annotate__ó   r±   r   c                 ó   € ^^ ,           R# r³   r   r   r   r   rµ   Ú@STDLibLogObserverTests.test_cleanedFailure.<locals>.failing_funcó   r·   r   r¸   r¹   rº   r¼   r½   N)r½   r   ÚcleanFailurerœ   rh   rm   rn   r¾   r¿   s   &     r   Útest_cleanedFailureÚ*STDLibLogObserverTests.test_cleanedFailureì   s•   € õ	ð	#ÙŒNô
  ¨dÀÔHˆØŸ-™-¨Ó.‰ˆà×Ñœ˜W› qÔ)Ø�‰�h Ô'Ø�‰Ð'¨Ô0Ø�‰Ð)¨6Ö2øô !ô 	#Ü“iˆGØ× Ñ Ö"ð	#ús   ˆB Â%B+Â*B+r   N)r   rK   rL   rM   rN   rX   r^   rh   rq   r‰   r“   r    r§   r«   rÁ   rÊ   rO   r   r   r   rQ   rQ   M   sF   † ñõõõ=õ,5õ!JõF/õ"	.õJõ2õ3÷*3ñ 3r   rQ   c               ó   € V ^8„  d   QhRR/# )r   r   z,tuple[StreamHandler[TextIOWrapper], BytesIO]r   )r   s   "r   r   r     s   € ÷ ñ ÐGñ r   c                 ó¦   € \        4       p \        P                  p\        V RRR7      p\	        V4      p\        V4      pVP                  V4       W@3# )z‡
Construct a 2-tuple of C{(StreamHandler, BytesIO)} for testing interaction
with the 'logging' module.

@return: handler and io object
rF   Ú
)ÚencodingÚnewline)r   r2   ÚBASIC_FORMATr   r   r   ÚsetFormatter)r9   ÚtemplateÚstreamÚ	formatterÚhandlers        r   r7   r7     sN   € ô ‹Y€FÜ×&Ñ&€HÜ˜6¨G¸TÔB€FÜ˜(Ó#€IÜ˜FÓ#€GØ×Ñ˜Ô#Øˆ?Ðr   c                  ó2   € ] tR tRtRtR R ltR R ltRtR# )	r4   i  zF
A L{py_logging.Handler} that remembers all logged records in a list.
c               ó   € V ^8„  d   QhRR/# r)   r   )r   s   "r   r   ÚBufferedHandler.__annotate__  s   € ÷ +ñ +˜$ñ +r   c                óR   € \         P                  P                  V 4       . V n        R# )z%
Initialize this L{BufferedHandler}.
N)r2   ÚHandlerr<   re   r:   s   &r   r<   ÚBufferedHandler.__init__  s   € ô 	×Ñ×#Ñ# DÔ)Ø(*ˆŽr   c               ó    € V ^8„  d   QhRRRR/# )r   Úrecordr   r   r*   r   )r   s   "r   r   rÙ   !  s   € ÷ $ñ $˜9ð $¨ñ $r   c                ó<   € V P                   P                  V4       R# )z
Remember the record.
N)re   r‚   )r;   rÞ   s   &&r   ÚemitÚBufferedHandler.emit!  s   € ð 	�‰×Ñ˜FÖ#r   )re   N)r   rK   rL   rM   rN   r<   rà   rO   r   r   r   r4   r4     s   † ñõ+÷$ñ $r   r4   )+rN   Ú
__future__r   Úloggingr2   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'   ÚTestCaserQ   r7   rÛ   r4   r   r   r   Ú<module>rð      s{   ðñõ #ã Û 
Ý !ß %ß BÓ Bß (Ñ (å @Ý .å .Ý *Ý "ß 0Ý Ý 'õ÷!6ñ !6ôHu3˜X×.Ñ.ô u3õpô $�j×(Ñ(ö $r   