403Webshell
Server IP : 121.121.20.254  /  Your IP : 216.73.216.202
Web Server : Microsoft-IIS/10.0
System : Windows NT WEB-SERVER 10.0 build 20348 (Windows Server 2022) AMD64
User : IUSR ( 0)
PHP Version : 8.3.28
Disable Function : NONE
MySQL : ON  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /Python313/Lib/test/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /Python313/Lib/test/__pycache__/test_logging.cpython-313.opt-1.pyc
�

��i�0���SrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK
r
SSKrSSKrSSK
r
SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKJrJr SSKJr SSKJr SSKJr SSKJ r  SSKJ!r! SS	KJ"r" SS
KJ#r# SSKJ$r$ SSK%J&r& SS
K'J(r( SSK)r)SSK*r*SSK+r+SSK,r,SSK-r-SSK.r.SSK/r/SSK0J1r1J2r2 SSK3J4r4 SSK5J6r6J7r7 SSK8J9r9J:r:J;r;J<r< SSK=r=SSK>r>SSK?r?SSKArA\-R�"\R�S5rD\-R�"\R�"SS9S5rF"SS\-R�5rH"SS\H5rI"SS\H5rJSrKSrLSrMSrNS rOS!rPS"rQS#rRS$rSS%rT\U"\T\KS&-5rV\KS'\LS(\MS)\NS*\OS+\PS,\QS-\RS.\SS/\TS00
rW"S1S2\R�5rY"S3S4\R�5rZ"S5S6\H5r[S7r\"S8S9\H5r]"S:S;\^5r_"S<S=\R�5ra"S>S?\^5rb"S@SA\H5rc"SBSC\$R�5re"SDSE\^5rf"SFSG\f\15rg"SHSI\f\;5rh"SJSK\f\95ri\j"\SL5(a"SMSN\h5rk"SOSP\i5rl\R�"5\!R�"5"SQSR\H555ro"SSST\H5rp"SUSV\R�5rrSWrs"SXSY\H5rt\R�"5\!R�"5"SZS[\H555ru\-R�"\j"\SL5S\5"S]S^\u55rw\R�"5\!R�"5"S_S`\H555rx\-R�"\j"\SL5S\5"SaSb\x55ry\R�"5\!R�"5"ScSd\H555rz\-R�"\j"\SL5S\5"SeSf\z55r{\-R�"\ R�Sg5"ShSi\z55r}\R�"5\!R�"5"SjSk\H555r~"SlSm\H5r"SnSo\H5r�"SpSq\H5r�S�Srjr�"SsSt5r�Sur�"SvSw\R�5r�"SxSy\GRGR5r�"SzS{\GR5r�"S|S}5r�"S~S\�5r�"S�S�\�5r�"S�S�5r�S�r�S�S�jr�"S�S�\H5r�"S�S�\H5r�"S�S�\H5r�"S�S�\GR(5r�"S�S�\H5r�\!R�"5"S�S�\H55r�\j"\GRS�5(a.SSK�r�SSK3J4r4 \F\!R�"5"S�S�\H555r�\GR4"S5r�"S�S�\GR85r�\�"5r�"S�S�5r�"S�S�\-R�\�5r�"S�S�\GRB5r�"S�S�\-R�5r�"S�S�\H5r�"S�S�\H5r�"S�S�5r�"S�S�\GRN5r�"S�S�\H5r�"S�S�\H5r�"S�S�\H5r�"S�S�\-R�5r�"S�S�\-R�\(5r�"S�S�\GR\5r�"S�S�5r�"S�S�\GR\5r�"S�S�\H\�5r�"S�S�\H5r�"S�S�\�5r�"S�S�\�5r�"S�S�\�5r�S�r�S�S�S�S�S�S�\�"S�S�S�944H8ur�r�S�H,r�\�\�\�4S�jr�S�\�-r�\�S&:�a\�S�-
r�\�\�l�\�"\�\�\�5 M. M: \-R�"\=S�5"S�S�\H55r�"S�S�\-R�5r�S�r�\�S�:Xa\-GR�"5 gg!\@a
 S=r==r>r?GN�f=f!\@a GN�f=f)�zoTest harness for the logging module. Run all tests.

Copyright (C) 2001-2022 Vinay Sajip. All Rights Reserved.
�N)�assert_python_ok�assert_python_failure)�support)�
import_helper)�	os_helper)�
socket_helper)�threading_helper)�warnings_helper)�asyncore)�smtpd)�TestHandler)�ExtraAssertions)�
HTTPServer�BaseHTTPRequestHandler)�patch)�urlparse�parse_qs)�ThreadingUDPServer�DatagramRequestHandler�ThreadingTCPServer�StreamRequestHandlerz?libasan has a pthread_create() dead lock related to thread+forkT)�threadz'TSAN doesn't support threads after forkc�@�\rSrSrSrSrSrSrSrSr	SS	jr
S
rSrg)
�BaseTest�[zBase class for logging tests.z&%(name)s -> %(levelname)s: %(message)sz^([\w.]+) -> (\w+): (\d+)$rc���[R"5Ul[R"5R
Rn[R [RR5Ul
[RSSUlUR5=Ul
n[RR5Ul[R R5Ul0=UlnUHn['X$SS5X4'M SSS5 [R"S5Ul[R"S5Ul[R"S5UlUR,R/5Ul[2R4"5UlUR,R9[R:5 [R<"UR65Ul[R@"URB5Ul"UR>RGURD5 UR(RI5(a;UR(RJUR,RJ-n[MSU-5eUR*RI5(a;UR*RJUR,RJ-n[MSU-5eUR,ROUR>5 URQUR(RI55 URQUR*RI55 g!,(df   GN]=f)zpSetup the default logging stream to an internal StringIO instance,
so that we can examine log output as we want.N�disabledu«×»uĿÖG�zUnexpected handlers: %s))r	�threading_setup�_threading_key�logging�	getLogger�manager�
loggerDict�_lock�	_handlers�copy�saved_handlers�_handlerList�saved_handler_list�
saved_loggers�_nameToLevel�saved_name_to_level�_levelToName�saved_level_to_name�
logger_states�getattr�logger1�logger2�root_logger�getEffectiveLevel�original_logging_level�io�StringIO�stream�setLevel�DEBUG�
StreamHandler�	root_hdlr�	Formatter�
log_format�root_formatter�setFormatter�hasHandlers�handlers�AssertionError�
addHandler�
assertTrue)�self�logger_dictr+r0�name�hlists      �&C:\Python313\\Lib\test\test_logging.py�setUp�BaseTest.setUpcsm��/�>�>�@����'�'�)�1�1�<�<��
�]�]�")�"3�"3�"8�"8�":�D��&-�&:�&:�1�&=�D�#�1<�1A�1A�1C�C�D���'.�';�';�'@�'@�'B�D�$�'.�';�';�'@�'@�'B�D�$�13�3�D���%��&-�m�.A�.8�$�'@�
�#�&���(�(��8����(�(�)=�>���"�,�,�R�0���&*�&6�&6�&H�&H�&J��#��k�k�m������!�!�'�-�-�0� �.�.�t�{�{�;���%�/�/����@������#�#�D�$7�$7�8��<�<�#�#�%�%��L�L�)�)�D�,<�,<�,E�,E�E�E� �!:�U�!B�C�C��<�<�#�#�%�%��L�L�)�)�D�,<�,<�,E�,E�E�E� �!:�U�!B�C�C����#�#�D�N�N�3�������0�0�2�3�������0�0�2�3�?�]�s
�B<M&�&
M5c��URR5 URRUR5 URR
(aaURR
SnURRU5 UR5 URR
(aMaURR
UR5 [R [RR5 [RRUR5 [RR5 [RRUR5 [R R5 [R RUR"5 UR$[R&SS&[R("5R*nSUlUR.nUR5 URUR05 UR2nUR2H nXEcM
XEUR0UlM" SSS5 UR75 [8R:"UR<6 g!,(df   N<=f)zBRemove our logging stream, and restore the original logging
level.rN)r9�closer4�
removeHandlerr=rCr:r6r!r%r.�clear�updater/r,r-r&r(r*r)r"r#�disabler$r+r0r�
doCleanupsr	�threading_cleanupr )rG�hr#r$r0rIs      rK�tearDown�BaseTest.tearDown�s���	
���������&�&�t�~�~�6����'�'�� � �)�)�!�,�A����*�*�1�-�
�G�G�I����'�'�'�	
���!�!�$�"=�"=�>�
�]�]�� � �&�&�(�� � �'�'��(@�(@�A�� � �&�&�(�� � �'�'��(@�(@�A����#�#�%����$�$�T�%8�%8�9�&*�&=�&=�G� � ��#��'�'�)�1�1�G��G�O� �+�+�J��������d�0�0�1� �.�.�M��*�*�� �&�2�8E�8K�D�&�&�t�,�5�+��$	
�����*�*�D�,?�,?�@�'�]�s�1E.J3�#J3�3
KNc�.�U=(d URn[R"U=(d UR5nUR	5R5nUR
[U5[U55 [XA5HZupVURU5nU(dURSU-5 UR
[UR55U5 M\ UR5nU(aURSU-5 gg)z�Match the collected log lines against the regular expression
self.expected_log_pat, and compare the extracted group values to
the expected_values list of tuples.z*Log line does not match expected pattern:
z'Remaining output at end of log stream:
N)r9�re�compile�expected_log_pat�getvalue�
splitlines�assertEqual�len�zip�search�fail�tuple�groups�read)	rG�expected_valuesr9�pat�actual_lines�actual�expected�match�ss	         rK�assert_log_lines�BaseTest.assert_log_lines�s����&�4�;�;���j�j��5�� 5� 5�6�����(�3�3�5������\�*�C��,@�A� #�L� B��F��J�J�v�&�E���	�	�G�"�#�$����U�5�<�<�>�2�H�=�!C�
�K�K�M����I�I�@�1�D�E�
�c�J�U=RS-
slSUR-$)zEGenerate a message consisting solely of an auto-incrementing
integer.�z%d)�message_num�rGs rK�next_message�BaseTest.next_message�s&��	
���A����d�&�&�&�&rp)r r2r3r0r6r@r=r4r*r(r/r+r-r9�NN)
�__name__�
__module__�__qualname__�__firstlineno__�__doc__r?r\rsrLrWrnru�__static_attributes__�rprKrr[s,��'�9�J�4���K�%4�NA�>F�$'rprc�B�\rSrSrSrSrSrSrSrSr	Sr
S	rS
rg)�BuiltinLevelsTest��z*Test builtin levels and their inheritance.c��URn[R"S5nUR[R5 [R
"[R"S505nUR[R5 [R"S5nUR[R5 UR[RU"55 URU"55 UR[RU"55 URU"55 URU"55 URU"55 UR[RU"55 URU"55 URU"55 URU"55 URU"55 URU"55 URU"55 URU"55 URU"55 UR/SQ5 g)N�ERR�INF�DEB))r��CRITICAL�1)r��ERROR�2)r�r��3)r�r��4)r��WARNING�5)r��INFO�6)r�r��7)r�r��8)r�r��9)r�r��10)r�r;�11)rur!r"r:r��
LoggerAdapterr�r;�logr��error�warning�info�debugrn)rG�mr�r�r�s     rK�	test_flat�BuiltinLevelsTest.test_flat�sr����������&�����W�]�]�#��#�#�G�$5�$5�e�$<�b�A�����W�\�\�"�����&�����W�]�]�#�	���� � �!�#�&��	�	�!�#������ � �!�#�&��	�	�!�#�����A�C�������
����� � �!�#�&��	�	�!�#�����A�C�������
��	�	�!�#��	���A�C�������
��	�	�!�#���	�	�!�#�����
�	rpc��URn[R"S5nUR[R5 [R"S5nUR[R
5 UR
[RU"55 URU"55 URU"55 URU"55 URU"55 URSS/5 g)Nr��INF.ERR)r�r�r�)r�r�r��
rur!r"r:r�r�r�r�r�r�r�r�rn)rGr�r��INF_ERRs    rK�test_nested_explicit�&BuiltinLevelsTest.test_nested_explicit�s�����������&�����W�\�\�"��$�$�Y�/��������'�	���G�$�$�a�c�*��
�
�a�c��	���������Q�S���
�
�a�c�����(�%�
�	rpc��URn[R"S5nUR[R5 [R"S5nUR[R
5 [R"S5n[R"S5n[R"S5nUR
[RU"55 URU"55 URU"55 URU"55 UR
[RU"55 URU"55 URU"55 URU"55 URU"55 URU"55 UR/SQ5 g)Nr�r��	INF.UNDEF�
INF.ERR.UNDEF�UNDEF))r�r�r�)r�r�r�)r�r�r�)r�r�r�)r�r�r�)r�r�r�r�)rGr�r�r��	INF_UNDEF�
INF_ERR_UNDEFr�s       rK�test_nested_inherited�'BuiltinLevelsTest.test_nested_inheriteds>����������&�����W�\�\�"��$�$�Y�/��������'��%�%�k�2�	��)�)�/�:�
��!�!�'�*��	�
�
�g�&�&���,����������!�#�����q�s�����'�*�*�A�C�0����A�C� �	���������a�c�"����1�3�����A�C� ����
�	rpc�H�URn[R"S5n[R"S5n[R"S5nUR[R5 UR[RU"55 URU"55 UR[RU"55 URU"55 URU"55 URU"55 UR/SQ5 g)Nr��INF.BADPARENT.UNDEF�
INF.BADPARENT))r�r�r�)r�r�r�)r�r�r�)r�r�r�)
rur!r"r:r�r��FATALr�r�rn)rGr�r��
GRANDCHILD�CHILDs     rK�test_nested_with_virtual_parent�1BuiltinLevelsTest.test_nested_with_virtual_parent.s�����������&���&�&�'<�=�
��!�!�/�2�����W�\�\�"�	���w�}�}�a�c�*�������
�	�	�'�-�-���%�
�
�
�1�3��	������
���A�C�����
�	rpc���UR[R"S5[R5 UR[R"[R5S5 g)z&See issue #22386 for more information.r�N)r_r!�getLevelNamer�rts rK�test_regression_22386�'BuiltinLevelsTest.test_regression_22386Hs@������-�-�f�5�w�|�|�D�����-�-�g�l�l�;�V�Drpc�p�[R"S5nURU[R5 g)Nr�)r!r�r_r�)rG�fatals  rK�test_issue27935�!BuiltinLevelsTest.test_issue27935Ms&���$�$�W�-�������
�
�.rpc���[R"[RS5 UR[R[RS5 UR	[R
"[R5S5 UR	[R
"[R5S5 UR	[R
"S5[R5 g)z&See issue #29220 for more information.rr��NOTSETN)r!�addLevelNamer��
addCleanupr_r�r�rts rK�test_regression_29220�'BuiltinLevelsTest.test_regression_29220Qs������W�\�\�2�.�����,�,�g�l�l�F�C�����-�-�g�l�l�;�R�@�����-�-�g�n�n�=�x�H�����-�-�h�7����Hrpr~N)
rxryrzr{r|r�r�r�r�r�r�r�r}r~rprKr�r��s,��4�-�^�.!�F�4E�
/�Irpr�c�*�\rSrSrSrSrSrSrSrg)�BasicFilterTestiYzTest the bundled Filter class.c��[R"S5nURRSnUR	U5 [R
"S5n[R
"S5n[R
"S5n[R
"S5nUR
UR55 UR
UR55 UR
UR55 UR
UR55 URSS/5 URU5 g!URU5 f=f)N�	spam.eggsr�spam�spam.eggs.fish�spam.bakedbeans�r�r�r��r�r�r�)
r!�Filterr4rC�	addFilterr"r�rurn�removeFilter)rG�filter_�handlerr��	spam_eggs�spam_eggs_fish�spam_bakedbeanss       rK�test_filter�BasicFilterTest.test_filter]s
���.�.��-���"�"�+�+�A�.��	*����g�&��$�$�V�,�D��)�)�+�6�I�$�.�.�/?�@�N�%�/�/�0A�B�O��I�I�d�'�'�)�*��N�N�4�,�,�.�/����� 1� 1� 3�4�� � ��!2�!2�!4�5��!�!�*�/�#�
�

� � ��)��G� � ��)�s�C8D;�;Ec�|�SnURRSnURU5 [R"S5n[R"S5n[R"S5n[R"S5nURUR
55 URUR
55 URUR
55 URUR
55 URSS/5 URU5 g!URU5 f=f)	Nc�j�URRS5nSRUSS5nUS:H$)N�.�r�)rI�split�join)�record�parts�prefixs   rK�
filterfunc�8BasicFilterTest.test_callable_filter.<locals>.filterfuncys5���K�K�%�%�c�*�E��X�X�e�B�Q�i�(�F��[�(�(rprr�r�r�r�r�r�)	r4rCr�r!r"r�rurnr�)rGr�r�r�r�r�r�s       rK�test_callable_filter�$BasicFilterTest.test_callable_filterus��	)�
�"�"�+�+�A�.��	-����j�)��$�$�V�,�D��)�)�+�6�I�$�.�.�/?�@�N�%�/�/�0A�B�O��I�I�d�'�'�)�*��N�N�4�,�,�.�/����� 1� 1� 3�4�� � ��!2�!2�!4�5��!�!�*�/�#�
�

� � ��,��G� � ��,�s�C8D(�(D;c��[R"5n[R"SS05nURUR	U55 g)NrIr�)r!r��
makeLogRecordrF�filter)rG�f�rs   rK�test_empty_filter�!BasicFilterTest.test_empty_filter�s7���N�N����!�!�6�;�"7�8����������$rpr~N)	rxryrzr{r|r�r�r�r}r~rprKr�r�Ys��(�*�0-�:%rpr��x�w�v�u�t�s�r�q�p�orr�Silent�Taciturn�Terse�Effusive�Sociable�Verbose�	Talkative�	Garrulous�
Chatterbox�Boringc��\rSrSrSrSrSrg)�GarrulousFilteri�z)A filter which blocks garrulous messages.c�(�UR[:g$�N)�levelno�	GARRULOUS�rGr�s  rKr��GarrulousFilter.filter�s���~�~��*�*rpr~N�rxryrzr{r|r�r}r~rprKr�r��s
��3�+rpr�c��\rSrSrSrSrSrg)�VerySpecificFilteri�z5A filter which blocks sociable and taciturn messages.c�4�UR[[4;$r)r�SOCIABLE�TACITURNrs  rKr��VerySpecificFilter.filter�s���~�~�h��%9�9�9rpr~Nrr~rprKrr�s
��?�:rprc�F�\rSrSrSrSrSrSrSrSr	Sr
S	rS
rSr
g)
�CustomLevelsAndFiltersTesti�z@Test various filtering possibilities with custom logging levels.�^[\w.]+ -> (\w+): (\d+)$c��[RU5 [R5Hup[R
"X5 M gr)rrL�my_logging_levels�itemsr!r�)rG�k�vs   rKrL� CustomLevelsAndFiltersTest.setUp�s1�����t��%�+�+�-�D�A�� � ��&�.rpc�\�[H"nURX R55 M$ gr)�LEVEL_RANGEr�ru)rG�logger�lvls   rK�log_at_all_levels�,CustomLevelsAndFiltersTest.log_at_all_levels�s!���C��J�J�s�-�-�/�0�rpc�z�S[R4Sjn[R"S5n[R"S5n[R"5n[R"5n[R
"U5n[R
"U5nUR
U5 URU5 URU5 URS5 UR5 UR5 URUR5S5 URUR5S5 g)Nr�c�@�[R"U5nSUlU$)Nznew message!)r'�msg)r�s rK�replace_message�WCustomLevelsAndFiltersTest.test_handler_filter_replaces_record.<locals>.replace_message�s���Y�Y�v�&�F�'�F�J��Mrp�parentzparent.childzoriginal messagezoriginal message
z
new message!
)r!�	LogRecordr"r7r8r<r�rEr��flushr_r])rGrr �child�stream_1�stream_2�	handler_1�	handler_2s        rK�#test_handler_filter_replaces_record�>CustomLevelsAndFiltersTest.test_handler_filter_replaces_record�s���	�G�$5�$5�	��"�"�8�,���!�!�.�1���;�;�=���;�;�=���)�)�(�3�	��)�)�(�3�	����O�,����)�$�
����#�
�
�
�%�&�������������*�*�,�.B�C�����*�*�,�.>�?rpc�l^�[5m"U4SjS[R5n[R"S5nUR	[R
5 UR
U"55 UR
U"55 URS5 URS[T55 g)Nc�>>�\rSrSrS\R
4U4SjjrSrg)�WCustomLevelsAndFiltersTest.test_logging_filter_replaces_record.<locals>.RecordingFilteri�r�c�d>�TR[U55 [R"U5$r)�add�idr')rGr��recordss  �rKr��^CustomLevelsAndFiltersTest.test_logging_filter_replaces_record.<locals>.RecordingFilter.filter�s"������B�v�J�'��y�y��(�(rpr~N)rxryrzr{r!r!r�r}�r0s�rK�RecordingFilterr,�s���
)�W�%6�%6�
)�
)rpr3rrr�)
�setr!r�r"r:r�r�r�r_r`)rGr3rr0s   @rK�#test_logging_filter_replaces_record�>CustomLevelsAndFiltersTest.test_logging_filter_replaces_record�s~����%��	)�g�n�n�	)�
�"�"�8�,��������%�����*�+�����*�+����E������C��L�)rpc��URR[5 URUR5 UR	/SQ5 g)N)�r�r��r�r��r�r��r�r��r�r��r�r�)r4r:�VERBOSErrnrts rK�test_logger_filter�-CustomLevelsAndFiltersTest.test_logger_filter	s=�����!�!�'�*����t�/�/�0����
�	rpc��URRSR[5 UR	UR5 UR/SQ5 URRSR[R5 g!URRSR[R5 f=f)Nr)r9r:r;r<r=)r4rCr:r	rrnr!r�rts rK�test_handler_filter�.CustomLevelsAndFiltersTest.test_handler_filters������!�!�!�$�-�-�h�7�	B��"�"�4�#3�#3�4��!�!�#�
�
���%�%�a�(�1�1�'�.�.�A��D���%�%�a�(�1�1�'�.�.�A�s�.B�8Cc�T�URRSnSn[5nURU5 UR	UR5 /SQnURU5 [
5nURRU5 UR	UR5 URU/SQ-5 U(aURRU5 URU5 g!U(aURRU5 URU5 f=f)Nr)	)r�r�)r�r�)r�r�r8r9r:r;r<r=))r�r�)r��12)r��14)r��15)r��17)r��18)r��20)r4rCr�r�rrnrr�)rGr��specific_filter�garr�first_liness     rK�test_specific_filters�0CustomLevelsAndFiltersTest.test_specific_filters's����"�"�+�+�A�.����� �����$��!	'��"�"�4�#3�#3�4��K�
�!�!�+�.�0�2�O����&�&��7��"�"�4�#3�#3�4��!�!�+�
1
�
#
�

��� � �-�-�o�>�� � ��&���� � �-�-�o�>�� � ��&�s�BC2�25D'r~N)rxryrzr{r|r\rLrr(r5r?rBrNr}r~rprKr
r
�s2��J�3��'�
1�@�8*�"�B� ('rpr
c�b�[R"U0UD6up#[R"U5 U$r)�tempfile�mkstemp�osrO)�args�kwargs�fd�fns    rK�make_temp_filerXRs)��
�
�
�t�
.�v�
.�F�B��H�H�R�L�
�Irpc�n�\rSrSrSrSrSr\R"\	RS:HS5\R"\RS5\
R"5\R"S5S	5555r\R""5\
R"5\\S
5555rSrg)
�HandlerTestiXc��[R"5nSUlURURS5 SUlURURS5 UR	[
URS5 g)N�generic�anothergeneric)r!�HandlerrIr_�assertRaises�NotImplementedError�emit�rGrVs  rK�	test_name�HandlerTest.test_nameYs\���O�O�������������+�!���������!1�2����-�q�v�v�t�<rpc��[RS;Ga2SGH�n[5nU(d[R"U5 [
RRUSSS9nU(a�URURpTURUS5 URUS5 [
R"SS05nURU5 [R"U5 UR[RRU55 URU5 UR![RRU55 O8URURS5 URURS5 UR#5 U(dGM�[R"U5 GM� [RS	:XaS
nOSn[
RR%U5nURUR&UR(5 UR!UR*5 UR#5 SHmnUS
:Xa3UR/[0[
RR2SSU5 M<[
RR3SSU5nUR#5 Mo [
RR5S5n[
R"05nUR!UR7U55 UR#5 [
RR5S5nURUR7U55 UR#5 g![,a GN5f=f)N��linux�android�darwin)TF�utf-8T��encoding�delay���r�Testriz/var/run/syslogz/dev/log)�GET�POST�PUTrr�	localhostz/logrrr)�sys�platformrXrS�unlinkr!rC�WatchedFileHandler�dev�inor_r��handle�assertFalse�path�existsrFrO�
SysLogHandler�facility�LOG_USER�
unixsocket�OSErrorr_�
ValueError�HTTPHandler�BufferingHandler�shouldFlush)	rG�existingrWrVrxryr��sockname�methods	         rK�test_builtin_handlers�!HandlerTest.test_builtin_handlersas|���<�<�9�9�)��#�%����I�I�b�M��$�$�7�7��W�TX�7�Y��� �u�u�a�e�e���$�$�S�"�-��$�$�S�"�-��-�-�u�f�o�>�A��H�H�Q�K��I�I�b�M��$�$�R�W�W�^�^�B�%7�8��H�H�Q�K��O�O�B�G�G�N�N�2�$6�7��$�$�Q�U�U�B�/��$�$�Q�U�U�B�/����	��8��I�I�b�M�-*�.�|�|�x�'�,��%��
��$�$�2�2�8�<��� � ����Q�Z�Z�8�������-����	�-�F�����!�!�*�g�.>�.>�.J�.J�"-�v�v�?��$�$�0�0��f�f�M�����	�
-�
���-�-�a�0���!�!�"�%������
�
�a�(�)�	���	����-�-�a�0��������q�)�*�	���	���
��
�s�A0M0�0
M>�=M>c�H�[5n[R"U5 [R"U5n[
RUS44[
RRUS44[
RRUS444n[RS;a"U[
RRUS444-
nUHaupEU"USS06nUR[RRU55 UR!5 [R"U5 Mc g)z`
Test that path-like objects are accepted as filename arguments to handlers.

See Issue #27493.
�w�arVrfrlrjN)rXrSrvr�FakePathr!�FileHandlerrC�RotatingFileHandler�TimedRotatingFileHandlerrtrurwrFr|r}rO)rGrW�pfn�cases�clsrTrVs       rK�test_pathlike_objects�!HandlerTest.test_pathlike_objects�s����
��
�	�	�"�
�� � ��$���(�(�3��*�5��%�%�9�9�C��:�F��%�%�>�>��c�
�K���
�<�<�9�9��w�'�'�:�:�S�#�J�G�I�I�E��I�C��T�,�G�,�A��O�O�B�G�G�N�N�2�.�/�
�G�G�I��I�I�b�M�	rp�ntz/WatchedFileHandler not appropriate for Windows.z'Emscripten cannot fstat unlinked files.�walltimec	�
^�U4SjnSnSnSTlSTlSGHMn[SS5n[R"XU4S9nSUlUR
5 [RRUSUS	9n[R"S
5nURU5 [U5H]n	[R"S5 [R"SS
05n
[R"5TlUR!U
5 M_ UR'5 UR)5 [*R,R/U5(a[*R0"U5 GMMGMP g!["a) [%STR<STR<35 ef=f!UR'5 UR)5 [*R,R/U5(a[*R0"U5 ff=f)Nc�>�[U5Hbn[R"U5 [R"5Tl[R"S[R"SS5-5 Md g![
a N?f=f)Ng����Mbp?r�)	�rangerSrv�time�
deletion_timer��sleep�random�randint)�fname�tries�_rGs   �rK�remove_loop�*HandlerTest.test_race.<locals>.remove_loop�sb����5�\����I�I�e�$�)-����D�&��
�
�5�6�>�>�!�Q�#7�7�8�
"������s�0A4�4
B�B���FT�.logztest_logging-3-��targetrTTrjrkz'%(asctime)s: %(levelname)s: %(message)s�{�G�zt?r�testingzDeleted at z, opened at )�handle_timer�rX�	threading�Thread�daemon�startr!rCrwr>rAr�r�r�r�rz�	Exception�printr�rOrSr|r}rv)rGr��	del_count�	log_countrmrW�removerrVr�r�r�s`          rK�	test_race�HandlerTest.test_race�s����	9��	��	����!���"�E���(9�:�B��&�&�k�Y��P�G�!�G�N��M�M�O�� � �3�3�B��PU�3�V�A��!�!�"K�L�A�
�N�N�1��
"��y�)�A��J�J�u�%��-�-�u�i�.A�B�A��+/�9�9�;��(������*��������	��7�7�>�>�"�%�%��I�I�b�M�&�/#��%���04�0B�0B�04�0@�0@�B�C��	���������	��7�7�>�>�"�%�%��I�I�b�M�&�s%� <F%�+E/�F%�/3F"�"F%�%AHc�P^^^�"SS[R5nUR[[R5S5 U"5mURTRRR5 STl	UR[[R5S5 UR[[R5S5 [R"S5nURT5 UR[R5 [ R""5m[ R""5mUUU4Sjn[ R$"USS	9nUR'5 TR)5 [*R,"5nUS:Xa)UR/S
5 [*R0"S5 g
UR/S5 TR35 UR55 [6R8"USS9 g
![*R0"S5 f=f)z>Ensure child logging locks are not held; bpo-6721 & bpo-36533.c�.^�\rSrSrU4SjrSrSrU=r$)�AHandlerTest.test_post_fork_child_no_deadlock.<locals>._OurHandleri�c�f>�[TU]5 [R"[	SSSS9S9Ulg)Nz	/dev/null�wtrj�rl�r9)�super�__init__r!r<�open�sub_handler�rG�	__class__s �rKr��JHandlerTest.test_post_fork_child_no_deadlock.<locals>._OurHandler.__init__�s.����� �"�#*�#8�#8���T�G�D�$F�� rpc��URR URRU5 SSS5 g!,(df   g=fr)r��lockrars  rKra�FHandlerTest.test_post_fork_child_no_deadlock.<locals>._OurHandler.emit�s1���%�%�*�*��$�$�)�)�&�1�+�*�*�s	�<�
A
)r��rxryrzr{r�rar}�
__classcell__�r�s@rK�_OurHandlerr��s���
F�

2�
2rpr�rz*because we need at least one for this testrr� test_post_fork_child_no_deadlockc��>�[R TR TR5 TR	S5 SSS5 SSS5 g!,(df   N=f!,(df   g=f)N��?)r!r%r�r4�wait)�+fork_happened__release_locks_and_end_thread�locks_held__ready_to_fork�refed_hs���rK�lock_holder_thread_fn�KHandlerTest.test_post_fork_child_no_deadlock.<locals>.lock_holder_thread_fn�s?���������)�-�-�/�<�@�@��E�!-��������s"�
A#�"A�A#�
A 	�A#�#
A1z,test_post_fork_child_no_deadlock lock holder)r�rIz#Child process did not deadlock. \o/z&Parent process returned from fork. \o/)�exitcodeN)r!r^r_r`r&r�r�r9rOrI�
assertGreater�_at_fork_reinit_lock_weaksetr"rEr:r;r��Eventr�r�r�rS�forkr��_exitr4r�r�wait_process)	rGr��test_loggerr��lock_holder_thread�pidr�r�r�s	      @@@rKr��,HandlerTest.test_post_fork_child_no_deadlock�s����	2�'�/�/�	2�	
����W�.�.�/��3��-������+�+�2�2�8�8�9�C������3�w�0�0�1�1�5����3�w�C�C�D�a�H��'�'�(J�K�����w�'����W�]�]�+�$-�O�O�$5�!�6?�o�o�6G�3�	F�$'�-�-�,�C�E��	� � �"�!�&�&�(��g�g�i���!�8�
�� � �!G�H������
���F�G�7�;�;�=��#�#�%�� � ��q�1�������s�H
�
H%)r�r�N)rxryrzr{rcr�r��unittest�skipIfrSrIr�
is_emscriptenr	�requires_working_threading�requires_resourcer��
requires_fork�skip_if_asan_fork�skip_if_tsan_forkr�r}r~rprKrZrZXs���=�3�j�,�_�_�R�W�W��_�&W�X�
�_�_����H���0�0�2����z�*�)"�+�3��Y�)"�^
�����0�0�2���>2���3��>2rprZc��\rSrSrSrSrg)�	BadStreami&c��[S5e)N�deliberate mistake)�RuntimeError)rG�datas  rK�write�BadStream.write's���/�0�0rpr~N)rxryrzr{r�r}r~rprKr�r�&s��1rpr�c��\rSrSrSrSrg)�TestStreamHandleri*c��Xlgr��error_recordrs  rK�handleError�TestStreamHandler.handleError+s��"�rpr�N)rxryrzr{r�r}r~rprKr�r�*s��#rpr�c�0�\rSrSr\R
rSrSrg)�StreamWithIntNamei.r�r~N)	rxryrzr{r!r��levelrIr}r~rprKr�r�.s���N�N�E��Drpr�c�&�\rSrSrSrSrSrSrg)�StreamHandlerTesti2c���[[55n[R"05n[RnURU5 UR
URU5 [R"[55n[R"5nURU5 SnURXTR55 SSS5 S[l[R"5nURU5 URSUR55 SSS5 U[lg!,(df   Nt=f!,(df   N+=f!U[lf=f)Nz"
RuntimeError: deliberate mistake
Fr)r�r�r!r��raiseExceptionsrz�assertIsr�r<r�captured_stderr�assertInr]r_)rGrVr��	old_raise�stderrrs      rK�test_error_handling�%StreamHandlerTest.test_error_handling3s����i�k�*���!�!�"�%���+�+�	�	0�
�H�H�Q�K��M�M�!�.�.�!�,��%�%�i�k�2�A��(�(�*�f������<���
�
�c�?�?�#4�5�+�
',�G�#��(�(�*�f������� � ��V�_�_�%6�7�+�'0�G�#�+�*��+�*��'0�G�#�s<�A E�3D<�(E�62E
�(E�<
E
�E�
E�E�
E+c�B�[R"5n[R"5nUR	U5nURU[R5 UR	U5nURXB5 UR	U5nURU5 g)z#
Test setting the handler's stream
N)	r!r<r7r8�	setStreamrrtr�assertIsNone)rGrVr9�oldrjs     rK�test_stream_setting�%StreamHandlerTest.test_stream_settingIss��
�!�!�#��������k�k�&�!���
�
�c�3�:�:�&����S�!���
�
�f�%����S�!�����&�!rpc�v�[R"[55nUR[	U5S5 g)Nz<StreamHandler 2 (NOTSET)>)r!r<r�r_�reprrbs  rK�'test_can_represent_stream_with_int_name�9StreamHandlerTest.test_can_represent_stream_with_int_nameWs+���!�!�"3�"5�6������a��">�?rpr~N)rxryrzr{rr
rr}r~rprKr�r�2s��0�,"�@rpr�c�6�\rSrSrSrSrSrSrSrSr	Sr
g	)
�TestSMTPServeri^a�
This class implements a test SMTP server.

:param addr: A (host, port) tuple which the server listens on.
             You can specify a port value of zero: the server's
             *port* attribute will hold the actual port number
             used, which can be used in client connections.
:param handler: A callable which will be called to process
                incoming messages. The handler will be passed
                the client address tuple, who the message is from,
                a list of recipients and the message data.
:param poll_interval: The interval, in seconds, used in the underlying
                      :func:`select` or :func:`poll` call by
                      :func:`asyncore.loop`.
:param sockmap: A dictionary which will be used to hold
                :class:`asyncore.dispatcher` instances used by
                :func:`asyncore.loop`. This avoids changing the
                :mod:`asyncore` module's global state.
c��[RRXSUSS9 URR	5SUlX lSUlSUlX0l	g)NT)�map�decode_datarrF)
r�
SMTPServerr��socket�getsockname�port�_handler�_thread�_quit�
poll_interval)rG�addrr�r�sockmaps     rKr��TestSMTPServer.__init__ssV��
���!�!�$�d��.2�	"�	4��K�K�+�+�-�a�0��	��
������
�*�rpc�(�URXX45 g)a
Delegates to the handler passed in to the server's constructor.

Typically, this will be a test case method.
:param peer: The client (host, port) tuple.
:param mailfrom: The address of the sender.
:param rcpttos: The addresses of the recipients.
:param data: The message.
N)r)rG�peer�mailfrom�rcpttosr�s     rK�process_message�TestSMTPServer.process_message|s��	
�
�
�d�g�4rpc��[R"URUR4S9=UlnSUlUR
5 g)z7
Start the server running on a separate daemon thread.
r�TN�r�r��
serve_foreverrrr�r��rG�ts  rKr��TestSMTPServer.start��C��%�+�+�4�3E�3E�26�2D�2D�1F�H�	H���q����	���	rpc��UR(d3[R"XRSS9 UR(dM2gg)z�
Run the :mod:`asyncore` loop until normal termination
conditions arise.
:param poll_interval: The interval, in seconds, used in the underlying
                      :func:`select` or :func:`poll` call by
                      :func:`asyncore.loop`.
rr)r�countN)rr�loop�_map)rGrs  rKr+�TestSMTPServer.serve_forever�s(���*�*��M�M�-�Y�Y�a�@��*�*�*rpc��SUl[R"UR5 SUlUR	5 [
R"URSS9 g)zZ
Stop the thread by closing the server instance.
Wait for the server thread to terminate.
TN)r�
ignore_all)rr	�join_threadrrOr�	close_allr3rts rK�stop�TestSMTPServer.stop�sA��
��
��$�$�T�\�\�2�����
�
�����t�y�y�T�:rp)rrrrrN)rxryrzr{r|r�r'r�r+r9r}r~rprKrr^s!���(+�
5��	A�	;rprc�>^�\rSrSrSrSrSrU4SjrSrSr	U=r
$)�ControlMixini�a�
This mixin is used to start a server on a separate thread, and
shut it down programmatically. Request handling is simplified - instead
of needing to derive a suitable RequestHandler subclass, you just
provide a callable which will be passed each received request to be
processed.

:param handler: A handler callable which will be called with a
                single parameter - the request - in order to
                process the request. This handler is called on the
                server thread, effectively meaning that requests are
                processed serially. While not quite web scale ;-),
                this should be fine for testing applications.
:param poll_interval: The polling interval in seconds.
c�^�SUlX lXl[R"5Ulgr)rrrr�r��ready)rGr�rs   rKr��ControlMixin.__init__�s"�����*���
��_�_�&��
rpc��[R"URUR4S9=UlnSUlUR
5 g)z9
Create a daemon thread to run the server, and start it.
r�TNr*r,s  rKr��ControlMixin.start�r/rpc�`>�URR5 [[U]U5 g)zF
Run the server. Set the ready flag before entering the
service loop.
N)r>r4r�r<r+)rGrr�s  �rKr+�ControlMixin.serve_forever�s"���
	
�
�
����
�l�D�/�
�>rpc���UR5 URb'[R"UR5 SUlUR	5 UR
R
5 g)z;
Tell the server thread to stop, and wait for it to do so.
N)�shutdownrr	r7�server_closer>rQrts rKr9�ControlMixin.stop�sL��	
�
�
���<�<�#��(�(����6��D�L������
�
���rp)rrrr>)rxryrzr{r|r�r�r+r9r}r�r�s@rKr<r<�s!����'��?�	�	rpr<c�,�\rSrSrSrSSjrSrSrg)�TestHTTPServeri�a�
An HTTP server which is controllable using :class:`ControlMixin`.

:param addr: A tuple with the IP address and port to listen on.
:param handler: A handler callable which will be called with a
                single parameter - the request - in order to
                process the request.
:param poll_interval: The polling interval in seconds.
:param log: Pass ``True`` to enable log messages.
Nc�^^�"UU4SjS[5m[R"XT5 [RXU5 XPlg)Nc�>>^�\rSrSrSSjrSrUUU4SjrSrU=r$)�=TestHTTPServer.__init__.<locals>.DelegatingHTTPRequestHandleri�c�\�URS5(aUR$[U5e)N�do_)�
startswith�process_request�AttributeError)rGrI�defaults   rK�__getattr__�ITestHTTPServer.__init__.<locals>.DelegatingHTTPRequestHandler.__getattr__�s(���?�?�5�)�)��/�/�/�$�T�*�*rpc�:�URRU5 gr��serverrrts rKrP�MTestHTTPServer.__init__.<locals>.DelegatingHTTPRequestHandler.process_request�������$�$�T�*rpc�:>�T(a[TU]"U/UQ76 ggr)r��log_message)rG�formatrT�DelegatingHTTPRequestHandlerr�r�s   ���rKr[�ITestHTTPServer.__init__.<locals>.DelegatingHTTPRequestHandler.log_message�s1�����6��,� +�,�,2�;�59�;�rpr~r)	rxryrzr{rSrPr[r}r�)r�r]r�s@��rKr]rL�s���
+�

+�
;�
;rpr])rrr�r<�sslctx)rGr r�rr�r_r]s    ` @rKr��TestHTTPServer.__init__�s=���	;�	;�+A�	;�	���D�(D�E����d�]�;��rpc��URR5upUR(aURRUSS9nX4$![a(n[
RRSU-5 eSnAff=f)NT)�server_sidezGot an error:
%s
)r�acceptr_�wrap_socketr�rtrr�)rG�sockr �es    rK�get_request�TestHTTPServer.get_request�sr��	����+�+�-�J�D��{�{��{�{�.�.�t��.�F��
�z���	�	��J�J���2�Q�6�7���	�s�AA�
A>�#A9�9A>�r_)r�FN)rxryrzr{r|r�rgr}r~rprKrIrI�s��	�58�#'��&	rprIc�>^�\rSrSrSrSrSSjrU4SjrSrU=r	$)�
TestTCPServeria�
A TCP server which is controllable using :class:`ControlMixin`.

:param addr: A tuple with the IP address and port to listen on.
:param handler: A handler callable which will be called with a single
                parameter - the request - in order to process the request.
:param poll_interval: The polling interval in seconds.
:bind_and_activate: If True (the default), binds the server and starts it
                    listening. If False, you need to call
                    :meth:`server_bind` and :meth:`server_activate` at
                    some later time before calling :meth:`start`, so that
                    the server will set up the socket and listen on it.
Tc�~�"SS[5n[R"XUU5 [RXU5 g)Nc��\rSrSrSrSrg)�;TestTCPServer.__init__.<locals>.DelegatingTCPRequestHandleric�:�URRU5 grrVrts rKrz�BTestTCPServer.__init__.<locals>.DelegatingTCPRequestHandler.handlerYrpr~N)rxryrzr{rzr}r~rprK�DelegatingTCPRequestHandlerrns��
+rprq)rrr�r<)rGr r�r�bind_and_activaterqs      rKr��TestTCPServer.__init__s7��	+�*>�	+�	�#�#�D�0K�$5�	7����d�]�;rpc�n>�[[U]5 URR	5SUlg�Nrr)r�rk�server_bindrrrr�s �rKrv�TestTCPServer.server_bind�)���
�m�T�.�0��K�K�+�+�-�a�0��	rp)r�r�T)
rxryrzr{r|�allow_reuse_addressr�rvr}r�r�s@rKrkrks%������47�#'�<�1�1rprkc�F^�\rSrSrSrSSjrU4SjrU4SjrSrU=r	$)�
TestUDPServeri"a�
A UDP server which is controllable using :class:`ControlMixin`.

:param addr: A tuple with the IP address and port to listen on.
:param handler: A handler callable which will be called with a
                single parameter - the request - in order to
                process the request.
:param poll_interval: The polling interval for shutdown requests,
                      in seconds.
:bind_and_activate: If True (the default), binds the server and
                    starts it listening. If False, you need to
                    call :meth:`server_bind` and
                    :meth:`server_activate` at some later time
                    before calling :meth:`start`, so that the server will
                    set up the socket and listen on it.
c�^�"U4SjS[5m[R"XTU5 [RXU5 SUlg)Nc�2>^�\rSrSrSrUU4SjrSrU=r$)�;TestUDPServer.__init__.<locals>.DelegatingUDPRequestHandleri5c�:�URRU5 grrVrts rKrz�BTestUDPServer.__init__.<locals>.DelegatingUDPRequestHandler.handle7rYrpc�>�URR5nU(a[TU]5 gg![a UR
R(degf=fr)�wfiler]r��finishr�rW�_closed)rGr��DelegatingUDPRequestHandlerr�s  ��rKr��BTestUDPServer.__init__.<locals>.DelegatingUDPRequestHandler.finish:sV����z�z�*�*�,���"��9�4�G�I���#�"�#�{�{�2�2�!� 3�"�s�4�&A�Ar~)rxryrzr{rzr�r}r�)r�r�s@�rKr�r5s���
+�
"�
"rpr�F)rrr�r<r�)rGr r�rrrr�s     @rKr��TestUDPServer.__init__3sA���	"�*@�	"�	�#�#�D�$?�$5�	7�	���d�]�;���rpc�n>�[[U]5 URR	5SUlgru)r�r|rvrrrr�s �rKrv�TestUDPServer.server_bindIrxrpc�8>�[[U]5 SUlg)NT)r�r|rFr�r�s �rKrF�TestUDPServer.server_closeMs���
�m�T�/�1���rp)r�rry)
rxryrzr{r|r�rvrFr}r�r�s@rKr|r|"s$���� 58�#'��,1��rpr|�AF_UNIXc�,�\rSrSr\R
rSrg)�TestUnixStreamServeriRr~N�rxryrzr{rr��address_familyr}r~rprKr�r�R������rpr�c�,�\rSrSr\R
rSrg)�TestUnixDatagramServeriUr~Nr�r~rprKr�r�Ur�rpr�c�8�\rSrSr\R
rSrSrSr	g)�SMTPHandlerTestiZc���0n[[RS4URSU5nUR	5 [RUR
4n[RRUSSSURS9nURURS/5 /Ul[R"SS05n[R"5UlUR#U5 UR R%UR5 UR'5 UR)UR R+55 UR[-UR5S	5 URSupgp�URUS5 URUS/5 UR/S
U	5 UR)U	R1S55 UR35 g)Nr���MbP?�me�you�Log��timeoutru	Hello ✓rrz
Subject: Log
u

Hello ✓)rr�HOSTr'r�rr!rC�SMTPHandler�TIMEOUTr_�toaddrs�messagesr�r�r��handledrzr�r9rF�is_setr`r�endswithrO)
rGr!rWr rVr�r$r%r&r�s
          rK�
test_basic�SMTPHandlerTest.test_basic`sq������!3�!3�Q� 7��9M�9M�u� '�)�������"�"�F�K�K�0�����(�(��t�U�E�15���
)�
?��������U�G�,���
��!�!�5�.�"9�:�� ���(���	����������$�,�,�'����
�������+�+�-�.�����T�]�]�+�Q�/�(,�
�
�a�(8�%�������4�(�����5�'�*��
�
�(�$�/�����
�
�&8�9�:�	���	rpc�n�URRU5 URR5 gr)r��appendr�r4)rGrTs  rKr'�SMTPHandlerTest.process_messagexs$���
�
���T�"������rp)r�r�N)
rxryrzr{r�LONG_TIMEOUTr�r�r'r}r~rprKr�r�Zs���"�"�G��0rpr�c�h�\rSrSrSrSrSrSrSrSr	Sr
\R"5S	5r
S
rg)�MemoryHandlerTesti|zTests for the MemoryHandler.rc�L�[RU5 [RR	S[R
UR5Ul[R"S5Ul	SURl
URRUR5 g)N�
�memr)rrLr!rC�
MemoryHandlerr�r=�mem_hdlrr"�
mem_logger�	propagaterErts rKrL�MemoryHandlerTest.setUp�sj�����t���(�(�6�6�r�7�?�?�7;�~�~�G��
�!�+�+�E�2���$%����!����"�"�4�=�=�1rpc�b�URR5 [RU5 gr)r�rOrrWrts rKrW�MemoryHandlerTest.tearDown�� ���
�
�������$�rpc	�^�URRUR55 UR/5 URR	UR55 UR/5 URRUR55 /SQnURU5 SH�n[
S5H,nURRUR55 M. URU5 URRUR55 U[
X"S-5Vs/sHnS[U54PM sn-nURU5 M� URRUR55 URU5 gs snf)N)�r;r��r�r�)r�r�)r���	r�r;)r�r�rurnr�r�r��str)rG�lines�n�is    rK�
test_flush�MemoryHandlerTest.test_flush�sR��	
�����d�/�/�1�2����b�!������T�.�.�0�1����b�!������� 1� 1� 3�4�
��
	
���e�$��A��1�X�����%�%�d�&7�&7�&9�:���!�!�%�(�
�O�O�!�!�$�"3�"3�"5�6���a�R��8H�I�8H�1�g�s�1�v�.�8H�I�I�E��!�!�%�(��	
�����d�/�/�1�2����e�$��	Js�>F*c���URRUR55 UR/5 URR	UR55 UR/5 URRUR5 URR5 SS/nURU5 [RRS[RURS5UlURRUR5 URRUR55 URU5 URR	UR55 URU5 URRUR5 URR5 URU5 g)z?
Test that the flush-on-close configuration works as expected.
r�r�r�FN)r�r�rurnr�rPr�rOr!rCr�r�r=rE�rGr�s  rK�test_flush_on_close�%MemoryHandlerTest.test_flush_on_close�sa��	
�����d�/�/�1�2����b�!������T�.�.�0�1����b�!����%�%�d�m�m�4��
�
������
��	
���e�$��(�(�6�6�r�7�?�?�7;�~�~�7<�>��
�	
���"�"�4�=�=�1������d�/�/�1�2����e�$������T�.�.�0�1����e�$����%�%�d�m�m�4��
�
�������e�$rpc���URRUR55 UR/5 URR	UR55 UR/5 [
R"[
RRUR5/S9 SS/nURU5 [
RRS[
RURS5Ul	URRUR5 URRUR55 URU5 URR	UR55 URU5 [
R"[
RRUR5/S9 URU5 g)zQ
Test that the flush-on-close configuration is respected by the
shutdown method.
��handlerListr�r�r�FN)r�r�rurnr�r!rE�weakref�refr�rCr�r�r=rEr�s  rK�test_shutdown_flush_on_close�.MemoryHandlerTest.test_shutdown_flush_on_close�s]��
	
�����d�/�/�1�2����b�!������T�.�.�0�1����b�!����g�o�o�&9�&9�$�-�-�&H�%I�J���
��	
���e�$��(�(�6�6�r�7�?�?�7;�~�~�7<�>��
�	
���"�"�4�=�=�1������d�/�/�1�2����e�$������T�.�.�0�1����e�$����g�o�o�&9�&9�$�-�-�&H�%I�J����e�$rpc���"SS5nU"UR5nURRU5 [S5HOn[R"S5 UR
R
S5 UR
RS5 MQ URHn[R"U5 M g!URHn[R"U5 M f=f)Nc�&�\rSrSrSrSrSrSrg)�ZMemoryHandlerTest.test_race_between_set_target_and_flush.<locals>.MockRaceConditionHandleri�c��Xl/Ulgr�r��threads)rGr�s  rKr��cMemoryHandlerTest.test_race_between_set_target_and_flush.<locals>.MockRaceConditionHandler.__init__�s�� (�
�!��rpc�:�URRS5 gr)r��	setTargetrts rK�removeTarget�gMemoryHandlerTest.test_race_between_set_target_and_flush.<locals>.MockRaceConditionHandler.removeTarget�s���
�
�'�'��-rpc��[R"URS9nURR	U5 UR5 g)N�r�)r�r�r�r�r�r�)rGrrs   rKrz�aMemoryHandlerTest.test_race_between_set_target_and_flush.<locals>.MockRaceConditionHandler.handle�s3��"�)�)��1B�1B�C�����#�#�F�+����rpr�N)rxryrzr{r�r�rzr}r~rprK�MockRaceConditionHandlerr��s��
"�
.�
rpr�r�r�znot flushed�flushed)r�r�r�r�r�r�r�r�r�r	r7)rGr�r�r�rs     rK�&test_race_between_set_target_and_flush�8MemoryHandlerTest.test_race_between_set_target_and_flush�s���	�	�*�$�-�-�8��		5��M�M�#�#�F�+��2�Y���
�
�5�!����$�$�]�3����'�'�	�2��
!�.�.�� �,�,�V�4�)��&�.�.�� �,�,�V�4�)�s�A9C�+C,)r�r�N)rxryrzr{r|r\rLrWr�r�r�r	r�r�r}r~rprKr�r�|sC��&�3��2� �%�8%�<%�:�0�0�2�5�3�5rpr�c��\rSrSrSrSrSrg)�ExceptionFormatterizA special exception formatter.c�&�SUSR-$)Nz
Got a [%s]r)rx)rG�eis  rK�formatException�"ExceptionFormatter.formatExceptions���b��e�n�n�,�,rpr~N)rxryrzr{r|r�r}r~rprKr�r�s
��(�-rpr�c�P�UR5 [R"U5 gr�rOrS�remove)rVrWs  rK�closeFileHandlerr�s���G�G�I��I�I�b�Mrpc�B�\rSrSrSr\RrSrSrSr	Sr
\	RSS5r\	RS	S
5r
S\-S-r\	RS
S5rSrSrSrSrSrSrSrSr\	4SjrSrSrSrSrSrSrSrSr S r!S!r"S"r#S#r$S$r%S%r&S&r'g')(�ConfigFileTestiz5Reading logging config from a .ini-style config file.�^(\w+) \+\+ (\w+)$aN
    [loggers]
    keys=root

    [handlers]
    keys=hand1

    [formatters]
    keys=form1

    [logger_root]
    level=WARNING
    handlers=hand1

    [handler_hand1]
    class=StreamHandler
    level=NOTSET
    formatter=form1
    args=(sys.stdout,)

    [formatter_form1]
    format=%(levelname)s ++ %(message)s
    datefmt=
    a�
    [loggers]
    keys=root,parser

    [handlers]
    keys=hand1

    [formatters]
    keys=form1

    [logger_root]
    level=WARNING
    handlers=

    [logger_parser]
    level=DEBUG
    handlers=hand1
    propagate=1
    qualname=compiler.parser

    [handler_hand1]
    class=StreamHandler
    level=NOTSET
    formatter=form1
    args=(sys.stdout,)

    [formatter_form1]
    format=%(levelname)s ++ %(message)s
    datefmt=
    a�
    [loggers]
    keys=root,parser

    [handlers]
    keys=hand1

    [formatters]
    keys=form1

    [logger_root]
    level=WARNING
    handlers=hand1

    [logger_parser]
    level=DEBUG
    handlers=
    propagate=1
    qualname=compiler.parser

    [handler_hand1]
    class=StreamHandler
    level=NOTSET
    formatter=form1
    args=(sys.stdout,)

    [formatter_form1]
    format=%(levelname)s ++ %(message)s
    datefmt=
    z
sys.stdoutz
sys.stboutzformatter=form1zformatter=misspelled_namea
    [loggers]
    keys=root

    [handlers]
    keys=hand1

    [formatters]
    keys=form1

    [logger_root]
    level=NOTSET
    handlers=hand1

    [handler_hand1]
    class=StreamHandler
    level=NOTSET
    formatter=form1
    args=(sys.stdout,)

    [formatter_form1]
    class=zS.ExceptionFormatter
    format=%(levelname)s:%(name)s:%(message)s
    datefmt=
    zclass=StreamHandlerzclass=logging.StreamHandlerag
    [loggers]
    keys=root,parser

    [handlers]
    keys=hand1, hand2

    [formatters]
    keys=form1, form2

    [logger_root]
    level=WARNING
    handlers=

    [logger_parser]
    level=DEBUG
    handlers=hand1
    propagate=1
    qualname=compiler.parser

    [handler_hand1]
    class=StreamHandler
    level=NOTSET
    formatter=form1
    args=(sys.stdout,)

    [handler_hand2]
    class=StreamHandler
    level=NOTSET
    formatter=form1
    args=(sys.stderr,)

    [formatter_form1]
    format=%(levelname)s ++ %(message)s
    datefmt=

    [formatter_form2]
    format=%(message)s
    datefmt=
    a%
    [loggers]
    keys=root,parser,compiler

    [handlers]
    keys=hand1

    [formatters]
    keys=form1

    [logger_root]
    level=WARNING
    handlers=hand1

    [logger_compiler]
    level=DEBUG
    handlers=
    propagate=1
    qualname=compiler

    [logger_parser]
    level=DEBUG
    handlers=
    propagate=1
    qualname=compiler.parser

    [handler_hand1]
    class=StreamHandler
    level=NOTSET
    formatter=form1
    kwargs={'stream': sys.stdout,}

    [formatter_form1]
    format=%(levelname)s ++ %(message)s
    datefmt=
    a
    [loggers]
    keys=root

    [handlers]
    keys=file

    [formatters]
    keys=

    [logger_root]
    level=DEBUG
    handlers=file

    [handler_file]
    class=FileHandler
    level=DEBUG
    args=("{tempfile}",)
    kwargs={{"encoding": "utf-8"}}
    ap
    [loggers]
    keys=root

    [handlers]
    keys=hand1

    [formatters]
    keys=form1

    [logger_root]
    level=WARNING
    handlers=hand1

    [handler_hand1]
    class=StreamHandler
    level=NOTSET
    formatter=form1
    args=(sys.stdout,)

    [formatter_form1]
    format=%(message)s ++ %(customfield)s
    defaults={"customfield": "defaultvalue"}
    z�
    [loggers]
    keys=root

    [handlers]
    keys=screen

    [formatters]
    keys=

    [logger_root]
    level=DEBUG
    handlers=screen

    [handler_screen]
    level=DEBUG
    class=StreamHandler
    args=(sys.stdout,)
    formatter=
    c��[R"[R"U55n[R
R"U4SS0UD6 g)Nrlrj)r7r8�textwrap�dedentr!�config�
fileConfig)rG�confrU�files    rK�apply_config�ConfigFileTest.apply_config%s5���{�{�8�?�?�4�0�1�����!�!�$�C��C�F�Crpc��[R"5nURUR5 [R
"5nUR
UR55 URUR55 URS/US9 UR/5 SSS5 g!,(df   g=f�N�r�r�r�)
r�captured_stdoutr��config0r!r"r�rur�rn�rG�outputrs   rK�test_config0_ok�ConfigFileTest.test_config0_ok)s���
�
$�
$�
&�&����d�l�l�+��&�&�(�F��K�K��)�)�+�,��L�L��*�*�,�-��!�!��#��
"�
�
�!�!�"�%�'�
&�
&�s�BB0�0
B>c�>�[R"5n[R"[R
"UR55n[R"5nURU5 [RRU5 [R"5nURUR55 UR!UR55 UR#S/US9 UR#/5 SSS5 g!,(df   g=fr�)rr�r7r8r�r�r��configparser�ConfigParser�	read_filer!r�r�r"r�rur�rn)rGr�r��cprs     rK�test_config0_using_cp_ok�'ConfigFileTest.test_config0_using_cp_ok8s���
�
$�
$�
&�&��;�;�x���t�|�|�<�=�D��*�*�,�B��L�L����N�N�%�%�b�)��&�&�(�F��K�K��)�)�+�,��L�L��*�*�,�-��!�!��#��
"�
�
�!�!�"�%�'�
&�
&�s�C/D�
Dc�r�[R"5nURU5 [R"S5nURUR
55 URUR
55 URSS/US9 UR/5 SSS5 g!,(df   g=f�N�compiler.parser�r�r�r�r��	rr�r�r!r"r�rur�rn�rGr�r�rs    rK�test_config1_ok�ConfigFileTest.test_config1_okJ���
�
$�
$�
&�&����f�%��&�&�'8�9�F��K�K��)�)�+�,��L�L��*�*�,�-��!�!���#��
"�
�

�!�!�"�%�'�
&�
&���B	B(�(
B6c�Z�UR[URUR5 gr�r_r�r��config2rts rK�test_config2_failure�#ConfigFileTest.test_config2_failureY������)�T�%6�%6����Erpc�Z�UR[URUR5 gr�r_r�r��config3rts rK�test_config3_failure�#ConfigFileTest.test_config3_failure]rrpc���[R"5nURUR5 [R
"5n[
5e![a [R"S5 Of=f[RRS5 URUR5S5 UR/5 SSS5 g!,(df   g=f�N�just testingr�-ERROR:root:just testing
Got a [RuntimeError]
)rr�r��config4r!r"r��	exceptionrt�stdout�seekr_r]rnr�s   rK�test_config4_ok�ConfigFileTest.test_config4_okas���
�
$�
$�
&�&����d�l�l�+��&�&�(�F�
2�"�n�$���
2��!�!�.�1�
2���J�J�O�O�A�����V�_�_�.�A�
C�
�!�!�"�%�'�
&�
&�s*�1C�
A� A5�2C�4A5�5AC�
Cc�6�URURS9 g�N�r�)r
�config5rts rK�test_config5_ok�ConfigFileTest.test_config5_okp������D�L�L��1rpc�6�URURS9 gr')r
�config6rts rK�test_config6_ok�ConfigFileTest.test_config6_oksr,rpc��[R"5nURUR5 [R
"S5n[R
"S5nUR
UR55 URUR55 URUR55 UR/SQUS9 UR/5 SSS5 [R"5nURUR5 [R
"S5nURUR5 UR
UR55 URUR55 [R
"S5nUR
UR55 URUR55 WRUR55 UR/SQUS9 UR/5 SSS5 g!,(df   GNN=f!,(df   g=f)Nr	�compiler-hyphenated�r
r�)r�r�r��compiler.lexer�)r�r�)r�r�)r�r�)r�r�)rr�r��config1ar!r"r�rur��criticalrn�config7r{r�rGr�r�
hyphenateds    rK�test_config7_ok�ConfigFileTest.test_config7_okvs���
�
$�
$�
&�&����d�m�m�,��&�&�'8�9�F�!�*�*�+@�A�J��K�K��)�)�+�,��L�L��*�*�,�-����� 1� 1� 3�4��!�!�#��	
"�
�
�!�!�"�%�''�(�
$�
$�
&�&����d�l�l�+��&�&�'8�9�F����V�_�_�-��K�K��)�)�+�,��L�L��*�*�,�-��&�&�'7�8�F��K�K��)�)�+�,��L�L��*�*�,�-����� 1� 1� 3�4��!�!�#�
�
"�
�
�!�!�"�%�)'�
&�)'�
&��('�
&�s�CH%�;D!H7�%
H4�7
Ic��UR5 [SS5n[RS:XaUR	SS5nUR
R
US9nURU5 URU5 SSS5 [RRSnUR[UW5 g!,(df   NC=f)Nr��test_logging-X-r��\z\\)rQr)
�check_no_resource_warningrXrSrI�replace�config8r\r�r!�rootrCr�r�)rGrWrBr�s    rK�test_config8_ok�ConfigFileTest.test_config8_ok�s���
�
+�
+�
-���(9�:�B��w�w�$���Z�Z��f�-���l�l�)�)�2�)�6�G����g�&����g�&�.��,�,�'�'��*�����(�'�2�6�.�
-�s�A.B<�<
C
c�n�URUR5 [RRSR
nUR
[R"SS055nURUS5 UR
[R"SSS.55nURUS5 g)Nrr�testztest ++ defaultvalue�customvalue�r�customfieldztest ++ customvalue)	r��config9r!rCrC�	formatterr\r�r_)rGrL�results   rK�test_config9_ok�ConfigFileTest.test_config9_ok�s������$�,�,�'��L�L�)�)�!�,�6�6�	��!�!�'�"7�"7����"H�I������!7�8��!�!�'�"7�"7��=�9�#;�<������!6�7rpc�r�URUR5 [R"S5nUR	UR
5 URUR5 UR
UR
5 URURSS9 UR	UR
5 g)N�some_pristine_loggerF)�disable_existing_loggers)r��disable_testr!r"r{rrF�rGrs  rK�test_logger_disabling�$ConfigFileTest.test_logger_disabling�s������$�+�+�,��"�"�#9�:��������)����$�+�+�,�������(����$�+�+�e��L�������)rpc��SnURU5 UR[R"5RSR
S5 g)Naw
            [loggers]
            keys=root

            [handlers]
            keys=hand1

            [formatters]
            keys=form1

            [logger_root]
            handlers=hand1

            [handler_hand1]
            class=StreamHandler
            formatter=form1

            [formatter_form1]
            format=%(levelname)s ++ %(message)s
            r�hand1)r�r_r!r"rCrI)rG�test_configs  rK�test_config_set_handler_names�,ConfigFileTest.test_config_set_handler_names�sC����(	
���+�&�����*�*�,�5�5�a�8�=�=�w�Grpc��Sn[R"[R"U55nUR	[
[RRU5 g)Na�
            [loggers]
            keys=root

            [handlers]
            keys=hand1

            [formatters]
            keys=form1

            [logger_root]
            handlers=hand1

            [handler_hand1]
            class=StreamHandler
            formatter=form1

            [formatter_form1]
            format=%(levelname)s ++ %(message)s

            prince
            )	r7r8r�r�r_r�r!r�r�)rGrYr�s   rK�'test_exception_if_confg_file_is_invalid�6ConfigFileTest.test_exception_if_confg_file_is_invalid�s>����.�{�{�8�?�?�;�7�8�����,����(A�(A�4�Hrpc���[R"SSS9up[R"U5 UR	[
[RRU5 [R"U5 g)N�test_empty_�.ini�r��suffix)
rQrRrSrOr_r�r!r�r�r�)rGrVrWs   rK�%test_exception_if_confg_file_is_empty�4ConfigFileTest.test_exception_if_confg_file_is_empty�sH���!�!��v�F���
��������,����(A�(A�2�F�
�	�	�"�
rpc�b�UR[[RRS5 g)N�filenotfound)r_�FileNotFoundErrorr!r�r�rts rK�,test_exception_if_config_file_does_not_exist�;ConfigFileTest.test_exception_if_config_file_does_not_exist�s�����+�W�^�^�-F�-F��Wrpc
��[R"S5R5n[R"SSS9up#[
R"X!RS55 [
R"U5 [RRUS[SSS	S
SSS
.0S9S9 [
R"U5 g![
R"U5 f=f)z.bpo-33802 defaults should not get interpolatedat
            [formatters]
            keys=default

            [formatter_default]

            [handlers]
            keys=console

            [handler_console]
            class=logging.StreamHandler
            args=tuple()

            [loggers]
            keys=root

            [logger_root]
            formatter=default
            handlers=console
            �
test_logging_rarb�asciirjrrFr\z5%(asctime)s [%(process)d] [%(levelname)s] %(message)sz[%Y-%m-%d %H:%M:%S %z]zlogging.Formatter)r\�datefmt�class)�versionrR�
formatters)rl�defaultsN)r�r��striprQrRrSr��encoderOr!r�r��dictrv)rG�inirVrWs    rK�!test_defaults_do_no_interpolation�0ConfigFileTest.test_defaults_do_no_interpolations����o�o���&���'	�(�!�!���H���	��H�H�R���G�,�-��H�H�R�L��N�N�%�%�� ���-2�!�&]�'?�%8�$� �
�
&�
� 
�I�I�b�M��B�I�I�b�M�s�A)B=�=Cr~N)(rxryrzr{r|r
r@r\r��config1r6rArrr r)r.r8rBrKrSr�r�rr
rrr$r*r/r;rDrNrUrZr]rdrirwr}r~rprKr�r�s��?� /� I� I��,���G�4�G�@�H�@�o�o�l�L�9�G��o�o�/�1L�M�G��*�+�*�+�G�6�o�o�3�5R�S�G�'�G�T#�G�L�G�,�G�2�L�*D�
&�&�$&-�
&�F�F�
&�2�2�)&�V7�$8�*�H�0I�6�X�*rpr�c�>�\rSrSrSr\rSrSrSr	Sr
SrSrS	r
g
)�SocketHandlerTesti/zTest for SocketHandler objects.�rsrc�
�[RU5 S=Ul=UlUlURURURS5=UlnUR5 URR5 [RRn[UR ["5(aU"SUR$5UlOU"UR S5UlSUlUR(R+UR(RS5 UR(R-UR5 [.R0"S5Ulg![anX lSnAgSnAff=f)zlSet up a TCP server to receive log messages, and a SocketHandler
pointing to that server's address and port.N�{�G�z�?rsrr)rrLrW�	sock_hdlr�server_exception�server_class�address�
handle_socketr�r�r>r�r!rC�
SocketHandler�
isinstance�server_addressrdr�
log_outputr4rPrEr��	Semaphorer��rGrWrf�hclss    rKrL�SocketHandlerTest.setUp8s-��	���t��?C�C���C�d�n�t�'<�	�#'�#4�#4�T�\�\�59�5G�5G��$O�
O�D�K�&��L�L�N�	���������-�-���f�+�+�U�3�3�!�+�v�{�{�;�D�N�!�&�"7�"7��>�D�N�������&�&�t�'7�'7�'@�'@��'C�D����#�#�D�N�N�3� �*�*�1�-�����	�$%�!���	�s�>E(�(
F�2E=�=Fc�Z�UR(a?URRUR5 URR5 UR(aURR5 [RU5 g![RU5 f=f)zShutdown the TCP server.N)rr4rPrOrWr9rrWrts rKrW�SocketHandlerTest.tearDownRsj��	$��~�~�� � �.�.�t�~�~�>����$�$�&��{�{���� � �"����d�#��H���d�#���A;B�B*c��URnURS5n[U5S:ag[R"SU5SnURU5n[U5U:a0X2RU[U5-
5-n[U5U:aM0[
R"U5n[R"U5nU=RURS--
sl	URR5 M�)Nr��>Lr�
)
�
connection�recvr`�struct�unpack�pickle�loadsr!r�r�rr��release)rG�request�conn�chunk�slen�objr�s       rKr��SocketHandlerTest.handle_socket]s����!�!����I�I�a�L�E��5�z�A�~���=�=��u�-�a�0�D��I�I�d�O�E��e�*�t�#��	�	�$��U��*;� <�<���e�*�t�#��,�,�u�%�C��*�*�3�/�F��O�O�v�z�z�D�0�0�O��L�L� � �"�rpc�l�UR(aURUR5 [R"S5nUR	S5 UR
R
5 URS5 UR
R
5 URURS5 g)N�tcpr��eggs�
spam
eggs
)
r��skipTestr!r"r�r��acquirer�r_r�rTs  rK�test_output�SocketHandlerTest.test_outputlsy��� � ��M�M�$�/�/�0��"�"�5�)�����V�����������V��������������.�9rpc�b�UR(aURUR5 SURlURR5 [
S5e![a URRS5 Of=fURRS5 [R"5nURURRU5 [R"URRU-
S-5 URRS5 g)Ng@zDeliberate mistakez
Never sentzNever sent, eitherr�zNor this)r�r�r�
retryStartrWr9r�r4r!r�r�r��	retryTimer�)rG�nows  rK�
test_noserver�SocketHandlerTest.test_noserverws���� � ��M�M�$�/�/�0�%(����!�������	5��3�4�4���	5����&�&�|�4�	5�������3�4��i�i�k�����4�>�>�3�3�S�9��
�
�4�>�>�+�+�c�1�E�9�:������z�*s�A$�$%B�B�r�r�rWr�rN)rxryrzr{r|rkr�r�rLrWr�r�r�r}r~rprKr{r{/s*��*� �L��G�.�4	$�
#�	:�+rpr{zUnix sockets requiredc�>�\rSrSrSr\"\S5(a\rSr	Sr
g)�UnixSocketHandlerTesti�z)Test for SocketHandler with unix sockets.r�c��[R"5UlUR[R
UR5 [RU5 gr)r�create_unix_domain_namer�r�rrvr{rLrts rKrL�UnixSocketHandlerTest.setUp��8��$�<�<�>������	�(�(�$�,�,�7�����%rp�r�N)rxryrzr{r|�hasattrrr�r�rLr}r~rprKr�r��s��4��v�y�!�!�+��&rpr�c�8�\rSrSrSr\rSrSrSr	Sr
SrSrg	)
�DatagramHandlerTesti�zTest for DatagramHandler.r|c��[RU5 S=Ul=UlUlURURURS5=UlnUR5 URR5 [RRn[UR ["5(aU"SUR$5UlOU"UR S5UlSUlUR(R+UR(RS5 UR(R-UR5 [.R0"5Ulg![anX lSnAgSnAff=f)znSet up a UDP server to receive log messages, and a DatagramHandler
pointing to that server's address and port.Nr~rsrr)rrLrWrr�r�r��handle_datagramr�r�r>r�r!rC�DatagramHandlerr�r�rdrr�r4rPrEr�r�r�r�s    rKrL�DatagramHandlerTest.setUp�s)��	���t��?C�C���C�d�n�t�'<�	�#'�#4�#4�T�\�\�59�5I�5I�4�$Q�
Q�D�K�&��L�L�N�	���������/�/���f�+�+�U�3�3�!�+�v�{�{�;�D�N�!�&�"7�"7��>�D�N�������&�&�t�'7�'7�'@�'@��'C�D����#�#�D�N�N�3� ���(�����	�$%�!���	�s�>E'�'
F�1E<�<Fc�Z�UR(aURR5 UR(a?URR	UR5 URR5 [RU5 g![RU5 f=f)zShutdown the UDP server.N)rWr9rr4rPrOrrWrts rKrW�DatagramHandlerTest.tearDown�sj��	$��{�{���� � �"��~�~�� � �.�.�t�~�~�>����$�$�&����d�#��H���d�#�r�c�2�[R"SS5nUR[U5Sn[R
"U5n[R"U5nU=RURS--
slURR5 g)Nr�rr�)r��pack�packetr`r�r�r!r�r�rr�r4)rGr�r�r�r�r�s      rKr��#DatagramHandlerTest.handle_datagram�sk���{�{�4��#������D�	�
�+���l�l�6�"���&�&�s�+�����6�:�:��,�,�������rpc��UR(aURUR5 [R"S5nUR	S5 UR
R
5 UR
R5 UR	S5 UR
R
5 URURS5 g)N�udpr�r�r�)
r�r�r!r"r�r�r�rQr_r�rTs  rKr��DatagramHandlerTest.test_output�s���� � ��M�M�$�/�/�0��"�"�5�)�����V�����������������V��������������.�9rpr�N)
rxryrzr{r|r|r�r�rLrWr�r�r}r~rprKr�r��s%��$� �L��G�)�4	$��
:rpr�c�>�\rSrSrSr\"\S5(a\rSr	Sr
g)�UnixDatagramHandlerTesti�z,Test for DatagramHandler using Unix sockets.r�c��[R"5UlUR[R
UR5 [RU5 gr)rr�r�r�rrvr�rLrts rKrL�UnixDatagramHandlerTest.setUp�s8��$�<�<�>������	�(�(�$�,�,�7��!�!�$�'rpr�N�rxryrzr{r|r�rr�r�rLr}r~rprKr�r��s��7��v�y�!�!�-��(rpr�c�>�\rSrSrSr\rSrSrSr	Sr
SrSrS	r
g
)�SysLogHandlerTesti�z!Test for SysLogHandler using UDP.r|c�"�[RU5 S=Ul=UlUlURURURS5=UlnUR5 URR5 [RRn[UR ["5(a'U"UR SUR$45UlOU"UR 5UlSUlUR(R+UR(RS5 UR(R-UR5 [.R0"5Ulg![anX lSnAgSnAff=f)zlSet up a UDP server to receive log messages, and a SysLogHandler
pointing to that server's address and port.Nr~rrp)rrLrW�sl_hdlrr�r�r�r�r�r�r>r�r!rCr~r�r�rdrr�r4rPrEr�r�r�r�s    rKrL�SysLogHandlerTest.setUp�s5��	���t��=A�A���A�d�l�T�%:�	�#'�#4�#4�T�\�\�59�5I�5I�4�$Q�
Q�D�K�&��L�L�N�	���������-�-���f�+�+�U�3�3���!6�!6�q�!9�6�;�;� G�H�D�L��� 5� 5�6�D�L�������&�&�t�'7�'7�'@�'@��'C�D����#�#�D�L�L�1� ���(�����	�$%�!���	�s�>E4�4
F�>F	�	Fc�Z�UR(aURR5 UR(a?URR	UR5 URR5 [RU5 g![RU5 f=f)zShutdown the server.N)rWr9r�r4rPrOrrWrts rKrW�SysLogHandlerTest.tearDownsj��	$��{�{���� � �"��|�|�� � �.�.�t�|�|�<����"�"�$����d�#��H���d�#�r�c�Z�URUlURR5 gr)r�r�r�r4)rGr�s  rKr��!SysLogHandlerTest.handle_datagrams��!�.�.��������rpc�8�UR(aURUR5 [R"S5nUR	S5 UR
R
[R5 URURS5 UR
R5 SURl
UR	S5 UR
R
[R5 URURS5 UR
R5 SURlUR	S5 UR
R
[R5 URURS5 g)N�slh�späm�
<11>spämFs	<11>spämuhäm-s<11>häm-späm)r�r�r!r"r�r�r�rr�r_r�rQr��
append_nul�identrTs  rKr��SysLogHandlerTest.test_outputs��� � ��M�M�$�/�/�0��"�"�5�)�����Y�������'�.�.�/�������*@�A�������"'��������Y�������'�.�.�/�������*<�=�������&��������Y�������'�.�.�/�������*G�Hrpc�D�[R"S5nURR5 URR5 UR
S5 URR[R5 URURS5 g)Nr�r�r�)r!r"r�rOr�rQr�r�rr�r_r�rTs  rK�test_udp_reconnection�'SysLogHandlerTest.test_udp_reconnection.sk���"�"�5�)�����������������Y�������'�.�.�/�������*@�Arp)r�r�rWr�r�N)rxryrzr{r|r|r�r�rLrWr�r�r�r}r~rprKr�r��s,��,� �L��G�)�4	$��I�&Brpr�c�>�\rSrSrSr\"\S5(a\rSr	Sr
g)�UnixSysLogHandlerTesti6z)Test for SysLogHandler with Unix sockets.r�c��[R"5UlUR[R
UR5 [RU5 gr)rr�r�r�rrvr�rLrts rKrL�UnixSysLogHandlerTest.setUp>r�rpr�Nr�r~rprKr�r�6s��4��v�y�!�!�-��&rpr�z$IPv6 support required for this test.c�@^�\rSrSrSr\rSrU4SjrU4Sjr	Sr
U=r$)�IPv6SysLogHandlerTestiDz&Test for SysLogHandler with IPv6 host.)z::1rc�h>�[RURl[[
U]5 gr)r�AF_INET6r�r�r�r�rLr�s �rKrL�IPv6SysLogHandlerTest.setUpMs#���+1�?�?����(�
�#�T�0�2rpc�h>�[RURl[[
U]5 gr)r�AF_INETr�r�r�r�rWr�s �rKrW�IPv6SysLogHandlerTest.tearDownQs#���+1�>�>����(�
�#�T�3�5rpr~)rxryrzr{r|r|r�r�rLrWr}r�r�s@rKr�r�Ds!���1� �L��G�3�6�6rpr�c�*�\rSrSrSrSrSrSrSrg)�HTTPHandlerTestiUzTest for HTTPHandler.c�b�[RU5 [R"5Ulg)zlSet up an HTTP server to receive log messages, and a HTTPHandler
pointing to that server's address and port.N)rrLr�r�r�rts rKrL�HTTPHandlerTest.setUpZs��	���t�� ���(��rpc�~�URUl[UR5UlURS:Xa9[	UR
S5nURRU5UlURS5 UR5 URR5 g! SUlNG=f)NrqzContent-Length��)
�commandrr|�log_data�int�headers�rfilerf�	post_data�
send_response�end_headersr�r4)rGr��rlens   rK�handle_request�HTTPHandlerTest.handle_request`s�������� ����.��
��<�<�6�!�
&��7�?�?�+;�<�=��!(���!3�!3�D�!9���	���c�"������������	
&�!%���s�8B1�1	B<c	��[R"S5nURnURURRS5 SGH�nSnU(a�SSKn[RR[5n[RRUSS5nURUR5nURU5 URUS9n	OSnSn	[!X@R"SUS	9=Uln
U
R'5 U
R(R+5 S
U
R,-nU=(a Un[RR/USUW	SS
9UlSUlUR5UR05 SGHJn
X�R0lUR8R;5 SnUR=U5 UR8R+[>R@5nURCUS5 UREUR2RS5 UREURFU
5 U
S:Xa [IUR2RJ5nO$[IURLROS55nUREUSS/5 UREUSS/5 UREUSU/5 GMM UR$RQ5 URRUR05 UR0RS5 GM� g![a SnGNgf=f)N�httprr�r|�certdatazkeycert.pem)�cafiler~rizlocalhost:%dz/frob)�foo�bar)�secure�context�credentials)rprqr�zHTTP request timed outrprjrI�funcNamer�r)*r!r"r4rPrC�sslrSr|�dirname�__file__r��
SSLContext�PROTOCOL_TLS_SERVER�load_cert_chain�create_default_context�ImportErrorrIr�rWr�r>r��server_portr��h_hdlrr�rEr�r�rQr�r�
SHORT_TIMEOUTrFr_r�r�queryr��decoder9rO)rGrr4rr r�here�localhost_certr_rrW�host�
secure_clientr�rr��ds                 rKr��HTTPHandlerTest.test_outputms����"�"�6�*���&�&���!�!�$�"2�"2�";�";�A�">�?�#�F�#�D��
P���7�7�?�?�8�4�D�%'�W�W�\�\�$�
�M�%R�N� �^�^�C�,C�,C�D�F��*�*�>�:�!�8�8��8�O�G�����#1�$�8K�8K�48��$I�
I�D�K�&��L�L�N��L�L����!�F�$6�$6�6�D�"�-�v�M�!�*�*�6�6�t�W�>K�?F�CQ�7�S�D�K�!�D�M��"�"�4�;�;�/�)��%+���"����"�"�$������S�!��,�,�+�+�G�,A�,A�B������)A�B�� � ����!3�!3�W�=�� � ����v�6��U�?� ����!4�!4�5�A� ����!6�!6�w�!?�@�A�� � ��6��V�H�5�� � ��:����@�� � ��5��C�5�1�*�"
�K�K�������*�*�4�;�;�7��K�K����c$��
#�"�!�F�"�s�L;�;M�
M)r�r
r�r�r�rWN)	rxryrzr{r|rLr�r�r}r~rprKr�r�Us�� �)��6 rpr�c�0�\rSrSrSrSrSrSrSrSr	g)	�
MemoryTesti�z*Test memory persistence of logger objects.c�<�[RU5 0Ulg)z8Create a dict to remember potentially destroyed objects.N)rrL�
_survivorsrts rKrL�MemoryTest.setUp�s�����t����rpc��UH<n[U5[U54n[R"U5URU'M> g)zCWatch the given objects for survival, by creating weakrefs to
them.N)r/rr�r�r)rGrTr��keys    rK�_watch_for_survival�MemoryTest._watch_for_survival�s7���C��S�'�4��9�$�C�#*�;�;�s�#3�D�O�O�C� �rpc� �[R"5 /nURR5H#uup#nU"5bMUR	U5 M% U(a/URS[
U5SRU54-5 gg)z;Assert that all objects watched for survival have survived.Nz;%d objects should have survived but have been destroyed: %sz, )�gc�collectrrr�rcr`r�)rG�dead�id_�repr_r�s     rK�_assertTruesurvival�MemoryTest._assertTruesurvival�sy��	�
�
����!%���!6�!6�!8��L�S�#��u�}����E�"�"9���I�I�.�14�T��D�I�I�d�O�0L�M�
N�rpc�H�URR[R5 [R"S5nURU5 UR[R5 URRUR55 URUR55 URS/5 AUR5 [R"S5nURUR55 URSS/5 g)Nr�)r�r;r�)r�r;r�)r4r:r!r�r"rr;r�rurnr&)rGr�r�s   rK�test_persistent_loggers�"MemoryTest.test_persistent_loggers�s���	
���!�!�'�,�,�/�����&��� � ��%����W�]�]�#������t�0�0�2�3��	�	�$�#�#�%�&����!�
�	�
�� � �"�����&���	�	�$�#�#�%�&����!�!�
�	rp)rN)
rxryrzr{r|rLrr&r)r}r~rprKrr�s��4��
4�
N�rprc� �\rSrSrSrSrSrg)�EncodingTesti�c��[R"S5n[SS5nSn[R"USS9nUR	U5 URU5 UR
U5 UR5 [USS9nURUR5R5U5 UR5 [RRU5(a[R"U5 gg!UR
U5 UR5 f=f!UR5 f=f![RRU5(a[R"U5 ff=f)NrGr�ztest_logging-1-ufoo€rjr�)r!r"rXr�rEr�rPrOr�r_rf�rstriprSr|�isfiler�)rGr�rWr�r�r�s      rK�test_encoding_plain_file�%EncodingTest.test_encoding_plain_file�s������'��
�F�$5�
6����	��)�)�"�w�?�G��N�N�7�#�
 ����D�!��!�!�'�*��
�
���R�'�*�A�
�� � �������!2�D�9����	��w�w�~�~�b�!�!��	�	�"�
�"���!�!�'�*��
�
������	���w�w�~�~�b�!�!��	�	�"�
�"�s;�&E�
D�+E�
.D+�8E�#D(�(E�+D=�=E�=E=c���[R"S5nSn[R"S5nSUl[
R"5nU"US5n[R"U5nURU5 URU5 URU5 UR5 UR5nURUS5 g!URU5 UR5 f=f)NrGuдо свидания�cp1251�stricts�� �������
)r!r"�codecs�	getwriterrlr7�BytesIOr<rEr�rPrOr]r_)rGr��message�writer_classr9�writerr�rms        rK�test_encoding_cyrillic_unicode�+EncodingTest.test_encoding_cyrillic_unicode�s�������'��Q���'�'��1�� (���������f�h�/���'�'��/�����w��	��K�K�� ����g�&��M�M�O��O�O�������J�K��
���g�&��M�M�O�s�<C�#C4r~N)rxryrzr{r0r;r}r~rprKr,r,�s
���2Lrpr,c� �\rSrSrSrSrSrg)�WarningsTesti		c	�@�[R"5 [R"S5 UR	[RS5 [R
"S[S9 [R"5n[R"U5n[R"S5nURU5 [R"S5 URU5 UR5nUR5 UR!UR#S5S5 [R"5n[R$"S	[S
SUS5 UR5nUR5 UR'US
5 SSS5 g!,(df   g=f)NTF�always)�category�py.warningszI'm warning you...z UserWarning: I'm warning you...
r�Explicit�dummy.py�*z
Dummy linez0dummy.py:42: UserWarning: Explicit
  Dummy line
)�warnings�catch_warningsr!�captureWarningsr��filterwarnings�UserWarningr7r8r<r"rE�warnrPr]rOr��find�showwarningr_)rGr9rVrrm�a_files      rK�
test_warnings�WarningsTest.test_warnings	s ��
�
$�
$�
&��#�#�D�)��O�O�G�3�3�U�;��#�#�H�{�C��[�[�]�F��%�%�f�-�A��&�&�}�5�F����a� ��M�M�.�/�� � ��#����!�A�
�G�G�I����q�v�v�&I�J�A�N��[�[�]�F�� � ��[�*�b�!'��
7����!�A��L�L�N����Q�D�
F�)'�
&�
&�s�E0F�
Fc��[R"5 [R"S5 UR	[RS5 [R
"S5nUR
UR/5 [R"S[SS5 UR
[UR5S5 URURS[R5 SSS5 g!,(df   g=f)	NTFrBrCrDrErrr)
rFrGr!rHr�r"r_rCrMrJr`�assertIsInstance�NullHandlerrTs  rK�test_warnings_no_handlers�&WarningsTest.test_warnings_no_handlers#	s���
�
$�
$�
&��#�#�D�)��O�O�G�3�3�U�;��&�&�}�5�F����V�_�_�b�1�� � ��[�*�b�I����S����1�1�5��!�!�&�/�/�!�"4�g�6I�6I�J�'�
&�
&�s�CC7�7
Dr~N)rxryrzr{rOrTr}r~rprKr>r>		s��F�0Krpr>c�.�[R"X5$r)r!r>)r\rns  rK�
formatFuncrW1	s�����V�-�-rpc��\rSrSrSSjrSrg)�myCustomFormatteri4	Nc��grr~)rG�fmtrns   rKr��myCustomFormatter.__init__5	���rpr~r)rxryrzr{r�r}r~rprKrYrY4	s��
rprYc�,�[R"5$r)r!r<r~rprK�handlerFuncr_8	s��� � �"�"rpc��\rSrSrSrg)�
CustomHandleri;	r~N�rxryrzr{r}r~rprKrara;	���rprac��\rSrSrSrg)�CustomListeneri>	r~Nrbr~rprKrere>	rcrprec��\rSrSrSrg)�CustomQueueiA	r~Nrbr~rprKrgrgA	rcrprgc�$�\rSrSrSSjrSrSrg)�CustomQueueProtocoliD	c�:�[R"U5Ulgr��queue�Queue)rG�maxsizes  rKr��CustomQueueProtocol.__init__E	s���[�[��)��
rpc�D�[RUS5n[X!5$)Nrl)�object�__getattribute__r1)rG�	attributerls   rKrS�CustomQueueProtocol.__getattr__H	s���'�'��g�6���u�(�(rp)rlN)r)rxryrzr{r�rSr}r~rprKririD	s��*�)rpric��\rSrSrSrSrg)�CustomQueueFakeProtocoliL	c��grr~rts rK�
put_nowait�"CustomQueueFakeProtocol.put_nowaitT	r]rpr~N�rxryrzr{rxr}r~rprKrvrvL	s��
rprvc��\rSrSrSrSrg)�CustomQueueWrongProtocoliW	Nr~rzr~rprKr|r|W	s���Jrpr|c� �\rSrSrSrSrSrg)�MinimalQueueProtocoliZ	c��grr~)rG�xs  rKrx�MinimalQueueProtocol.put_nowait[	s��Trpc��grr~rts rK�get�MinimalQueueProtocol.get\	s��4rpr~N)rxryrzr{rxr�r}r~rprKr~r~Z	s��!�rpr~c�,�[R"5$rrkr~rprK�
queueMakerr�^	s���;�;�=�rpc�^�U4SjnU$)Nc�F>�URST5 [U/UQ70UD6$)N�respect_handler_level)�
setdefaultre)rlrCrUr�s   �rK�func�listenerMaker.<locals>.funcb	s*������1�3H�I��e�9�h�9�&�9�9rpr~)�arg1�arg2r�r�s  ` rK�
listenerMakerr�a	s���:��Krpc
��
�\rSrSrSr\RrSrSSSS00SS	SS
SS.0S
S/S.S.rSSSS00SS	SS
SS.0SSS/S.0SS
0S.r	SSSS00SS	SS
SS.0SSS00S
S/S.S.r
SSSS00SS	SS
SS.0SSS/S.0SS
0S.rSSSS00SS	SSSS.0SSS/S.0SS
0S.rSSSS00SS	SS
SS.0SSS/S.0SS0S.r
SSSS00SS	SS
SS.0SSS/S.0SS
0S.rSS\S-SS.0SS	SS
SS.0S
S/S.S.rS\SS.\S-SS.\SS.S.S	SS
SS.S\0S.S
S/S.S.rSSSS00S\S-SS
SS.0SSS/S.0SS
0S.rSSSS00S\S-SS
SS S!.0SSS/S.0SS
0S.rSSSS00SS	SS
SS.0S"SS/S.0SS
0S.rSS#SSS00SS	SS
SS.0SS/S.0S$.SS
0S%.rSS&SSS00SS	SS
SS.0SS/S.0S$.SS
0S%.rSSSS00SS	SS
SS.0SS
S/S.0SS
0S.rSS&SSS
00SSS'00S(.rSS&SSS'00SSS'00S(.rSSSS00S)S*S00SS	SS
SS)/S+.0SSS)/S,.0S
S/S.S-.rSSSS00SS	SS
SS.0S.SS/0SSS/S.0SS
0S0.rSSS00SS	SS
SS.0S.SS/0SSS/S.0SS
0S1.rS2SSS00SS	SS
SS.0S.SS/0SSS/S.0SS
0S0.rSSSS00SS	SS
SS3S4S5.S6.0S
S/S.S.r SSS7S8S90S:.0SS	SS
SS.0S
S/S.S.r!"S;S<\"RF5r$SS=\$S>S?S@SASB0SC.0SS	S=S
SS.0S
S/S.S.r%SS	SSD.SESFSGSSHSI.SJ.SKSSL/SMSN.0SO.r&SSPSQSRSS.0S	SSPST.SESFSPSUSSV.SW.SKSSX/SMSN.0SY.r'SS\S-SS#SZ.0SS	SS
SS.0S[SS/SMSN.0SY.r(SS\S-SS#S\.0SS	SS
SS.0S[SS/SMSN.0SY.r)SS\S]-SS#S\.0SS	SS
SS.0S[SS/SMSN.0SY.r*SS\SS#SZ.0SS	SS
SS.0S[SS/SMSN.0SY.r+SS\S^S8S_0S`.0SS	SS
SS.0S[SS/SMSN.0SY.r,SSaSb0ScSd/Se.Sf.SSg/S.Sh.r-Sir.Sjr/Skr0\	4Sljr1Smr2Snr3Sor4Spr5Sqr6Srr7Ssr8Str9Sur:Svr;Swr<Sxr=Syr>Szr?S{r@S|rAS}rBS~rCSrDS�rES�rFS�S�jrG\HR�"5S�5rJ\HR�"5S�5rK\HR�"5S�5rLS�rMS�rNS�rOS�rPS�rQS�rRS�rSS�rTS�rUS�rVS�rWS�rXS�rYS�rZS�r[\\R�"5\HR�"5S�55r_S�r`\\R�"5\HR�"5\a"S�5S�555rb\a"S�5S�5rc\d\HR�"5\eR�"\HR�S�5S�555rh\d\HR�"5\eR�"\HR�S�5S�555ri\jS�5rk\d\HR�"5S�55rlS�rmS�rnS�roS�rpg�)��ConfigDictTestig	z)Reading logging config from a dictionary.r�rr�form1r\z%(levelname)s ++ %(message)srX�logging.StreamHandlerr�zext://sys.stdout)rorLr�r9r��r�rC)rprqrCrCr	r;r�)rprqrC�loggersrCzext://sys.stdbout�NTOSET�WRANING�misspelled_namez.ExceptionFormatterz"%(levelname)s:%(name)s:%(message)s)�()r\z.formatFunc)r��form2�form3r�)rX�hand2z.CustomHandlerzinvalid parameter name)rorLr�r9r�r4F)�compilerr4)rprRrqrCr�rCTr�)rp�incrementalrCr��filt1rI)rorLr�r9�filters�r�r�)rprqr�rCr�rCzcfg://true_formatterszcfg://handler_configs[hand1])rp�true_formatters�handler_configsrqrCr�rC)r�r�rqrCr�rCr�r��!
)r��
terminator)rorLr�r9r�z%(message)s ++ %(customfield)srJ�defaultvalue)r\rrc�,^�\rSrSrSrU4SjrSrU=r$)�ConfigDictTest.CustomFormatteri�r�c�">�[TU]U5$r)r�r\�rGr�r�s  �rKr\�%ConfigDictTest.CustomFormatter.format�s����7�>�&�)�)rpr~)rxryrzr{�custom_propertyr\r}r�r�s@rK�CustomFormatterr��s�����	*�	*rpr��custom�{�%Y-%m-%d %H:%M:%S�	{message}r��value)r��stylernr\r�)ror�zlogging.handlers.MemoryHandler��consoler�)ro�capacityr�r��
flushLevel)r��	buffering�mymoduler��true)r�rCr�)rprCr��mySimpleFormatterz1%(asctime)s (%(name)s) %(levelname)s: %(message)s�$)r\r�)ror�rL�
fileGlobal)ror�rLr�r�)r��bufferGlobalr�)rprqrCr�)r�r\�validate�my_test_logger_custom_formatter)ror\r�z.myCustomFormatterz2%(levelname)s:%(name)s:%(message)s:%(customfield)s�myvalue)r�r\rrro�logging.FileHandler�logging.handlers.QueueHandler�h1)rorC)r��ahr��rprCrCc�B�[RRU5 gr)r!r��
dictConfig)rGr�s  rKr��ConfigDictTest.apply_config�s�����!�!�$�'rpc�R�[R"U5nURX25 gr)r!�getHandlerByNamerR)rGrIr�rVs    rK�
check_handler�ConfigDictTest.check_handler�s ���$�$�T�*�����a�%rpc���[R"5nURUR5 UR	S[
R5 [
R"5nURUR55 URUR55 URS/US9 UR/5 SSS5 g!,(df   g=f)NrXr�r�)rr�r�r�r�r!r<r"r�rur�rnr�s   rKr��ConfigDictTest.test_config0_ok�s���
�
$�
$�
&�&����d�l�l�+����w��(=�(=�>��&�&�(�F��K�K��)�)�+�,��L�L��*�*�,�-��!�!��#��
"�
�
�!�!�"�%�'�
&�
&�s�B1C�
Cc�r�[R"5nURU5 [R"S5nURUR
55 URUR
55 URSS/US9 UR/5 SSS5 g!,(df   g=frrrs    rKr
�ConfigDictTest.test_config1_ok�rrc�Z�UR[URUR5 grrrts rKr�#ConfigDictTest.test_config2_failure�rrpc�Z�UR[URUR5 gr)r_r�r��config2arts rK�test_config2a_failure�$ConfigDictTest.test_config2a_failure�������)�T�%6�%6��
�
�Frpc�Z�UR[URUR5 gr)r_r�r��config2brts rK�test_config2b_failure�$ConfigDictTest.test_config2b_failure�r�rpc�Z�UR[URUR5 grrrts rKr�#ConfigDictTest.test_config3_failure�rrpc���[R"5nURUR5 UR	S[
R5 [5e![a [
R"S5 Of=f[RRS5 URUR5S5 UR/5 SSS5 g!,(df   g=f)NrXrrr)rr�r�r r�r!r<r�r!rtr"r#r_r]rn�rGr�s  rKr$�ConfigDictTest.test_config4_ok
s���
�
$�
$�
&�&����d�l�l�+����w��(=�(=�>�
2�"�n�$���
2��!�!�.�1�
2���J�J�O�O�A�����V�_�_�.�A�
C�
�!�!�"�%�'�
&�
&�s*�<C�
A� B�=C�?B�AC�
C*c��[R"5nURUR5 [	5e![a [
R"S5 Of=f[RRS5 URUR5S5 UR/5 SSS5 g!,(df   g=fr)
rr�r��config4ar�r!r!rtr"r#r_r]rnr�s  rK�test_config4a_ok�ConfigDictTest.test_config4a_ok
s���
�
$�
$�
&�&����d�m�m�,�
2�"�n�$���
2��!�!�.�1�
2���J�J�O�O�A�����V�_�_�.�A�
C�
�!�!�"�%�'�
&�
&�s'�B<�
=� A �B<�A � AB<�<
C
c�b�URURS9 URS[5 g)Nr(rX)r
r)r�rarts rKr*�ConfigDictTest.test_config5_ok 
s'�����D�L�L��1����7�M�2rpc�Z�UR[URUR5 gr)r_r�r�r.rts rK�test_config6_failure�#ConfigDictTest.test_config6_failure$
s�����)�T�%6�%6����Erpc��[R"5nURUR5 [R
"S5nUR
UR55 URUR55 URSS/US9 UR/5 SSS5 [R"5nURUR5 URS[R5 [R
"S5nURUR5 [R
"S5nUR
UR55 URUR55 URSS/US9 UR/5 SSS5 g!,(df   GN=f!,(df   g=f)	Nr	r
r�r�rXr4�r�r��r�r�)rr�r�ryr!r"r�rur�rnr8r�r<rFrr�s   rKr;�ConfigDictTest.test_config7_ok'
sv��
�
$�
$�
&�&����d�l�l�+��&�&�'8�9�F��K�K��)�)�+�,��L�L��*�*�,�-��!�!���#��
"�
�

�!�!�"�%�'��
$�
$�
&�&����d�l�l�+����w��(=�(=�>��&�&�'8�9�F��O�O�F�O�O�,��&�&�'7�8�F��K�K��)�)�+�,��L�L��*�*�,�-��!�!���#��
"�
�

�!�!�"�%�'�
&�'�
&��'�
&�s�BF3�C$G�3
G�
Gc�(�[R"5nURUR5 [R
"S5nUR
UR55 URUR55 URSS/US9 UR/5 SSS5 [R"5nURUR5 URS[R5 [R
"S5nURUR5 UR
UR55 URUR55 [R
"S5nUR
UR55 URUR55 UR/SQUS9 UR/5 SSS5 g!,(df   GNO=f!,(df   g=f)Nr	r
r�r�rXr4)r�r��r�r��r�r�)rr�r�ryr!r"r�rur�rnrBr�r<r{rr�s   rK�test_config_8_ok�ConfigDictTest.test_config_8_okE
s���
�
$�
$�
&�&����d�l�l�+��&�&�'8�9�F��K�K��)�)�+�,��L�L��*�*�,�-��!�!���#��
"�
�

�!�!�"�%�'��
$�
$�
&�&����d�l�l�+����w��(=�(=�>��&�&�'8�9�F����V�_�_�-��K�K��)�)�+�,��L�L��*�*�,�-��&�&�'7�8�F��K�K��)�)�+�,��L�L��*�*�,�-��!�!�#�
�
"�
�
�!�!�"�%�''�
&�'�
&��'�
&�s�BG1�D"H�1
H�
Hc��[R"5nURUR5 UR	S[
R5 [
R"S5n[
R"S5nURUR55 URUR55 URUR55 UR/SQUS9 UR/5 SSS5 [R"5nURUR5 UR	S[
R5 [
R"S5nURUR5 URUR55 URUR55 [
R"S5nURUR55 URUR55 WRUR55 UR/SQUS9 UR/5 SSS5 g!,(df   GNn=f!,(df   g=f)NrXr	r2r3r�r4r5)rr�r�r6r�r!r<r"r�rur�r7rn�config8ar{rr9s    rK�test_config_8a_ok� ConfigDictTest.test_config_8a_okg
s���
�
$�
$�
&�&����d�m�m�,����w��(=�(=�>��&�&�'8�9�F�!�*�*�+@�A�J��K�K��)�)�+�,��L�L��*�*�,�-����� 1� 1� 3�4��!�!�#��	
"�
�
�!�!�"�%�)'�*�
$�
$�
&�&����d�m�m�,����w��(=�(=�>��&�&�'8�9�F����V�_�_�-��K�K��)�)�+�,��L�L��*�*�,�-��&�&�'7�8�F��K�K��)�)�+�,��L�L��*�*�,�-����� 1� 1� 3�4��!�!�#�
�
"�
�
�!�!�"�%�+'�
&�+'�
&��*'�
&�s�C(I%�EI7�%
I4�7
Jc��[R"5nURUR5 UR	S[
R5 [
R"S5nURUR55 UR/US9 URUR5 URUR55 UR/US9 URUR5 URUR55 URS/US9 SSS5 g!,(df   g=f)NrXr	r�r�)
rr�r�rKr�r!r<r"r�rurn�config9a�config9br�s   rK�test_config_9_ok�ConfigDictTest.test_config_9_ok�
s���
�
$�
$�
&�&����d�l�l�+����w��(=�(=�>��&�&�'8�9�F��K�K��)�)�+�,��!�!�"�V�!�4����d�m�m�,��K�K��)�)�+�,��!�!�"�V�!�4����d�m�m�,��K�K��)�)�+�,��!�!��#��
"�
�'�
&�
&�s�DD5�5
Ec��[R"5nURUR5 UR	S[
R5 [
R"S5nURUR55 [
R"S5nURUR55 [
R"S5nURUR55 [
R"S5nURUR55 URSS/US9 SSS5 g!,(df   g=f�	NrXr	r�r4zcompiler.parser.codegen)r�r�r�r�)rr�r��config10r�r!r<r"r�rur�rnr�s   rK�test_config_10_ok� ConfigDictTest.test_config_10_ok�
s���
�
$�
$�
&�&����d�m�m�,����w��(=�(=�>��&�&�'8�9�F��N�N�4�,�,�.�/��&�&�z�2�F��N�N�4�,�,�.�/��&�&�'7�8�F��N�N�4�,�,�.�/��&�&�'@�A�F��L�L��*�*�,�-��!�!� ��#��
"�
�'�
&�
&�s�D"E�
Ec�:�URUR5 gr)r
�config11rts rK�test_config11_ok�ConfigDictTest.test_config11_ok�
s�����T�]�]�+rpc�Z�UR[URUR5 gr)r_r�r��config12rts rK�test_config12_failure�$ConfigDictTest.test_config12_failure�
������)�T�%6�%6��
�
�Frpc�Z�UR[URUR5 gr)r_r�r��config13rts rK�test_config13_failure�$ConfigDictTest.test_config13_failure�
r
rpc��[R"5nURUR5 [R
SnUR
URS5 UR
URS5 [R"S5 URUR5RS55 SSS5 g!,(df   g=f)NrXr�r��Exclamationz
Exclamation!
)
rr�r��config14r!r&r_r�r�r�rFr]r�)rGr�rVs   rK�test_config14_ok�ConfigDictTest.test_config14_ok�
s���
�
$�
$�
&�&����d�m�m�,��!�!�'�*�A����Q�U�U�E�*����Q�\�\�5�1��O�O�M�*��O�O�F�O�O�-�6�6�7G�H�I�
'�
&�
&���B+C
�

Cc�:�UR5 [SS5nSSSUSS.0SS/0S	.nURU5 URU5 SSS5 [RR
S
nUR
[UW5 g!,(df   NC=f)Nr�r>rrr�r�rj)ro�filenamerlrCr�r)r@rXr�r!rCrCr�r�)rGrWr�r�s    rK�test_config15_ok�ConfigDictTest.test_config15_ok�
s���
�
+�
+�
-���(9�:�B���!6�$&�$+��������F�
���f�%����f�%�%.�(�,�,�'�'��*�����(�'�2�6�+.�
-�s�>B�
Bc�n�URUR5 [RSnURR[R"SSS.55nURUS5 URR[R"SS055nURUS5 g)NrX�HellorHrIzHello ++ customvaluerzHello ++ defaultvalue)r��config16r!r&rLr\r�r_)rGrVrMs   rK�test_config16_ok�ConfigDictTest.test_config16_ok�
s������$�-�-�(����g�&�����#�#�G�$9�$9��M�:�%<�=������!7�8����#�#�G�$9�$9�
�G��%�������!8�9rpc��URUR5 [RSnUR	UR
RS5 g)NrXr�)r��config17r!r&r_rLr�rbs  rK�test_config17_ok�ConfigDictTest.test_config17_ok�
s>�����$�-�-�(����g�&��������4�4�g�>rpc���URUR5 [R"S5RSnURUR[R5 g)Nr�r)r��config18r!r"rCr_r�r��rGr�s  rK�test_config18_ok�ConfigDictTest.test_config18_ok�
sI�����$�-�-�(��#�#�J�/�8�8��;������+�+�W�]�]�;rpNc���URS5n[RRSU5nUR	5 UR
R
5 URnUR
R5 [R"[R[R5nURS5 URSU45 [R"S[!U55nXa-nSn[!U5n	U	S:�a#UR#XxS5n
X�-
nX�-n	U	S:�aM#UR%5 UR
R
S5 [RR'5 [(R*"U5 g!UR
R
S5 [RR'5 [(R*"U5 f=f)Nrjrg@rsr�)rtr!r��listenr�r>r�rrQrr��SOCK_STREAM�
settimeout�connectr�r�r`�sendrO�
stopListeningr	r7)rG�text�verifyr-rrer�rm�	sentsofar�left�sents           rK�setup_via_listener�!ConfigDictTest.setup_via_listener�
sS���{�{�7�#���N�N�!�!�!�V�,��	���	�	�������v�v��	���
�
��	,��=�=�����1C�1C�D�D��O�O�C� ��L�L�+�t�,�-��;�;�t�S��Y�/�D���A��I��q�6�D���(��y�y��:��/���!�	������(�
�J�J�L�
�G�G�L�L����N�N�(�(�*��(�(��+��
�G�G�L�L����N�N�(�(�*��(�(��+�s�B/F�4F�AG%c���[R"5nUR[R"UR
55 UR
S[R5 [R"S5nURUR55 [R"S5nURUR55 [R"S5nURUR55 [R"S5nURUR55 URSS/US9 SSS5 g!,(df   g=fr�)rr�r3�json�dumpsr�r�r!r<r"r�rur�rnr�s   rK�test_listen_config_10_ok�'ConfigDictTest.test_listen_config_10_oks��
�
$�
$�
&�&��#�#�D�J�J�t�}�}�$=�>����w��(=�(=�>��&�&�'8�9�F��N�N�4�,�,�.�/��&�&�z�2�F��N�N�4�,�,�.�/��&�&�'7�8�F��N�N�4�,�,�.�/��&�&�'@�A�F��L�L��*�*�,�-��!�!� ��#��
"�
�'�
&�
&�s�D6E�
E#c��[R"5nUR[R"[
R55 [R"S5nURUR55 URUR55 URSS/US9 UR/5 SSS5 g!,(df   g=fr)
rr�r3r�r�r�ryr!r"r�rur�rnr�s   rK�test_listen_config_1_ok�&ConfigDictTest.test_listen_config_1_ok/s���
�
$�
$�
&�&��#�#�H�O�O�N�4J�4J�$K�L��&�&�'8�9�F��K�K��)�)�+�,��L�L��*�*�,�-��!�!���#��
"�
�

�!�!�"�%�'�
&�
&�rc��SnSn[R"S5n[R"[R
5n[R"5nURXA5 URUR55 URUR55 SSS5 UR/WS9 URSS/SS9 [R"5nURU5 [R"S5nURUR55 URUR55 SSS5 URS	S
/US9 URSS/SS9 [R"5nURUSSS2U5 [R"S5nURUR55 URUR55 SSS5 URSS
/US9 URSS/SS9 g!,(df   GN�=f!,(df   N�=f!,(df   NV=f)Nc��grr~��stuffs rK�verify_fail�6ConfigDictTest.test_listen_verify.<locals>.verify_failAs��rpc��USSS2$)Nrnr~r?s rK�verify_reverse�9ConfigDictTest.test_listen_verify.<locals>.verify_reverseDs����2��;�rpr	r�r
r�r)rhr�r�rnr�r�)
r!r"r�r�r�ryrr�r3r�rur�rn)rGrArDr�to_sendr�s      rK�test_listen_verify�!ConfigDictTest.test_listen_verify>s.��	�	��"�"�#4�5���/�/�.�"8�"8�9���
$�
$�
&�&��#�#�G�9��K�K��)�)�+�,��L�L��*�*�,�-�	'�
	
���b���0������
�+�	�	,��
$�
$�
&�&��#�#�G�,��&�&�'8�9�F��K�K��)�)�+�,��L�L��*�*�,�-�'�	
�����
��	�	�
	
�����
�+�	�	,��
$�
$�
&�&��#�#�G�D�b�D�M�>�B��&�&�'8�9�F��K�K��)�)�+�,��L�L��*�*�,�-�'�	
�����
��	�	�
	
�����
�+�	�	,�Y'�
&��'�
&��$'�
&�s'�AH&�%A&H8�A-I	�&
H5�8
I�	
Ic�Z�UR[URUR5 gr)r_r�r��
bad_formatrts rK�test_bad_format�ConfigDictTest.test_bad_format}s�����*�d�&7�&7����Irpc���[R"UR5nSUSSS'URU5 [R
"S5RSnURUR[R5 URURR[R5 UR[[R"55SS/5 g)	Nz-${asctime} (${name}) ${levelname}: ${message}rqr�r\r�rr�r�)r'�deepcopyrJr�r!r"rCrRr�r^rL�_style�StringTemplateStyler_�sorted�getHandlerNames�rGr�r�s   rK�!test_bad_format_with_dollar_style�0ConfigDictTest.test_bad_format_with_dollar_style�s������t���/��>m��|��0�1�(�;����&�!��#�#�J�/�8�8��;�����g�n�n�g�o�o�>����g�/�/�6�6�%�9�9�	;������ 7� 7� 9�:�(�,�7�	9rpc��URUR5 [R"S5RSnURUR[5 g�Nr�r)r��custom_formatter_class_validater!r"rCrRrLr�r$s  rK�)test_custom_formatter_class_with_validate�8ConfigDictTest.test_custom_formatter_class_with_validate�sJ�����$�>�>�?��#�#�$E�F�O�O�PQ�R�����g�/�/�1C�Drpc��URUR5 [R"S5RSnURUR[5 grW)r�� custom_formatter_class_validate2r!r"rCrRrLr�r$s  rK�*test_custom_formatter_class_with_validate2�9ConfigDictTest.test_custom_formatter_class_with_validate2�sJ�����$�?�?�@��#�#�$E�F�O�O�PQ�R�����g�/�/�1C�Drpc��URR5nSUSSS'URU5 [R"S5R
SnUR
UR[5 g)Nr�rqr�r�r�r)	rXr'r�r!r"rCrRrLr�rSs   rK�9test_custom_formatter_class_with_validate2_with_wrong_fmt�HConfigDictTest.test_custom_formatter_class_with_validate2_with_wrong_fmt�sn���5�5�:�:�<��14��|��W�%�g�.�	
���&�!��#�#�$E�F�O�O�PQ�R�����g�/�/�1C�Drpc�Z�UR[URUR5 gr)r_r�r�� custom_formatter_class_validate3rts rK�*test_custom_formatter_class_with_validate3�9ConfigDictTest.test_custom_formatter_class_with_validate3�s �����*�d�&7�&7��9^�9^�_rpc�Z�UR[URUR5 gr)r_r�r��custom_formatter_with_functionrts rK�,test_custom_formatter_function_with_validate�;ConfigDictTest.test_custom_formatter_function_with_validate�� �����*�d�&7�&7��9\�9\�]rpc�Z�UR[URUR5 gr)r_r�r��custom_formatter_with_defaultsrts rK�,test_custom_formatter_function_with_defaults�;ConfigDictTest.test_custom_formatter_function_with_defaults�rjrpc�	�S/SQSSSSSSS	S
SSSSSSSS
SSS.S.S.
SSSS/S//SQS.n[RRU5nURUR	S5S5 URUR	S5S5 URUR	S5S5 URUR	S5S5 URUR	S5S5 URUR	S 5S5 URUR	S!5S5 URUR	S"5S5 URUR	S#5S5 URUR	S$5S5 URUR	S%5S5 URUR	S&5S5 URUR	S'5S5 URUR	S(5S5 URUR	S)5S5 URUR	S*5S5 URUR	S+5S,5 URUR	S-5S5 URUR	S.5S/5 URUR	S05S15 URUR	S25S
5 URUR	S35S
5 URUR	S45S5 URUR	S55S5 URUR	S65S/5 URUR	S75S15 URUR	S85S
5 URUR	S95S
5 UR	S:5nURURS
5/SQ5 UR
[URS;5 UR
[URS<5 UR
[URS=5 UR
[URS>5 UR
[URS?5 UR
[URS@5 g)AN)rrr��)r��b�crfrpr�r����� r�)�g)rVr��jrrr�)r�za with 1 and spaceza with ( and space)rr��alpha numeric 1 with spaces�alpha numeric 1 %( - © ©ß¯r�somelist�somedict)
rr�ryrzzalpha numeric ] 1 with spacesu"alpha ]] numeric 1 %( - © ©ß¯]u# alpha [ numeric 1 %( - © ©ß¯] z alpha r�nest4r�lr�r�)�ozcfg://alist�p)�atuple�alist�adict�nest1�nest2�nest3zcfg://atuple[1]r�zcfg://alist[1]rqzcfg://nest1[1][0]rVzcfg://nest2[1][1]z
cfg://adict.dzcfg://adict[f]z(cfg://adict[alpha numeric 1 with spaces]u+cfg://adict[alpha numeric 1 %( - © ©ß¯]z
cfg://adict[]zcfg://adict.nest4.dzcfg://adict.nest4[d]zcfg://adict[nest4].dzcfg://adict[nest4][f]z/cfg://adict[nest4][alpha numeric 1 with spaces]u2cfg://adict[nest4][alpha numeric 1 %( - © ©ß¯]zcfg://adict[nest4][]zcfg://adict[nest4][somelist][0]rwz"cfg://adict[nest4][somelist][1][0]z"cfg://adict[nest4][somelist][1][1]r�zcfg://adict[nest4][somelist][2]rxzcfg://adict[nest4].somedict.azcfg://adict[nest4].somedict[a]z/cfg://adict[nest4].somedict[a with 1 and space]z/cfg://adict[nest4].somedict[a with ( and space]z cfg://adict.nest4.somelist[1][1]zcfg://adict.nest4.somelist[2]zcfg://adict.nest4.somedict.azcfg://adict.nest4.somedict[a]zcfg://nest3zcfg://nosuchzcfg://!zcfg://adict[2]z*cfg://adict[alpha numeric ] 1 with spaces]u1cfg://adict[ alpha ]] numeric 1 %( - © ©ß¯] ]u0cfg://adict[ alpha [ numeric 1 %( - © ©ß¯] ])	r!r��BaseConfiguratorr_�convert�popr_�KeyErrorr�)rGr�bcrs    rK�test_baseconfig�ConfigDictTest.test_baseconfig�s���$��q�01�34�24�79�8:����1�45�78��"8��/0�/0�"�
��,,��C��:�s�+�.�7
��:�^�^�
,�
,�Q�
/��������$5�6��:�������$4�5�s�;�������$7�8�#�>�������$7�8�#�>�������O�4�c�:�������$4�5�q�9�������$N�O�QR�S�������$Q�R�TU�V�������O�4�b�9�������$9�:�C�@�������$:�;�S�A�������$:�;�S�A�������$;�<�a�@�������$U�V�XY�Z�������$X�Y�[\�]�������$:�;�R�@�������$E�F��L�������$H�I�3�O�������$H�I�3�O�������$E�F��L�������$C�D�a�H�������$D�E�q�I�������$U�V�XY�Z�������$U�V�XY�Z�������$F�G��M�������$C�D�c�J�������$B�C�Q�G�������$C�D�a�H��J�J�}�%��������q��?�3����(�B�J�J��?����*�b�j�j�)�<����(�B�J�J�0@�A����(�B�J�J�0\�]����*�b�j�j�2e�f����*�b�j�j�2d�erpc�z^�SSKJm "U4SjS[R5nT"SSS/5nU"SS	/S
9nSSUUS
.0SS/S.S.n[R
"5nUR
U5 [R"S5 SSS5 URWR5S5 g!,(df   N/=f)Nr)�
namedtuplec�8>^�\rSrSrUU4SjrU4SjrSrU=r$)�1ConfigDictTest.test_namedtuple.<locals>.MyHandleri�c�2>�[TU]"U0UD6 Xlgr)r�r��resource)rGr�rTrUr�r�s    ��rKr��:ConfigDictTest.test_namedtuple.<locals>.MyHandler.__init__�s����� �$�1�&�1�,4�
rpc�z>�U=RSURR3-
sl[TU]U5$�N� )rr��typer�rar�s  �rKra�6ConfigDictTest.test_namedtuple.<locals>.MyHandler.emit�s2����
�
��$�-�-�"4�"4�!5�6�6�
��w�|�F�+�+rp)r�r�)r�r�s@�rK�	MyHandlerr��s���
5�
,�
,rpr��Resourcer��labels�my_typer�)r�r�rr�	myhandler)r�r�r�r�r�zsome logzsome log my_type
)
�collectionsr�r!r<rrr�r�r_r])rGr�r�r�r�rr�s      @rK�test_namedtuple�ConfigDictTest.test_namedtuple�s����*�	,��-�-�	,��j�6�8�*<�=����C�5�9����#� (��� &�K�=�A�	
���
$�
$�
&�&����f�%��L�L��$�'�	
������*�,@�A�'�
&�s�(B,�,
B:c�n�SnURSSU/S.S.5 /[R"5lg)Nc��grur~)r�s rKr��AConfigDictTest.test_config_callable_filter_works.<locals>.filter_s��rprrr;r��rprC�r�r!r"r��rGr�s  rK�!test_config_callable_filter_works�0ConfigDictTest.test_config_callable_filter_workss9��	�����G��	�"J�
�	�')�����#rpc��[R"S5nURSSU/S.S.5 /[R"5lg)Nr�rrr;r�r�)r!r�r�r"r�r�s  rK�test_config_filter_works�'ConfigDictTest.test_config_filter_workssB���.�.��-������G��	�"J�
�	�')�����#rpc��"SS5nU"5nURSSU/S.S.5 /[R"5lg)Nc��\rSrSrSrSrg)�BConfigDictTest.test_config_filter_method_works.<locals>.FakeFilteric��grur~)rGr�s  rKr��IConfigDictTest.test_config_filter_method_works.<locals>.FakeFilter.filters��rpr~N)rxryrzr{r�r}r~rprK�
FakeFilterr�s��
rpr�rrr;r�r�r�)rGr�r�s   rK�test_config_filter_method_works�.ConfigDictTest.test_config_filter_method_workssG��	�	��,������G��	�"J�
�	�')�����#rpc	��"SS5nSSU"54H+nUR[URSSU/S.S.5 M- g)Nc��\rSrSrSrg)�;ConfigDictTest.test_invalid_type_raises.<locals>.NotAFilteri(r~Nrbr~rprK�
NotAFilterr�(s��$rpr�rrr;r�r�)r_r�r�)rGr�r�s   rK�test_invalid_type_raises�'ConfigDictTest.test_invalid_type_raises'sD�����a���.�G������!�!���g�Y�'O�P�
�/rpc��[R"UR5n[SS5nXCSSS'Ub
XSSS'Ub
X#SSS'SnUR	U5 [
R"S5nUR[[
R"55SS/5 URUR5 URR5 [
R"S	5 [
R"S
5 [
R"S5 [ R""[ R$S5(aVURR&R)5(aO,[ R""[ R$S5(aMVURR&R+5 [-US
S9nUR/5R15nSSS5 URW/SQ5 U(aURR35 [
R"S5nU(aUR5[6X�5 gUR5[8R:U5 g!,(df   N�=f!U(aURR35 [
R"S5nU(aUR5[6X�5 fUR5[8R:U5 f=f)Nr�ztest_logging-cqh-rCr�rr�rl�listenerr�r��bazzqueue not emptyrjr�)r�r�r�)r'rN�config_queue_handlerrXr�r!r�r_rQrR�assertIsNotNoner�r�r�r�r�r�sleeping_retryr�rl�emptyr�r�rfr^r9r�r�rSr�)	rG�qspec�lspec�cdrW�qhr�r�rVs	         rK�do_queuehandler_configuration�,ConfigDictTest.do_queuehandler_configuration0s6��
�]�]�4�4�4�
5��
�F�$7�
8��+-�:��t��Z�(���,1�z�N�4� ��)���/4�z�N�4� ��,�
��	/����b�!��)�)�$�/�B����V�G�$;�$;�$=�>��t��M�� � ����-��K�K�����M�M�%� ��L�L����O�O�E�"��(�(��)=�)=�):�<�<��;�;�$�$�*�*�,�,���(�(��)=�)=�):�<�<�
�K�K���"�"�$��b�7�+�q��v�v�x�*�*�,��,����T�#8�9����� � �"��(�(��.�A����� 0�!�8�����	�	�2�.�,�+������ � �"��(�(��.�A����� 0�!�8�����	�	�2�.�s,�EJ�".J�J�/J�
J�J�A7L	c��[5[5/nSVs/sHn[SU3SS.PM nn[S-SSSS.nS[S-[S	-/UQUQ7nS[S
-U[4n[R
"XV5HupxUR
Xx5 M SS[SS
4nSS[SS4n[R
"XV5HcupxUcUcM
UR[5n	UR
Xx5 SSS5 [W	R5n
URU
S5 Me gs snf!,(df   N?=f)N)rgrir�r��r�rnz.listenerMakerT)r�r�r�r�z.queueMakerz.CustomQueuez.CustomListenerr�rr�r�z Unable to configure handler 'ah')
rgrirxre�	itertools�productr�r�r_r�r�r!r_)rG�qsr��dqs�dl�qvalues�lvaluesr�r��ctxrs           rK�test_config_queue_handler�(ConfigDictTest.test_config_queue_handlerXsU���m�0�2�
3��@�B�@�3�"�
�!�C�5�)�b�9�@�	�B��-�-���%)�	
����M�1�8�n�3L�X�s�X�UW�X����$5�5�r�>�J��%�-�-�g�?�L�E��.�.�u�<�@���C��U�+����C��U�+��%�-�-�g�?�L�E��}�����"�"�:�.�#��2�2�5�@�/��c�m�m�$�C����S�"D�E�
@��!B�&/�.�s�D.�(D3�3
E	c�6�URSSSUS.0S.5 g)Nrr�queue_listenerr��rorl)rprC)r�)rGr�s  rK�*_apply_simple_queue_listener_configuration�9ConfigDictTest._apply_simple_queue_listener_configurationts+������ �<�"�#��
�	rpzmultiprocessing.Managerc�(�SSS.[R"5[R"5[5[	54H<nURUS9 UR
U5 UR5 SSS5 M> g!,(df   MP=f)Nzqueue.Queuernr��r�)rlrm�SimpleQueuervr~�subTestr��assert_not_called�rGr#r�s   rK�Atest_config_queue_handler_does_not_create_multiprocessing_manager�PConfigDictTest.test_config_queue_handler_does_not_create_multiprocessing_managersv��!�R�0��K�K�M�����
$�%� �"�
�E����E��*��?�?��F��)�)�+�+�*�
�+�*�s�"B�
B	c�.�[5[54HZnURUS9 UR[5 URU5 UR
5 SSS5 SSS5 M\ g!,(df   N=f!,(df   M=f)Nr�)rqr|r�r_r�r�r�r�s   rK�Ptest_config_queue_handler_invalid_config_does_not_create_multiprocessing_manager�_ConfigDictTest.test_config_queue_handler_invalid_config_does_not_create_multiprocessing_manager�sh���h� 8� :�;�E����E��*�D�,=�,=�j�,I��?�?��F��)�)�+�-J�*�*�<�,I�,I��*�*�s"�B�"A4�B�4
B�>B�
B	z@requires a debug build for testing assertions in multiprocessingc�p�SSKn[R(aS/nO/SQnUHlnURUS9 UR"U5nUR5nUR
[5 URU5 SSS5 SSS5 Mn g!,(df   N=f!,(df   M�=f)Nr�spawn�r�r��
forkserver��start_method)	�multiprocessingr�
MS_WINDOWSr��get_contextr�r_r�r�)rGr��
start_methodsr�r�r�s      rK�?test_config_reject_simple_queue_handler_multiprocessing_context�NConfigDictTest.test_config_reject_simple_queue_handler_multiprocessing_context�s���	����$�I�M�;�M�)�L����<��8�%�1�1�,�?�����)���&�&�z�2��C�C�E�J�3�9�8�*�3�2��9�8�s#�8B&�.B�B&�
B#�B&�&
B5	c
�j�[R(aS/nO/SQnUH�nURUS9 [R"U5nUR5nUR
5n/nURSURUS4SS9 URURSS95 SSS5 URUR55 SSS5 UR[W5S5 SSS5 M� g!,(df   N]=f!,(df   NG=f!,(df   GM=f)	Nr�r�r�rrr.)�initializer�initargs�maxtasksperchild�<r�)rr�r�r�r��Managerrm�Pool�_mpinit_issue121723r�r�rFr�r_r`)rGr�r�r�r#�qr0s       rK�1test_config_queue_handler_multiprocessing_context�@ConfigDictTest.test_config_queue_handler_multiprocessing_context�s������$�I�M�;�M�)�L����<��8�%�1�1�,�?���[�[�]�g��
�
��A� �G����!��1I�1I�,-�v�;��"�L����q�u�u�R�u�'8�9�L��O�O�A�G�G�I�.�#�� � ��W��q�1�9�8�*�L�L��	#�]��9�8�s;�'D"�1D�
D	�)'D�#D"�
D
�
D�
D�D"�"
D2	c��[RRSSSSUS.0S/SS.S.5 [R"5R	U5 g)	NrrT�
log_to_parentr�r�r;�rCr�)rprRrCrC)r!r�r�r"r�)r��message_to_logs  rKr��"ConfigDictTest._mpinit_issue121723�sZ��	���!�!��(,��<�"�"��#2�!2�W�E�
#
�
	�	���� � ��0rpc���[R"UR5nSSKJnJn U"5nU"5R	5nU"5R
5nXEU4GH1n[SS5nX�SSS'XqSSS	'Sn	URU5 [R"S5n	UR[[R"55SS/5 URU	R5 UR!U	R"U5 UR!U	RR"U5 [R"S5n
U
(aUR%[&X�5 GMUR%[(R*U5 GM4 g![R"S5n
U
(aUR%[&X�5 fUR%[(R*U5 f=f)
Nr)rmr�r�ztest_logging-cmpqh-rCr�rr�rl)r'rNr�r�rmr��
JoinableQueuerXr�r!r�r_rQrRr�r�rrlr�r�rSr�)rGr��MQ�MM�q1�q2�q3r�rWr�rVs           rK�test_multiprocessing_queues�*ConfigDictTest.test_multiprocessing_queues�sn��
�]�]�4�4�4�
5��>�
�T��
�T�Z�Z�\��
�T�
�
�
!���b�\�E���(=�>�B�/1�z�N�4� ��,�,1�z�N�4� ��)��B�
3��!�!�"�%��-�-�d�3��� � ���(?�(?�(A�!B�T�4�L�Q��$�$�R�[�[�1��
�
�b�h�h��.��
�
�b�k�k�/�/��7��,�,�T�2����O�O�$4�a�<��O�O�B�I�I�r�2�#"���,�,�T�2����O�O�$4�a�<��O�O�B�I�I�r�2�s�B4F�AG+c��SSSSSS.0SSS/S.0S	.n[R"S5nURUR5 UR	U5 URUR5 UR	S
S05 URUR5 US	UR	U5 URUR5 g)NrrFr�r;r�)r�ror�r�)rprRrCr�rprR)r!r"r{rr�rF)rGr�rs   rK�
test_90195�ConfigDictTest.test_90195�s����(-��$�4����$�!*����
�� �"�"�3�'��������)����&�!�������)����9�a�.�)�������(��-�.����&�!�������)rpc���[R"S5 [R"S5nSSSURS5R5S.0S/SS	.S
.n[R
R
U5 g)N�_multiprocessingr�rr�sinkr�r�r�r;r�r�)r�
import_moduler�rmr!r�r�)rG�mpr�s   rK�test_111615�ConfigDictTest.test_111615sv���#�#�$6�7�
�
(�
(�):�
;����<��^�^�G�4�:�:�<���$�H� ��
��	���!�!�&�)rpc��"SS[RR5nSS0nSSSU0UE0SS/S	.S
.n[RR	U5 [R
"S5nUR
URU5 g)Nc�(^�\rSrSrU4SjrSrU=r$)�>ConfigDictTest.test_kwargs_passing.<locals>.CustomQueueHandleri.c�V>�[TU][R"55 X lgr)r�r�rlrm�
custom_kwargs�rGrTrUr�s   �rKr��GConfigDictTest.test_kwargs_passing.<locals>.CustomQueueHandler.__init__/s����� �����/�%+�"rp)r)rxryrzr{r�r}r�r�s@rK�CustomQueueHandlerr.s
���
,�
,rprr�r�rrr�ror;r�r�)r!rC�QueueHandlerr�r�r�r_r)rGrrr�r�s     rK�test_kwargs_passing�"ConfigDictTest.test_kwargs_passing-s���	,��!1�!1�!>�!>�	,�
���
����/��#���!�%�J��
��	���!�!�&�)��*�*�8�4������.�.�
�>rpr~r)qrxryrzr{r|r
r@r\r�ryr6rr�r�rr r�rWr_r�r)r.r8rBr�rKr�r�r�rrrrrr!r>r�rr#rJrXr\rcrgrlr�r�r�r�r
rr�r�rr$r�r*r�r;r�r�r�rrrr
rrrr r%r3r�requires_working_socketr8r;rGrKrTrYr]r`rdrhrmr�r�r�r�r�r�r�r	r��requires_subprocessr�r�rr�r�r�r��
skipUnless�Py_DEBUGr�r��staticmethodr�rr
rrr}r~rprKr�r�g	s2��3� /� I� I��,�����9��
�
�1�%�"�.�	�
� �!��
��G�.���9��
�
�1�%�"�.�	�
�
�!�%�Y�!�
�
�i�
�+�G�8���9��
�
�1�%�"�.�	�
�
��'�!�
� �!��
�)�H�8���9��
�
�1�%�"�/�	�
�
�!�%�Y�!�
�
�i�
�+�G�8���9��
�
�1�%�"�.�	�
�
�!�%�Y�!�
�
�i�
�+�H�:���9��
�
�1�%�"�.�	�
�
�!�%�Y�!�
�
�i�
�+�H�8���9��
�
�1�/�"�.�	�
�
�!�%�Y�!�
�
�i�
�+�G�8���"7�7�?��
�
�1�%�"�.�	�
��%�Y�
�!�G�0�*�?��
 �-�/�?��
"�?��

� 2�%�"�.�	��{��

��%�Y�
�7�H�F���9��
�
�"�%5�5�%�"�.�	�
�
�!�%�Y�!�
�
�i�
�+�G�:���9��
�
�"�%5�5�%�"�.�.��
�
�!�%�Y�!�
�
�i�
�-�G�<���9��
�
�1�%�"�.�	�
�
�!�%�Y� �
�
�i�
�+�G�<�%*���9��
�
�1�%�"�.�	�
�"�%�Y�� �
�
�i�
�1�G�>�%)���9��
�
�1�%�"�.�	�
�"�%�Y�� �
�
�i�
�1�H�<���9��
�
�1�%�#�.�	�
�
�#�%�Y�!�
�
�h�
�+�G�6����)��
�
��&�!�
�
�H� ����&��
�
��&�!�
�
�H�"���9��
�
��*��
�
�1�%�"�.�$�I��
�
�!�$�I�!�
� �!��
�7�H�F���9��
�
�1�%�"�.�	�
�/��4�
�
�!�%�Y�!�
�
�i�
�3�H�B
��9��
�
�1�%�"�.�	�
�/��4�
�
�!�%�Y�!�
�
�i�
�1�H�>���9��
�
�1�%�"�.�	�
�/��4�
�
�!�%�Y�!�
�
�i�
�3�H�@���9��
�
�1�%�"�.� �"'��	�
� �!��
�'�H�8��;�*�N�;��
�
�1�%�"�.�	�
� �!��
�!�H�,*�'�+�+�*���%��.�%�%�w���

�
�1�&�"�.�	�
� �!��
�+�H�8�1� ��
:��#� �%��
�
� �(�M�#��
��H�2��M��"�
�1� �0��:��0�&� ��


�
� �+�,�#��
�-�J�B���!6�6�>�!��
�
�0�$�!�,�	�
�
.� �$�I�#�0�
�#'�#�8��!�$9�9�>�!��
�
�0�$�!�,�	�
�
.� �$�I�#�0�
�#(�$�8��!�$8�8�>�!��
�
�0�$�!�,�	�
�
.� �$�I�#�0�
�#(�$�8�� �>�!��
�
�0�$�!�,�	�
�
.� �$�I�#�0�
�#&�"�8�� �N�*�I�6��
�
�0�$�!�,�	�
�
.� �$�I�#�0�
�#&�"�6��.��
9�!�F��	
����
���$(�&�&� &-�
&�F�G�G�F�&� 
&�3�F�&�< &�D+&�Z�&�(,�G�G�J�7�2:�?�
<�
,�8
�$�$�&��'��(
�$�$�&�&�'�&�
�$�$�&�<,�'�<,�|J�
9�E�
E�
E�`�^�^�Bf�HB�>)�)�	)��&/�P�0�0�2�� � �"�F�#�3�F�4	��0�0�2�� � �"�
�$�%�,�&�#�3�,�(�$�%�,�&�,��� � �"�
����)�)�,L�M�K�M�#��K�$�� � �"�
����)�)�,L�M�2�M�#��2�&�1��1� �� � �"�3�#��3�6*�<*�*?rpr�c� �\rSrSrSrSrSrg)�ManagerTestiIc�p^�/m"U4SjS[R5n[R"S5nUR[UR
[5 URU5 URS5nURS5 [R"S5 URTS/5 g)Nc�&>�\rSrSrSU4SjjrSrg)�6ManagerTest.test_manager_loggerclass.<locals>.MyLoggeriMNc�(>�TRU5 gr�r�)rGr�rrT�exc_info�extra�loggeds      �rK�_log�;ManagerTest.test_manager_loggerclass.<locals>.MyLogger._logNs����
�
�c�"rpr~rw)rxryrzr{r-r})r,s�rK�MyLoggerr'Ms
���
#�
#rpr/rGzshould appear in loggedzshould not appear in logged)
r!�Loggerr�r_�	TypeError�setLoggerClassr�r"r�r_)rGr/�manrr,s    @rK�test_manager_loggerclass�$ManagerTest.test_manager_loggerclassJs������	#�w�~�~�	#��o�o�d�#�����)�S�%7�%7��=����8�$����v�&�����0�1����5�6�����";�!<�=rpc��[R"S5n[5nURU5 UR	UR
U5 gr)r!r�rq�setLogRecordFactoryr_�logRecordFactory)rGr3rks   rK�test_set_log_record_factory�'ManagerTest.test_set_log_record_factoryZs;���o�o�d�#���8������)�����-�-�x�8rpr~N)rxryrzr{r4r9r}r~rprKr$r$Is��>� 9rpr$c� �\rSrSrSrSrSrg)�ChildLoggerTesti`c��[R"5n[R"S5n[R"S5nURS5nURS5nURU[R"S55 URU[R"S55 URS5nURS5nURS5nURU[R"S55 URU[R"S55 URXV5 g)	N�abczdef.ghi�xyzzuvw.xyz�def�ghi�abc.defzabc.def.ghi)r!r"�getChildr)rGr��l1�l2�c1�c2�c3s       rK�test_child_loggers�"ChildLoggerTest.test_child_loggersas��������
�
�
�u�
%��
�
�
�y�
)��
�Z�Z��
��
�Z�Z�	�
"���
�
�b�'�+�+�E�2�3��
�
�b�'�+�+�I�6�7�
�[�[��
��
�[�[��
��
�[�[��
#���
�
�b�'�+�+�I�6�7��
�
�b�'�+�+�M�:�;��
�
�b�rpc���[R"5n[R"S5n[R"S5n[R"S5n[R"S5nUR5nX%1nURXvU-5 UR	X75 UR5nURU1U5 UR5nUR[5U5 g)Nr��foo.barzfoo.bar.baz.bozzr�)r!r"�getChildrenr_�assertNotInr4)rGr�rDrE�l3�l4�kidsrks        rK�test_get_children�!ChildLoggerTest.test_get_childrenps��������
�
�
�u�
%��
�
�
�y�
)��
�
�
�1�
2��
�
�
�u�
%���}�}����8������(�?�3�����&��~�~������"��t�$��~�~���������%rpr~N)rxryrzr{rIrRr}r~rprKr<r<`s��
�
&rpr<c��\rSrSrSrg)�DerivedLogRecordir~Nrbr~rprKrUrUrcrprUc�&�\rSrSrSrSrSrSrg)�LogRecordFactoryTesti�c��"SS[R5n[RU5 U"[5UlURRUR
5 [R"5Ul	g)Nc� �\rSrSrSrSrSrg)�2LogRecordFactoryTest.setUp.<locals>.CheckingFilteri�c��Xlgr�r�)rGr�s  rKr��;LogRecordFactoryTest.setUp.<locals>.CheckingFilter.__init__�s���rpc�t�[U5nX RLaSU<SUR<3n[U5eg)NzUnexpected LogRecord type z, expected T)r�r�r1)rGr�r-rs    rKr��9LogRecordFactoryTest.setUp.<locals>.CheckingFilter.filter�s3����L���H�H�$�IJ� �H�H�&�C�#�C�.�(�rpr\N)rxryrzr{r�r�r}r~rprK�CheckingFilterrZ�s��
�
rpr`)
r!r�rrLrUr�r4r��getLogRecordFactory�orig_factory)rGr`s  rKrL�LogRecordFactoryTest.setUp�sV��
	�W�^�^�
	�	���t��$�%5�6������"�"�4�;�;�/�#�7�7�9��rpc��URRUR5 [R	U5 [
R"UR5 gr)r4r�r�rrWr!r7rbrts rKrW�LogRecordFactoryTest.tearDown�s<�����%�%�d�k�k�2����$���#�#�D�$5�$5�6rpc� �UR[URRUR	55 [
R"[5 URRUR	55 URS/5 g)N)rCr�r�)
r_r1r4r�rur!r7rUr�rnrts rK�test_logrecord_class�)LogRecordFactoryTest.test_logrecord_class�sn�����)�T�%5�%5�%=�%=��+�+�-�	/��#�#�$4�5������t�0�0�2�3����!�
�	rp)r�rbN)rxryrzr{rLrWrgr}r~rprKrWrW�s��:�$7�
rprWc�H�\rSrSrSrSrSrSrSrSr	Sr
S	rS
rSr
g)
�QueueHandlerTesti�rc���[RU5 [R"S5Ul[R
R
UR5UlSUl[R"S5Ul
SURlURR[R5 URRUR5 g)Nrn�queF)rrLrlrmr!rCr�que_hdlrrIr"�
que_loggerr�r:r�rErts rKrL�QueueHandlerTest.setUp�s������t���[�[��_��
��(�(�5�5�d�j�j�A��
���	�!�+�+�E�2���$)����!���� � ����1����"�"�4�=�=�1rpc�b�URR5 [RU5 gr)rmrOrrWrts rKrW�QueueHandlerTest.tearDown�r�rpc��URRUR55 UR[R
URR5 URRUR55 UR[R
URR5 UR5nURRU5 URR
5nUR[U[R55 URURURR5 URURUR 4US45 gr)rnr�rur_rl�Empty�
get_nowaitr�r�rFr�r!r!r_rIrrT)rGrr�s   rK�test_queue_handler�#QueueHandlerTest.test_queue_handler�s��������d�/�/�1�2����%�+�+�t�z�z�'<�'<�=������T�.�.�0�1����%�+�+�t�z�z�'<�'<�=����!��������$��z�z�$�$�&�����
�4��):�):�;�<�������D�O�O�$8�$8�9����$�(�(�D�I�I�.��d��<rpc���UR5n[R"[R5nSnUR	UR
X!S9n[R"UR5nURRU5 URRU5 URR5nURXFR5 URXFR 5 g)Nz {name} -> {levelname}: {message})rI�	levelnamer8)rur!r�r�r\rIr>r?rmrArnr�rlrtr_rr8)rGrrx�log_format_str�
formatted_msgrL�
log_records       rK�test_formatting� QueueHandlerTest.test_formatting�s������!���(�(����9�	�;��&�-�-�4�9�9�8A�.�P�
��%�%�d�o�o�6�	��
�
�"�"�9�-�������$��Z�Z�*�*�,�
�������7�����(:�(:�;rpc��[[R"55n[RRURU5nUR5 URRUR55 URRUR55 URRUR55 UR5 UR5 URUR[R SS95 URUR[R"SS95 URUR[R$SS95 UR'5 [[R"55nUR)[R$5 [RRURUSS9nUR5 URRUR55 URRUR55 URRUR55 UR5 UR+UR[R SS95 UR+UR[R"SS95 URUR[R$S	S95 UR'5 UR5 UR-UR.5 g!UR5 UR5 f=f!UR5 f=f)
Nr�)rr8r�r�T)r�r�r�r�)r
r�Matcherr!rC�
QueueListenerrlr�rnr�rur�r7r9rF�matchesr�r�r�rOr:r{rr�rGr�r�s   rK�test_queue_listener�$QueueHandlerTest.test_queue_listener�sa���g�o�o�/�0���#�#�1�1�$�*�*�g�F������	��O�O�#�#�D�$5�$5�$7�8��O�O�!�!�$�"3�"3�"5�6��O�O�$�$�T�%6�%6�%8�9��M�M�O��M�M�O������������M�N��������
�
�s��K�L��������0@�0@�#��N�O��
�
���g�o�o�/�0������)�)�*��#�#�1�1�$�*�*�g�HL�2�N������	��O�O�#�#�D�$5�$5�$7�8��O�O�!�!�$�"3�"3�"5�6��O�O�$�$�T�%6�%6�%8�9��M�M�O����������#��N�O������������L�M��������0@�0@�#��N�O��
�
��	�
�
�����(�*�*�+��7
�M�M�O��M�M�O��$
�M�M�O�s�A;M�A;M6�"M3�6Nc�J�[[R"55n[RRURU5nUR5 UR[UR5 UR5 URUR5 gr)
r
rrr!rCr�rlr�r_r�r9rrr�s   rK�test_queue_listener_multi_start�0QueueHandlerTest.test_queue_listener_multi_start�sj���g�o�o�/�0���#�#�1�1�$�*�*�g�F���������,����7��
�
�����(�*�*�+rpc��[RRURUR5nUR5 SS- URRUR5SS9 UR5 URURR5R5R!S5S5 URURR5R5R!S5S5 g![a5nUnURRUR5US9 SnAGNSnAff=f)Nrrr�r*T��
stack_info�	Traceback�Stack)r!rCr�rlr=r��ZeroDivisionErrorrnr!rur�r9r_r9r]rsr1)rGr�rf�excs    rK�&test_queue_listener_with_StreamHandler�7QueueHandlerTest.test_queue_listener_with_StreamHandler�s����#�#�1�1�$�*�*�d�n�n�M������	I�
��E�	
�����d�/�/�1�d��C��
�
��������-�-�/�5�5�7�=�=�k�J�A�N�������-�-�/�5�5�7�=�=�g�F��J��
!�	I��C��O�O�%�%�d�&7�&7�&9�C�%�H��	I�s�D�
E�*E�Ec���URRUR5 URR	UR
5 [RRURUR5nUR5 URRS5 UR5 URURR5R!5S5 g)Nr�zque -> ERROR: error)rmrAr@rnrEr=r!rCr�rlr�r�r9r_r9r]rs)rGr�s  rK�*test_queue_listener_with_multiple_handlers�;QueueHandlerTest.test_queue_listener_with_multiple_handlers
s����
�
�"�"�4�#6�#6�7����"�"�4�>�>�2��#�#�1�1�$�*�*�d�m�m�L�����������g�&��
�
��������-�-�/�5�5�7�9N�Orp)rIrmrnrlN)rxryrzr{r\rLrWrur|r�r�r�r�r}r~rprKrjrj�s5��3��2� �
=�<�$,�L,�K�	Prprjr�c��\rSrSrSrSr\S5r\R"\
RRS5S5r
\R"\
RRS5S5r\S5rS	rS
rSrg)
�QueueListenerTestizf
Tests based on patch submitted for issue #27930. Ensure that
QueueListener handles all log messages.
�c�>�[R"SU-5nUR[R5 [RRU5nUR
U5 [RRU5nUR5 URS5 URS5 URS5 URS5 URS5 UR5 URU5 UR5 g)z�
Creates a logger with a QueueHandler that logs to a queue read by a
QueueListener. Starts the listener, logs five messages, and stops
the listener.
ztest_logger_with_id_%s�one�two�three�four�fiveN)
r!r"r:r;rCrrEr�r�r�r9rPrO)�	log_queuer�rr�r�s     rK�
setup_and_log�QueueListenerTest.setup_and_log&s����&�&�'?�%�'G�H�F��O�O�G�M�M�*��&�&�3�3�I�>�G����g�&��'�'�5�5�i�@�H��N�N���K�K����K�K����K�K�� ��K�K����K�K����M�M�O�� � ��)��M�M�Orprzc��[UR5H>n[R"5nUR	X0R5<SU<35 M@ UR
URSUR-S5 g�Nr�r�z&correct number of handled log messages)r��repeatrlrmr�r/r_�
call_count�rG�mock_handler�r�s    rK�#test_handle_called_with_queue_queue�5QueueListenerTest.test_handle_called_with_queue_queue>s_���4�;�;�'��!�K�K�M�	��"�"�9����A�.F�G�(�
���[�3�3�Q����_�E�
Grpc�p�[R"5 [UR5H^n[R
"5nUR
X0R5<SU<35 UR5 UR5 M` URURSUR-S5 gr�)r�*skip_if_broken_multiprocessing_synchronizer�r�r�rmr�r/rOr7r_r�r�s    rK� test_handle_called_with_mp_queue�2QueueListenerTest.test_handle_called_with_mp_queueFs���
�>�>�@��4�;�;�'��+�1�1�3�	��"�"�9����A�.F�G����!��%�%�'�	(�

���[�3�3�Q����_�E�
Grpc#�n# �UR5v� M![Ra /s$f=f7fr)rtrlrs)r�s rK�get_all_from_queue�$QueueListenerTest.get_all_from_queueSs8���
��#�.�.�0�0����;�;�
��	�
�s�5��2�5�2�5c
�N�[R"5 [UR5H�n[R
"5nUR
X R5<SU<35 [URU55nUR"5 UR"5 /[RRR//nUR!X4SUVs/sH0n[#U[R$5(aUR&OUPM2 sn-5 M� gs snf)z�
Five messages are logged then the QueueListener is stopped. This
test then gets everything off the queue. Failure of this test
indicates that messages were not registered on the queue until
_after_ the QueueListener stopped.
r�z&Found unexpected messages in queue: %sN)rr�r�r�r�rmr�r/�listr�rOr7r!rCr��	_sentinelrr�r!r)rGr�rlrrkr�s      rK�$test_no_messages_in_queue_after_stop�6QueueListenerTest.test_no_messages_in_queue_after_stop[s���
�>�>�@��4�;�;�'��'�-�-�/���"�"�5�G�G�I�q�*A�B��T�4�4�U�;�<�����
��!�!�#���!1�!1�!?�!?�!I�!I� J�K���
�
�e�F�5:�%<�5:��/9��G�<M�<M�.N�.N�Q�U�U�*+�&,�5:�%<�=�>�(��%<s�7D"c�*�[R"5n[RR	U5nUR5 UR
5 UR[5 UR5 SSS5 g!,(df   g=fr)
rlrmr!rCr�r�r9r_r��	task_done)rGr�r�s   rK�test_calls_task_done_after_stop�1QueueListenerTest.test_calls_task_done_after_stopss\�����
�I��'�'�5�5�i�@�H��N�N���M�M�O��"�"�:�.��#�#�%�/�.�.�s�*B�
Br~N)rxryrzr{r|r�r"r�rrqr!rCr�r�r�r�r�r�r}r~rprKr�r�s���	�
��	�	�
�	�.
���g�&�&�4�4�h�	?�	G�
@�	G�
���g�&�&�4�4�h�	?�
	G�
@�
	G�
�	�
�	�	>�0	&rpr�c�$�\rSrSrSr\rSrSrg)�UTCi�c��[$r)�ZERO�rG�dts  rK�	utcoffset�
UTC.utcoffset�s���rpc��g)Nr�r~r�s  rK�tzname�
UTC.tzname�s��rpr~N)rxryrzr{r��dstr�r}r~rprKr�r��s����C�rpr�c��\rSrSrSrSrg)�AssertErrorMessagei�c��UR"S/UQ70UD6 g!Ua%nURU[U55 SnAgSnAff=f)Nr~)r_r_r�)rGr!r8rTrUrfs      rK�assert_error_message�'AssertErrorMessage.assert_error_message�sF��	.����b�2�4�2�6�2���	.����W�c�!�f�-�-��	.�s��A�?�Ar~N)rxryrzr{r�r}r~rprKr�r��s��.rpr�c�f�\rSrSrSrSSjrSrSrSrSr	S	r
S
rSrSr
S
rSrSrSrg)�
FormatterTesti�c	��S[R[RR	SSS5SSSSSS.UlS	S	S
00Ulg)Nzformatter.testr|�toz	dummy.extrEzMessage with %d %s)r��placeholders)rIr��pathname�linenor*r�rrTr�i�)r!r;rSr|r��common�variantsrts rKrL�FormatterTest.setUp�sP��$��]�]������V�T�;�?����'�'�	
���
��$��
��
rpNc��[UR5nUbURURU5 [R
"U5$r)rur�rRr�r!r�)rGrIrMs   rK�
get_record�FormatterTest.get_record�s<���d�k�k�"�����M�M�$�-�-��-�.��$�$�V�,�,rpc�|�UR5n[R"S5nURUR	U5S5 [R"S5nUR[URU5 URUR55 [R"S5nURUR55 [R"S5nURUR55 [R"S5nURUR55 g)Nz${%(message)s}z${Message with 2 placeholders}z
%(random)s�%(asctime)sz%(asctime)-15sz%(asctime)#15s�
r�r!r>r_r\r_r�r{�usesTimerF�rGr�r�s   rK�test_percent�FormatterTest.test_percent�s����O�O������.�/��������!��&F�G����l�+�����*�a�h�h��2��������&����m�,������
�
��%����.�/������
�
��%����.�/������
�
��%rpc��UR5n[R"SSS9nURUR	U5S5 [R"SSS9nUR[URU5 [R"SSS9nURUR55 [R"SSS9nURUR55 [R"SSS9nURUR55 [R"S	SS9nURUR55 g)
Nz
$%{message}%$r��r��$%Message with 2 placeholders%$z{random}r��	{asctime}z{asctime!s:15}z{asctime:15}r�r�s   rK�test_braces�FormatterTest.test_braces�s����O�O������o�S�9��������!��&G�H����j��4�����*�a�h�h��2����k��5���������&����k��5������
�
��%����.�c�:������
�
��%����n�C�8������
�
��%rpc��UR5n[R"SSS9nURUR	U5S5 [R"SSS9nURUR	U5S5 [R"SSS9nURUR	U5S5 [R"SSS9nUR[URU5 URUR55 [R"S	SS9nURUR55 [R"S
SS9nURUR55 [R"SSS9nURUR55 [R"SSS9nURUR55 g)N�
${message}r�r�zMessage with 2 placeholdersz$messagez$$%${message}%$$r�z	${random}z
${asctime}z$asctimez${asctime}--r�r�s   rK�test_dollars�FormatterTest.test_dollars�s^���O�O������l�#�6��������!��&C�D����j��4��������!��&C�D����0��<��������!��&G�H����k��5�����*�a�h�h��2��������&����l�#�6������
�
��%����j��4������
�
��%����l�#�6���������&����n�C�8������
�
��%rpc��[R"S5nURURS5 [R"S5nURURS5 [R"S5nURURS5 [R"S5nURURS5 [R"SSS9nURURS5 [R"SSS9nURURS5 [R"S	SS9nURURS	5 [R"S
SS9nURURS
5 [R"SSS9nURURS5 [R"SSS9nURURS5 [R"S
SS9nURURS
5 [R"SSS9nURURS5 [R"SSS9nURURS5 [R"SSS9nURURS5 [R"SSS9nURURS5 [R"SSS9nURURS5 [R"SSS9nURURS5 [R"SSS9nURURS5 [R"SSS9nURURS5 [R"SSS9nURURS5 [R"SSS9nURURS5 UR	[
[RS5 UR	[
[RS5 UR	[
[RS5 UR	[
[RS5 UR	[
[RS5 UR	[
[RS5 UR	[
[RS5 UR	[
[RS 5 UR	[
[RS!5 UR
[
S"[RS#SS9 UR
[
S$[RS%SS9 UR
[
S&5 UR	[
[RS'SS9 UR
[
S([RS)SS9 UR
[
S*[RS+SS9 UR	[
[RS,SS9 UR	[
[RS-SS9 UR	[
[RS.SS9 UR	[
[RS/SS9 UR
[
S0[RS1SS9 UR
[
S2[RS3SS9 UR	[
[RS4SS9 UR	[
[RS5SS9 UR	[
[RS6SS9 UR	[
[RS7SS9 UR	[
[RS8SS9 UR	[
[RS9SS9 UR	[
[RS:SS9 UR	[
[RS;SS9 UR	[
[RS<SS9 UR
[
S=[RS>SS9 UR
[
S=[RS?SS9 UR
[
S=[RS@SS9 UR
[
S$[RSSS9 UR	[
[RS%SS9 UR
[
S$[RSASS9 UR	[
[RSBSS9 g)CNzM%(levelname)-15s - %(message) 5s - %(process)03d - %(module) - %(asctime)*.3sz1%(asctime)*s - %(asctime)*.3s - %(process)-34.33oz%(process)#+027.23Xz
%(foo)#.*gz5$%{message}%$ - {asctime!a:15} - {customfield['key']}r�r�z{process:.2f} - {custom.f:.4f}z{customfield!s:#<30}z{message!r}z{message!s}z{message!a}z{process!r:4.2}z8{process!s:<#30,.12f}- {custom:=+#30,.1d} - {module:^30}z{process!s:{w},.{p}}z{foo:12.{p}}z{foo:{w}.6}z{foo[0].bar[1].baz}z{foo[k1].bar[k2].baz}z{12[k1].bar[k2].baz}z${asctime} - $messager�z$bar $$z	$bar $$$$z%(asctime)Zz%(asctime)bz%(asctime)*z
%(asctime)*3sz%(asctime)_r�r�z
%(foo)#12.3*fz%(foo)0*.8*fz;invalid format: invalid field name/expression: 'name-thing'z{name-thing}zinvalid format: no fieldsr�zinvalid conversion: 'Z'z{asctime!s:#30,15f}z7invalid format: expected ':' after conversion specifierz{asctime!aa:15}z%invalid format: bad specifier: '.2ff'z{process:.2ff}z
{process:.2Z}z{process!s:<##30,12g}z{process!s:<#30#,12g}z{process!s:{{w}},{{p}}}z1invalid format: expected '}' before end of stringz{processz7invalid format: Single '}' encountered in format stringzprocess}z{{foo!r:4.2}z
{{foo!r:4.2}}z	{foo/bar}z{foo:{{w}}.{{p}}}}z{foo!X:{{w}}.{{p}}}z{foo!a:random}z{foo!a:ran{dom}z{foo!a:ran{d}om}z
{foo.!a:d}z$invalid format: bare '$' not allowedz$bar $$$zbar $zfoo $.r�z	${asctime)r!r>r_�_fmtr_r�r��rGr�s  rK�test_format_validate�"FormatterTest.test_format_validate�s���
���m�n��������!p�q����Q�R��������!T�U����3�4��������!6�7����l�+���������.�
���U�]`�a��������!X�Y����>�c�J��������!A�B����4�C�@��������!7�8����m�3�7���������/����m�3�7���������/����m�3�7���������/����/�s�;��������!2�3����X�`c�d��������![�\����4�C�@��������!7�8����n�C�8���������0����m�3�7���������/����3�3�?��������!6�7����5�S�A��������!8�9����4�C�@��������!7�8�
���5�S�A��������!8�9����i�s�3���������+����k��5���������-�	
���*�g�&7�&7��G����*�g�&7�&7��G����*�g�&7�&7��G����*�g�&7�&7��I����*�g�&7�&7��G����*�g�&7�&7��E����*�g�&7�&7��F����*�g�&7�&7��I����*�g�&7�&7��H�	
�!�!��I����~�S�	"�	
�	
�!�!��'����}�C�	"�	
�	
�!�!��%�	
�	
���*�g�&7�&7�9N�VY��Z��!�!��E����0��	"�	
�	
�!�!��3����/�s�	"�	
�
	
���*�g�&7�&7��PS��T����*�g�&7�&7�9P�X[��\����*�g�&7�&7�9P�X[��\����*�g�&7�&7�9R�Z]��^��!�!��?����z��	"�	
�
	
�!�!��E����z��	"�	
�
	
���*�g�&7�&7��s��S����*�g�&7�&7��PS��T����*�g�&7�&7��C��P����*�g�&7�&7�9M�UX��Y����*�g�&7�&7�9N�VY��Z����*�g�&7�&7�9I�QT��U����*�g�&7�&7�9J�RU��V����*�g�&7�&7�9K�SV��W����*�g�&7�&7��S��Q�	
�!�!��4����z��	"�	
�
	
�!�!��4����w�c�	"�	
�
	
�!�!��4����x�s�	"�	
�	
�!�!��'����{�#�	"�	
�
	
���*�g�&7�&7��c��R�	
�!�!��'����u�C�	"�	
�
	
���*�g�&7�&7��C��Prpc�P�/SQn/SQn[X5GHup4[R"X4SS0S9nUR5nUR	URU5S5 URS5nUR	URU5S5 [R"X4S9nUR5nUR
[UR
U5 [R"X4S	S0S9nURS5nUR	URU5S5 GM g)
N)z%(custom)s %(message)sz{custom} {message}z$custom $message)�%r�r�r��Default)r�rrz#Default Message with 2 placeholdersz 1234 Message with 2 placeholdersr�zNon-existing)rar!r>r�r_r\r_r�)rG�fmts�stylesr[r�r�r�s       rK�test_defaults_parameter�%FormatterTest.test_defaults_parameterus���S�� ���d�+�J�C��!�!�#�h�	�=R�S�A����!�A����Q�X�X�a�[�*O�P�����)�A����Q�X�X�a�[�*L�M��!�!�#�3�A����!�A����j�!�(�(�A�6��!�!�#�n�i�=X�Y�A�����)�A����Q�X�X�a�[�*L�M�,rpc�R�UR[[RSSS5 g)Nr�)r_r�r!r>rts rK�test_invalid_style� FormatterTest.test_invalid_style�s�����*�g�&7�&7��t�S�Irpc
��UR5n[R"SSSSSSS[5n[R"URS5R
55UlSUl[R"S5n[RUlURURU5S	5 URURUS
5S5 URU5 URUR S	5 g)N��r���rpr�{�%(asctime)s %(message)sz1993-04-21 08:03:00,123z%Y:%dz1993:21)r��datetime�utcr��mktime�
astimezone�	timetuple�created�msecsr!r>�gmtime�	converterr_�
formatTimer\�asctime)rGr�r�r�s    rK�	test_time�FormatterTest.test_time�s����O�O���
�
�
�t�Q��A�q�!�Q��
<���K�K��
�
�d� 3� =� =� ?�@��	�������7�8���k�k���������a��*C�D�������a��1�9�=�	�����������$=�>rpc
��"SS[R5nUR5n[R"SSSSSSS	[5n[
R"URS5R55Ul	U"5n[
RUlURURU5S
5 g)Nc��\rSrSrSrSrSrg)�DFormatterTest.test_default_msec_format_none.<locals>.NoMsecFormatteri�Nz%d/%m/%Y %H:%M:%Sr~)rxryrzr{�default_msec_format�default_time_formatr}r~rprK�NoMsecFormatterr�s��"&��"5�rprr�r�r�r�rprr�z21/04/1993 08:03:00)r!r>r�r�r�r�r�rrrrrr_r)rGrr�r�r�s     rK�test_default_msec_format_none�+FormatterTest.test_default_msec_format_none�s���	6�g�/�/�	6�
�O�O���
�
�
�t�Q��A�q�!�S�#�
>���K�K��
�
�d� 3� =� =� ?�@��	�����k�k���������a��*?�@rpc��[R"SSSS9n[S5HZn[R"S5 [R
"SSUS	--05nUR
U5nURS
U5 M\ g)Nz!{asctime}.{msecs:03.0f} {message}r�r�)r[r�rni�	g-C��6:?rz
Message %drrz.1000)r!r>r�r�r�r�r\rN)rGr�r�r�rms     rK�test_issue_89047�FormatterTest.test_issue_89047�sm�����"E�S�Zm�n���t��A��J�J�v���%�%�u�l�a�!�e�.D�&E�F�A������A����W�a�(�	rpc���SnUH�up#[S5nX$l[R"SS05nSSS5 UR	U5 URWRU5 URURUS-5 URUR[UR5-
URS-SS9 SSS5 M� g!,(df   N�=f!,(df   M�=f)	N))l�$�lH:gY@)l'$�T�rH:g8�@)�g�]�rH:�)l�)�T�rH:rztime.time_nsrrG�e��Ag@�@r�)�delta)
r�return_valuer!r�r�r_rr�assertAlmostEqualr�)rG�tests�ns�want�
patched_nsr�s      rK�/test_msecs_has_no_floating_point_precision_loss�=FormatterTest.test_msecs_has_no_floating_point_precision_loss�s���
���H�B��~�&�*�*,�'� �.�.��v��?��'����b�!�� � ����t�4�� � �����c��:��&�&�v�~�~��F�N�N�8K�'K�'-�|�|�c�'9�-1�'�3�"�!�	�&�&��"�!�s�C�
A:C%�
C"	�%
C4	c��SnSn[R"SU<SU<S35n[SU5upEnUR5n[	X%R5SS9HfupxUR
US	9 [[UR55up�URX�U-S
-SS9 URX�S
-SS9 SSS5 Mh g!,(df   Mz=f)Nr)r�r�iB0i��l*�C7qH:z
            start_ns = z
            offsets_ns = a�
            start_monotonic_ns = start_ns - 1

            import time
            # Only time.time_ns needs to be patched for the current
            # implementation, but patch also other functions to make
            # the test less implementation depending.
            old_time_ns = time.time_ns
            old_time = time.time
            old_monotonic_ns = time.monotonic_ns
            old_monotonic = time.monotonic
            time_ns_result = start_ns
            time.time_ns = lambda: time_ns_result
            time.time = lambda: time.time_ns()/1e9
            time.monotonic_ns = lambda: time_ns_result - start_monotonic_ns
            time.monotonic = lambda: time.monotonic_ns()/1e9
            try:
                import logging

                for offset_ns in offsets_ns:
                    # mock for log record creation
                    time_ns_result = start_ns + offset_ns
                    record = logging.makeLogRecord({'msg': 'test'})
                    print(record.created, record.relativeCreated)
            finally:
                time.time_ns = old_time_ns
                time.time = old_time
                time.monotonic_ns = old_monotonic_ns
                time.monotonic = old_monotonic
        �-cT)r4)�	offset_nsr�)�places���.A�)r�r�rrrar^r�r�floatr�r)rG�start_ns�
offsets_ns�code�rc�out�errr$�liner�relativeCreateds           rK�)test_relativeCreated_has_higher_precision�7FormatterTest.test_relativeCreated_has_higher_precision�s���-��J�
����$� �|�$�$��(	� �
��@(��d�3�����j�j�l��"�:�~�~�/?��M�O�I����	��2�+.�u�d�j�j�l�+C�(���&�&�w�I�1E��0L�UV�&�W��&�&��C��PQ�&�R�	3�2� N�2�2�s
�/A
C�
C	)r�r�r)rxryrzr{rLr�r�r�r�r�r�r�rrrr r2r}r~rprKr�r��sJ��
�"-�
&�&� &�*TQ�lN�(J�?�
A�)�3�*0Srpr�c� �\rSrSrSrSrSrg)�TestBufferingFormatteri�c��S[U5-$)Nz[(%d)�r`�rGr0s  rK�formatHeader�#TestBufferingFormatter.formatHeader������W��%�%rpc��S[U5-$)Nz(%d)]r7r8s  rK�formatFooter�#TestBufferingFormatter.formatFooter�r;rpr~N)rxryrzr{r9r=r}r~rprKr5r5�s��&�&rpr5c�&�\rSrSrSrSrSrSrg)�BufferingFormatterTesti�c�n�[R"SS05[R"SS05/Ulg)Nrr�r�)r!r�r0rts rKrL�BufferingFormatterTest.setUp�s/���!�!�5�%�.�1��!�!�5�%�.�1�
��rpc���[R"5nURSUR/55 URSURUR55 g)Nr�onetwo)r!�BufferingFormatterr_r\r0r�s  rK�test_default�#BufferingFormatterTest.test_defaultsE���&�&�(������Q�X�X�b�\�*�����1�8�8�D�L�L�#9�:rpc��[5nURSURUR55 [R
"S5n[U5nURSURUR55 g)Nz[(2)onetwo(2)]z
<%(message)s>z[(2)<one><two>(2)])r5r_r\r0r!r>)rGr��lfs   rK�test_custom�"BufferingFormatterTest.test_custom	s`��"�$�����)�1�8�8�D�L�L�+A�B�
�
�
��
/��"�2�&�����-�q�x�x����/E�Frpr2N)rxryrzr{rLrFrJr}r~rprKr@r@�s��
�;�
Grpr@c��\rSrSrSrSrg)�
ExceptionTestic�R�URn[5nURU5 [S5e! [R
"SSS9 O=fUR
U5 UR5 URSnURURRS55 URURRS55 URURRS55 URURRS	55 g)
Nr��failedTr�rz#Traceback (most recent call last):
z!
RuntimeError: deliberate mistake�Stack (most recent call last):
z,logging.exception('failed', stack_info=True))r4�RecordingHandlerrEr�r!r!rPrOr0rF�exc_textrOr�r�)rGr�rVs   rKr|�ExceptionTest.test_formattings����������	���Q��	9��3�4�4��	9����h�4�8��	�����	���	�
�I�I�a�L������
�
�-�-�/>�?�	@�����
�
�+�+�-A�B�	C�������/�/�1>�?�	@�������-�-�/?�@�	As	�4�A
r~N)rxryrzr{r|r}r~rprKrMrMs��ArprMc��\rSrSrSrSrg)�LastResortTesti&c��URnURUR5 [Rn[R
n[R"5nURS5 URUR5S5 URS5 URUR5S5 SSS5 S[l[R"5nURS5 SnURUR5U5 SSS5 [R"5nURS5 URUR5S5 SSS5 SURl
S[l[R"5nURS5 URUR5S5 SSS5 URUR5 U[lU[lg!,(df   GNW=f!,(df   GN
=f!,(df   N�=f!,(df   Nu=f!URUR5 U[lU[lf=f)NzThis should not appearrz
Final chance!zFinal chance!
z-No handlers could be found for logger "root"
F)r4rPr=r!�
lastResortrrrr�r_r]r�r#�emittedNoHandlerWarningrE)rGrC�old_lastresort�old_raise_exceptionsrrs      rK�test_last_resort�LastResortTest.test_last_resort's����������4�>�>�*� �+�+��&�6�6��	;��(�(�*�f��
�
�3�4�� � ����!2�B�7����_�-�� � ����!2�4E�F�	+�"&�G���(�(�*�f����_�-�F��� � ����!2�C�8�+��(�(�*�f����_�-�� � ����!2�B�7�+�
49�D�L�L�0�&+�G�#��(�(�*�f����_�-�� � ����!2�B�7�+�
�O�O�D�N�N�+�!/�G��&:�G�#�7+�*��+�*��+�*��+�*��
�O�O�D�N�N�+�!/�G��&:�G�#�sm�	I�A#H�(I�)4H#�I�:2H5�,9I�%2I�I�
H �I�#
H2�-I�5
I�?I�
I�I�3J
r~N)rxryrzr{r[r}r~rprKrUrU&s��#;rprUc� �\rSrSrSrSrSrg)�FakeHandleriMc
�N�SHn[XURXU55 M! g)N)r�r"rOr�)�setattr�record_call)rG�
identifier�calledr�s    rKr��FakeHandler.__init__Os#��>�F��D�$�"2�"2�:�v�"N�O�?rpc�^^^�UUU4SjnU$)Nc�H>�TRSRTT55 g)Nz{} - {})r�r\)rcrb�method_names���rK�inner�&FakeHandler.record_call.<locals>.innerTs����M�M�)�*�*�:�{�C�Drpr~)rGrbrgrcrhs ``` rKra�FakeHandler.record_callSs���	E��rpr~N)rxryrzr{r�rar}r~rprKr^r^Ms
��P�rpr^c�.^�\rSrSrU4SjrSrSrU=r$)rQiYc�<>�[[U]
"U0UD6 /Ulgr)r�rQr�r0rs   �rKr��RecordingHandler.__init__[s���
���.��?��?���rpc�:�URRU5 g)z&Keep track of all the emitted records.N)r0r�rs  rKrz�RecordingHandler.handle_s�������F�#rpr2)rxryrzr{r�rzr}r�r�s@rKrQrQYs����$�$rprQc�^�\rSrSrSrU4SjrSrSrSrSr	Sr
S	rS
rSr
SrS
rSrSrSrSrSrSrU=r$)�ShutdownTestidz#Test suite for the shutdown method.c�>�[[U]5 /Ul[R
nUR
[[SU5 g)Nr)r�rqrLrcr!rr�r`)rG�raise_exceptionsr�s  �rKrL�ShutdownTest.setUphs7���
�l�D�'�)����"�2�2�������*;�=M�Nrpc�^�U4SjnU$)Nc�>�T"5err~)r�s�rKrh�'ShutdownTest.raise_error.<locals>.innerps
����'�Mrpr~)rGr�rhs ` rK�raise_error�ShutdownTest.raise_erroros
���	��rpc�L�[SUR5n[SUR5n[SUR5n[[RR
XU/5n[R"[U5S9 /SQnURXPR5 g)Nrrrr�r�)z2 - acquirez	2 - flushz	2 - closez2 - releasez1 - acquirez	1 - flushz	1 - closez1 - releasez0 - acquirez	0 - flushz	0 - close�0 - release)	r^rcrr!r�r�rEr�r_)rG�handler0�handler1�handler2rCrks      rK�test_no_failure�ShutdownTest.test_no_failurets}���q�$�+�+�.���q�$�+�+�.���q�$�+�+�.���w���*�*�X��,J�K�����T�(�^�4�L��	
����;�;�/rpc��[SUR5n[X1URU55 [R
R
U5/n[R"[U5S9 URSURS5 g)Nrr�r{rn)
r^rcr`rxr!r�r�rEr�r_)rGr�r�r�rCs     rK�_test_with_failure_in_method�)ShutdownTest._test_with_failure_in_method�sh���a����-�����!1�!1�%�!8�9��O�O�'�'��0�1�����T�(�^�4��������B��8rpc�0�URS[5 g�Nr��r�r�rts rK�test_with_ioerror_in_acquire�)ShutdownTest.test_with_ioerror_in_acquire�s���)�)�)�W�=rpc�0�URS[5 g�Nr"r�rts rK�test_with_ioerror_in_flush�'ShutdownTest.test_with_ioerror_in_flush�����)�)�'�7�;rpc�0�URS[5 g�NrOr�rts rK�test_with_ioerror_in_close�'ShutdownTest.test_with_ioerror_in_close�r�rpc�0�URS[5 gr��r�r�rts rK�test_with_valueerror_in_acquire�,ShutdownTest.test_with_valueerror_in_acquire�s���)�)�)�Z�@rpc�0�URS[5 gr�r�rts rK�test_with_valueerror_in_flush�*ShutdownTest.test_with_valueerror_in_flush�����)�)�'�:�>rpc�0�URS[5 gr�r�rts rK�test_with_valueerror_in_close�*ShutdownTest.test_with_valueerror_in_close�r�rpc�F�S[lURS[5 g)NFr��r!rr��
IndexErrorrts rK�.test_with_other_error_in_acquire_without_raise�;ShutdownTest.test_with_other_error_in_acquire_without_raise�s��"'����)�)�)�Z�@rpc�F�S[lURS[5 g)NFr"r�rts rK�,test_with_other_error_in_flush_without_raise�9ShutdownTest.test_with_other_error_in_flush_without_raise����"'����)�)�'�:�>rpc�F�S[lURS[5 g)NFrOr�rts rK�,test_with_other_error_in_close_without_raise�9ShutdownTest.test_with_other_error_in_close_without_raise�r�rpc�f�S[lUR[URS[5 g)NTr��r!rr_r�r�rts rK�+test_with_other_error_in_acquire_with_raise�8ShutdownTest.test_with_other_error_in_acquire_with_raise�s'��"&������*�d�&G�&G�#�Z�	1rpc�f�S[lUR[URS[5 g)NTr"r�rts rK�)test_with_other_error_in_flush_with_raise�6ShutdownTest.test_with_other_error_in_flush_with_raise��'��"&������*�d�&G�&G�!�:�	/rpc�f�S[lUR[URS[5 g)NTrOr�rts rK�)test_with_other_error_in_close_with_raise�6ShutdownTest.test_with_other_error_in_close_with_raise�r�rp)rc)rxryrzr{r|rLrxrr�r�r�r�r�r�r�r�r�r�r�r�r�r}r�r�s@rKrqrqds^���-�O��
0� 9�>�<�<�A�?�?�A�?�?�1�
/�
/�/rprqc�p�\rSrSrSrSrSSjrSrSrSr	S	r
S
rSrSr
S
rSrSrSrSrSrg)�ModuleLevelMiscTesti�z)Test suite for some module level methods.c���[RRRnUR	US5 UR[RU5 [R"S5 UR	[RRRS5 UR
[[RS5 "SS5nUR
[[RU"55 [R"S5 [R"5 UR	[RRR[R5 g)Nr�S�
doesnotexistsc��\rSrSrSrg)�;ModuleLevelMiscTest.test_disable.<locals>._NotAnIntOrStringi�r~Nrbr~rprK�_NotAnIntOrStringr�����rpr��WARN)
r!rCr#rSr_r�r_r�r1r�)rG�old_disabler�s   rK�test_disable� ModuleLevelMiscTest.test_disable�s����l�l�*�*�2�2������a�(��������5������������-�-�5�5�r�:����*�g�o�o��G�	�	�	
���)�W�_�_�6G�6I�J������	����������-�-�5�5�w�7G�7G�HrpNc�<^�/m[R"U[SU4Sj5 [5n[RRU5 [
[U5nUbU"USU5 O	U"SU5 UR[UR5S5 URSnURUR5SU-5 UbUO[
[UR55nURURU5 URT/5 g)N�basicConfigc�(>�TRX45$rr))r��kwrcs  �rK�<lambda>�/ModuleLevelMiscTest._test_log.<locals>.<lambda>�s���v�}�}�a�W�'=rpztest me: %rrrr)
rrr!rQrCrEr1r_r`r0�
getMessage�upperr)rGr�r��	recording�
log_methodr��expected_levelrcs       @rK�	_test_log�ModuleLevelMiscTest._test_log�s�������
�
�d�G�]�=�	?�%�&�	������	�*��W�f�-�
����u�m�Y�7��}�i�0�����Y�.�.�/��3��"�"�1�%������*�*�,�m�i�.G�H�"'�"3����&�,�,�.�9Y���������8�	
�����$rpc�D�URS[R5 g�Nr�)r�r!r�rts rK�test_log�ModuleLevelMiscTest.test_log�s�����u�g�m�m�,rpc�&�URS5 g�Nr��r�rts rK�
test_debug�ModuleLevelMiscTest.test_debug�������w�rpc�&�URS5 g�Nr�r�rts rK�	test_info�ModuleLevelMiscTest.test_info�������v�rpc�&�URS5 g�Nr�r�rts rK�test_warning� ModuleLevelMiscTest.test_warning�������y�!rpc�&�URS5 g�Nr�r�rts rK�
test_error�ModuleLevelMiscTest.test_error�r�rpc�&�URS5 g�Nr7r�rts rK�
test_critical�!ModuleLevelMiscTest.test_critical�������z�"rpc��UR[[R[5 "SS[R
5n[R"U5 UR
[R"5U5 [R"[R
5 UR
[R"5[R
5 g)Nc��\rSrSrSrg)�;ModuleLevelMiscTest.test_set_logger_class.<locals>.MyLoggerir~Nrbr~rprKr/r�r�rpr/)r_r1r!r2rqr0r_�getLoggerClass)rGr/s  rK�test_set_logger_class�)ModuleLevelMiscTest.test_set_logger_classs������)�W�%;�%;�V�D�	�w�~�~�	�	���x�(�����/�/�1�8�<����w�~�~�.�����/�/�1�7�>�>�Brpc�^�/m"U4SjS[R"55n[R"U5 [R"S5nUR	TS/5 [
R"5n[R"U5nURU5 UR[R5 URS5 UR	UR5R5S5 URS5 URS5 UR[R 5 URS5 UR	UR5S5 UR#U5 UR%5 [R"[R&5 g!UR#U5 UR%5 [R"[R&5 f=f)Nc�H>^�\rSrSrS\R
4UU4SjjrSrU=r$)�@ModuleLevelMiscTest.test_subclass_logger_cache.<locals>.MyLoggerir/c�F>�[TU]X5 TRS5 g)N�initialized)r�r�r�)rGrIr�r�r8s   ��rKr��IModuleLevelMiscTest.test_subclass_logger_cache.<locals>.MyLogger.__init__s����� ��-����}�-rpr~)	rxryrzr{r!r�r�r}r�)r�r8s@�rKr/r�s���$.�g�n�n�
.�
.rpr/�just_some_loggerr��hellorr)r!r�r2r"r_r7r8r<rEr:r;r�r]rs�truncater#r�rPrOr0)rGr/rr9rVr8s     @rK�test_subclass_logger_cache�.ModuleLevelMiscTest.test_subclass_logger_cachesZ�����	.�w�-�-�/�	.�
	���x�(��"�"�#5�6������=�/�2�������!�!�&�)�����!��	3��O�O�G�M�M�*��L�L��!����V�_�_�.�4�4�6��@��O�O�A���K�K��N��O�O�G�L�L�)��L�L��!����V�_�_�.��3�� � ��#�
�G�G�I��"�"�7�>�>�2��
� � ��#�
�G�G�I��"�"�7�>�>�2�s�!CF7�7AG>c��[R"S5n[SU5up#nUR5nUR	SU5 UR	SU5 g)Na*
            import logging

            class A:
                def __del__(self):
                    try:
                        raise ValueError("some error")
                    except Exception:
                        logging.exception("exception in __del__")

            a = A()
        r#zexception in __del__zValueError: some error)r�r�rrr�rGr,r-r.r/s     rK�test_logging_at_shutdown�,ModuleLevelMiscTest.test_logging_at_shutdown+sP����� �
��(��d�3�����j�j�l���
�
�,�c�2��
�
�.��4rpc�V�[RnUR[RU5 [R
"SU<S35n[
SU5 [USS9nURUR5R5S5 SSS5 g!,(df   g=f)Na�
            import builtins
            import logging

            class A:
                def __del__(self):
                    logging.error("log in __del__")

            # basicConfig() opens the file, but logging.shutdown() closes
            # it at Python exit. When A.__del__() is called,
            # FileHandler._open() must be called again to re-open the file.
            logging.basicConfig(filename=z�, encoding="utf-8")

            a = A()

            # Simulate the Python finalization which removes the builtin
            # open() function.
            del builtins.open
        r#rjr�zERROR:root:log in __del__)r�TESTFNr�rvr�r�rr�r_rfr.)rGrr,�fps    rK�test_logging_at_shutdown_open�1ModuleLevelMiscTest.test_logging_at_shutdown_open>s����#�#�����	�(�(�(�3����$*�+3��6	� �
��&	��t�$�
�(�W�
-�����R�W�W�Y�-�-�/�1L�M�.�
-�
-�s�"/B�
B(c��[R"S5n[SU5up#nUR5nUR	SU5 URUS5 g)Nz�
            import logging

            def rec():
                logging.error("foo")
                rec()

            rec()
        r#z#Cannot recover from stack overflow.rr)r�r�rrrNr_r�s     rK�test_recursion_error�(ModuleLevelMiscTest.test_recursion_error]sS����� �
��-�T�4�8�����j�j�l�����>��D�����Q�rpc��[R"5nUR[RU5 UR	[RU5 [R"5nUR	X5 URX5 gr)r!�getLevelNamesMappingr_r,�assertIsNot)rG�mapping�new_mappings   rK�test_get_level_names_mapping�0ModuleLevelMiscTest.test_get_level_names_mappingmsf���.�.�0������-�-�w�7�����-�-�w�7��2�2�4������.�����.rpr~r)rxryrzr{r|r�r�r�r�r�r�r�r�r�r�r�rrr
r}r~rprKr�r��sN��3�I�.%�0-� ��"� �#�
C�3�>5�&N�> � /rpr�c��\rSrSrSrSr\SSj5r\S5r	Sr
Sr\R"5S	5r\R"5S
5rSrg)
�
LogRecordTestivc���[R"05n[U5nURUR	S55 URURS55 g)Nz<LogRecord: �>)r!r�r�rFrOr�)rGr�rms   rK�test_str_rep�LogRecordTest.test_str_repwsD���!�!�"�%����F��������^�4�5�����
�
�3��(rpc��[5n[R"5nURU5 SS0n[R"SU5 URURSRU5 URURSRS5 URU5 UR5 g)N�less�morezless is %(less)srzless is more)rQr!r"rEr�rr0rTr_r8rPrO)rGrVr�rs    rK�
test_dict_arg�LogRecordTest.test_dict_arg}s�����������	���Q��
�f������*�A�.��
�
�a�i�i��l�'�'��+�������1��-�-�~�>�	�����	���	rpNc��[RnU[lSSKnUR5Rn[R
"SSU305n[R"[RSS5 [R
"SSU305nSSS5 UURWRS.nU[lU(aURU5 gU$!,(df   NN=f!U[lf=f)Nrr�msg1_r��msg2_)�processName�r1.processName�r2.processName)r!�logMultiprocessingr��current_processrIr�r�	swap_itemrt�modulesrr,)	rr r��prev_logMultiprocessingrrI�r1�r2�resultss	         rK�_extract_logrecord_process_name�-LogRecordTest._extract_logrecord_process_name�s���")�"<�"<��%7��"�	A�(��%�%�'�,�,�D��&�&���s�e�}�'=�>�B��"�"�3�;�;�0A�4�H��*�*�E�U�3�%�=�+A�B��I�)-�)+���)+����G�
*A�G�&���I�I�g���N�I�H��*A�G�&�s$�AC1�<C �"C1� 
C.�*C1�1
C>c�&�[R"5 S[R;nUR	[
RS5 Sn[
R"05nUR	URS5 URSU5nUR	SUS5 UR	SUS5 UR	SUS5 SSK
nUR"5upgUR"URS	X'4S
9nUR5 UR5nURSUS5 UR	USUS5 UR	SUS5 UR!5 U(aSSK
ngg!U(aSSK
nff=f)Nr�T�MainProcessrrrrrrr�r�)rr�rtr#r_r!r r�rr(r��Pipe�Processr�r��assertNotEqualr�)	rG�multiprocessing_imported�LOG_MULTI_PROCESSINGr�r'r��parent_conn�
child_connr�s	         rK�test_multiprocessing�"LogRecordTest.test_multiprocessing�sr���:�:�<�#4����#C� � 	'����W�7�7��>�#'� ��%�%�b�)�A����Q�]�]�M�:��:�:�1�>R�S�G����]�G�M�,B�C����]�G�4D�,E�F����]�G�4D�,E�F�
#�&5�&:�&:�&<�#�K��'�'��;�;��-�;��A�
�G�G�I�!�&�&�(�G����
�w�}�/E�F����W�]�3�W�=M�5N�O����]�G�4D�,E�F�
�F�F�H�(�&�(��'�&�(�s�EF�Fc��URnURn[R"05nU"UR5 U"UR
5 U"UR5 U"UR5 U"UR5 [Rn[Rn[Rn[RnS[l	S[l
S[lS[l[R"05nU"UR5 U"UR
5 U"UR5 U"UR5 U"UR5 U[l	U[l
U[lU[lg!U[l	U[l
U[lU[lf=f)NF)
rr�r!r�r�
threadName�processr�taskName�
logThreads�logProcessesr �logAsyncioTasks)rG�NONE�NOT_NONEr��log_threads�
log_processes�log_multiprocessing�log_asyncio_taskss        rK�
test_optional�LogRecordTest.test_optional�sE��� � ���'�'���!�!�"�%�����������������������Q�Z�Z���(�(���,�,�
�%�8�8��#�3�3��	8�!&�G��#(�G� �).�G�&�&+�G�#��%�%�b�)�A�����N����������O�����������!,�G��#0�G� �)<�G�&�&7�G�#��"-�G��#0�G� �)<�G�&�&7�G�#�s
�
BF�.Gc��\# �[R"05nU"UR5 g7fr)r!r�r8)rG�	assertionr�s   rK�_make_record_async� LogRecordTest._make_record_async�s!����!�!�"�%���!�*�*��s�*,c��URn[R"5nS[lURU"UR55 S[lURU"UR55 SSS5 [R"S5 g!,(df   N%=f![R"S5 f=f)NTF)	rF�asyncio�Runnerr!r;�runr�r�set_event_loop_policy�rG�make_record�runners   rK�#test_taskName_with_asyncio_imported�1LogRecordTest.test_taskName_with_asyncio_imported�s���	0��1�1�K����!�V�*.��'��
�
�;�t�';�';�<�=�*/��'��
�
�;�t�'8�'8�9�:�	"�
�)�)�$�/�
"�!��
�)�)�$�/�s#�!B,�AB�<B,�
B)�%B,�,Cc��URn[R"5n[R"[
RSS5 S[lURU"UR55 S[lURU"UR55 SSS5 SSS5 [R"S5 g!,(df   N-=f!,(df   N6=f![R"S5 f=f)NrITF)rFrIrJrr"rtr#r!r;rKrrLrMs   rK�&test_taskName_without_asyncio_imported�4LogRecordTest.test_taskName_without_asyncio_imported�s���	0��1�1�K����!�V�W�->�->�s�{�{�I�W[�-\�*.��'��
�
�;�t�'8�'8�9�:�*/��'��
�
�;�t�'8�'8�9�:�	.]�!�
�)�)�$�/�
.]�-\��!�!��
�)�)�$�/�s;�!C,�'C�
AC
�#C�+C,�

C	�C�
C)�%C,�,Dr~r)rxryrzr{rrr"r(r�r3rBrFrrrPrSr}r~rprKrrvsz��)�	�����0�#'��#'�J8�@�
�$�$�&�	0�'�	0�
�$�$�&�	0�'�	0rprc�^�\rSrSrSrU4SjrU4SjrSrSrSr	Sr
S	rS
rSr
SrS
rSrSrSrSrSrSrSrSrSr\R4"5S5rS SjrSrSrSrSr Sr!Sr"Sr#U=r$$)!�BasicConfigTestiz#Test suite for logging.basicConfig.c�|>�[[U]5 [RR
Ul[RR5Ul[RSSUl
[RRUlURUR5 /[Rlgr)r�rVrLr!rCrCr&r'r(r)r*r�r6r��cleanupr�s �rKrL�BasicConfigTest.setUpsy���
�o�t�*�,����-�-��
�%�/�/�4�4�6���")�"6�"6�q�"9���&-�l�l�&8�&8��#�������%� "����rpc��>�[RRSSH2n[RRU5 UR	5 M4 [
[U]5 gr)r!rCrCrPrOr�rVrW)rGrVr�s  �rKrW�BasicConfigTest.tearDownsF������&�&�q�)�A��L�L�&�&�q�)�
�G�G�I�*�	�o�t�-�/rpc�h�[[RSUR5 [RR5 [RR
UR5 UR[RSS&[RRUR5 g)NrC)r`r!rCrCr&rQrRr(r*r)r:r6rts rKrX�BasicConfigTest.cleanupsp������j�$�-�-�8������!���� � ��!4�!4�5�"&�"9�"9����Q�������d�9�9�:rpc���[R"5 UR[[RR
5S5 [RR
SnUR
U[R5 URUR[R5 URnURURR[R5 URUR 5 UR
UR[R"5 UR[RR$UR&5 g)Nrrr)r!r�r_r`rCrCrRr<r9rtrrLrOr��BASIC_FORMATrrn�PercentStyler�r6)rGr�rLs   rK�test_no_kwargs�BasicConfigTest.test_no_kwargss�������	
����W�\�\�2�2�3�Q�7��,�,�'�'��*�����g�w�'<�'<�=����������4��%�%�	�����)�)�.�.��0D�0D�E����)�+�+�,����i�.�.��0D�0D�E�	
������+�+�T�-H�-H�Irpc�n�[R"5n[R"[R
SS9 [R"S5 [R
RS5 URUR5R5S5 SSS5 g!,(df   g=f)Nr��r9r��Log an errorr�ERROR:root:Log an error�rr�r!r�rtr"r�r#r_r]rsr�s  rK�test_strformatstyle�#BasicConfigTest.test_strformatstyle2�o��
�
$�
$�
&�&����s�z�z��=��M�M�.�)��J�J�O�O�A�����V�_�_�.�4�4�6�)�
+�	'�
&�
&���BB&�&
B4c�n�[R"5n[R"[R
SS9 [R"S5 [R
RS5 URUR5R5S5 SSS5 g!,(df   g=f)Nr�rdrerrfrgr�s  rK�test_stringtemplatestyle�(BasicConfigTest.test_stringtemplatestyle:rjrkc�N�Sn[R"SSS9 UR[[RR
5S5 [RR
SnUR
U[R5 [R"SSSS9nURURRURR5 URURRURR5 URXUS5 g)	Nc�p�UR5 UR5 [R"U5 grr��r��h2rWs   rKrX�.BasicConfigTest.test_filename.<locals>.cleanupD����H�H�J��H�H�J��I�I�b�Mrp�test.logrj)rrlrrrr�r�)r!r�r_r`rCrCrRr�r9�moderIr��rGrXr�rks    rK�
test_filename�BasicConfigTest.test_filenameBs���	�
	���Z�'�B�����W�\�\�2�2�3�Q�7��,�,�'�'��*�����g�w�':�':�;��&�&�z�3��I��������,�,�h�o�o�.B�.B�C�������,�,�h�o�o�.B�.B�C�����(�J�?rpc�6�Sn[R"SSS9 [RRSn[R"SS5nURURRURR5 URXUS5 g)Nc�p�UR5 UR5 [R"U5 grr�rqs   rKrX�.BasicConfigTest.test_filemode.<locals>.cleanupVrtrpru�wb�r�filemoder)	r!r�rCrCr�r_r9rvr�rws    rK�
test_filemode�BasicConfigTest.test_filemodeTss��	�
	���Z�$�?��,�,�'�'��*���&�&�z�4�8��������,�,�h�o�o�.B�.B�C�����(�J�?rpc��[R"5nURUR5 [R
"US9 UR
[[RR5S5 [RRSnURU[R5 UR
URU5 g)Nr�rrr)
r7r8r�rOr!r�r_r`rCrCrRr<r9)rGr9r�s   rK�test_stream�BasicConfigTest.test_streambs��������������%����6�*�����W�\�\�2�2�3�Q�7��,�,�'�'��*�����g�w�'<�'<�=��������0rpc���[R"SS9 [RRSRnURURRS5 g)Nz%(asctime)s - %(message)s)r\r)r!r�rCrCrLr_rOr��rGrLs  rK�test_format�BasicConfigTest.test_formatlsH�����#>�?��L�L�)�)�!�,�6�6�	�����)�)�.�.�0K�Lrpc��[R"SS9 [RRSRnURURS5 g)Nr�)rnr)r!r�rCrCrLr_rnr�s  rK�test_datefmt�BasicConfigTest.test_datefmtrs@�����E�*��L�L�)�)�!�,�6�6�	�����*�*�E�2rpc���[R"SS9 [RRSRnURUR[R5 g)Nr�r�r)r!r�rCrCrLrRrOrPr�s  rK�
test_style�BasicConfigTest.test_stylexsF�����#�&��L�L�)�)�!�,�6�6�	����i�.�.��0K�0K�Lrpc��[RRnUR[RRU5 [R
"SS9 UR
[RRS5 [R
"SS9 UR
[RRS5 g)N�9)r��:)r!rCr�r�r:r�r_)rG�	old_levels  rK�
test_level�BasicConfigTest.test_level~sy���L�L�&�&�	�������-�-�y�9����"�%�������+�+�R�0����"�%�������+�+�R�0rpc��URn[R"5/n[RnU"[
[RSUS9 U"[
[RSUS9 U"[
[RUUS9 U"[
[R[RS9 [R"SSS9 g)Nru)rr9)rrC)r9rC)�loglevelr�r~)r_r!r<rtrr�r�r�)rGr_rCr9s    rK�test_incompatible�!BasicConfigTest.test_incompatible�s����(�(���)�)�+�,�������Z��!4�!4�z�=C�	E��Z��!4�!4�z�?G�	I��Z��!4�!4�V�?G�	I�	�Z��!4�!4�w�|�|�L����T�C�8rpc�F�[R"5[R"[R5[R"5/n[R"5nUSRU5 [R"US9 URUS[RRS5 URUS[RRS5 URUS[RRS5 URUSR5 URUSR5 URUSRU5 URUSRUSR5 g)Nr�)rCrrr)r!r<rtr"r>rAr�rrCrCr�rL)rGrCr�s   rK�
test_handlers�BasicConfigTest.test_handlers�s0���!�!�#��!�!�#�*�*�-��!�!�#�
��

�������� � ��#����X�.��
�
�h�q�k�7�<�<�#8�#8��#;�<��
�
�h�q�k�7�<�<�#8�#8��#;�<��
�
�h�q�k�7�<�<�#8�#8��#;�<����X�a�[�2�2�3����X�a�[�2�2�3��
�
�h�q�k�+�+�Q�/��
�
�h�q�k�+�+�X�a�[�-B�-B�Crpc���[R"5n[R"5n[R"U5/n[R"U5/n[R"[R
US9 [R"S5 [R"S5 [R"S5 UR[[RR5S5 [R"[RUSS9 [R"S5 [R"S5 [R"S5 UR[[RR5S5 URUR5R5S5 URUR5R5S	5 g)
Nr�rKr�r�rrT)r�rC�forcezWARNING:root:warnz WARNING:root:warn
INFO:root:info)r7r8r!r<r�r�r�r�r�r_r`rCrCr�r]rs)rG�
old_string_io�
new_string_io�old_handlers�new_handlerss     rK�
test_force�BasicConfigTest.test_force�s;�����
�
����
�
��-�-�m�<�=���-�-�m�<�=�����'�/�/�L�I���������V���
�
�g������W�\�\�2�2�3�Q�7����'�,�,��"&�	(���������V���
�
�g������W�\�\�2�2�3�Q�7�����/�/�1�7�7�9�,�	.�����/�/�1�7�7�9�<�	>rpc��Sn[R"SUSS[RS9 UR[	[R
R5S5 [R
RSnURU[R5 URURU5 [R"S5 UR5 [SSS	9nUR5R5nSSS5 [R "S5 URWS5 g!,(df   N7=f!WR5 [SSS	9nUR5R5nSSS5 O!,(df   O=f[R "S5 URWS5 f=f)
Nrjrur4�%(message)s�rrl�errorsr\r�rrr�.The Øresund Bridge joins Copenhagen to Malmör��r!r�r;r_r`rCrCrRr�rlr�rOr�rfrsrSr��rGrlr�r�r�s     rK�
test_encoding�BasicConfigTest.test_encoding�sE��	O��H�����h�'/�'4�G�M�M�
K�
���S����!6�!6�7��;��l�l�+�+�A�.�G��!�!�'�7�+>�+>�?����W�-�-�x�8��M�M�J�K��M�M�O��j�7�3�q��v�v�x�~�~�'��4��I�I�j�!����T�M�
O�4�3��
�M�M�O��j�7�3�q��v�v�x�~�~�'��4�3�3���I�I�j�!����T�M�
O��0�C
E�&D6�6
E�G�"F
�	G�

F�0Gc��Sn[R"SUSS[RS9 UR[	[R
R5S5 [R
RSnURU[R5 URURU5 [R"S5 UR5 [SS	S
9nUR5R5nSSS5 [R "S5 URWS5 g!,(df   N7=f!WR5 [SS	S
9nUR5R5nSSS5 O!,(df   O=f[R "S5 URWS5 f=f)Nrmru�ignorer�r�rrrr�rjr�z*The resund Bridge joins Copenhagen to Malmr�r�s     rK�test_encoding_errors�$BasicConfigTest.test_encoding_errors�s?��	Q��H�����h�'/�'4�G�M�M�
K�
���S����!6�!6�7��;��l�l�+�+�A�.�G��!�!�'�7�+>�+>�?����W�-�-�x�8��M�M�J�K��M�M�O��j�7�3�q��v�v�x�~�~�'��4��I�I�j�!����T�#O�P�4�3��
�M�M�O��j�7�3�q��v�v�x�~�~�'��4�3�3���I�I�j�!����T�#O�P�r�c���Sn[R"SUS[RS9 UR[	[R
R5S5 [R
RSnURU[R5 URURU5 URURS5 [R"S5 UR5 [SS	S
9nUR5R5nSSS5 [ R""S5 URWS5 g!,(df   N7=f!WR5 [SS	S
9nUR5R5nSSS5 O!,(df   O=f[ R""S5 URWS5 f=f)Nrmrur�)rrlr\r�rrr�backslashreplaceu<😂: ☃️: The Øresund Bridge joins Copenhagen to Malmörjr�zL\U0001f602: \u2603\ufe0f: The \xd8resund Bridge joins Copenhagen to Malm\xf6)r!r�r;r_r`rCrCrRr�rlr�r�rOr�rfrsrSr�r�s     rK�test_encoding_errors_default�,BasicConfigTest.test_encoding_errors_default�s]��	K��H�����h�'4�G�M�M�
K�
���S����!6�!6�7��;��l�l�+�+�A�.�G��!�!�'�7�+>�+>�?����W�-�-�x�8����W�^�^�-?�@��M�M�X�Y��M�M�O��j�7�3�q��v�v�x�~�~�'��4��I�I�j�!����T�$J�
K�4�3��
�M�M�O��j�7�3�q��v�v�x�~�~�'��4�3�3���I�I�j�!����T�$J�
K�s0�C%E"�E�
E�"G�=F%�	G�%
F3�/0Gc�.^�Sn[R"SUSS[RS9 UR[	[R
R5S5 [R
RSnURU[R5 URURU5 URUR5 /mU4SjnX2l[R"S5 URT5 URS	TS5 UR!5 [#SS
S9nUR%5R'5nSSS5 [(R*"S5 URWS5 g!,(df   N7=f!WR!5 [#SS
S9nUR%5R'5nSSS5 O!,(df   O=f[(R*"S5 URWS5 f=f)
Nrmrur�r�rrrc�`>�TR[[R"555 gr)r�r�rtr!)r�r8s �rK�dummy_handle_error�EBasicConfigTest.test_encoding_errors_none.<locals>.dummy_handle_errors������s�3�=�=�?�3�4rpr�z:'ascii' codec can't encode character '\xd8' in position 4:rjr�r)r!r�r;r_r`rCrCrRr�rlrr�r�r�rFrrOr�rfrsrSr�)rGrlr�r�r�r�r8s      @rK�test_encoding_errors_none�)BasicConfigTest.test_encoding_errors_none�s����	(��H�����h�'+�'4�G�M�M�
K�
���S����!6�!6�7��;��l�l�+�+�A�.�G��!�!�'�7�+>�+>�?����W�-�-�x�8����g�n�n�-��G�
5�#5���M�M�J�K��O�O�G�$��M�M�=�>E�a�j�
J�
�M�M�O��j�7�3�q��v�v�x�~�~�'��4��I�I�j�!����T�3�'�	4�3��
�M�M�O��j�7�3�q��v�v�x�~�~�'��4�3�3���I�I�j�!����T�3�'�s0�DF�6F�
F�H�2G�	H�
G(�$0Hc��SnSn[SS5nUR[RU5 Sn[R
"USU[RSS9 UR[[RR5S5 [RRS	nURU[R5 [R"S
S9nS
[lUR!U"55 SSS5 [#USS9nUR%5R'5nSSS5 UR)WS
5 [R*"S5 U(aUR-5 gg!,(df   N�=f!,(df   N`=f![R*"S5 U(aUR-5 ff=f)Nc��8# �[R"S5 g7f)Nzhello world)r!r�r~rprKr{�5BasicConfigTest.test_log_taskName.<locals>.log_records����O�O�M�*�s�r�ztest-logging-taskname-rjr4z%(taskName)s - %(message)s)rr�rlr�r\rrrT)r�r�zTask-\d+ - hello world)rXr�rSr�r!r�r�r_r`rCrCrRr�rIrJr;rKr�rfrs�assertRegexrLrO)rGr{r��log_filenamerlrOr�r�s        rK�test_log_taskName�!BasicConfigTest.test_log_taskNamesS��	+���%�f�.F�G������	�	�<�0�	 ��H�����h�)1����'C�
E�
���S����!6�!6�7��;��l�l�+�+�A�.�G��!�!�'�7�+>�+>�?����d�+�v�*.��'��
�
�:�<�(�,��l�W�5���v�v�x�~�~�'��6����T�#<�=��)�)�$�/���
�
���,�+��6�5��
�)�)�$�/���
�
���s<�B,F�"E;�F�F�2F�;
F	�F�
F�F�0G
c��^^^�/m[RmUUU4Sjn[R"T[SU5 [	[U5nUb
U"US5 OU"S5 TRTS04/5 g)Nc�>�T"5 [RRn[RRS5 TR	[RRU5 TRX45 g)N�d)r!rCr�r:r�r�)r�r�r�rc�old_basic_configrGs   ���rK�my_basic_config�2BasicConfigTest._test_log.<locals>.my_basic_config;sP��������*�*�I��L�L�!�!�#�&��O�O�G�L�L�1�1�9�=��M�M�1�'�"rpr�ztest mer~)r!r�rrr1r_)rGr�r�r�r�rcr�s`    @@rKr��BasicConfigTest._test_log6si�����"�.�.��	#�	�
�
�d�G�]�O�D��W�f�-�
����u�i�(��y�!�	
����2�r�(��,rpc�D�URS[R5 gr�)r�r!r�rts rKr��BasicConfigTest.test_logMs�����u�g�o�o�.rpc�&�URS5 gr�r�rts rKr��BasicConfigTest.test_debugPr�rpc�&�URS5 gr�r�rts rKr��BasicConfigTest.test_infoSr�rpc�&�URS5 gr�r�rts rKr��BasicConfigTest.test_warningVr�rpc�&�URS5 gr�r�rts rKr��BasicConfigTest.test_errorYr�rpc�&�URS5 gr�r�rts rKr��BasicConfigTest.test_critical\r�rp)rCr6r*r(r)%rxryrzr{r|rLrWrXrarhrmrxr�r�r�r�r�r�r�r�r�r�r�r�r�rrr�r�r�r�r�r�r�r�r}r�r�s@rKrVrVs����-�#�0�;�J�(+�+�@�$@�1�M�3�M�1�
9�D�">�*O�(Q�&K�((�@
�$�$�&� �'� �:-�./� ��"� �#�#rprVc�|^�\rSrSrU4SjrSrSrSrSrSr	Sr
S	rS
rSr
SrS
rSrSrSrSrU=r$)�LoggerAdapterTesti`c�@>^�[[U]5 [RSSm[5Ul[RUlURRUR5 URURRUR5 URURR5 U4SjnURU5 UR[R5 [R"URS9Ulg)Nc�,>�T[RSS&gr)r!r))�old_handler_lists�rKrX�(LoggerAdapterTest.setUp.<locals>.cleanupks���&6�G� � ��#rp)r)r�r�rLr!r)rQr�rCrrEr�rPrOrEr��adapter)rGrXr�r�s  @�rKrL�LoggerAdapterTest.setUpas����
���,�.�"�/�/��2��)�+����l�l��������t�~�~�.�������1�1�4�>�>�B�������,�,�-�	7�	
���� �����(�(�)��,�,�D�K�K�@��rpc�d�SnSnSS- UR	[URR5S5 URRSnUR	UR[R5 UR	URU5 UR	URUR45 UR	URURX"R45 g![a2nUnURRXR5 SnAGNSnAff=f�Nztesting exception: %rrrr)r�r�r!r�r_r`r0rr!r�rrTr*r��
__traceback__�rGrr�rfr�s     rK�test_exception� LoggerAdapterTest.test_exceptionrs���%����	8�
��E�
	
����T�^�^�3�3�4�a�8����'�'��*�����������7�������S�)�������t�~�~�&7�8��������-�-��.?�.?�@�	B��!�	8��C��L�L�"�"�3���7�7��	8���C3�3
D/�='D*�*D/c�j�SS- URRSWS9 UR[	UR
R5S5 UR
RSnURURURX"R45 g![anUnSnAN�SnAff=f)Nrrrz
exc_info testr�)
r�r�r!r_r`r�r0r*r�r�)rGrfr�r�s    rK�test_exception_excinfo�(LoggerAdapterTest.test_exception_excinfo�s���	�
��E�	
��������=�����T�^�^�3�3�4�a�8����'�'��*���������-�-��.?�.?�@�	B��!�	��C��	�s�B�
B2�&B-�-B2c���SnURRXR5 UR[	URR
5S5 URR
SnURUR[R5 URURU5 URURUR45 URURS5 g)Nzcritical test! %rrrrr�)r�r7r�r_r`r0rr!r�rrTr)rGrr�s   rKr��LoggerAdapterTest.test_critical�s���!�������c�>�>�2�����T�^�^�3�3�4�a�8����'�'��*���������)9�)9�:�������S�)�������t�~�~�&7�8�������/�:rpc�b�URRRRnSURRRlUR	[
URRRSU5 UR
URRS55 g)N�!rSrv)r�rr#rSr�r`r{�isEnabledFor�rGr�s  rK�test_is_enabled_for�%LoggerAdapterTest.test_is_enabled_for�sw���l�l�)�)�1�1�9�9��.0������#�#�+��������!4�!4�!<�!<�i�#�	%�������2�2�2�6�7rpc�j�URURR55 URRHnURRU5 M  UR
URR55 UR
URR55 gr)rFr�rBrrCrPr{r$s  rK�test_has_handlers�#LoggerAdapterTest.test_has_handlers�sy��������0�0�2�3��{�{�+�+�G��K�K�%�%�g�.�,�	
������0�0�2�3�������1�1�3�4rpc���Sn[URSS9n[USS9nSUlUR[	U5[	U55 UR[RXR5 UR[URR5S5 URRSnURUR[R5 URURSU35 URURUR45 URURS5 URnUR!URU5 UR!URRU5 [#5nXclUR!URU5 UR!URU5 UR!URRU5 XSlUR!URU5 UR!URU5 UR!URRU5 g!XSlf=f)NzAdapters can be nested, yo.�rr+�AdapterAdapterrrrzAdapter AdapterAdapter �test_nested)�
PrefixAdapterrr�r_rr�r!r�r�r`r0rrrTrr#rrq)rGrr��adapter_adapterr��orig_manager�temp_managers       rKr��LoggerAdapterTest.test_nested�s���+���t�{�{�$�?��'�w�d�C��!1�������g���_�(=�>����G�,�,�c�>�>�B�����T�^�^�3�3�4�a�8����'�'��*���������)9�)9�:�������'>�s�e�%D�E�������t�~�~�&7�8�������-�8�&�.�.���
�
�g�o�o�|�4��
�
�d�k�k�)�)�<�8��x��	3�&2�#��M�M�/�1�1�<�@��M�M�'�/�/�<�8��M�M�$�+�+�-�-�|�<�&2�#��
�
�o�-�-�|�<��
�
�g�o�o�|�4��
�
�d�k�k�)�)�<�8��'3�#�s
�#A$I,�,I4c���URRn[UR5nUR	SS5 UR[
USR5S5 URUSRS5 UR[RSS5 UR[
USR5S5 URUSRS5 g)N�
Hello, {}!�worldrnz
Hello, world!�test_styled_adapter�Goodbye {}.zGoodbye world.)r�r0�StyleAdapterrr�r_r�rrr�r!r�)rGr0r�s   rKr��%LoggerAdapterTest.test_styled_adapter�s����.�.�(�(���t�{�{�+������g�.�����W�R�[�_�_�-��?�������-�-�/D�E����G�O�O�]�G�<�����W�R�[�_�_�-�/?�@�������-�-�/D�Erpc��URRn[UR5nSUl[U5nUR
SS5 UR[USR5S5 URUSRS5 UR[RSS5 UR[USR5S5 URUSRS5 g)	Nz{}r�r�rnz{} Hello, world!�test_nested_styled_adapterr	z{} Goodbye world.)r�r0r�rr�r	r�r_r�rrr�r!r�)rGr0r��adapter2s    rKr	�,LoggerAdapterTest.test_nested_styled_adapter�s����.�.�(�(������,�������(������w�/�����W�R�[�_�_�-�/A�B�������-�-�/K�L����W�_�_�m�W�=�����W�R�[�_�_�-�/B�C�������-�-�/K�Lrpc��^^^^�SmURRmUU4SjmU4SjmU4SjnURRnU"5 UR	USR
S5 USRnTS-
mU"5 UR	USR
S5 URUSRU5 USRnTS-
mU"5 UR	USR
S5 URUSRU5 USRnTS-
mU"5 UR	USR
S	5 URUSRU5 g)
Nrrc�>�T"STS9 g�NrG��
stacklevelr~��	the_level�triggers��rK�	innermost�ELoggerAdapterTest.test_find_caller_with_stacklevel.<locals>.innermost��
����F�y�1rpc�>�T"5 grr~�r	s�rKrh�ALoggerAdapterTest.test_find_caller_with_stacklevel.<locals>.inner������Krpc�>�T"5 grr~�rhs�rK�outer�ALoggerAdapterTest.test_find_caller_with_stacklevel.<locals>.outer������Grprnr	rhr	� test_find_caller_with_stacklevel)r�r�r�r0r_rr�r�)rGr	r0r�rhr	r
	r	s    @@@@rKr	�2LoggerAdapterTest.test_find_caller_with_stacklevel�sJ����	��,�,�&�&��	2�	�	��.�.�(�(��
��������-�-�{�;����#�#���Q��	�
��������-�-�w�7����7�2�;�-�-�v�6����#�#���Q��	�
��������-�-�w�7����7�2�;�-�-�v�6����#�#���Q��	�
��������-�-�/Q�R����7�2�;�-�-�v�6rpc��[R"URSS0S9UlURR	S5 UR[
URR5S5 URRSnUR[US55 URURS5 g)Nr�r�r��foo should be hererrr�r!r�rr�r7r_r`r�r0rFr�r�rs  rK�test_extra_in_records�'LoggerAdapterTest.test_extra_in_records�s����,�,�D�K�K�49�3�<�A���	
�����2�3�����T�^�^�3�3�4�a�8����'�'��*��������.�/�������S�)rpc��URRSSS0S9 UR[URR
5S5 URR
SnUR
[US55 g)Nzfoo should NOT be herer��nope�r+rrr)r�r7r_r`r�r0r{r�rs  rK� test_extra_not_merged_by_default�2LoggerAdapterTest.test_extra_not_merged_by_defaultsf�������6�u�f�o��N�����T�^�^�3�3�4�a�8����'�'��*��������/�0rpc�8�[R"URSS0SS9UlURR	SSS0S9 UR[
URR5S	5 URRS
nUR[US55 UR[US55 URURS5 URURS5 URR	S5 UR[
URR5S5 URRS
nURURS5 URUS5 URR	SSS9 UR[
URR5S5 URRS
nURURS5 URUS5 g)Nr�r�T�rr+�merge_extrazfoo and bar should be herer�r�r$	rrr�no extrar�rn�
none extrarp)r!r�rr�r7r_r`r�r0rFr�r�r��assertNotHasAttrrs  rK�test_extra_merged�#LoggerAdapterTest.test_extra_mergeds����,�,�D�K�K�49�3�<�9=�?���	
�����:�5�#�,��O�����T�^�^�3�3�4�a�8����'�'��*��������.�/�������.�/�������S�)�������S�)������j�)�����T�^�^�3�3�4�a�8����'�'��+��������S�)����f�e�,������l�$��7�����T�^�^�3�3�4�a�8����'�'��+��������S�)����f�e�,rpc��[R"URSS0SS9UlURR	SSS0S9 UR[
URR5S5 URRS	nUR[US55 URURS5 g)
Nr�r�Tr(	zfoo shall be minr�r$	rrrr	rs  rK�)test_extra_merged_log_call_has_precedence�;LoggerAdapterTest.test_extra_merged_log_call_has_precedence's����,�,�D�K�K�49�3�<�9=�?���	
�����0�����E�����T�^�^�3�3�4�a�8����'�'��*��������.�/�������S�)rpc��[R"URSS9UlURR	SSS0S9 UR[
URR5S5 URRSnURURS5 URR	S	5 UR[
URR5S
5 URRSnURUS5 URR	SSS9 UR[
URR5S5 URRSnURUS5 g)
NT)rr)	r	r�r�r$	rrrnr*	r�r+	rp)r!r�rr�r7r_r`r�r0r�r,	rs  rK�test_extra_merged_without_extra�1LoggerAdapterTest.test_extra_merged_without_extra2s1���,�,�D�K�K�9=�?���	
�����2�5�#�,��G�����T�^�^�3�3�4�a�8����'�'��+��������S�)������j�)�����T�^�^�3�3�4�a�8����'�'��+�����f�e�,������l�$��7�����T�^�^�3�3�4�a�8����'�'��+�����f�e�,rp)r�rr�)rxryrzr{rLr�r�r�r�r�r�r�r	r	r 	r%	r-	r0	r3	r}r�r�s@rKr�r�`sY���A�"B�"B�	;�8�5�9�8	F�
M�7�@*�1�-�2	*�-�-rpr�c��\rSrSrSrSrSrg)r�iF�Adapterc�(�URSU3U4$r��r�)rGrrUs   rKr7�PrefixAdapter.processIs���+�+��a��u�%�v�-�-rpr~N)rxryrzr{r�r7r}r~rprKr�r�Fs��
�F�.rpr�c� �\rSrSrSrSrSrg)�MessageiMc��XlX lgr)r[rT)rGr[rTs   rKr��Message.__init__Ns�����	rpc�H�URR"UR6$r)r[r\rTrts rK�__str__�Message.__str__Rs���x�x����	�	�*�*rp)rTr[N)rxryrzr{r�r?	r}r~rprKr;	r;	Ms���+rpr;	c�"�\rSrSrSS.SjrSrg)r	iVrrr
	c��URU5(aBURX%5up%URR"U[	X$540UDSUS-0D6 gg)Nr	rr)r�r7rr�r;	)rGr�rr	rTrUs      rKr��StyleAdapter.logWsT�����U�#�#��,�,�s�3�K�C��K�K�O�O�E�7�3�#5�
5��
5�'1�!�|�
5�$rpr~N)rxryrzr{r�r}r~rprKr	r	Vs��34�5�5rpr	c�^�\rSrSrU4SjrSrSrSrSrSr	Sr
S	rS
rSr
SrS
rSrSrSrSrSrSrU=r$)�
LoggerTesti^c�>�[[U]5 [5Ul[
R"SS9UlURRUR5 URURRUR5 URURR5 UR[
R5 g)N�blah�rI)
r�rE	rLrQr�r!r0rrEr�rPrOrEr�s �rKrL�LoggerTest.setUp`s����
�j�$�%�'�)�+����n�n�&�1��������t�~�~�.�������1�1�4�>�>�B�������,�,�-�����(�(�)rpc��UR[SURRS5 UR[SURRS5 g)Nz,Level not an integer or a valid string: Nonez.Level not an integer or a valid string: (0, 0))rr)r�r1rr:rts rK�test_set_invalid_level�!LoggerTest.test_set_invalid_levelisJ���!�!��E��K�K� � �$�	(�	
�!�!��G��K�K� � �&�	*rpc�d�SnSnSS- UR	[URR5S5 URRSnUR	UR[R5 UR	URU5 UR	URUR45 UR	URURX"R45 g![a2nUnURRXR5 SnAGNSnAff=fr�)r�rr!r�r_r`r0rr!r�rrTr*r�r�r�s     rKr��LoggerTest.test_exceptionqs���%����	7�
��E�
	
����T�^�^�3�3�4�a�8����'�'��*�����������7�������S�)�������t�~�~�&7�8��������-�-��.?�.?�@�	B��!�	7��C��K�K�!�!�#�~�~�6�6��	7�r�c���[R"[SS5 UR[UR
RSS5 SSS5 g!,(df   g=f)NrTr��test message)r�	swap_attrr!r_r1rr�rts rK�!test_log_invalid_level_with_raise�,LoggerTest.test_log_invalid_level_with_raise�s>��
�
�
�w�(9�4�
@����i������$��O�A�
@�
@�s�-A�
A!c��[R"[SS5 URR	SS5 SSS5 g!,(df   g=f)NrFr�rP	)rrQ	r!rr�rts rK�test_log_invalid_level_no_raise�*LoggerTest.test_log_invalid_level_no_raise�s4��
�
�
�w�(9�5�
A��K�K�O�O�D�.�1�B�
A�
A�s�A�
Ac��^�/m[R"U[RSU4Sj5 URRSS9 UR
[T5S5 UR
STS5 g)N�print_stackc�B>�TRUR55$r)r�r])r�r�rcs  �rKr��=LoggerTest.test_find_caller_with_stack_info.<locals>.<lambda>�s���f�m�m�D�M�M�O�&DrpTr�rrrPr)rrr!�	tracebackr�
findCallerr_r`)rGrcs @rK� test_find_caller_with_stack_info�+LoggerTest.test_find_caller_with_stack_info�sd������
�
�d�G�-�-�}�D�	F�	
�����$��/�����V��a�(����;�V�A�Y�Grpc�^^^^�SmURRmUU4SjmU4SjmU4SjnURRnU"5 UR	USR
S5 USRnTS-
mU"5 UR	USR
S5 URUSRU5 USRnTS-
mU"5 UR	USR
S5 URUSRU5 USRn[R"5nURUR5 [RmU"5 UR	USR
S5 URUR5 URRmTS-
mU"5 UR	USR
S	5 URUSRU5 g)
Nrrc�>�T"STS9 gr		r~r	s��rKr	�>LoggerTest.test_find_caller_with_stacklevel.<locals>.innermost�r	rpc�>�T"5 grr~r	s�rKrh�:LoggerTest.test_find_caller_with_stacklevel.<locals>.inner�r	rpc�>�T"5 grr~r	s�rKr	�:LoggerTest.test_find_caller_with_stacklevel.<locals>.outer�r	rprnr	rhr	r	)rr�r�r0r_rr�r�r!r"rErP)	rGr	r0r�r4rhr	r
	r	s	     @@@@rKr	�+LoggerTest.test_find_caller_with_stacklevel�s�����	��+�+�%�%��	2�	�	��.�.�(�(��
��������-�-�{�;����#�#���Q��	�
��������-�-�w�7����7�2�;�-�-�v�6����#�#���Q��	�
��������-�-�w�7����7�2�;�-�-�v�6����#�#���'�'�)�����t�~�~�.��/�/��
��������-�-�w�7��!�!�$�.�.�1��+�+�%�%���Q��	�
��������-�-�/Q�R����7�2�;�-�-�v�6rpc��SnSnS=n=n=n=n=n=p�[R"XX4XVXxU	5	n
S[U
RR	55-H4nUS0nUR[URRXX4XVUX�S9 M6 g)N�	my record�
)r8r�
some value�r+�sinfo)	r!�_logRecordFactoryrd�__dict__�keysr_r�r�
makeRecord)
rGrIr�rW�lnorrTr*r�rl	�rvrr+s
             rK�%test_make_record_with_extra_overwrite�0LoggerTest.test_make_record_with_extra_overwrite�s�������:>�>��>�S�>�3�>��>��>�4�
�
&�
&�t�B�S�'/�u�>��*�E�"�+�+�2B�2B�2D�,E�E�C��,�'�E����h����(>�(>�� �s�(�$)�
�
8�Frpc��SnSnS=n=n=n=n=n=p�SS0n
URRXX4XVXzU	S9	nURSUR5 g)Nrh	ri	�	valid_keyrj	rk	)rrp	rrn	)rGrIr�rWrq	rrTr*r�rl	r+rMs            rK�(test_make_record_with_extra_no_overwrite�3LoggerTest.test_make_record_with_extra_no_overwrite�sn������:>�>��>�S�>�3�>��>��>�4��l�+�����'�'��R�c�(0�U�(�L���
�
�k�6�?�?�3rpc��URURR55 URRHnURR	U5 M  URURR55 gr)rFrrBrCrPr{r$s  rKr��LoggerTest.test_has_handlers�s\��������/�/�1�2��{�{�+�+�G��K�K�%�%�g�.�,�������0�0�2�3rpc�|�[R"S5nSUlURUR	55 g)Nz
blah.childF)r!r"r�r{rB)rG�child_loggers  rK�test_has_handlers_no_propagate�)LoggerTest.test_has_handlers_no_propagate�s1���(�(��6��!&�������1�1�3�4rpc�&�URRRnSURRlUR[URRSU5 URURR
S55 g)N�rS�)rr#rSr�r`r{r�r�s  rKr��LoggerTest.test_is_enabled_for�sb���k�k�)�)�1�1��&(������#��������!4�!4�i��M�������1�1�"�5�6rpc��URRnURRRnSURlSURRlUR	[
URSU5 UR	[
URRSU5 UR
URRS55 g)NTr�rrSr�	)rrr#rSr�r`r{r�)rG�old_disabledr�s   rK�#test_is_enabled_for_disabled_logger�.LoggerTest.test_is_enabled_for_disabled_logger�s����{�{�+�+���k�k�)�)�1�1��#�����&(������#��������j�,�G��������!4�!4�i��M�������1�1�"�5�6rpc��[R"5nURU[R5 URU[R"S55 URU[R"S55 URU[R"S55 URU[R"S5R5 URU[R"S5R5 URU[R"S5R5 URU[R"S55 URU[R"S5R5 g)NrrCr�rL�)r!r"rrCr r
)rGrCs  rK�test_root_logger_aliases�#LoggerTest.test_root_logger_aliases�s��� � �"���
�
�d�G�L�L�)��
�
�d�G�-�-�d�3�4��
�
�d�G�-�-�b�1�2��
�
�d�G�-�-�f�5�6��
�
�d�G�-�-�e�4�9�9�:��
�
�d�G�-�-�i�8�=�=�>��
�
�d�G�-�-�e�4�;�;�<�����w�0�0��6�7�����w�0�0��;�B�B�Crpc��UR[[R[5 UR[[RS5 g)Nsfoo)r_r1r!r"�anyrts rK�test_invalid_names�LoggerTest.test_invalid_names�s2�����)�W�%6�%6��<����)�W�%6�%6��?rpc��[[RS-5H_nSHVn[R"U5n[R
"X15n[R"U5nURXS5 MX Ma g)Nrr)rrCr�rLzbaz.bar)r�r��HIGHEST_PROTOCOLr!r"r7r�r)rG�protorIrrm�	unpickleds      rK�
test_pickling�LoggerTest.test_picklings^���6�2�2�Q�6�7�E�A�� �*�*�4�0���L�L��/��"�L�L��O�	��
�
�i�0�	B�8rpc�t
�URn[R"S5n[R"S5nUR[R5 URUR
5[R5 URUR05 URUR[R55 URUR[R55 URUR[RS[RS05 URUR05 URUR[R55 URUR05 URUR[R55 URUR[RS05 UR[R5 URUR
5[R5 URUR05 URUR[R55 UR[R5 URUR
5[R5 URUR05 URUR05 URUR05 URUR[R55 URUR[R55 URUR[R55 URUR[R55 URUR[R55 [R"5 URUR
5[R5 URUR05 URUR05 URUR05 URUR[R55 URUR[R55 URUR[R55 g)Nr>rBTF)r4r!r"r:r�r_r5�_cacherFr�r{r;r�r�rS)rGrCr2r3s    rK�test_caching�LoggerTest.test_cachingsz�������#�#�E�*���#�#�I�.��	
�
�
�g�m�m�$�����2�2�4�g�m�m�D��������,�	
����,�,�W�]�]�;�<�����-�-�g�m�m�<�=�������'�-�-��w�}�}�e�)T�U�������b�)�����,�,�W�]�]�;�<�	
������b�)�����)�)�'�-�-�8�9�������w�}�}�d�&;�<�	����)�)�*�����2�2�4�g�6F�6F�G��������,�	
����-�-�g�m�m�<�=�	������(�����2�2�4�g�6F�6F�G��������,��������,�������b�)�	
����-�-�g�m�m�<�=�����,�,�W�-=�-=�>�?�����-�-�g�m�m�<�=�����,�,�W�-=�-=�>�?�����)�)�'�-�-�8�9�	��������2�2�4�g�6F�6F�G��������,��������,�������b�)�	
����-�-�g�.>�.>�?�@�����-�-�g�.>�.>�?�@�����*�*�7�+;�+;�<�=rp)rr�)rxryrzr{rLrK	r�rR	rU	r]	r	rs	rw	r�r}	r�r�	r�	r�	r�	r�	r}r�r�s@rKrE	rE	^sc���*�*�B�"P�2�H�%7�N8�4�4�5�
7�
7�D�@�1�6>�6>rprE	c�0�\rSrSrSrSrSrSrSrSr	g)	�BaseFileTestiAz1Base class for handler tests that write log filesc�^�[RU5 [SS5Ul/Ulg)Nr�ztest_logging-2-)rrLrXrW�rmfilesrts rKrL�BaseFileTest.setUpDs$�����t�� ��):�;�����rpc��URHn[R"U5 M [RR	UR
5(a [R"UR
5 [RU5 gr)r�	rSrvr|r}rWrrW)rGrWs  rKrW�BaseFileTest.tearDownIsP���,�,�B��I�I�b�M��
�7�7�>�>�$�'�'�"�"��I�I�d�g�g�����$�rpc��UR[RRU5SU-S9 URRU5 g)z7Assert a log file is there and register it for deletionzLog file %r does not exist�rN)rFrSr|r}r�	r�)rGrs  rK�
assertLogFile�BaseFileTest.assertLogFilePs=����������x�0�8�8�C�	�	E������H�%rpc
�t�[R"S[RSSUR5SSS5$)Nr�r�rr)r!r!r;rurts rK�next_rec�BaseFileTest.next_recVs5��� � ��g�m�m�S�!�!%�!2�!2�!4�d�D�$�H�	Hrp)rWr�	N)
rxryrzr{r|rLrWr�	r�	r}r~rprKr�	r�	As��7��
 �&�Hrpr�	c� �\rSrSrSrSrSrg)�FileHandlerTestiZc�:�[R"UR5 [R"URSSS9nURUR5 UR[RRUR55 UR[R"055 URUR5 URRUR55 UR5 g)NrjTrk)rSrvrWr!r�rr9r{r|r}rzr�r�rFrO)rG�fhs  rK�
test_delay�FileHandlerTest.test_delay[s���
�	�	�$�'�'��
�
 �
 ����7�$�
G�����"�)�)�$������������0�1�
�	�	�'�'�'��+�,����R�Y�Y�'���������t�w�w�/�0�
���
rpc�$�[R"UR5 [R"URSSS9nUR[R"S55 URUR55 UR5 URUR55 [UR5nURUR5R5S5 SSS5 g!,(df   g=f)Nrjr�)rlrvr�r�)rSrvrWr!r�rAr>rar�	rOr�r_rfrs)rGr�	rs   rK�%test_emit_after_closing_in_write_mode�5FileHandlerTest.test_emit_after_closing_in_write_modees���
�	�	�$�'�'��
�
 �
 ����7��
E��
����)�)�-�8�9�
����
�
�� �
���
�
����
�
�� �
�$�'�'�]�b����R�W�W�Y�_�_�.��4��]�]�s�	/D�
Dr~N)rxryrzr{r�	r�	r}r~rprKr�	r�	Zs���	5rpr�	c��\rSrSrSr\R"\RS5S5r	\R"\"\S5S5S5r
SrS	rSS
jrSrSrS
r\R("5S5rSrg)�RotatingFileHandlerTestipc��[RRURSSS9nUR	URS55 UR
5 [RRURSSS9nUR	URS55 UR
5 [URS5nURS5 SSS5 [RRURSSS9nUR	URS55 UR
5 g!,(df   Nh=f)Nrjrr�rl�maxBytesrr}�
)	r!rCr�rWr{�shouldRolloverrOr�r�)rG�rhr�s   rK�test_should_not_rollover�0RotatingFileHandlerTest.test_should_not_rolloverqs��
�
�
�
1�
1��G�G�g��2�3������*�*�4�0�1�
���
��
�
�
1�
1����'�A�2�7������*�*�4�0�1�
���
�
�$�'�'�4�
 �A�
�G�G�E�N�!�
�
�
�
1�
1����'�A�2�7������*�*�4�0�1�
���
�!�
 �s�	D=�=
E�WASI does not have /dev/null.c���[RR[RSSS9nURUR
UR555 UR5 g)Nrjrrr�	)	r!rCr�rS�devnullr{r�	r�	rO�rGr�	s  rK�!test_should_not_rollover_non_file�9RotatingFileHandlerTest.test_should_not_rollover_non_file�sR��
�
�
�
1�
1��
�
�W�q�2�:������*�*�4�=�=�?�;�<�
���
rp�mkfifozrequires os.mkfifo()c� ^^�[RmUR[RT5 [R
"T5 SmUU4Sjn[R"US9n[R"U/5 [RRTSSS9n[R "U5 UR#5nUR%UR'U55 UR)U5 SSS5 SSS5 UR+TR-5WR.[R0-5 g![anURSU-5 SnAGNSnAff=f!,(df   N~=f!,(df   N�=f)Nzos.mkfifo(): %sznot readc�r>�[TS5nUR5mSSS5 g!,(df   g=f)N�rb)r�rf)r�r�rs ��rK�
other_side�ORotatingFileHandlerTest.test_should_not_rollover_named_pipe.<locals>.other_side�s&����h��%���v�v�x��&�%�%�s�(�
6r�rjrrr�	)rrr�rvrSr�	�PermissionErrorr�r�r�r	�
start_threadsr!rCr��
contextlib�closingr�	r{r�	rar_rr�linesep)rGrfr�	rr�	r�r�rs      @@rK�#test_should_not_rollover_named_pipe�;RotatingFileHandlerTest.test_should_not_rollover_named_pipe�s*����#�#�����	�(�(�(�3�	1��I�I�h����	 �
�!�!��4��
�
+�
+�V�H�
5��!�!�5�5��w��6�<�B��#�#�B�'��M�M�O��� � ��!2�!2�1�!5�6�����
�(�6�	
�����������
�
�(:�;��#�	1��M�M�+�a�/�0�0��	1��(�'��6�
5�s<�E�>6E?�4AE.�6E?�
E+�E&�&E+�.
E<	�8E?�?
F
c�T�[URS5nURS5 SSS5 [RRURSSS9nUR
URUR555 UR5 g!,(df   Nv=f)Nr}r�	rjr�r�	)
r�rWr�r!rCr�rFr�	r�	rO)rGr�r�	s   rK�test_should_rollover�,RotatingFileHandlerTest.test_should_rollover�ss��
�$�'�'�4�
 �A�
�G�G�E�N�!�
�
�
�
1�
1�$�'�'�G�VW�
1�
X������)�)�$�-�-�/�:�;�
���
�	!�
 �s�B�
B'c�(�[R"UR5 [RRURSS9nUR
UR55 URUR5 UR5 g)Nrjr�)
rSrvrWr!rCr�rar�	r�	rOr�	s  rK�test_file_created�)RotatingFileHandlerTest.test_file_created�s`��	�	�	�$�'�'��
�
�
�
1�
1�$�'�'�G�
1�
L��
����
�
�� ����4�7�7�#�
���
rpc�J�U(aSU0O0n[R"UR5 [RR
"UR4SSSS.UD6nUR
[RRUR5U(+5 [R"SS05n[R"SS05nURURU55 URURU55 URU5 URUR5 UR[RRURS	-55 URURU55 URURU55 URU5 UR[RRUR55 URURS	-5 UR[RRURS
-55 URURU55 URURU55 UR5 g)Nrmrjr�r��rl�backupCountr�	rr��dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb�.1�.2)rSrvrWr!rCr�rr|r}r�r{r�	rar�	rFrO)rGrmrUr�	�small�larges      rK�test_max_bytes�&RotatingFileHandlerTest.test_max_bytes�s���%*�'�5�!���
�	�	�$�'�'��
�
�
�
1�
1��G�G�N�%�1�s�N�FL�N���
�
�b�g�g�n�n�T�W�W�-�5�y�9��%�%�u�c�l�3���%�%�u�g�&6�7������*�*�5�1�2�����*�*�5�1�2�
��������4�7�7�#������������$��7�8�����*�*�5�1�2�����)�)�%�0�1�
�������������t�w�w�/�0����4�7�7�T�>�*������������$��7�8�����)�)�%�0�1�����)�)�%�0�1�
���
rpc�"�URSS9 g)NT)rm)r�	rts rK�test_max_bytes_delay�,RotatingFileHandlerTest.test_max_bytes_delay�s�����$��'rpc�P�Sn[RRURSSSS9nXlURUR
55 URUR5 UR[RRU"URS-555 URUR
55 URU"URS-55 UR[RRU"URS-555 URUR
55 URU"URS-55 UR[RRU"URS-555 URUR
55 UR[RRU"URS-555 UR5 g)	Nc��US-$�N�.testr~rH	s rK�namer�>RotatingFileHandlerTest.test_rollover_filenames.<locals>.namer�s���'�>�!rprjr�rrr�	r�	r�	�.3)
r!rCr�rWr�	rar�	r�	r{rSr|r}rO)rGr�	r�	s   rK�test_rollover_filenames�/RotatingFileHandlerTest.test_rollover_filenames�sn��	"�
�
�
�
1�
1��G�G�g�1�q�2�B����
����
�
�� ����4�7�7�#����������d�g�g��n�(=�>�?�
����
�
�� ����5����4��0�1����������d�g�g��n�(=�>�?�
����
�
�� ����5����4��0�1����������d�g�g��n�(=�>�?�
����
�
�� ����������d�g�g��n�(=�>�?�
���
rpc��"SS[RR5nU"URSSSS9nUR	URUR5URS-5 UR
UR55 URUR5 UR
UR55 URURURS-5S	-5 UR[RRURURS-555 UR5 g)
Nc� �\rSrSrSrSrSrg)�ZRotatingFileHandlerTest.test_namer_rotator_inheritance.<locals>.HandlerWithNamerAndRotatori�c��US-$r�	r~)rGrIs  rKr�	�`RotatingFileHandlerTest.test_namer_rotator_inheritance.<locals>.HandlerWithNamerAndRotator.namer�s���g�~�%rpc��[RRU5(a[R"XS-5 gg)N�.rotated)rSr|r}rA)rG�source�dests   rK�rotator�bRotatingFileHandlerTest.test_namer_rotator_inheritance.<locals>.HandlerWithNamerAndRotator.rotator�s+���7�7�>�>�&�)�)��J�J�v�j�'8�9�*rpr~N)rxryrzr{r�	r�	r}r~rprK�HandlerWithNamerAndRotatorr�	�s��
&�
:rpr�	rjr�rrr�	r�	r�	r�	)r!rCr�rWr_r�	rar�	r�	r{rSr|r}rO)rGr�	r�	s   rK�test_namer_rotator_inheritance�6RotatingFileHandlerTest.test_namer_rotator_inheritance�s���	:��)9�)9�)M�)M�	:�(��G�G�g�1�q�B��������$�'�'�*�D�G�G�g�,=�>�
����
�
�� ����4�7�7�#�
����
�
�� ����2�8�8�D�G�G�d�N�3�j�@�A���������������4��(@�A�B�
���
rpc��SnSn[RRURSSSS9nX#lXlUR
5nURU5 URUR5 UR
5nURU5 U"URS-5nURU5 [Rn[US5nUR5n	[R"U	5n
URU
R!S	5UR"U-5 SSS5 URUR
55 U"URS
-5nURU5 [US5nUR5n	[R"U	5n
URU
R!S	5UR"U-5 SSS5 URUR
55 U"URS
-5n[US5nUR5n	[R"U	5n
URU
R!S	5UR"U-5 SSS5 UR%[R&R)U"URS-555 UR+5 g!,(df   GN�=f!,(df   GN=f!,(df   N�=f)Nc��US-$)Nz.gzr~rH	s rKr�	�3RotatingFileHandlerTest.test_rotator.<locals>.namer�s���%�<�rpc�8�[US5nUR5n[R"US5n[US5nUR	U5 SSS5 SSS5 [
R"U5 g!,(df   N-=f!,(df   N6=f)Nr�	r�r})r�rf�zlib�compressr�rSr�)r�	r�	�sfr��
compressed�dfs      rKr�	�5RotatingFileHandlerTest.test_rotator.<locals>.rotator�sk���f�d�#�r��w�w�y��!�]�]�4��3�
��$��%���H�H�Z�(�&�$�

�I�I�f��&�%��$�#�s#�4B�A:�B�:
B	�B�
Brjr�rrr�	r�	r�	rmr�	r�	)r!rCr�rWr�	r�	r�	rar�	rSr�	r�rfr�	�
decompressr_rrr{r|r}rO)rGr�	r�	r�	�m1�m2rW�newliner�r�	r�s           rK�test_rotator�$RotatingFileHandlerTest.test_rotator�s.��	 �	��
�
�
1�
1��G�G�g�1�q�2�B���
���
�]�]�_��
��������4�7�7�#�
�]�]�_��
�����
�4�7�7�T�>�
"�����2���*�*��
�"�d�^�q�����J��?�?�:�.�D����T�[�[��1�2�6�6�G�3C�D��	����
�
�� �
�4�7�7�T�>�
"�����2��
�"�d�^�q�����J��?�?�:�.�D����T�[�[��1�2�6�6�G�3C�D��	����
�
�� �
�4�7�7�T�>�
"��
�"�d�^�q�����J��?�?�:�.�D����T�[�[��1�2�6�6�G�3C�D��	
���������d�g�g��n�(=�>�?�
���
�%�^���^���^�s'�AK�
AK(�'AK:�
K%�(
K7�:
Lr~N�F)rxryrzr{r�	r�r�r�is_wasir�	r r�rSr�	r�	r�	r�	r�	r�	r�	�
requires_zlibr
r}r~rprKr�	r�	ps����(�_�_�W�_�_�&E�F��G�������X�.�0F�G�<�H�<�2���.(��&�&
����*��*rpr�	c�N�\rSrSr\R
"\RS5S5rSr	SSjr
SrSrSr
S	rS
rSr\R""S5S
5r\R""S5S5r\R""S5S5r\R""S5S5rSrg)�TimedRotatingFileHandlerTesti&r�	c��[RR[RSSSS9n[
R"S5 [R"SS05nURURU55 UR5 g)N�Srjrr�rlr�	皙�����?rztesting - device file)r!rCr�rSr�	r�r�r�r{r�	rO)rGr�	r�s   rKr�	�5TimedRotatingFileHandlerTest.test_should_not_rollover'sp���
�
�
6�
6��
�
�C�'�q�7�B���
�
�3���!�!�5�*A�"B�C������*�*�1�-�.�
���
rpc��[RRURSSSS9n[R"S5nURU5 [R"SS05nURU5 URUR5 [R"S5 [R"SS	05nURU5 UR5 S
n[RR5nSn[U5H{nU[R"US9-
n	URU	R!S
5-n
["R$R'U
5nU(dM`UR(R+U
5  O SU-nU(Gd["R$R-UR5up�["R."U5V
s/sHo�R1U
5(dMU
PM nn
[3SUR!S5-[4R6S9 [3SU-[4R6S9 UH^n
[3SU
-5 ["R$R9X�5n[;US5n[3UR=55 SSS5 M` UR?X[S9 gs sn
f!,(df   M�=f)Nr
rjrrr
r�rztesting - initialr
ztesting - after delayFi,��secondsz.%Y-%m-%d_%H-%M-%Sz,No rotated files found, went back %d secondsz
Test time: %sz%Y-%m-%d %H-%M-%S�r�zThe only matching files are: %szContents of %s:r�r�	) r!rCr�rWr>rAr�rar�	r�r�rOr�r�r��	timedelta�strftimerSr|r}r�	r�r��listdirrOr�rtrr�r�rfrF)rGr�	r[r%r&�foundr��GO_BACK�secs�prevrWr�dnr��filesr|�tfs                 rK�
test_rollover�*TimedRotatingFileHandlerTest.test_rollover2s��
�
�
�
6�
6�����w�A�7�?����� 9�:��
�����
�
"�
"�E�+>�#?�
@��
��������4�7�7�#��
�
�3��
�
"�
"�E�+B�#C�
D��
�����
���
������#�#�%�����'�N�D���+�+�D�9�9�D����4�=�=�)=�>�>�B��G�G�N�N�2�&�E��u����#�#�B�'��
#�=�w�F����W�W�]�]�4�7�7�+�F�B� "�
�
�2��C��1�,�,�r�2B�Q��E�C��/�C�L�L�1D�$E�E�C�J�J�W��3�e�;�#�*�*�M����'�!�+�,��w�w�|�|�B�*���$��_���"�'�'�)�$�%�_��
	
�����'��D�%�_�s�!J?�>J?�	K�
K	c�H�[R"UR5 [RR	5nUR5nSURS-s=:aS:dYO [
R"SURS--
S-5 [RR	5nUR5nURSS9n[R"S5nU(aSUR53OS	n[S
5Hyn[RRURSXSS9nURU5 [R "S
SU305nUR#U5 UR%5 M{ UR'UR5 [)URSS9n	[+U	5HupjUR-SU3U
5 M SSS5 [.R0"URUR35S-
4S-5 [S5Hyn[RRURSXSS9nURU5 [R "S
SU305nUR#U5 UR%5 M{ U[R4"U(aSOSS9-
nURSUS3nUR'U5 [)URSS9n	[+U	5HupjUR-SU3U
5 M SSS5 [)USS9n	[+U	5HupjUR-SU3U
5 M SSS5 g!,(df   GN�=f!,(df   N]=f!,(df   g=f)Ng�������?r'g�������?g�?r)�microsecondr��W�MIDNIGHTrprj)rl�when�atTimerz	testing1 r�rrr�z	testing2 r(��daysr�z%Y-%m-%d)rrvrWr�r�r�r"
r�rAr!r>�weekdayr�rCr�rAr�rarOr�	r��	enumeraterrS�utime�	timestampr
)
rG�weeklyr�r&
r[r%
r�r�	r&r�r0�rolloverDate�otherfns
             rK�test_rollover_at_midnight�6TimedRotatingFileHandlerTest.test_rollover_at_midnight\s���������!����#�#�%��������V�'�'��+�1�c�1�
�J�J��f�0�0��4�4��;�<��#�#�'�'�)�C��X�X�Z�F����A��.����� 9�:��&,��3�;�;�=�/�"�*���q��A��!�!�:�:����'��;�E�B��O�O�C� ��&�&���1�#��'?�@�B��G�G�B�K��H�H�J�
�	
���4�7�7�#�
�$�'�'�G�
,��$�Q�<����
�
�	�!��o�t�4�(�-�	������3�=�=�?�Q�.�0��2�3��q��A��!�!�:�:����'��;�E�B��O�O�C� ��&�&���1�#��'?�@�B��G�G�B�K��H�H�J�
��X�/�/�&�Q�a�H�H���W�W�I�Q�|�H�5�6�����7�#�
�$�'�'�G�
,��$�Q�<����
�
�	�!��o�t�4�(�-��'�G�
,��$�Q�<����
�
�	�!��o�t�4�(�-�
,�%-�
,��-�
,��-�
,�s$�:*M0�*N�=*N�0
M?�
N�
N!c�"�URSS9 g)NT)r-
)r0
rts rK�test_rollover_at_weekday�5TimedRotatingFileHandlerTest.test_rollover_at_weekday�s���&�&�d�&�3rpc	�B�URnU"[[RRUR
SSSS9 U"[[RRUR
SSSS9 U"[[RRUR
SSSS9 g)N�XrjTrkr#
�W7)r_r�r!rCr�rW)rGr_s  rK�test_invalid�)TimedRotatingFileHandlerTest.test_invalid�s���(�(���Z��!1�!1�!J�!J��W�W�c�G�4�	A��Z��!1�!1�!J�!J��W�W�c�G�4�	A��Z��!1�!1�!J�!J��W�W�d�W�D�	Brpc��Sn[RRURSSSSS9nUR	U5nURX1S-5 UR	US-S-
5nURX1S-5 UR	US-5nURX1S-5 UR	US	-5nURX1S-5 UR
5 [R"S
SS5n[RRURSSSUS9nUR	U5nURX1S-5 UR	US-S-
5nURX1S-5 UR	US-5nURX1S-5 UR	US
-5nURX1S-5 UR
5 g!UR
5 f=f!UR
5 f=f)Nrrjr$
T�rlr%
r�r&
�Qrri�i�_��i@��ж)	r!rCr�rW�computeRolloverr_rOr�r�)rG�currentTimer�	rjr&
s     rK�"test_compute_rollover_daily_attime�?TimedRotatingFileHandlerTest.test_compute_rollover_daily_attime�s�����
�
�
�
6�
6��G�G�g�J��T�7�#��
	��'�'��4�F����V�<�%?�@��'�'��l�(B�Q�(F�G�F����V�<�%?�@��'�'��l�(B�C�F����V�<�%?�@��'�'��l�(B�C�F����V�<�%?�@��H�H�J����r�1�a�(��
�
�
�
6�
6��G�G�g�J��V�7�%��
	��'�'��4�F����V�<�%?�@��'�'��l�(B�Q�(F�G�F����V�<�%?�@��'�'��l�(B�C�F����V�<�%?�@��'�'��l�(B�C�F����V�<�%?�@��H�H�J��'
�H�H�J��&
�H�H�J�s�B G�#B G)�G&�)G;c���[[R"55nXS--
n[R"SSS5n[R"U5Rn[S5GH�n[RRURSSU-SSSUS	9nXE:�a	SU-
U-nOXT-
nUS-nUS
-
nXr-
nURU5nX�:wa2[S[R-5 [S[5-5 URX�5 URUS
-S-
5nX�:wa2[S[R-5 [S[5-5 URX�5 XT:XaUS
-
nURUS
-5nX�:wa2[S[R-5 [S[5-5 URX�5 URUS-5nX�:wa2[S[R-5 [S[5-5 URX�5 UR5 GM� g!UR5 f=f)Nr<
r=
rr(rjzW%drrT)rlr%
�intervalr�	r�r&
r>
zfailed in timezone: %dzlocal vars: %si�:	r?
)r�r�r�r�tm_wdayr�r!rCr�rWr@
r��timezone�localsr_rO)	rGrA
�todayr&
�wday�dayr�	rkrjs	         rK�#test_compute_rollover_weekly_attime�@TimedRotatingFileHandlerTest.test_compute_rollover_weekly_attime�s���$�)�)�+�&���E�1�1�����r�1�a�(���{�{�5�!�)�)����8�C��!�!�:�:����'����a�UV���;�)�B�)
��:�!"�D��3��H� #�
�H��L�(���L�(���!���+�+�E�2���%��2�T�]�]�B�C��*�V�X�5�6�� � ��2��+�+�E�L�,@�1�,D�E���%��2�T�]�]�B�C��*�V�X�5�6�� � ��2��;�� 0�0�H��+�+�E�L�,@�A���%��2�T�]�]�B�C��*�V�X�5�6�� � ��2��+�+�E�L�,@�A���%��2�T�]�]�B�C��*�V�X�5�6�� � ��2����
�[��Z���
�s
�FI�I c	���[R"SS9nUR[RU5 /n[
R
R
5n[S5H:nURURS55 U[
R"SS9-
nM< Sn/n/nUGHn[RRUSU-5n	[RR!U	S	SS
SS9n
URU
5 UR#S
5(a#UHnURU<SU<35 M M�UR#S5(a-SnX�lUHnURU<SU<S35 M M�US:XdM�SnX�lUHnURSU-5 M GM UH8n
[RRX5n	['U	S5nSSS5 M: [)U5GH�upHXtn
U
R+5nUR-[/U5SU5 UR#S
5(aRSU-n	UHEn[RR1U5unn
UR3U
R#U	55 MG M�UR#S5(a�UH�n[RR1U5unn
UR3U
R5S5U
5 UR3U
R#US-5=(a U
[/U5S-R755 M� GMLUS:XdGMUUHn[RR1U5unn
UR3U
R5S55 UR3U
R#S5=(a U
SR755 M� GM� g!,(df   GM7=f)Nrlr8	r��%Y-%m-%d_%H-%M-%Sr�r
)�a.bza.b.c�d.ezd.e.frwz%s.logrmr(T�r%
rE
r�	rmrP
z.log.rQ
c��[RRU5upURSS5S-n[RR	X5$)Nr�r)rSr|r�rAr��rr�basenames   rKr�	�HTimedRotatingFileHandlerTest.test_compute_files_to_delete.<locals>.namer	sA��(*���
�
�h�(?�%�G�'�/�/���;�f�D�H��7�7�<�<��:�:rpr�r�rwc��[RRU5upSUSS-S-n[RRX5$)Nrwr%�.oldlog)rSr|r�r�rT
s   rKr�	rV
s?��(*���
�
�h�(?�%�G�"�X�a�b�\�1�I�=�H��7�7�<�<��:�:rpz
g%s.oldlogr}rpz%s.log.r�rX
rr)rQ�mkdtempr��shutil�rmtreer�r�r�r�r
r
rSr|r�r!rCr�rOr�	r�r*
�getFilesToDeleter_r`r�rFr��isdigit)rG�wd�timesr�r��prefixesr
�rotatorsr�r�r�	r-r�	rWr��
candidatesrrrs                  rK�test_compute_files_to_delete�9TimedRotatingFileHandlerTest.test_compute_files_to_delete�s$��
�
�
�_�
5������
�
�r�*���
�
�
�
"�
"�
$���r��A��L�L����%8�9�:��(�$�$�Q�/�/�B��9�������F������R��F�!2�3�A��&�&�?�?���IJ�LM�FJ�@�L�G�
�O�O�G�$�� � ��'�'��A��L�L���!:�;���"�"�5�)�)�;�!&�
��A��L�L���!:�;���3��;�!&�
��A��L�L���!1�2��1�6�B������R�$�A��a���!�����
#�8�,�I�A��k�G� �1�1�3�J����S��_�a��<�� � ��'�'���&��#�A��G�G�M�M�!�,�E�A�r��O�O�B�M�M�!�$4�5�$��"�"�5�)�)�#�A��G�G�M�M�!�,�E�A�r��O�O�B�K�K��$7��<��O�O�B�M�M�&�3�,�$?�%B�$&�s�6�{�Q��$7�$?�$?�$A�C�$�
�3��#�A��G�G�M�M�!�,�E�A�r��O�O�B�K�K�	�$:�;��O�O�B�M�M�#�$6�$J�2�a�5�=�=�?�K�$�!-���s�O�
O'	c	�f�[R"[R"SS95nUR	[
RU5 /n[RR5nSn[U5H:nURURS55 U[R"SS9-
nM< Sn/n/n[U5H_up�U	S-n[RR!X-S	SUS
S9nURU5 UHn
URU
<SU
<35 M Ma UHn
URS
U
-5 M UHnX-R#5 M [U5H�up�U	S-nX�nUR%5nUR'[)U5XK-
U5 [*R,"S5nUHkn[.R0R3U5unnUR5UR7U
S-55 U[)U
5S-SnUR9UU5 Mm M� g)Nrlr8	r�rO
r�r
)za.logza.log.brrrmTrR
r�z
a.log.%s.cz&^\d{4}-\d{2}-\d{2}_\d{2}-\d{2}-\d{2}\Z)�pathlib�PathrQrY
r�rZ
r[
r�r�r�r�r
r
r*
r!rCr��touchr\
r_r`rZr[rSr|r�rFrOr�)rGr^
r_
r��n_filesr�r`
r
ra
r�r�r�	r�	r-r�rb
�matcherrrrrWrcs                     rK�?test_compute_files_to_delete_same_filename_different_extensions�\TimedRotatingFileHandlerTest.test_compute_files_to_delete_same_filename_different_extensions3s���
�\�\�(�*�*�/�B�
C������
�
�r�*���
�
�
�
"�
"�
$�����w��A��L�L����%8�9�:��(�$�$�Q�/�/�B� �(������"�8�,�I�A��A�#�K��&�&�?�?���RU�IJ�LW�FJ�@�L�G�
�O�O�G�$��������2�3��-��A��L�L���)�*���A�
�V�N�N���#�8�,�I�A��A�#�K��k�G� �1�1�3�J����S��_�g�.C�Z�P��j�j�!J�K�G������
�
�a�(���2�����
�
�f�S�j� 9�:��S��[��]�,�-��� � ���1�	 �
-rpzEST+05EDT,M3.2.0,M11.1.0c�b^^�[RnUU4Sjn[RRTRSSSS9mU"U"SSSS	S
S
5U"SSSSS55 U"U"SSSSS5U"SSS
SS55 U"U"SSSSS5U"SSS
SS55 U"U"SSSS	S
S
5U"SSSSS55 U"U"SSSSS5U"SSSSS55 U"U"SSSSS5U"SSSSS55 TR5 [RRTRSSS[R"S
SS5S9mU"U"SSSSS
S
5U"SSSS
S55 U"U"SSSS
S5U"SSSS
S55 U"U"SSSSS5U"SSSS
S55 U"U"SSSSS
S
5U"SSSS
S55 U"U"SSSS
S5U"SSSS
S55 U"U"SSSSS5U"SSSS
S55 TR5 [RRTRSSS[R"SSS5S9mU"U"SSSSS
S
5U"SSSSS55 U"U"SSSSS5U"SSSSS55 U"U"SSSSS5U"SSSSS55 U"U"SSSSS
S
5U"SSSSS55 U"U"SSSSS5U"SSS
SS55 U"U"SSSSS5U"SSS
SS55 U"U"SSSSS
S
5U"SSSSS55 U"U"SSSSS5U"SSSSS55 U"U"SSSSS5U"SSSSS55 U"U"SSSSS
S
5U"SSSSS55 U"U"SSSSS
S
SS9U"SSSSS55 U"U"SSSSS5U"SSSSS55 U"U"SSSSS5U"SSSSS55 TR5 [RRTRSSS[R"SSS5S9mU"U"SSSSSS
5U"SSSSS55 U"U"SSSSS5U"SSSSS55 U"U"SSSSS5U"SSSSS55 U"U"SSSSS
S
5U"SSSSS55 U"U"SSSSS5U"SSS
SS55 U"U"SSSSS5U"SSS
SS55 U"U"SSSSSS
5U"SSSSS55 U"U"SSSSS5U"SSSSS55 U"U"SSSSS5U"SSSSS55 TR5 [RRTRSSS[R"SSS5S9mU"U"SSSSSS
5U"SSSSS55 U"U"SSSSS5U"SSS
SS55 U"U"SSSSS
S
5U"SSS
SS55 U"U"SSSSS5U"SSS
SS55 U"U"SSSSS5U"SSS
SS55 U"U"SSSSS5U"SSSSS55 U"U"SSSSSS
5U"SSSSS55 U"U"SSSSS5U"SSSSS55 U"U"SSSSS
S
5U"SSSSS55 U"U"SSSSSSS9U"SSSSSSS95 U"U"SSSSSS
SS9U"SSSSSSS95 U"U"SSSSSSS9U"SSSSS55 U"U"SSSSS
S
SS9U"SSSSS55 U"U"SSSSS5U"SSSSS55 U"U"SSSSS5U"SSSSS55 TR5 g)Nc��>�TRUR55nX!R5-
nU(a&TRUS[R"US95 gg�Nrr
�r@
r,
r_r�r
��currentrkrj�diffr�	rGs    ��rKrG�OTimedRotatingFileHandlerTest.test_compute_rollover_MIDNIGHT_local.<locals>.testa�R����'�'��(9�(9�(;�<�F��.�.�0�0�D��� � ��q�(�*<�*<�T�*J�K�rprjr$
F�rlr%
r���rpr�r�	�;rurr=
rrr�r�r;
ri	r���fold���r�r!rCr�rWrOr��rG�DTrGr�	s`  @rK�$test_compute_rollover_MIDNIGHT_local�ATimedRotatingFileHandlerTest.test_compute_rollover_MIDNIGHT_local]st����
�
��	L��
�
�
6�
6��G�G�g�J�E�7�C��	
�R��a��R��R�
(�"�T�1�b�!�Q�*?�@��R��a��Q��
"�B�t�Q��A�q�$9�:��R��a��Q��
"�B�t�Q��A�q�$9�:��R��b�!�R��R�
(�"�T�2�q�!�Q�*?�@��R��b�!�Q��
"�B�t�R��A�q�$9�:��R��b�!�Q��
"�B�t�R��A�q�$9�:�
���
�
�
�
�
6�
6��G�G�g�J�E��=�=��Q��*�7�,��	
�R��a��R��R�
(�"�T�1�b�"�a�*@�A��R��a��R��
#�R��a��R��%;�<��R��a��R��
#�R��a��R��%;�<��R��b�!�R��R�
(�"�T�2�q�"�a�*@�A��R��b�!�R��
#�R��b�!�R��%;�<��R��b�!�R��
#�R��b�!�R��%;�<�
���
�
�
�
�
6�
6��G�G�g�J�E��=�=��A�q�)�7�+��	
�R��a��Q��B�
'��D�!�R��A�)>�?��R��a��Q��
"�B�t�Q��A�q�$9�:��R��a��Q��
"�B�t�Q��A�q�$9�:��R��a��Q��B�
'��D�!�R��A�)>�?��R��a��Q��
"�B�t�Q��A�q�$9�:��R��a��Q��
"�B�t�Q��A�q�$9�:��R��b�!�Q��B�
'��D�"�a��A�)>�?��R��b�!�Q��
"�B�t�R��A�q�$9�:��R��b�!�Q��
"�B�t�R��A�q�$9�:�	
�R��b�!�Q��B�
'��D�"�a��A�)>�?��R��b�!�Q��B�Q�
/��D�"�a��A�1F�G��R��b�!�Q��
"�B�t�R��A�q�$9�:��R��b�!�Q��
"�B�t�R��A�q�$9�:�
���
�
�
�
�
6�
6��G�G�g�J�E��=�=��B��*�7�,��	
�R��a��Q��B�
'��D�!�R��B�)?�@��R��a��Q��
#�R��a��Q��%;�<��R��a��Q��
"�B�t�Q��A�r�$:�;��R��a��Q��B�
'��D�!�R��B�)?�@��R��a��Q��
"�B�t�Q��A�r�$:�;��R��a��Q��
#�R��a��Q��%;�<��R��b�!�Q��B�
'��D�"�a��B�)?�@��R��b�!�Q��
#�R��b�!�Q��%;�<��R��b�!�Q��
"�B�t�R��A�r�$:�;�
���
�
�
�
�
6�
6��G�G�g�J�E��=�=��B��*�7�,��	
�R��a��Q��B�
'��D�!�R��B�)?�@��R��a��Q��
#�R��a��Q��%;�<��R��a��Q��B�
'��D�!�R��B�)?�@��R��a��Q��
"�B�t�Q��A�r�$:�;��R��a��Q��
#�R��a��Q��%;�<�	
�R��b�!�Q��
"�B�t�R��A�r�$:�;��R��b�!�Q��B�
'��D�"�a��B�)?�@��R��b�!�Q��
#�R��b�!�Q��%;�<��R��b�!�Q��B�
'��D�"�a��B�)?�@�	
�R��b�!�Q���
*�B�t�R��A�r��,J�K��R��b�!�Q��B�Q�
/��D�"�a��B�Q�1O�P��R��b�!�Q���
+�R��b�!�Q��-C�D��R��b�!�Q��B�Q�
/��D�"�a��B�1G�H��R��b�!�Q��
"�B�t�R��A�r�$:�;��R��b�!�Q��
#�R��b�!�Q��%;�<�
���
rpc�d^^�[RnUU4Sjn[RRTRSSSS9mU"U"SSSS	S
S
5U"SSSSS55 U"U"SSSSS5U"SSS
SS55 U"U"SSSSS5U"SSS
SS55 U"U"SSSS	S
S
5U"SSSSS55 U"U"SSSSS5U"SSSSS55 U"U"SSSSS5U"SSSSS55 TR5 [RRTRSSS[R"SSS5S9mU"U"SSSS	S
S
5U"SSSSS55 U"U"SSSSS5U"SSSSS55 U"U"SSSSS5U"SSSSS55 U"U"SSSS	S
S
5U"SSSSS55 U"U"SSSSS5U"SSSSS55 U"U"SSSSS5U"SSSSS55 TR5 [RRTRSSS[R"S
SS5S9mU"U"SSSSS
S
5U"SSSS
S55 U"U"SSSS
S5U"SSSS
S55 U"U"SSSSS5U"SSSS
S55 U"U"SSSSS
S
5U"SSSS
S55 U"U"SSSS
S5U"SSSS
S55 U"U"SSSSS5U"SSSS
S55 TR5 [RRTRSSS[R"SSS5S9mU"U"SSSSS
S
5U"SSSSS55 U"U"SSSSS5U"SSSSS55 U"U"SSSSS5U"SSSSS55 U"U"SSSSS
S
5U"SSSSS55 U"U"SSSSS5U"SSSSS55 U"U"SSSSS5U"SSSSS55 U"U"SSSSS
S
5U"SSSSS55 U"U"SSSSS5U"SSSSS55 U"U"SSSSS5U"SSSSS55 U"U"SSSSS
S
5U"SSSSS55 U"U"SSSSS
S
SS9U"SSSSS55 U"U"SSSSS5U"SSSSS55 U"U"SSSSS5U"SSSSS55 TR5 [RRTRSSS[R"SSS5S9mU"U"SSSSSS
5U"SSSSS55 U"U"SSSSS5U"SSSSS55 U"U"SSSSS5U"SSSSS55 U"U"SSSSS
S
5U"SSSSS55 U"U"SSSSS5U"SSSSS55 U"U"SSSSS5U"SSSSS55 U"U"SSSSSS
5U"SSSSS55 U"U"SSSSS5U"SSSSS55 U"U"SSSSS5U"SSSSS55 TR5 [RRTRSSS[R"SSS5S9mU"U"SSSSSS
5U"SSSSS55 U"U"SSSSS5U"SSSSS55 U"U"SSSSS
S
5U"SSSSS55 U"U"SSSSS5U"SSSSS55 U"U"SSSSS5U"SSSSS55 U"U"SSSSS5U"SSSSS55 U"U"SSSSSS
5U"SSSSS55 U"U"SSSSS5U"SSSSS55 U"U"SSSSS
S
5U"SSSSS55 U"U"SSSSSSS9U"SSSSSSS95 U"U"SSSSSS
SS9U"SSSSSSS95 U"U"SSSSSSS9U"SSSSS55 U"U"SSSSS
S
SS9U"SSSSS55 U"U"SSSSS5U"SSSSS55 U"U"SSSSS5U"SSSSS55 TR5 g)Nc��>�TRUR55nX!R5-
nU(a&TRUS[R"US95 ggro
rp
rq
s    ��rKrG�ITimedRotatingFileHandlerTest.test_compute_rollover_W6_local.<locals>.test�ru
rprj�W6Frv
rw
rpr�r�	rx
r�rr=
rrr��r|
rur;
�ri	r�ry
r{
r}
r~
s`  @rK�test_compute_rollover_W6_local�;TimedRotatingFileHandlerTest.test_compute_rollover_W6_local�s�	����
�
��	L��
�
�
6�
6��G�G�g�D�e�7�=��	
�R��a��B��B�
'��D�!�Q��1�)=�>��R��a��A�q�
!�2�d�A�r�1�a�#8�9��R��a��A�q�
!�2�d�A�r�1�a�#8�9��R��b�"�b�"�b�
)�2�d�B��A�q�+A�B��R��b�"�a��
#�R��b�!�Q��%:�;��R��b�"�a��
#�R��b�!�Q��%:�;�
���
�
�
�
�
6�
6��G�G�g�D�e��=�=��A�q�)�7�+��	
�R��a��R��R�
(�"�T�1�b�!�Q�*?�@��R��a��Q��
"�B�t�Q��A�q�$9�:��R��a��Q��
"�B�t�Q��A�q�$9�:��R��b�!�R��R�
(�"�T�2�q�!�Q�*?�@��R��b�!�Q��
"�B�t�R��Q��$:�;��R��b�!�Q��
"�B�t�R��Q��$:�;�
���
�
�
�
�
6�
6��G�G�g�D�e��=�=��Q��*�7�,��	
�R��a��B��B�
'��D�!�Q��A�)>�?��R��a��B��
"�B�t�Q��B��$:�;��R��a��B��
"�B�t�Q��B��$:�;��R��b�"�b�"�b�
)�2�d�B��B��+B�C��R��b�"�b�!�
$�b��r�1�b�!�&<�=��R��b�"�b�!�
$�b��r�1�b�!�&<�=�
���
�
�
�
�
6�
6��G�G�g�D�e��=�=��A�q�)�7�+��	
�R��a��A�r�2�
&��4��A�q�!�(<�=��R��a��A�q�
!�2�d�A�r�1�a�#8�9��R��a��A�q�
!�2�d�A�r�1�a�#8�9��R��a��Q��B�
'��D�!�R��A�)>�?��R��a��Q��
"�B�t�Q��A�q�$9�:��R��a��Q��
"�B�t�Q��A�q�$9�:��R��b�"�a��R�
(�"�T�2�r�1�a�*@�A��R��b�"�a��
#�R��b�!�Q��%:�;��R��b�"�a��
#�R��b�!�Q��%:�;�	
�R��b�!�Q��B�
'��D�"�a��A�)>�?��R��b�!�Q��B�Q�
/��D�"�a��A�1F�G��R��b�!�Q��
"�B�t�R��Q��$:�;��R��b�!�Q��
"�B�t�R��Q��$:�;�
���
�
�
�
�
6�
6��G�G�g�D�e��=�=��B��*�7�,��	
�R��a��A�r�2�
&��4��A�q�"�(=�>��R��a��A�r�
"�B�t�Q��A�r�$:�;��R��a��A�q�
!�2�d�A�r�1�b�#9�:��R��a��Q��B�
'��D�!�R��B�)?�@��R��a��Q��
"�B�t�Q��A�r�$:�;��R��a��Q��
#�R��a��Q��%;�<��R��b�"�a��R�
(�"�T�2�r�1�b�*A�B��R��b�"�a��
$�b��r�1�a��&<�=��R��b�"�a��
#�R��b�!�Q��%;�<�
���
�
�
�
�
6�
6��G�G�g�D�e��=�=��B��*�7�,��	
�R��a��Q��B�
'��D�!�R��B�)?�@��R��a��Q��
#�R��a��Q��%;�<��R��a��Q��B�
'��D�!�R��B�)?�@��R��a��Q��
"�B�t�Q��A�r�$:�;��R��a��Q��
#�R��a��Q��%;�<�	
�R��b�!�Q��
"�B�t�R��A�r�$:�;��R��b�!�Q��B�
'��D�"�a��B�)?�@��R��b�!�Q��
#�R��b�"�a��%<�=��R��b�!�Q��B�
'��D�"�b�!�R�)@�A�	
�R��b�!�Q���
*�B�t�R��A�r��,J�K��R��b�!�Q��B�Q�
/��D�"�a��B�Q�1O�P��R��b�!�Q���
+�R��b�"�a��-D�E��R��b�!�Q��B�Q�
/��D�"�b�!�R�1H�I��R��b�!�Q��
"�B�t�R��Q��$;�<��R��b�!�Q��
#�R��b�"�a��%<�=�
���
rpc��^^�[RnUU4Sjn[RRTRSSSSS9mU"U"SSSS	S
S
5U"SSSSS55 U"U"SSS
SS5U"SSSSS55 U"U"SSS
SS5U"SSSSS55 U"U"SSSS	S
S
5U"SSSSS55 U"U"SSSSS5U"SSSSS55 U"U"SSSSS5U"SSSSS55 U"U"SSSS	S
S
5U"SSSSS55 U"U"SSSSS5U"SSSSS55 U"U"SSSSS5U"SSSSS55 U"U"SSSS	S
S
5U"SSSSS55 U"U"SSSSS5U"SSSSS55 U"U"SSSSS5U"SSSSS55 TR5 [RRTRSSSS[R"SSS5S9mU"U"SSSSS
S
5U"SSSSS55 U"U"SSSSS5U"SSSSS55 U"U"SSSSS5U"SSSSS55 U"U"SSSSS
S
5U"SSSSS55 U"U"SSSSS5U"SSSSS55 U"U"SSSSS5U"SSSSS55 U"U"SSSSS
S
5U"SSSSS55 U"U"SSSSS5U"SSSSS55 U"U"SSSSS5U"SSSSS55 U"U"SSSSS
S
5U"SSSSS55 U"U"SSSSS5U"SSSSS55 U"U"SSSSS5U"SSSSS55 TR5 g)Nc��>�TRUR55nX!R5-
nU(a&TRUS[R"US95 ggro
rp
rq
s    ��rKrG�XTimedRotatingFileHandlerTest.test_compute_rollover_MIDNIGHT_local_interval.<locals>.testOru
rprjr$
Frp�rlr%
r�rE
rw
r�r�	rx
rurr�r=
rrr�ri	r�r�r�r�r%r(�rlr%
r�rE
r&
r}
r~
s`  @rK�-test_compute_rollover_MIDNIGHT_local_interval�JTimedRotatingFileHandlerTest.test_compute_rollover_MIDNIGHT_local_intervalKs����
�
��	L��
�
�
6�
6��G�G�g�J�E�A�7�O��	
�R��a��B��B�
'��D�!�R��A�)>�?��R��a��A�q�
!�2�d�A�r�1�a�#8�9��R��a��A�q�
!�2�d�A�r�1�a�#8�9��R��a��R��R�
(�"�T�1�b�!�Q�*?�@��R��a��Q��
"�B�t�Q��A�q�$9�:��R��a��Q��
"�B�t�Q��A�q�$9�:��R��b�!�R��R�
(�"�T�2�q�!�Q�*?�@��R��b�!�Q��
"�B�t�R��A�q�$9�:��R��b�!�Q��
"�B�t�R��A�q�$9�:��R��b�!�R��R�
(�"�T�2�q�!�Q�*?�@��R��b�!�Q��
"�B�t�R��A�q�$9�:��R��b�!�Q��
"�B�t�R��A�q�$9�:�
���
�
�
�
�
6�
6��G�G�g�J�E�A��=�=��Q��*�7�,��	
�R��a��B��B�
'��D�!�R��Q�)?�@��R��a��B��
"�B�t�Q��B��$:�;��R��a��B��
"�B�t�Q��B��$:�;��R��a��R��R�
(�"�T�1�b�"�a�*@�A��R��a��R��
#�R��a��R��%;�<��R��a��R��
#�R��a��R��%;�<��R��b�!�R��R�
(�"�T�2�q�"�a�*@�A��R��b�!�R��
#�R��b�!�R��%;�<��R��b�!�R��
#�R��b�!�R��%;�<��R��b�!�R��R�
(�"�T�2�q�"�a�*@�A��R��b�!�R��
#�R��b�!�R��%;�<��R��b�!�R��
#�R��b�!�R��%;�<�
���
rpc�4
^^�[RnUU4Sjn[RRTRSSSSS9mU"U"SSS	S
SS5U"SSSS
S
55 U"U"SSSS
S
5U"SSSS
S
55 U"U"SSSSS
5U"SSSS
S
55 U"U"SSSS
SS5U"SSS	S
S
55 U"U"SSSS
S
5U"SSSS
S
55 U"U"SSSSS
5U"SSSS
S
55 U"U"SSSS
SS5U"SSSS
S
55 U"U"SSSS
S
5U"SSSS
S
55 U"U"SSSSS
5U"SSSS
S
55 U"U"SSSS
SS5U"SSSS
S
55 U"U"SSSS
S
5U"SSS	S
S
55 U"U"SSSSS
5U"SSS	S
S
55 TR5 [RRTRSSSS[R"S
S
S
5S9mU"U"SSSS
SS5U"SSSS
S
55 U"U"SSSS
S
5U"SSSS
S
55 U"U"SSSSS
5U"SSSS
S
55 U"U"SSSS
SS5U"SSSS
S
55 U"U"SSSS
S
5U"SSSS
S
55 U"U"SSSSS
5U"SSSS
S
55 U"U"SSSS
SS5U"SSSS
S
55 U"U"SSSS
S
5U"SSSS
S
55 U"U"SSSSS
5U"SSSS
S
55 U"U"SSSS
SS5U"SSSS
S
55 U"U"SSSS
S
5U"SSSS
S
55 U"U"SSSSS
5U"SSSS
S
55 TR5 [RRTRSSSS[R"SS
S
5S9mU"U"SSSSSS5U"SSSSS
55 U"U"SSS	SS
5U"SSSSS
55 U"U"SSS	SS
5U"SSSSS
55 U"U"SSSSSS5U"SSSSS
55 U"U"SSSSS
5U"SSSSS
55 U"U"SSSSS
5U"SSSSS
55 U"U"SSSSSS5U"SSSSS
55 U"U"SSSSS
5U"SSSSS
55 U"U"SSSSS
5U"SSSSS
55 U"U"SSSSSS5U"SSSSS
55 U"U"SSSSS
5U"SSSSS
55 U"U"SSSSS
5U"SSSSS
55 TR5 g)Nc��>�TRUR55nX!R5-
nU(a&TRUS[R"US95 ggro
rp
rq
s    ��rKrG�RTimedRotatingFileHandlerTest.test_compute_rollover_W6_local_interval.<locals>.test�ru
rprjr�
Frpr�
rw
r�rtr�	rx
r�rr�r=
rrr��r�r�r|
rsrur�
r�
�r�
r�ri	r}
r~
s`  @rK�'test_compute_rollover_W6_local_interval�DTimedRotatingFileHandlerTest.test_compute_rollover_W6_local_interval~s����
�
��	L��
�
�
6�
6��G�G�g�D�e�a�7�I��	
�R��a��R��R�
(�"�T�1�a��A�*>�?��R��a��Q��
"�B�t�Q��A�q�$9�:��R��a��Q��
"�B�t�Q��A�q�$9�:��R��a��B��B�
'��D�!�R��A�)>�?��R��a��A�q�
!�2�d�A�r�1�a�#8�9��R��a��A�q�
!�2�d�A�r�1�a�#8�9��R��b�"�b�"�b�
)�2�d�B��A�q�+A�B��R��b�"�a��
#�R��b�!�Q��%:�;��R��b�"�a��
#�R��b�!�Q��%:�;��R��b�"�b�"�b�
)�2�d�B��A�q�+A�B��R��b�"�a��
#�R��b�"�a��%;�<��R��b�"�a��
#�R��b�"�a��%;�<�
���
�
�
�
�
6�
6��G�G�g�D�e�a��=�=��A�q�)�7�+��	
�R��a��R��R�
(�"�T�1�b�!�Q�*?�@��R��a��Q��
"�B�t�Q��A�q�$9�:��R��a��Q��
"�B�t�Q��A�q�$9�:��R��a��R��R�
(�"�T�1�b�!�Q�*?�@��R��a��Q��
"�B�t�Q��1�a�$8�9��R��a��Q��
"�B�t�Q��1�a�$8�9��R��b�"�b�"�b�
)�2�d�B��1�a�+@�A��R��b�"�a��
#�R��b�"�a��%;�<��R��b�"�a��
#�R��b�"�a��%;�<��R��b�!�R��R�
(�"�T�2�r�1�a�*@�A��R��b�!�Q��
"�B�t�R��Q��$:�;��R��b�!�Q��
"�B�t�R��Q��$:�;�
���
�
�
�
�
6�
6��G�G�g�D�e�a��=�=��Q��*�7�,��	
�R��a��R��R�
(�"�T�1�a��Q�*?�@��R��a��R��
#�R��a��R��%;�<��R��a��R��
#�R��a��R��%;�<��R��a��B��B�
'��D�!�R��Q�)?�@��R��a��B��
"�B�t�Q��B��$:�;��R��a��B��
"�B�t�Q��B��$:�;��R��b�"�b�"�b�
)�2�d�B��B��+B�C��R��b�"�b�!�
$�b��r�1�b�!�&<�=��R��b�"�b�!�
$�b��r�1�b�!�&<�=��R��b�"�b�"�b�
)�2�d�B��B��+B�C��R��b�"�b�!�
$�b��r�2�r�1�&=�>��R��b�"�b�!�
$�b��r�2�r�1�&=�>�
���
rpr~Nr
)rxryrzr{r�r�rr
r�	r
r0
r3
r8
rB
rL
rc
rk
�run_with_tzr�
r�
r�
r�
r}r~rprKr
r
&s���
�_�_�W�_�_�&E�F��G��((�T)5�V4�B�%�P4�l?L�B&2�T
���3�4�k�5�k�^
���3�4�y�5�y�z
���3�4�.�5�.�d
���3�4�B�5�Brpr
c�X�[R"S0UD6[R"SS9-$)Nrrr
r~)r�r
)r�s rKr
r
�s&�����#��#�x�'9�'9�!�'D�D�Drp)r
rr)�Mr�)�Hi)�Dr<
)r$
r<
�W0r��)r(
�hours)rrrpc	���[RRURSXSSS9nSnUR	U5nURS5(aU[
SUS-
-S	9-
nOX2-nX6:wGa4US
:XGa-UR(a[R"U5nO[R"U5nUSnUSn	US
n
[RRUS-U	-S-U
--
nX[-n[SU<SUR<S3[RS9 [SU-[RS9 [SU	-[RS9 [SU
-[RS9 [SU-[RS9 [SU-[RS9 UR!X65 UR#5 g![a%n
[SU
-[RS9 Sn
A
NLSn
A
ff=f)NrjrT)rlr%
rE
r�	r�rr#
r(rrr'
r$
rpr�r�r�zt: z (�)r
zcurrentHour: %szcurrentMinute: %szcurrentSecond: %szr: %sz
result: %sz exception in diagnostic code: %s)r!rCr�rWr@
rOr
r�r�r�	localtime�	_MIDNIGHTr�rtrr�r_rO)rGr%
rE
�expr�	rA
rjr-�currentHour�
currentMinute�
currentSecondr�rMrfs              rK�test_compute_rolloverr�
�s����!�!�:�:����'��UV�\`�;�b�B��K��'�'��4�F����s�#�#��t��H�Q�J��0�0������}��:�%�W��6�6� $���K� 8�A� $���{� ;�A�&'��d��()�!��
�()�!��
�#�,�,�6�6�;��;K�8E�<F�IK�;L� -�;.�/��"-����a����8�s�z�z�J��/�+�=�C�J�J�O��1�M�A��
�
�S��1�M�A��
�
�S��g��k��
�
�;��l�V�3�#�*�*�E�
���S�)��H�H�J��%�W��@�1�D�3�:�:�V��W�s�:D,G�
G7�G2�2G7ztest_compute_rollover_%s�	_intervalz>win32evtlog/win32evtlogutil/pywintypes required for this test.c��\rSrSrSrSrg)�NTEventLogHandlerTesti�c��Sn[R"SU5n[R"U5n[RRS5n[R"SS05nURU5 UR5 URU[R"U55 [R[R -nSnSn	[R""X'U	5n
U
H5nUR$S:waM[&R("XQ5nUS	:waM3S
n O SU	-nUR+X�S9 g![Ra,nURS:Xa[R"S5eeSnAff=f)
N�Application�test_loggingr�z#Insufficient privileges to run testrzTest Log MessageFr�zTest Log Message
Tz3Record not found in event log, went back %d recordsr�	)�win32evtlog�OpenEventLog�GetNumberOfEventLogRecordsr!rC�NTEventLogHandler�
pywintypesr��winerrorr��SkipTestr�rzrO�
assertLess�EVENTLOG_BACKWARDS_READ�EVENTLOG_SEQUENTIAL_READ�ReadEventLog�
SourceName�win32evtlogutil�SafeFormatMessagerF)rG�logtype�elh�num_recsrVrfr��flagsr
r
�eventsrs            rKr�� NTEventLogHandlerTest.test_basic�sN�����&�&�t�W�5���9�9�#�>��	�� � �2�2�>�B�A�
�!�!�5�*<�"=�>��	�����	���	�����+�"H�"H��"M�N��3�3��4�4�5�������)�)�#�g�>���A��|�|�~�-��!�3�3�A�?�C��,�,���E���D�g�M�������'��1���	��z�z�Q���'�'�(M�N�N���	�s�D;�;E;�'E6�6E;r~N)rxryrzr{r�r}r~rprKr�
r�
�s��(rpr�
c��\rSrSrSrSrg)�MiscTestCasei c�@�1Skn[R"U[US9 g)N>rCr��Filtererr��
RootLoggerr9�PlaceHolderr`�currentframer:�StrFormatStyler;r rP)�not_exported)r�check__all__r!)rGr�
s  rK�test__all__�MiscTestCase.test__all__!s��,��
	���T�7��Frpr~N)rxryrzr{r�
r}r~rprKr�
r�
 s��Grpr�
c�Z�[R"[R"SS55 g)N�LC_ALLr)r��enterModuleContextr�run_with_localer~rprK�setUpModuler�
-s������ 7� 7��"� E�Frp�__main__rr
)�r|r!�logging.handlers�logging.configr5rr�	r'r�rf
r�r7r�r!r6rSrlr�rZrZ
rr�rtrQ�test.support.script_helperrrrGr�test.supportrrrr	r
rr�test.support.logging_helperr
�test.support.testcaserr�r�rIr�r�rFr��http.serverrr�
unittest.mockr�urllib.parserr�socketserverrrrrr�
r�
r�
rr�	r��HAVE_ASAN_FORK_BUGr��check_sanitizerr��TestCaserr�r��SILENTr
�TERSE�EFFUSIVEr	r>�	TALKATIVEr�
CHATTERBOX�BORINGr�rrr�r�rr
rXrZrqr�r<r�r�r�rrr<rIrkr|r�r�r�rr�r�r�r>r�r�r�r{r r�r�r�r�r��IPV6_ENABLEDr�r�rr,r>rWrYr_rarCr�rermrgrirvr|r~r�r�r�r$r<r!rUrWrjr�r�r
r��tzinfor�r�r�r�rEr5r@rMrUr^rSrQrqr�rrVr�r�r�r;	r	rE	r�	r�	r�	r
r
r%
r�
rE
r�
rIrxr`r�
r�
r�
�mainr~rprK�<module>r�
s���"����
������
�	��	��	��
�	�
�
�
�
��N��&�"�&�)�(�!��3�1��������:��+�D�D�6�3�3�	���O�O����E�G���O�O����4�(�-�/��
d'�x� � �d'�NUI��UI�n<%�h�<%�L�������������	��	��
����F�F�Q�J�'���(��*�	�'��*��*��)�
�+�
�+��,�
�(���+�g�n�n�+�:����:�C'��C'�L�K2�(�K2�\1��1�#��-�-�#�
��
�'@��'@�XG;�U�%�%�G;�T0�6�0�d'�\�:�'�R1�L�"4�1�>-�L�"4�-�^�6�9���(�}�(�(��(�
	� � �"��,�,�.��h��/�#��@C5��C5�L-��*�*�-�
�a�X�a�H	� � �"��,�,�.�W+��W+�/�#�W+�t
���W�V�Y�/�1H�I�&�-�&�J�&�	� � �"��,�,�.�>:�(�>:�/�#�>:�@
���W�V�Y�/�1H�I�(�1�(�J�(�	� � �"��,�,�.�IB��IB�/�#�IB�V
���W�V�Y�/�1H�I�&�-�&�J�&�
���]�/�/�;�=�
6�-�
6�=�
6�	� � �"��,�,�.�L �h�L �/�#�L �\1��1�h-L�8�-L�`%K�8�%K�P.�
�
�#�	�G�)�)�	�	�W�%�%�3�3�	�	�%�+�+�	�)�)�	
�1�	
��2������_?�X�_?�D79�(�9�.&�h�&�>	�w�(�(�	� �8� �F�,�,�.�pP�x�pP�/�pP�d�7���_�-�-��#���0�0�2�]&�H�]&�3��]&�@���!����(�/�/��
�e��.�.�`S�H�%�%�'9�`S�F&�W�7�7�&�G�X�.�.�G�&A�H�A�,$;�X�$;�N	�	�$�w�*�*�$�T/�8�T/�nx/�(�x/�vK0�H�K0�\Y#�h�'�'�Y#�x
c-��)�)�?�c-�L.�G�)�)�.�+�+�5�7�(�(�5�`>��-�`>�FH�8�H�25�l�5�,t�l�t�l[
�<�[
�|E��� �%�,���1�B�/�0�
�I�D�#���-1�H�#�$	�J*�D�0���a�<��K��D�)-��&��,�d�4I�J�U��j
���[�"b�c� (�H� (�d� (�FG�8�$�$�G�G��z���M�M�O���S_�6�15�5�K�5�/�J�6��
�	��	�s$�"^(�/^;�(^8�7^8�;_�_

Youez - 2016 - github.com/yon3zu
LinuXploit