ó
    Ö›‘h¯%  ã                   óÀ   • S r SSKrSSKJr  SSKJrJrJr   SSKJ	r	  SSKJr  SSKJrJrJrJr  SS	KJr  SS
KJr   " S S\R,                  5      rg! \
 a    Sr	 N>f = f)z+
Test cases for L{twisted.logger._format}.
é    N)Úcount)ÚAnyÚCallableÚOptional)Útzset)Úunittesté   )ÚKeyFlattenerÚ
aFormatterÚextractFieldÚflattenEvent)ÚformatEvent)ÚLogEventc                   óÊ   • \ rS rSrSrSS jrSS jrSS jrSS jr SS	\	\
   S\
4S
 jjrSS jrSS jrSS jrS 4S\\
/\
4   SS4S jjrSS jrSS jrSS jrSS jrSrg)ÚFlatFormattingTestsé   z1
Tests for flattened event formatting functions.
ÚreturnNc           	      ó  ^• [        5       m " S S5      n[        SU4S jU" 5       SSSS9n[        U5        [        U5      nUS		 US
	 [        R                  " [        R
                  " U5      5      nU R                  [        U5      S5        g)a  
L{flattenEvent} will "flatten" an event so that, if scrubbed of all but
serializable objects, it will preserve all necessary data to be
formatted once serialized.  When presented with an event thusly
flattened, L{formatEvent} will produce the same output.
c                   ó   • \ rS rSrSrSrg)Ú;FlatFormattingTests.test_formatFlatEvent.<locals>.Ephemeralé%   Úvalue© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú	attributeÚ__static_attributes__r   ó    ÚdC:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\twisted/logger/test/test_flatten.pyÚ	Ephemeralr   %   s   † Ø‹Ir    r"   z€callable: {callme()} attribute: {object.attribute} numrepr: {number!r} numstr: {number!s} strrepr: {string!r} unistr: {unistr!s}c                  ó   >• [        T 5      $ ©N)Únext©Úcounters   €r!   Ú<lambda>Ú:FlatFormattingTests.test_formatFlatEvent.<locals>.<lambda>1   s	   ø€ œ4 œ=r    é   Úhelloô   Ã¶)Ú
log_formatÚcallmeÚobjectÚnumberÚstringÚunistrr.   r/   uM   callable: 0 attribute: value numrepr: 7 numstr: 7 strrepr: 'hello' unistr: Ã¶N)r   Údictr   ÚjsonÚloadsÚdumpsÚassertEqualr   )Úselfr"   Úevent1Úevent2Úevent3r'   s        @r!   Útest_formatFlatEventÚ(FlatFormattingTests.test_formatFlatEvent   s�   ø€ ô “'ˆ÷	 ñ 	 ô ð%ô )Ù“;ØØØñ
ˆô  	�VÔä�f“ˆØ�8ÐØ�8ÐÜ—’œDŸJšJ vÓ.Ó/ˆØ×ÑÜ˜Óðõ
	
r    c                 óÔ   • [        SSS9n[        U5        [        R                  " [        R                  " U5      5      nU R                  [        U5      R                  S5      5        g)z8
If the format string is invalid, an error is produced.
zstrrepr: {string!X}r+   )r-   r1   zUnable to format eventN)r3   r   r4   r5   r6   Ú
assertTruer   Ú
startswith)r8   r9   r:   s      r!   Útest_formatFlatEventBadFormatÚ1FlatFormattingTests.test_formatFlatEventBadFormatJ   sR   € ô Ø-Øñ
ˆô
 	�VÔÜ—’œDŸJšJ vÓ.Ó/ˆà�‰œ FÓ+×6Ñ6Ð7OÓPÕQr    c                 ó¦   •  " S S5      nU" 5       n[        SUS9n[        U5        UR                  5         U R                  [	        U5      S5        g)zm
L{formatEvent} will prefer the stored C{str()} or C{repr()} value for
an object, in case the other version.
c                   ó4   • \ rS rSrSrSrS	S jrS\4S jrSr	g)
ÚPFlatFormattingTests.test_formatFlatEventWithMutatedFields.<locals>.Unpersistableé^   z
Unpersitable object.
Fr   Nc                 ó   • SU l         g)z
Self destruct.
TN©Ú
destructed©r8   s    r!   ÚselfDestructÚ]FlatFormattingTests.test_formatFlatEventWithMutatedFields.<locals>.Unpersistable.selfDestructe   s   € ð #'�•r    c                 ó(   • U R                   (       a  gg)Nzpost-serialization garbagezun-persistablerH   rJ   s    r!   Ú__repr__ÚYFlatFormattingTests.test_formatFlatEventWithMutatedFields.<locals>.Unpersistable.__repr__k   s   € Ø—?—?Ø7à+r    rH   ©r   N)
r   r   r   r   Ú__doc__rI   rK   ÚstrrN   r   r   r    r!   ÚUnpersistablerE   ^   s   † ñð ˆJô'ð, #÷ ,r    rS   zunpersistable: {unpersistable})r-   Úunpersistablezunpersistable: un-persistableN)r3   r   rK   r7   r   )r8   rS   Úupr9   s       r!   Ú%test_formatFlatEventWithMutatedFieldsÚ9FlatFormattingTests.test_formatFlatEventWithMutatedFieldsX   sK   € ÷	,ñ 	,ñ& ‹_ˆÜÐ!AÐQSÑTˆä�VÔØ
�‰Ôà×Ñœ VÓ,Ð.MÕNr    c                 ó  • S[         S[         4S jn U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S	5        U R                  U" S
5      S5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        [        5       n[        R
                  " S5      u  u  nnnnUc   eU R                  UR                  XEU5      S5        U R                  UR                  XEU5      S5        g! [         a    e f = f)zP
Test that L{KeyFlattener.flatKey} returns the expected keys for format
fields.
Úformatr   c                 ó’   • [         R                  " U 5       H'  u  nnnnUc   e[        5       R                  X#U5      s  $     S5       e)Nz*Unable to derive key from format: {format})r   Úparser
   ÚflatKey)rY   ÚliteralTextÚ	fieldNameÚ
formatSpecÚ
conversions        r!   ÚkeyFromFormatÚ=FlatFormattingTests.test_keyFlattening.<locals>.keyFromFormat   sW   € ô ×!Ò! &Ö)ñØØØØà Ñ,Ð,Ð,Ü#“~×-Ñ-¨iÀZÓPÒPñ *ð GÐFÓF�5r    z{}z!:z{foo}zfoo!:z{foo!s}zfoo!s:z{foo!r}zfoo!r:z{foo:%s}zfoo!:%sz{foo:!}zfoo!:!z{foo::}zfoo!::z
{foo!s:%s}zfoo!s:%sz	{foo!s:!}zfoo!s:!z	{foo!s::}zfoo!s::z{x}Nzx!:zx!:/2)rR   r7   Ú
ValueErrorr
   r   r[   r\   )r8   ra   ÚsameFlattenerr]   r^   r_   r`   s          r!   Útest_keyFlatteningÚ&FlatFormattingTests.test_keyFlatteningy   s‹  € ð		G¤#ð 		G¬#ô 		Gð	Ø×Ñ™]¨4Ó0°$Ô7ð 	×Ñ™ wÓ/°Ô9ð 	×Ñ™ yÓ1°8Ô<Ø×Ñ™ yÓ1°8Ô<ð 	×Ñ™ zÓ2°IÔ>Ø×Ñ™ yÓ1°8Ô<Ø×Ñ™ yÓ1°8Ô<ð 	×Ñ™ |Ó4°jÔAØ×Ñ™ {Ó3°YÔ?Ø×Ñ™ {Ó3°YÔ?ä$›ˆô ×Ò˜UÓ#ñ	
ñØØØØð Ñ$Ð$Ð$à×ÑØ×!Ñ! )¸ÓDÀeô	
ð 	×ÑØ×!Ñ! )¸ÓDÀgõ	
øôK ó 	ð ð		ús   “E4 Å4F Úeventc                 ó¦   ^• Uc&  [        5       m " U4S jS5      n[        SU" 5       S9n[        U5        U R                  [	        U5      S5        U$ )z¯
The same format field used twice in one event is rendered twice.

@param event: An event to flatten.  If L{None}, create a new event.
@return: C{event} or the event created.
c                   ó.   >• \ rS rSrSrS\4U 4S jjrSrg)ÚJFlatFormattingTests._test_formatFlatEvent_fieldNamesSame.<locals>.CountStréÂ   z
Hack
r   c                 ó,   >• [        [        T5      5      $ r$   )rR   r%   )r8   r'   s    €r!   Ú__str__ÚRFlatFormattingTests._test_formatFlatEvent_fieldNamesSame.<locals>.CountStr.__str__Ç   s   ø€ Üœt G›}Ó-Ð-r    r   N)r   r   r   r   rQ   rR   rm   r   r&   s   €r!   ÚCountStrrj   Â   s   ø† ñð. S÷ .ò .r    ro   z{x} {x}©r-   Úxz0 1)r   r3   r   r7   r   )r8   rg   ro   r'   s      @r!   Ú$_test_formatFlatEvent_fieldNamesSameÚ8FlatFormattingTests._test_formatFlatEvent_fieldNamesSame¶   sS   ø€ ð ‰=Ü“gˆG÷.ô .ô Ø$Ù“*ñˆEô
 	�UÔØ×Ñœ UÓ+¨UÔ3àˆr    c                 ó$   • U R                  5         g)zB
The same format field used twice in one event is rendered twice.
N©rr   rJ   s    r!   Ú"test_formatFlatEventFieldNamesSameÚ6FlatFormattingTests.test_formatFlatEventFieldNamesSameÔ   s   € ð 	×1Ñ1Õ3r    c                 óF   • U R                  5       nU R                  U5        g)zJ
The same event flattened twice gives the same (already rendered)
result.
Nru   )r8   rg   s     r!   Ú'test_formatFlatEventFieldNamesSameAgainÚ;FlatFormattingTests.test_formatFlatEventFieldNamesSameAgainÚ   s    € ð
 ×9Ñ9Ó;ˆØ×1Ñ1°%Õ8r    c                 óh   • [        SSS9n[        U5        [        U5      nU R                  US5        g)z[
L{formatEvent} will handle a flattened event with tailing text after
a replacement field.
ztest {x} trailingr   rp   ztest value trailingN)r3   r   r   r7   )r8   rg   Úresults      r!   Ú test_formatEventFlatTrailingTextÚ4FlatFormattingTests.test_formatEventFlatTrailingTextâ   s9   € ô
 Ø*Øñ
ˆô 	�UÔä˜UÓ#ˆà×Ñ˜Ð!6Õ7r    c                 ó   • U $ r$   r   )rq   s    r!   r(   ÚFlatFormattingTests.<lambda>ò   s   € Áqr    ÚflattenFirstc                 ó  ^^•  " S S5      m " U4S jS5      n[        SU" 5       S9nU" U5      mS[        S[        4U4S	 jjnU R                  U" S
5      S5        U R                  U" S5      S5        U R                  U" S5      S5        g)zt
L{extractField} will extract a field used in the format string.

@param flattenFirst: callable to flatten an event
c                   ó"   • \ rS rSrS\4S jrSrg)Ú=FlatFormattingTests.test_extractField.<locals>.ObjectWithRepréú   r   c                 ó   • g)NÚreprr   rJ   s    r!   rN   ÚFFlatFormattingTests.test_extractField.<locals>.ObjectWithRepr.__repr__û   s   € Ør    r   N)r   r   r   r   rR   rN   r   r   r    r!   ÚObjectWithReprr„   ú   s   † ð #÷ r    r‰   c                   ó0   >• \ rS rSrSU 4S jjrSS jrSrg)Ú8FlatFormattingTests.test_extractField.<locals>.Somethingéþ   Nc                 ó,   >• SU l         T" 5       U l        g )Nr*   ©r0   r/   )r8   r‰   s    €r!   Ú__init__ÚAFlatFormattingTests.test_extractField.<locals>.Something.__init__ÿ   s   ø€ Ø�”Ù,Ó.�•r    c                 ó   • [        S5      e)NzJust in case.)ÚNotImplementedErrorrJ   s    r!   Ú__getstate__ÚEFlatFormattingTests.test_extractField.<locals>.Something.__getstate__  s   € Ü)¨/Ó:Ð:r    rŽ   rP   )r   r   r   r   r�   r“   r   )r‰   s   €r!   Ú	Somethingr‹   þ   s   ø† ÷/÷;r    r•   z%{something.number} {something.object})r-   Ú	somethingÚfieldr   c                 ó   >• [        U T5      $ r$   )r   )r—   Ú	flatteneds    €r!   ÚextractÚ6FlatFormattingTests.test_extractField.<locals>.extract  s   ø€ Ü  yÓ1Ð1r    zsomething.numberr*   zsomething.number!sÚ7zsomething.object!sr‡   N)r3   rR   r   r7   )r8   r�   r•   rg   rš   r‰   r™   s        @@r!   Útest_extractFieldÚ%FlatFormattingTests.test_extractFieldñ   sŽ   ù€ ÷	ñ 	÷	;ô 	;ô Ø>Ù“kñ
ˆñ
 ! Ó'ˆ	ð	2œ3ð 	2¤3÷ 	2ð 	×Ñ™Ð!3Ó4°aÔ8Ø×Ñ™Ð!5Ó6¸Ô<Ø×Ñ™Ð!5Ó6¸Õ?r    c                 óH   • S[         S[         4S jnU R                  U5        g)zQ
L{extractField} behaves identically if the event is explicitly
flattened first.
rg   r   c                 ó   • [        U 5        U $ r$   )r   )rg   s    r!   r™   ÚDFlatFormattingTests.test_extractFieldFlattenFirst.<locals>.flattened  s   € Ü˜ÔØˆLr    N)r   r�   )r8   r™   s     r!   Útest_extractFieldFlattenFirstÚ1FlatFormattingTests.test_extractFieldFlattenFirst  s%   € ð	œXð 	¬(ô 	ð 	×Ñ˜yÕ)r    c                 óN   • SSS.n[        U5        U R                  USSS.5        g)zD
L{flattenEvent} will do nothing to an event with no format string.
Úbé   )ÚaÚcN©r   r7   ©r8   Ú
inputEvents     r!   Útest_flattenEventWithoutFormatÚ2FlatFormattingTests.test_flattenEventWithoutFormat   s+   € ð  QÑ'ˆ
Ü�ZÔ Ø×Ñ˜¨3°QÑ%7Õ8r    c                 óR   • SSSS.n[        U5        U R                  USSSS.5        g)zb
L{flattenEvent} will do nothing to an event with a format string that
contains no format fields.
r¥   r¦   zsimple message©r§   r¨   r-   Nr©   rª   s     r!   Ú test_flattenEventWithInertFormatÚ4FlatFormattingTests.test_flattenEventWithInertFormat(  s8   € ð
  QÐ6FÑGˆ
Ü�ZÔ Ø×ÑØàØØ.ñõ	
r    c                 óR   • SSSS.n[        U5        U R                  USSSS.5        g)zJ
L{flattenEvent} will do nothing to an event with log_format set to
None.
r¥   r¦   Nr¯   r©   rª   s     r!   Útest_flattenEventWithNoneFormatÚ3FlatFormattingTests.test_flattenEventWithNoneFormat8  s7   € ð
  Q°dÑ;ˆ
Ü�ZÔ Ø×ÑØàØØ"ñõ	
r    r   rP   r$   )r   r   r   r   rQ   r<   rA   rV   re   r   r   rr   rv   ry   r}   r   r�   r¢   r¬   r°   r³   r   r   r    r!   r   r      s�   † ñô,
ô\RôOôB;
ð| +/ñØ˜hÑ'ðà	õô<4ô9ô8ñ  >Iñ!@Ø$ h Z°Ð%9Ñ:ð!@à	õ!@ôF
*ô9ô
÷ 
r    r   )rQ   r4   Ú	itertoolsr   Útypingr   r   r   Útimer   ÚImportErrorÚtwisted.trialr   Ú_flattenr
   r   r   r   Ú_formatr   Ú_interfacesr   ÚTestCaser   r   r    r!   Ú<module>r¾      s[   ðñó Ý ß *Ñ *ðÝõ #ß KÓ KÝ !Ý "ôo
˜(×+Ñ+õ o
øð ó Ø‚Eðús   ˜A ÁAÁA