403Webshell
Server IP : 121.121.20.254  /  Your IP : 216.73.216.145
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 :  C:/Python315/Lib/test/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : C:/Python315/Lib/test/__pycache__/test_logging.cpython-315.pyc
R
>lqj�Jc���Qs]PHs]PHs]PHs]PHs]PHs]PHs]PHs]PH s]PH$s	]PH(s
]PH,s]PH0s]PH4s
]PH8s]PH<s]PH@s]PHDs]PHHs]PHLs]PHPs]PHTs]PHXs]PH\s]QH`GsGs]QHlGs]QHtGs]QHtGs]QHtG s ]QHtG!s!]QHtG"s"]QHtG#s#]Q	HtG$s$]Q
H�G&s&]PH�s']PH�s(]PH�s)]PH�s*]PH�s+]PH�s,]PH�s-]QH�G/s/G0s0]QH�G2s2G3s3G4s4]Q
H�G6s6G7s7]QH�G9s9G:s:G;s;G<s<]PH�s=]PH�s>]PH�s?]PCHsA\+O�\O�Q2sD\+O�\O�P	Q5Q2sFQQ\+O�2sHQQ\H2sIQQ\H2sJ]xsK]wsL]vsM]usN]tsO]ssP]rsQ]qsR]psS]osT\U\T\K]*2sV\KQ\LQ\MQ\NQ\OQ\PQ\QQ\RQ\SQ \TQ!-
sWQ"Q#\O�2sYQ$Q%\O�2sZQ&Q'\H2s[Q(s\Q)Q*\H2s]Q+Q,\^2s_Q-Q.\O�2saQ/Q0\^2sbQ1Q2\H2scQ3Q4\$O�2seQ5Q6\^2sfQ7Q8\f\/2sgQ9Q:\f\;2shQ;Q<\f\92si\j\Q=2%cQ>Q?\h2skQ@QA\i2sl\O�2\!O�2QBQC\H222soQDQE\H2spQFQG\O�2srQHssQIQJ\H2st\O�2\!O�2QKQL\H222su\+O�\j\Q=2QM2QNQO\u22sw\O�2\!O�2QPQQ\H222sx\+O�\j\Q=2QM2QRQS\x22sy\O�2\!O�2QTQU\H222sz\+O�\j\Q=2QM2QVQW\z22s{\+O�\ O�QX2QYQZ\z22s}\O�2\!O�2Q[Q\\H222s~Q]Q^\H2sQ_Q`\H2s�QaQb\H2s�Q�Qcks�QdQe2s�Qfs�QgQh\O�2s�QiQj\COCO2s�QkQl\CO2s�QmQn2s�QoQp\�2s�QqQr\�2s�QsQt2s�Qus�Q�Qvks�QwQx\H2s�QyQz\H2s�Q{Q|\H2s�Q}Q~\CO(2s�QQ�\H2s�\!O�2Q�Q�\H22s�\j\COQ�2%c0]PCH`s�]Q�H�G4s4\F\!O�2Q�Q�\H222s�\CO4]2s�Q�Q�\CO82s�\�2s�Q�Q�2s�Q�Q�\+O�\�2s�Q�Q�\COB2s�Q�Q�\+O�2s�Q�Q�\H2s�Q�Q�\H2s�Q�Q�2s�Q�Q�\CON2s�Q�Q�\H2s�Q�Q�\H2s�Q�Q�\H2s�Q�Q�\+O�2s�Q�Q�\+O�2s�Q�Q�\CO\2s�Q�Q�2s�Q�Q�\CO\2s�Q�Q�\H\�2s�Q�Q�\H2s�Q�Q�\�2s�Q�Q�\�2s�Q�Q�\�2s�Q�s�Q�Q�Q�Q�Q�Q�\�]]Q�511FDBvs�s�Q�FD5s�\�\�\�1Q�ks�Q�\�*s�\�]6�c
\�Q�*
s�\�\�m�\�\�\�\�2J7	JD	Q�Q�\H2s�Q�Q�\+O�2s�Q�Q�\+O�2s�Q�s�\�Q�6Xc\+CO�2P!P!\@cP9s=9s>s?CK�h9h\@cCK�h9h)�zoTest harness for the logging module. Run all tests.

Copyright (C) 2001-2022 Vinay Sajip. All Rights Reserved.
)�assert_python_ok�assert_python_failure)�support)�
import_helper)�	os_helper)�
socket_helper)�threading_helper)�warnings_helper)�asyncore)�smtpd)�TestHandler)�
HTTPServer�BaseHTTPRequestHandler)�call�Mock�patch)�urlparse�parse_qs)�ThreadingUDPServer�DatagramRequestHandler�ThreadingTCPServer�StreamRequestHandlerz?libasan has a pthread_create() dead lock related to thread+fork)�threadz'TSAN doesn't support threads after forkc�N`�\sQs][snQsQsQs]sQsQs	Q	Qks
QsQsUs
P!)
�BaseTestzBase class for logging tests.z&%(name)s -> %(levelname)s: %(message)sz^([\w.]+) -> (\w+): (\d+)$c	�>�[O2Um[O2O
Oo[O9^tt^2[OO2Um
[OQ*UmUO29Um
o[OO2Um[O O2Um-9UmoSFDo['V$*QP2V4$J	PPP2[OQ2Um[OQ2Um[OP2UmUO,O/2Um[2O42UmUO,O9[O:2[O<UO62Um[O@UOB2Um"UO>OGUOD2UO(OI2%cDUO(OJUO,OJ*o[MQU*2gUO*OI2%cDUO*OJUO,OJ*o[MQU*2gUO,OOUO>2UOQUO(OI22UOQUO*OI22P!)%fhCKr9h)zpSetup the default logging stream to an internal StringIO instance,
so that we can examine log output as we want.�NNN�disabledu«×»uĿÖGzUnexpected 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)r.�name�hlists&     �&C:\Python315\\Lib\test\test_logging.py�setUp�BaseTest.setUpcsq��/�>�>�@����'�'�)�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�CN�N	�N	c��UOO2UOOUO2UOO
%cKUOO
]*oUOOU2UO2JfUOO
UO2[O9^tt^2[OO2[OOUO2[OO2[OOUO2[O O2[O OUO"2UO$[O&Q$[O(2O*o]UmUO.oUO2UOUO02UO2oUO2FD-oVE*eJVE*UO0U*mJ/	PPP2UO72[8O:UO<P!)%fhKA9h)zBRemove our logging stream, and restore the original logging
level.r)r7�closer2�
removeHandlerr;rAr8r4rr#r,�clear�updater-r*r+r$r&r(r'r r!�disabler"r)r.r�
doCleanupsr�threading_cleanupr)rE�hr!r"r.rGs&     rI�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�$E3J7�"J7�7K	�K	c�N�S9%f
UOo[OS9%f
UO2oUO	2O2oUO
[U2[U22[VA2FD_vqVUOU2oU%fUOQU*2UO
[UO22U2Ja	UO2oU%cUOQU*2P!P!)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:
)r7�re�compile�expected_log_pat�getvalue�
splitlines�assertEqual�len�zip�search�fail�tuple�groups�read)	rE�expected_valuesr7�pat�actual_lines�actual�expected�match�ss	&&&&     rI�assert_log_lines�BaseTest.assert_log_lines�s����&�&�4�;�;���j�j��5�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�\�U9O]*
tmQUO*!)zEGenerate a message consisting solely of an auto-incrementing
integer.z%d)�message_num�rEs&rI�next_message�BaseTest.next_message�s&��	
���A����d�&�&�&�&rn)rr0r1r.r4r>r;r2r(r&r-r)r+r7�NN)�__name__�
__module__�__qualname__�__firstlineno__�__doc__r=rZrprJrUrlrr�__static_attributes__�__classdictcell__��
__classdict__s@rIrr[s4����'�9�J�4���K�%4�NA�>F�$'�'rnrc�P`�\sQs]�snQsQsQsQsQsQs	Qs
QsQ	sUs
P!)
�BuiltinLevelsTestz*Test builtin levels and their inheritance.c��UOo[OQ2oUO[O2[O
[OQ2-2oUO[O2[OQ2oUO[O2UO[OU22UOU22UO[OU22UOU22UOU22UOU22UO[OU22UOU22UOU22UOU22UOU22UOU22UOU22UOU22UOU22UO,QN2P!)�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�r9�11)rrrr r8r��
LoggerAdapterr�r9�logr��error�warning�info�debugrl)rE�mr�r�r�s&    rI�	test_flat�BuiltinLevelsTest.test_flat�sr����������&�����W�]�]�#��#�#�G�$5�$5�e�$<�b�A�����W�\�\�"�����&�����W�]�]�#�	���� � �!�#�&��	�	�!�#������ � �!�#�&��	�	�!�#�����A�C�������
����� � �!�#�&��	�	�!�#�����A�C�������
��	�	�!�#��	���A�C�������
��	�	�!�#���	�	�!�#�����
�	rnc��UOo[OQ2oUO[O2[OQ2oUO[O
2UO
[OU22UOU22UOU22UOU22UOU22UOQQ,2P!)r��INF.ERR)r�r�r�)r�r�r��
rrrr r8r�r�r�r�r�r�r�r�rl)rEr�r��INF_ERRs&   rI�test_nested_explicit�&BuiltinLevelsTest.test_nested_explicit�s�����������&�����W�\�\�"��$�$�Y�/��������'�	���G�$�$�a�c�*��
�
�a�c��	���������Q�S���
�
�a�c�����(�%�
�	rnc��UOo[OQ2oUO[O2[OQ2oUO[O
2[OQ2o[OQ2o[OQ2oUO
[OU22UOU22UOU22UOU22UO
[OU22UOU22UOU22UOU22UOU22UOU22UO,QN2P!)r�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�)rEr�r�r��	INF_UNDEF�
INF_ERR_UNDEFr�s&      rI�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� ����
�	rnc�L�UOo[OQ2o[OQ2o[OQ2oUO[O2UO[OU22UOU22UO[OU22UOU22UOU22UOU22UO,QN2P!)r��INF.BADPARENT.UNDEF�
INF.BADPARENT))r�r�r�)r�r�r�)r�r�r�)r�r�r�)
rrrr r8r�r��FATALr�r�rl)rEr�r��
GRANDCHILD�CHILDs&    rI�test_nested_with_virtual_parent�1BuiltinLevelsTest.test_nested_with_virtual_parent.s�����������&���&�&�'<�=�
��!�!�/�2�����W�\�\�"�	���w�}�}�a�c�*�������
�	�	�'�-�-���%�
�
�
�1�3��	������
���A�C�����
�	rnc���UO[OQ2[O2UO[O[O2Q2P!)z&See issue #22386 for more information.r�)r]r�getLevelNamer�rqs&rI�test_regression_22386�'BuiltinLevelsTest.test_regression_22386Hs@������-�-�f�5�w�|�|�D�����-�-�g�l�l�;�V�Drnc�t�[OQ2oUOU[O2P!)r�)rr�r]r�)rE�fatals& rI�test_issue27935�!BuiltinLevelsTest.test_issue27935Ms&���$�$�W�-�������
�
�.rnc���[O[OP2UO[O[OQ2UO	[O
[O2P2UO	[O
[O2Q2UO	[O
Q2[O2P!)z&See issue #29220 for more information.r��NOTSET)r�addLevelNamer��
addCleanupr]r�r�rqs&rI�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����Hrn�)rurvrwrxryr�r�r�r�r�r�r�rzr{r|s@rIrr�s5����4�-�^�.!�F�4E�
/�I�Irnrc�J`�\sQsQsnQsQsQsQsQsQs	Qs
Q	sUsP!)
�BasicFilterTest�YzTest the bundled Filter class.c��[OQ2oUOO]*oUO	U2[O
Q2o[O
Q2o[O
Q2o[O
Q2oUO
UO22UO
UO22UO
UO22UO
UO22UOQQ,2UOU2P!SOS2h9h)�	spam.eggs�spam�spam.eggs.fish�spam.bakedbeans�r�r�r��r�r�r�)
r�Filterr2rA�	addFilterr r�rrrl�removeFilter)rE�filter_�handlerr��	spam_eggs�spam_eggs_fish�spam_bakedbeanss&      rI�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�C8E�Ec��QoUOO]*oUOU2[OQ2o[OQ2o[OQ2o[OQ2oUOUO
22UOUO
22UOUO
22UOUO
22UOQQ,2UOU2P!SOS2h9h)c�t�UOOQ2oQOUQ*2oUQ6H!)�.:N�Nr�)rG�split�join)�record�parts�prefixs&  rI�
filterfunc�8BasicFilterTest.test_callable_filter.<locals>.filterfuncys3���K�K�%�%�c�*�E��X�X�e�B�i�(�F��[�(�(rnr�r�r�r�r�r�)	r2rAr�rr r�rrrlr�)rEr�r�r�r�r�r�s&      rI�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.�.Ec��[O2o[OQQ-2oUOUO	U22P!)rGr�)rr��
makeLogRecordrD�filter)rE�f�rs&  rI�test_empty_filter�!BasicFilterTest.test_empty_filter�s7���N�N����!�!�6�;�"7�8����������$rnc�j�[OQ2oUO[U2Q2P!)�myappz<Filter (myapp)>�rr�r]�repr�rEr�s& rI�test_filter_repr� BasicFilterTest.test_filter_repr�s%���N�N�7�#������a��"4�5rnc�h�[O2oUO[U2Q2P!)z<Filter ()>r�r�s& rI�test_filter_repr_empty�&BasicFilterTest.test_filter_repr_empty�s"���N�N�������a��-�0rnc��QQ[O2oUQ2oUO[U2Q2P!)c��\sQsQsQsP!)�;BasicFilterTest.test_filter_repr_subclass.<locals>.MyFilter�r��rurvrwrxrzr�rnrI�MyFilterr�����rnr�r�z<MyFilter (myapp)>r�)rEr�r�s&  rI�test_filter_repr_subclass�)BasicFilterTest.test_filter_repr_subclass�s1��	�w�~�~�	��W�������a��"6�7rnr�)
rurvrwrxryr�r�r�r�r�r�rzr{r|s@rIr�r�Ys+����(�*�0-�:%�
6�1�8�8rnr��Silent�Taciturn�Terse�Effusive�Sociable�Verbose�	Talkative�	Garrulous�
Chatterbox�Boringc�,`�\sQsQsnQsQsQsUsP!)�GarrulousFilter��z)A filter which blocks garrulous messages.c�*�UO[6g!�N)�levelno�	GARRULOUS�rEr�s&&rIr��GarrulousFilter.filter�s���~�~��*�*rnr��rurvrwrxryr�rzr{r|s@rIrr�s����3�+�+rnrc�,`�\sQsQsnQsQsQsUsP!)�VerySpecificFilter��z5A filter which blocks sociable and taciturn messages.c�6�UO[[17!r
)r�SOCIABLE�TACITURNr
s&&rIr��VerySpecificFilter.filter�s���~�~�h��%9�9�9rnr�rr|s@rIrr�s����?�:�:rnrc�T`�\sQsQsnQsQsQsQsQsQs	Qs
Q	sQ
sQs
UsP!)�CustomLevelsAndFiltersTest��z@Test various filtering possibilities with custom logging levels.�^[\w.]+ -> (\w+): (\d+)$c��[OU2[O2FDvq[O
V2J	P!r
)rrJ�my_logging_levels�itemsrr�)rE�k�vs&  rIrJ� CustomLevelsAndFiltersTest.setUp�s1�����t��%�+�+�-�D�A�� � ��&�.rnc�b�[FD"oUOV O22J$	P!r
)�LEVEL_RANGEr�rr)rE�logger�lvls&& rI�log_at_all_levels�,CustomLevelsAndFiltersTest.log_at_all_levels�s#���;�C��J�J�s�-�-�/�0�rnc�`�QQko[OQ2o[OQ2o[O2o[O2o[OU2o[OU2oUOU2UO
U2UO
U2UOQ2UO2UO2UOUO2Q2UOUO2Q2P!)c�:�U]6�cPgQ[O-!�r�r��r�	LogRecord)�formats"rI�__annotate__�dCustomLevelsAndFiltersTest.test_handler_filter_replaces_record.<locals>.replace_message.__annotate__�s��	�	�G�$5�$5�	rnc�B�[OU2oQUmU!)znew message!)r%�msg)r�s&rI�replace_message�WCustomLevelsAndFiltersTest.test_handler_filter_replaces_record.<locals>.replace_message�s���Y�Y�v�&�F�'�F�J��Mrn�parentzparent.childzoriginal messagezoriginal message
z
new message!
)rr r5r6r:r�rCr��flushr]r[)rEr1r3�child�stream_1�stream_2�	handler_1�	handler_2s&       rI�#test_handler_filter_replaces_record�>CustomLevelsAndFiltersTest.test_handler_filter_replaces_record�s���	��"�"�8�,���!�!�.�1���;�;�=���;�;�=���)�)�(�3�	��)�)�(�3�	����O�,����)�$�
����#�
�
�
�%�&�������������*�*�,�.B�C�����*�*�,�.>�?rnc�p`�[2nU1QkQ[O2o[OQ2oUO	[O
2UO
U22UO
U22UOQ2UO][R22P!)c�<:`�\sQsQsnU1QkU1QkksQsUsP!)�WCustomLevelsAndFiltersTest.test_logging_filter_replaces_record.<locals>.RecordingFilter�	c�6:�U]6�cPgQRZO-!r)r*)r,r}s"�rIr-�kCustomLevelsAndFiltersTest.test_logging_filter_replaces_record.<locals>.RecordingFilter.filter.__annotate__
s���
)�
)�W�%6�%6�
)rnc�f:�RO[U22[OU2!r
)�add�idr%)rEr��recordss&&�rIr��^CustomLevelsAndFiltersTest.test_logging_filter_replaces_record.<locals>.RecordingFilter.filter
s"������B�v�J�'��y�y��(�(rnr��rurvrwrxr�rzr{)r}rEs@�rI�RecordingFilterr>	s����
)�
)�
)rnrHr#r0)
�setrr�r r8r�r�r�r]r^)rErHr#rEs&  @rI�#test_logging_filter_replaces_record�>CustomLevelsAndFiltersTest.test_logging_filter_replaces_records~����%��	)�g�n�n�	)�
�"�"�8�,��������%�����*�+�����*�+����E������C��L�)rnc��UOO[2UOUO2UO	,QN2P!)r)�rr��rr��r�r��r�r��r�r��r�r�)r2r8�VERBOSEr%rlrqs&rI�test_logger_filter�-CustomLevelsAndFiltersTest.test_logger_filters=�����!�!�'�*����t�/�/�0����
�	rnc��UOO]*O[2UO	UO2UO,QN2UOO]*O[O2P!SOO]*O[O2h9h)�)rNrOrPrQrR)r2rAr8rr%rlrr�rqs&rI�test_handler_filter�.CustomLevelsAndFiltersTest.test_handler_filter%s������!�!�!�$�-�-�h�7�	B��"�"�4�#3�#3�4��!�!�#�
�
���%�%�a�(�1�1�'�.�.�A��D���%�%�a�(�1�1�'�.�.�A�s�.B�<Cc�l�UOO]*oPo[2oUOU2UO	UO2,QNoUOU2[
2oUOOU2UO	UO2UOU,QN*2U%cUOOU2UOU2P!S%cSOOS2SOS2h9h)rW)	)rr�)rr�)rr�rMrNrOrPrQrR))rr�)r�12)r�14)r�15)r��17)r��18)r��20)r2rArr�r%rlrr�)rEr��specific_filter�garr�first_liness&    rI�test_specific_filters�0CustomLevelsAndFiltersTest.test_specific_filters5s����"�"�+�+�A�.����� �����$��!	'��"�"�4�#3�#3�4��K�
�!�!�+�.�0�2�O����&�&��7��"�"�4�#3�#3�4��!�!�+�
1
�
#
�

��� � �-�-�o�>�� � ��&���� � �-�-�o�>�� � ��&�s�B
C=�=D3�-D3r�)rurvrwrxryrZrJr%r:rJrTrXrdrzr{r|s@rIrr�s:����J�3��'�
1�@�8*�"�B� ('�('rnrc�f�[OU-U@vq#[OU2U!r
)�tempfile�mkstemp�osrM)�args�kwargs�fd�fns*,  rI�make_temp_filern`s)��
�
�
�t�
.�v�
.�F�B��H�H�R�L�
�Irnc�j`�\sQsQsnQsQsQs\O\	OQ6HQ2\O2\
OQ2Q222s\O"2\
O$2\O2\\Q	22222sQ
sQsUsP!)�HandlerTest�fc��[O2oQUmUOUOQ2QUmUOUOQ2UO	[
UOP2P!)�generic�anothergeneric)r�HandlerrGr]�assertRaises�NotImplementedError�emit�rErTs& rI�	test_name�HandlerTest.test_namegs\���O�O�������������+�!���������!1�2����-�q�v�v�t�<rnc	��[OQ7Cc;QFCD�o[2oU%f[OU2[
OOUQP	Q5oU%c�UOUOqTUOUP2UOUP2[
OQQ-2oUOU2[OU2UO[OOU22UOU2UO![OOU22L8UOUOP2UOUOP2UO#2U%fCJ�[OU2CJ�	[OQ6XcQoLQo[
OO%U2oUOUO&UO(2UO!UO*2UO#2Q
FDnoUQ6Xc4UO/[0[
OO2Q	Q
U2J=[
OO3Q	Q
U2oUO#2Jp	[
OO5]2o[
O-2oUO!UO7U22UO#2[
OO5]2oUOUO7U22UO#2P![,cCK9h9h)�linux�darwin�utf-8��encoding�delayr0�Testz/var/run/syslogz/dev/log�PUT�	localhostz/log�r}�androidr~)TF)�GET�POSTr�)�sys�platformrnri�unlinkrrA�WatchedFileHandler�dev�inor]r��handle�assertFalse�path�existsrDrM�
SysLogHandler�facility�LOG_USER�
unixsocket�OSErrorrv�
ValueError�HTTPHandler�BufferingHandler�shouldFlush)	rE�existingrmrTr�r�r��sockname�methods	&        rI�test_builtin_handlers�!HandlerTest.test_builtin_handlersos|���<�<�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�"A0M=�=	N�N�Nc�Z�[2o[OU2[OU2o[
OUQ11[
OOUQ11[
OOUQ111o[OQ7c'U[
OOUQ111*
oSFDbvqEUUQQ-oUO[OOU22UO!2[OU2Jd	P!)z`
Test that path-like objects are accepted as filename arguments to handlers.

See Issue #27493.
�w�arTr�rr�)rnrir�r�FakePathr�FileHandlerrA�RotatingFileHandler�TimedRotatingFileHandlerr�r�r�rDr�r�rM)rErm�pfn�cases�clsrjrTs&      rI�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�	rn�ntz/WatchedFileHandler not appropriate for Windows.�walltimec�$`�U1QkoQoQoPRmPRmQ
FCDUo[QQ2o[OVU1Q5oP	UmUO
2[OOUQUQ5o[OQ2oUOU2[U2FD]o	[OQ2[OQ	Q
-2o
[O2RmUO!U
2J_	UO'2UO)2[*O,O/U2%c[*O0U2CJUCJX	P!["c*[%QRO8QRO802gh9hSO'2SO)2[*O,O/S2%c[*O0S2hh9h)c	�:�[U2FDfo[OU2[O2Rm[OQ[O]]2*2Jh	P![
cKEh9h)g����Mbp?)	�rangerir��time�
deletion_timer��sleep�random�randint)�fname�tries�_rEs&& �rI�remove_loop�*HandlerTest.test_race.<locals>.remove_loop�sb����5�\����I�I�e�$�)-����D�&��
�
�5�6�>�>�!�Q�#7�7�8�
"������s�0A;�;	B	�B	�B	���.logztest_logging-3-��targetrjrr�z'%(asctime)s: %(levelname)s: %(message)s�{�G�zt?r0�testingzDeleted at z, opened at �FT)�handle_timer�rn�	threading�Thread�daemon�startrrAr�r<r?r�r�r�r�r��	Exception�printr�rMrir�r�r�)rEr��	del_count�	log_countr�rm�removerrTr�r�r�sf          rI�	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�&�s1�(=F1�&+E:�F1�:	F.�*F.�.F1�1AH�7Hc�d```�QQ[O2oUO[[O2]2U2nUOROOO2QRm	UO[[O2]2UO[[O2]2[OQ2oUOR2UO[O2[ O"2n[ O"2nUUU1Qko[ O$UQQ5oUO'2RO)2[*O,2oU]6Xc+UO/Q2[*O0]2P!UO/Q	2RO32UO52[6O8U]Q
5P![*O0]2h9h)z>Ensure child logging locks are not held; bpo-6721 & bpo-36533.c�:``�\sQsQsnU1QksQsQsUsU9s!)�AHandlerTest.test_post_fork_child_no_deadlock.<locals>._OurHandler��c�v:�[RU_2[O[	QQQQ5Q5UmP!)z	/dev/null�wtr�r��r7)�super�__init__rr:�open�sub_handler�rE�	__class__s&�rIr��JHandlerTest.test_post_fork_child_no_deadlock.<locals>._OurHandler.__init__�s.����� �"�#*�#8�#8���T�G�D�$F�� rnc��UOO9^tt^2UOOU2PPP2P!)%fhP!9hr
)r��lockrxr
s&&rIrx�FHandlerTest.test_post_fork_child_no_deadlock.<locals>._OurHandler.emit�s7���%�%�*�*�*��$�$�)�)�&�1�+�*�*�*�s�A�A	�A	)r��	rurvrwrxr�rxrzr{�
__classcell__�r�r}s@@rI�_OurHandlerr��s����
F�

2�
2rnr�z*because we need at least one for this test� test_post_fork_child_no_deadlockc	�:�[O9^tt^2RO9^tt^2RO2RO	Q2PPP2PPP2P!)%fhK9h)%fhP!9h)��?)rr#r�rI�wait)�+fork_happened__release_locks_and_end_thread�locks_held__ready_to_fork�refed_hs���rI�lock_holder_thread_fn�KHandlerTest.test_post_fork_child_no_deadlock.<locals>.lock_holder_thread_fn
sE�����������)�-�-�/�<�@�@��E�!-���������s.�A7�"A$	�A7�$A4
�-A4
�/A7�7B	�B	z,test_post_fork_child_no_deadlock lock holder)r�rGz#Child process did not deadlock. \o/z&Parent process returned from fork. \o/)�exitcode)rrur]r^r$r�r�r7rMrG�
assertGreater�_at_fork_reinit_lock_weaksetr rCr8r9r��Eventr�r�r�ri�forkr��_exitrIr�r�wait_process)	rEr��test_loggerr��lock_holder_thread�pidr�r�r�s	&     @@@rIr��,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/c�P``�[OQ2n,nUU1QkQ[O2oU1QkQ[O2oROU22ROU22RO	Q2UORQQ,2P!)�"test_remove_handler_while_emittingc�2:`�\sQsQsnUU1QksQsUsP!)�GHandlerTest.test_remove_handler_while_emitting.<locals>.RemovingHandler�6c�N:�ROQ2ROU2P!)�removing)�appendrN)rEr��callsr#s&&��rIrx�LHandlerTest.test_remove_handler_while_emitting.<locals>.RemovingHandler.emit7s������Z�(��$�$�T�*rnr��rurvrwrxrxrzr{)r}rr#s@��rI�RemovingHandlerr�6s����
+�
+rnrc�0:`�\sQsQsnU1QksQsUsP!)�GHandlerTest.test_remove_handler_while_emitting.<locals>.CountingHandler�:c�,:�ROQ2P!)�counting�r)rEr�rs&&�rIrx�LHandlerTest.test_remove_handler_while_emitting.<locals>.CountingHandler.emit;s������Z�(rnr�r)r}rs@�rI�CountingHandlerr:s����
)�
)rnr
r�rr
)r�LoggerrurCr�r])rErr
rr#s&  @@rIr��.HandlerTest.test_remove_handler_while_emitting1s������� D�E����	+�	+�g�o�o�	+�	)�g�o�o�	)�	���/�+�,����/�+�,����V�������Z� 8�9rn)r�r�)rurvrwrxrzr�r��unittest�skipIfrirGr�requires_working_threadingr�requires_resourcer�r�*ignore_fork_in_thread_deprecation_warnings�
requires_fork�skip_if_asan_fork�skip_if_tsan_forkr�r�rzr{r|s@rIrprpfs�����=�3�j�,�_�_�R�W�W��_�&W�X��0�0�2����z�*�)"�+�3�Y�)"�^�?�?�A������0�0�2���>2���3��B�
>2�@:�:rnrpc�(`�\sQsQsnQsQsUsP!)�	BadStream�Cc��[Q2g)�deliberate mistake)�RuntimeError)rE�datas&&rI�write�BadStream.writeDs���/�0�0rnr�)rurvrwrxrrzr{r|s@rIrrCs����1�1rnrc�(`�\sQsQsnQsQsUsP!)�TestStreamHandler�Gc��VmP!r
��error_recordr
s&&rI�handleError�TestStreamHandler.handleErrorHs��"�rnr%)rurvrwrxr'rzr{r|s@rIr"r"Gs����#�#rnr"c�4�\sQsQs\O
s]sQsP!)�StreamWithIntName�Kr�)	rurvrwrxrr��levelrGrzr�rnrIr*r*Ks���N�N�E��Drnr*c�4`�\sQsQsnQsQsQsQsUsP!)�StreamHandlerTest�Oc��[[22o[O-2o[OoUOU2UO
UOU2[O[22o[O29^tt^2oUOU2QoUOVTO22PPP2P
[m[O29^tt^2oUOU2UOPUO22PPP2U[mP!)%fhK9h)%fhK09hS[mh9h)z"
RuntimeError: deliberate mistake
)r"rrr��raiseExceptionsr��assertIsr&r:r�captured_stderr�assertInr[r])rErTr��	old_raise�stderrr0s&     rI�test_error_handling�%StreamHandlerTest.test_error_handlingPs����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�#�sH�A(E4�$3E�0E4�2E!�9E4�E	�E	�E4�!E1	�*E1	�,E4�4
Fc�F�[O2o[O2oUO	U2oUOU[O2UO	U2oUOVB2UO	U2oUOU2P!)z#
Test setting the handler's stream
)	rr:r5r6�	setStreamr2r�r6�assertIsNone)rErTr7�oldrhs&    rI�test_stream_setting�%StreamHandlerTest.test_stream_settingfss��
�!�!�#��������k�k�&�!���
�
�c�3�:�:�&����S�!���
�
�f�%����S�!�����&�!rnc�z�[O[22oUO[	U2Q2P!)z<StreamHandler 2 (NOTSET)>)rr:r*r]r�rys& rI�'test_can_represent_stream_with_int_name�9StreamHandlerTest.test_can_represent_stream_with_int_namets+���!�!�"3�"5�6������a��">�?rnr�)	rurvrwrxr7r=r@rzr{r|s@rIr.r.Os����0�,"�@�@rnr.c�D`�\sQsQsnQsQsQsQsQsQs	Qs
UsP!)	�TestSMTPServer�{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���[OOVPUP	Q5UOO	2]*UmV mPUmP
UmV0m	P!)N)�map�decode_data)
r
�
SMTPServerr��socket�getsockname�port�_handler�_thread�_quit�
poll_interval)rE�addrr�rO�sockmaps&&&&&rIr��TestSMTPServer.__init__�sV��
���!�!�$�d��.2�	"�	4��K�K�+�+�-�a�0��	��
������
�*�rnc�,�UOVV42P!)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.
)rL)rE�peer�mailfrom�rcpttosrs&&&&&rI�process_message�TestSMTPServer.process_message�s��	
�
�
�d�g�4rnc��[OUOUO1Q59UmoP	UmUO
2P!)z7
Start the server running on a separate daemon thread.
r��r�r��
serve_foreverrOrMr�r��rE�ts& rIr��TestSMTPServer.start��C��%�+�+�4�3E�3E�26�2D�2D�1F�H�	H���q����	���	rnc�t�UO%f%[OVO]Q5J6P!)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`.
)rF�count)rNr	�loop�_map)rErOs&&rIr[�TestSMTPServer.serve_forever�s$���*�*�*��M�M�-�Y�Y�a�@�rnc���P	Um[OUO2PUmUO	2[
OUOP	Q5P!)zZ
Stop the thread by closing the server instance.
Wait for the server thread to terminate.
)rF�
ignore_all)rNr�join_threadrMrMr	�	close_allrcrqs&rI�stop�TestSMTPServer.stop�sA��
��
��$�$�T�\�\�2�����
�
�����t�y�y�T�:rn)rLrNrMrOrK)rurvrwrxryr�rWr�r[rirzr{r|s@rIrCrC{s)�����(+�
5��	A�	;�	;rnrCc�J``�\sQsQsnQsQsQsU1QksQsQs	Us
U9s!)�ControlMixin��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�b�PUmV mVm[O2UmP!r
)rMrOrLr�r��ready)rEr�rOs&&&rIr��ControlMixin.__init__�s"�����*���
��_�_�&��
rnc��[OUOUO1Q59UmoP	UmUO
2P!)z9
Create a daemon thread to run the server, and start it.
r�rZr\s& rIr��ControlMixin.start�r_rnc�d:�UOO2[[U_U2P!)zF
Run the server. Set the ready flag before entering the
service loop.
)rorIr�rlr[)rErOr�s&&�rIr[�ControlMixin.serve_forever�s"���
	
�
�
����
�l�D�/�
�>rnc���UO2UOd([OUO2PUmUO	2UO
O
2P!)z;
Tell the server thread to stop, and wait for it to do so.
)�shutdownrMrrg�server_closerorOrqs&rIri�ControlMixin.stop�sL��	
�
�
���<�<�#��(�(����6��D�L������
�
���rn)rLrMrOro)rurvrwrxryr�r�r[rirzr{r�r�s@@rIrlrl�s#�����'��?�	�	rnrlc�6`�\sQsQsnQsQQksQsQsUsP!)�TestHTTPServer�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.
c�``�UU1QkQ[2n[OVR2[OVU2VPmP!)c�J:``�\sQsQsnQQksQsUUU1QksQsUsU9s	!)�=TestHTTPServer.__init__.<locals>.DelegatingHTTPRequestHandleric�`�UOQ2%c
UO![U2g)�do_)�
startswith�process_request�AttributeError)rErG�defaults&&&rI�__getattr__�ITestHTTPServer.__init__.<locals>.DelegatingHTTPRequestHandler.__getattr__s(���?�?�5�)�)��/�/�/�$�T�*�*rnc�>�UOOU2P!r
��serverrLrqs&rIr��MTestHTTPServer.__init__.<locals>.DelegatingHTTPRequestHandler.process_request
������$�$�T�*rnc�F:�R%c[RU_U,UN3P!P!r
)r��log_message)rEr,rj�DelegatingHTTPRequestHandlerr�r�s&&*���rIr��ITestHTTPServer.__init__.<locals>.DelegatingHTTPRequestHandler.log_message
s1�����6��,� +�,�,2�;�59�;�rnr�r
)
rurvrwrxr�r�r�rzr{r�)r�r}r�r�s@@��rIr�r~s����
+�

+�
;�
;rnr�)r
rr�rl�sslctx)rErPr�rOr�r�r�s&&&&f&@rIr��TestHTTPServer.__init__s=���	;�	;�+A�	;�	���D�(D�E����d�]�;��rnc��UOO2vqUO%cUOOUP	Q5oV1![c-o[
OOQS*2gPo=hh9h)T)�server_sidezGot an error:
%s
)rI�acceptr��wrap_socketr�r�r6r)rE�sockrP�es&   rI�get_request�TestHTTPServer.get_requestst��	����+�+�-�J�D��{�{�{��{�{�.�.�t��.�F��
�z���	�	��J�J���2�Q�6�7���	�s"�-A�A�	B�B�'B�B�r�)r�FN)	rurvrwrxryr�r�rzr{r|s@rIrzrz�s����	��&	�	rnrzc�J``�\sQsQsnQsP	sP
sQQksU1QksQs	Us
U9s!)�
TestTCPServeri a�
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.
c��QQ[2o[OVUU2[OVU2P!)c�(`�\sQsQsnQsQsUsP!)�;TestTCPServer.__init__.<locals>.DelegatingTCPRequestHandleri4c�>�UOOU2P!r
r�rqs&rIr��BTestTCPServer.__init__.<locals>.DelegatingTCPRequestHandler.handle6r�rnr�)rurvrwrxr�rzr{r|s@rI�DelegatingTCPRequestHandlerr�4s����
+�
+rnr�)rrr�rl)rErPr�rO�bind_and_activater�s&&&&& rIr��TestTCPServer.__init__2s7��	+�*>�	+�	�#�#�D�0K�$5�	7����d�]�;rnc�z:�[[U_2UOO	2]*UmP!��)r�r��server_bindrIrJrKr�s&�rIr��TestTCPServer.server_bind<�)���
�m�T�.�0��K�K�+�+�-�a�0��	rn)rK�r�T)rurvrwrxry�allow_reuse_address�allow_reuse_portr�r�rzr{r�r�s@@rIr�r� s'���������<�1�1rnr�c�N``�\sQsQsnQsQQksU1QksU1QksQsUs	U9s
!)�
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�`�U1QkQ[2n[OVRU2[OVU2P
UmP!)c�>:``�\sQsQsnQsUU1QksQsUsU9s!)�;TestUDPServer.__init__.<locals>.DelegatingUDPRequestHandleriSc�>�UOOU2P!r
r�rqs&rIr��BTestUDPServer.__init__.<locals>.DelegatingUDPRequestHandler.handleUr�rnc��:�UOO2oU%c[RU_2P!P![c"SO
O%fgP!h9hr
)�wfiler[r��finishr�r��_closed)rEr�DelegatingUDPRequestHandlerr�s& ��rIr��BTestUDPServer.__init__.<locals>.DelegatingUDPRequestHandler.finishXsY����z�z�*�*�,���"��9�4�G�I���#�"�#�{�{�2�2�2�!� 3�"�s�8�	A$�A$�A$�#A$r�)	rurvrwrxr�r�rzr{r�)r�r}r�s@@�rIr�r�Ss����
+�
"�
"rnr�)rrr�rlr�)rErPr�rOr�r�s&&&&&@rIr��TestUDPServer.__init__QsA���	"�*@�	"�	�#�#�D�$?�$5�	7�	���d�]�;���rnc�z:�[[U_2UOO	2]*UmP!r�)r�r�r�rIrJrKr�s&�rIr��TestUDPServer.server_bindgr�rnc�<:�[[U_2P	UmP!�T)r�r�rwr�r�s&�rIrw�TestUDPServer.server_closeks���
�m�T�/�1���rn)r�rKr�)rurvrwrxryr�r�rwrzr{r�r�s@@rIr�r�@s����� �,1��rnr��AF_UNIXc�0�\sQsQs\O
sQsP!)�TestUnixStreamServeripr��rurvrwrxrIr��address_familyrzr�rnrIr�r�p������rnr�c�0�\sQsQs\O
sQsP!)�TestUnixDatagramServerisr�r�r�rnrIr�r�sr�rnr�c�F`�\sQsQsn\O
sQsQsQs	Us
P!)�SMTPHandlerTestixc���-o[[O]1UOQU2oUO	2[OUO
1o[OOUQQQUOQ5oUOUOQ,2,Um[OQQ-2o[O2UmUO#U2UO O%UO2UO'2UO)UO O+22UO[-UO2]2UO]*vqgq�UOUQ2UOUQ,2UO/QU	2UO1U	Q	2UO32P!)
rW���MbP?�me�you�Log��timeoutr0u	Hello ✓z
Subject: Log
u

Hello ✓)rCr�HOSTrWr�rKrrA�SMTPHandler�TIMEOUTr]�toaddrs�messagesr�r�r��handledr�r�rirD�is_setr^r4�assertEndsWithrM)
rErQr�rPrTr�rTrUrVrs
&         rI�
test_basic�SMTPHandlerTest.test_basic~sl������!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�'�*��
�
�(�$�/����D�"4�5�	���	rnc�r�UOOU2UOO2P!r
)r�rr�rI)rErjs&*rIrW�SMTPHandlerTest.process_message�s$���
�
���T�"������rn)r�r�)rurvrwrxr�LONG_TIMEOUTr�r�rWrzr{r|s@rIr�r�xs!�����"�"�G��0�rnr�c�v`�\sQsQsnQsQsQsQsQsQs	Qs
\O2Q	2s
Q
sUsP!)�MemoryHandlerTesti�zTests for the MemoryHandler.rc�P�[OU2[OO	]
[O
UO2Um[OQ2Um	]UOm
UOOUO2P!)�
�mem)rrJrrA�
MemoryHandlerr�r;�mem_hdlrr �
mem_logger�	propagaterCrqs&rIrJ�MemoryHandlerTest.setUp�sj�����t���(�(�6�6�r�7�?�?�7;�~�~�G��
�!�+�+�E�2���$%����!����"�"�4�=�=�1rnc�f�UOO2[OU2P!r
)r�rMrrUrqs&rIrU�MemoryHandlerTest.tearDown�� ���
�
�������$�rnc�v�UOOUO22UO,2UOO	UO22UO,2UOOUO22,QNoUOU2QFD�o[
]	2FD,oUOOUO22J.	UOU2UOOUO22S[
V"]
*2Tt,tFDoQ[U21MJ	to*oUOU2J�	UOOUO22UOU2P!ttoh)r9)�r9r��r�r�)r�r�)��)r�r�rrrlr�r�r��str)rE�lines�n�is&   rI�
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�F6
c���UOOUO22UO,2UOO	UO22UO,2UOOUO2UOO2QQ,oUOU2[OO]
[OUOP
2UmUOOUO2UOOUO22UOU2UOO	UO22UOU2UOOUO2UOO2UOU2P!)z?
Test that the flush-on-close configuration works as expected.
r�r�)r�r�rrrlr�rNr�rMrrAr�r�r;rC�rEr�s& rI�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�$rnc���UOOUO22UO,2UOO	UO22UO,2[
O[
OOUO2,Q5QQ,oUOU2[
OO]
[
OUOP
2Um	UOOUO2UOOUO22UOU2UOO	UO22UOU2[
O[
OOUO2,Q5UOU2P!)zQ
Test that the flush-on-close configuration is respected by the
shutdown method.
��handlerListr�r�)r�r�rrrlr�rrv�weakref�refr�rAr�r�r;rCr�s& rI�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�$rnc���QQ2oUUO2oUOOU2[]
2FDOo[OQ2UO
O
Q2UO
OQ2JQ	UOFDo[OU2J	P!SOFDo[OS2J	h9h)c�4`�\sQsQsnQsQsQsQsUsP!)�ZMemoryHandlerTest.test_race_between_set_target_and_flush.<locals>.MockRaceConditionHandleric�"�Vm,UmP!r
�r��threads)rEr�s&&rIr��cMemoryHandlerTest.test_race_between_set_target_and_flush.<locals>.MockRaceConditionHandler.__init__s�� (�
�!��rnc�>�UOOP2P!r
)r��	setTargetrqs&rI�removeTarget�gMemoryHandlerTest.test_race_between_set_target_and_flush.<locals>.MockRaceConditionHandler.removeTargets���
�
�'�'��-rnc��[OUOQ5oUOO	U2UO2P!)�r�)r�r�rrrr�)rEr0rs&& rIr��aMemoryHandlerTest.test_race_between_set_target_and_flush.<locals>.MockRaceConditionHandler.handles3��"�)�)��1B�1B�C�����#�#�F�+����rnr)	rurvrwrxr�rr�rzr{r|s@rI�MockRaceConditionHandlerrs����
"�
.�
�
rnrr�znot flushed�flushed)r�r
r�r�r�r�r�r�rrrg)rErr�r�rs&    rI�&test_race_between_set_target_and_flush�8MemoryHandlerTest.test_race_between_set_target_and_flushs���	�	�*�$�-�-�8��		5��M�M�#�#�F�+��2�Y���
�
�5�!����$�$�]�3����'�'�	�2��
!�.�.�� �,�,�V�4�)��&�.�.�� �,�,�V�4�)�s�A:C�,C1)r�r�)rurvrwrxryrZrJrUr�r�rrrrrzr{r|s@rIr�r��sF����&�3��2� �%�8%�<%�:�0�0�2�5�3�5rnr�c�,`�\sQsQsnQsQsQsUsP!)�ExceptionFormatteri zA special exception formatter.c�8�QU]*O*!)z
Got a [%s])ru)rE�eis&&rI�formatException�"ExceptionFormatter.formatException"s���b��e�n�n�,�,rnr�)rurvrwrxryrrzr{r|s@rIrr s����(�-�-rnrc�T�UO2[OU2P!r
�rMri�remove)rTrms&&rI�closeFileHandlerr%s���G�G�I��I�I�b�Mrnc�``�\sQsQsnQs\OsQsQsQs	Qs
\	OQQ2s\	OQ	Q
2s
Q\*Q*s\	OQ
Q2sQsQsQsQsQsQsQsQs\	1QksQsQsQsQsQsQsQsQs Q s!Q!s"Q"s#Q#s$Q$s%Q%s&Q&s'Us(P!)'�ConfigFileTesti)z5Reading 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��[O[OU22o[O
OU1QQ-U@P!)r�r)r5r6�textwrap�dedentr�config�
fileConfig)rE�confrk�files&&, rI�apply_config�ConfigFileTest.apply_configCs5���{�{�8�?�?�4�0�1�����!�!�$�C��C�F�Crnc��[O29^tt^2oUOUO2[O
2oUO
UO22UOUO22UOQ,UQ5UO,2PPP2P!)%fhP!9h�r�r��r�r�)
r�captured_stdoutr(�config0rr r�rrr�rl�rE�outputr#s&  rI�test_config0_ok�ConfigFileTest.test_config0_okGs���
�
$�
$�
&�
&�&����d�l�l�+��&�&�(�F��K�K��)�)�+�,��L�L��*�*�,�-��!�!��#��
"�
�
�!�!�"�%�'�
&�
&�
&�s�BB=�=C	�C	c�^�[O29^tt^2o[O[O
UO22o[O2oUOU2[OOU2[O2oUOUO22UO!UO22UO#Q,UQ5UO#,2PPP2P!)%fhP!9hr+)rr-r5r6r"r#r.�configparser�ConfigParser�	read_filerr$r%r r�rrr�rl)rEr0r'�cpr#s&    rI�test_config0_using_cp_ok�'ConfigFileTest.test_config0_using_cp_okVs���
�
$�
$�
&�
&�&��;�;�x���t�|�|�<�=�D��*�*�,�B��L�L����N�N�%�%�b�)��&�&�(�F��K�K��)�)�+�,��L�L��*�*�,�-��!�!��#��
"�
�
�!�!�"�%�'�
&�
&�
&�s�C2D�D,	�$D,	c��[O29^tt^2oUOU2[OQ2oUOUO
22UOUO
22UOQQ,UQ5UO,2PPP2P!)%fhP!9h��compiler.parserr��r�r�r,�	rr-r(rr r�rrr�rl�rEr$r0r#s&&  rI�test_config1_ok�ConfigFileTest.test_config1_okh���
�
$�
$�
&�
&�&����f�%��&�&�'8�9�F��K�K��)�)�+�,��L�L��*�*�,�-��!�!���#��
"�
�

�!�!�"�%�'�
&�
&�
&���BB5�5C	�>C	c�^�UO[UOUO2P!r
�rvr�r(�config2rqs&rI�test_config2_failure�#ConfigFileTest.test_config2_failurew������)�T�%6�%6����Ernc�^�UO[UOUO2P!r
�rvr�r(�config3rqs&rI�test_config3_failure�#ConfigFileTest.test_config3_failure{rIrnc���[O29^tt^2oUOUO2[O
2o[
2g[c[OQ2Lh9h[OO]2SOSO2Q2SO,2PPP2P!)%fhP!9h��just testing�-ERROR:root:just testing
Got a [RuntimeError]
)rr-r(�config4rr r�	exceptionr��stdout�seekr]r[rlr/s&  rI�test_config4_ok�ConfigFileTest.test_config4_oks���
�
$�
$�
&�
&�&����d�l�l�+��&�&�(�F�
2�"�n�$���
2��!�!�.�1�
2���J�J�O�O�A�����V�_�_�.�A�
C�
�!�!�"�%�'�
&�
&�
&�s6�1C�
A�	A?�%A?�<C�>A?�?AC�C-	�%C-	c�@�UOUOQ5P!��r$)r@�config5rqs&rI�test_config5_ok�ConfigFileTest.test_config5_ok�������D�L�L��1rnc�@�UOUOQ5P!rZ)r@�config6rqs&rI�test_config6_ok�ConfigFileTest.test_config6_ok�r_rnc���[O29^tt^2oUOUO2[O
Q2o[O
Q2oUO
UO22UOUO22UOUO22UO,QNUQ5UO,2PPP2[O29^tt^2oUOUO2[O
Q2oUOUO2UO
UO22UOUO22[O
Q2oUO
UO22UOUO22WOUO22UO,QNUQ5UO,2PPP2P!)%fhCK\9h)%fhP!9h)r<�compiler-hyphenatedr��compiler.lexer�r=r,)r�r��)r�r�)r�r�)r�r�)r�r�)rr-r(�config1arr r�rrr��criticalrl�config7r�r�rEr0r#�
hyphenateds&   rI�test_config7_ok�ConfigFileTest.test_config7_ok�s���
�
$�
$�
&�
&�&����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$I�=I	�I	�I"	�I"	c���UO29^tt^2[QQ2o[OQ6XcUO	QQ2oUO
O
UQ5oUOU2UOU2PPP2[OO]*oUO[UW2P!)%fhKJ9h)r��test_logging-X-r��\z\\)rg)
�check_no_resource_warningrnrirG�replace�config8r,r(r�rootrAr�r)rErmrur�s&   rI�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�!C�AC�C	�C	c�|�UOUO2[OO]*O
oUO
[OQQ-22oUOUQ2UO
[OQQQQ-22oUOUQ2P!)rWr0�testztest ++ defaultvalue�customfield�customvalueztest ++ customvalue)	r(�config9rrvrA�	formatterr,r�r])rEr~�results&  rI�test_config9_ok�ConfigFileTest.test_config9_ok�s������$�,�,�'��L�L�)�)�!�,�6�6�	��!�!�'�"7�"7����"H�I������!7�8��!�!�'�"7�"7�
�F�M�=�9�#;�<������!6�7rnc�|�UOUO2[OQ2oUO	UO
2UOUO2UO
UO
2UOUOP
Q5UO	UO
2P!)�some_pristine_logger)�disable_existing_loggers)r(�disable_testrr r�rrD�rEr#s& rI�test_logger_disabling�$ConfigFileTest.test_logger_disabling�s������$�+�+�,��"�"�#9�:��������)����$�+�+�,�������(����$�+�+�e��L�������)rnc��QoUOU2UO[O2O]*O
Q2P!)aw
            [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
            �hand1)r(r]rr rArG)rE�test_configs& rI�test_config_set_handler_names�,ConfigFileTest.test_config_set_handler_names�sC����(	
���+�&�����*�*�,�5�5�a�8�=�=�w�Grnc��Qo[O[OU22oUO	[
[OOU2P!)a�
            [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
            )	r5r6r"r#rvrrr$r%)rEr�r's&  rI�'test_exception_if_confg_file_is_invalid�6ConfigFileTest.test_exception_if_confg_file_is_invalid�s>����.�{�{�8�?�?�;�7�8�����,����(A�(A�4�Hrnc���[OQQQ5vq[OU2UO	[
[OOU2[OU2P!)�test_empty_�.ini�r��suffix)
rgrhrirMrvrrr$r%r)rErlrms&  rI�%test_exception_if_confg_file_is_empty�4ConfigFileTest.test_exception_if_confg_file_is_emptysH���!�!��v�F���
��������,����(A�(A�2�F�
�	�	�"�
rnc�f�UO[[OOQ2P!)�filenotfound)rv�FileNotFoundErrorrr$r%rqs&rI�,test_exception_if_config_file_does_not_exist�;ConfigFileTest.test_exception_if_config_file_does_not_exists�����+�W�^�^�-F�-F��Wrnc���[OQ2O2o[OQQQ5vq#[
OV!OQ22[
OU2[OOUQ[]P
QQQ	Q
QQQ
--Q5Q5[
OU2P![
OS2h9h)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_r�r��asciirrsr,z5%(asctime)s [%(process)d] [%(levelname)s] %(message)s�datefmtz[%Y-%m-%d %H:%M:%S %z]�class�logging.Formatter)�versionr��
formatters)r��defaults)r"r#�striprgrhrir�encoderMrr$r%�dictr�)rE�inirlrms&   rI�!test_defaults_do_no_interpolation�0ConfigFileTest.test_defaults_do_no_interpolation s����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
�A1C
�
C"r�))rurvrwrxryrrsrZr.�config1rirtrFrLrSr\rarkrur}r�r(r1r8r@rGrMrWr]rbrnrwr�r�r�r�r�r�r�rzr{r|s@rIrr)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�*�*rnrc�L`�\sQsQsnQs\sQ	sQsQs	Qs
QsQsQs
UsP!)
�SocketHandlerTestiMzTest for SocketHandler objects.c��[OU2P9Um9UmUmUOUOUOQ29UmoUO2UOO2[OOo[UO ["2%cUQUO$2UmLUUO P2UmPUmUO(O+UO(O]*2UO(O-UO2[.O0]2UmP![coX mPo=P!Po=hh9h)zlSet up a TCP server to receive log messages, and a SocketHandler
pointing to that server's address and port.�{�G�z�?r�)rrJr��	sock_hdlr�server_exception�server_class�address�
handle_socketr�r�ror�rrA�
SocketHandler�
isinstance�server_addressrbrK�
log_outputr2rNrCr��	Semaphorer��rEr�r��hclss&   rIrJ�SocketHandlerTest.setUpVs-��	���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�9F�:F�Fc�b�UO%c@UOOUO2UOO2UO%cUOO2[OU2P![OS2h9h)zShutdown the TCP server.)r�r2rNrMr�rirrUrqs&rIrU�SocketHandlerTest.tearDownpsn��	$��~�~�~�� � �.�.�t�~�~�>����$�$�&��{�{�{���� � �"����d�#��H���d�#�s�B�AB�&B�B.c��UOoUO]2o[U2]6cP![OQU2]*oUOU2o[U2U6c*V2OU[U2*
2*oJ9[
OU2o[OU2oU9OUOQ**
tm	UOO2J�)T�>L�
)
�
connection�recvr^�struct�unpack�pickle�loadsrr�r�r0r��release)rE�request�conn�chunk�slen�objr�s&&     rIr��SocketHandlerTest.handle_socket{s����!�!����I�I�a�L�E��5�z�A�~���=�=��u�-�a�0�D��I�I�d�O�E��e�*�t�#��	�	�$��U��*;� <�<���,�,�u�%�C��*�*�3�/�F��O�O�v�z�z�D�0�0�O��L�L� � �"rnc�r�UO%cUOUO2[OQ2oUO	Q2UO
O
2UOQ2UO
O
2UOUOQ2P!)�tcpr��eggs�
spam
eggs
)
r��skipTestrr r�r��acquirer�r]r�r�s& rI�test_output�SocketHandlerTest.test_output�s|��� � � ��M�M�$�/�/�0��"�"�5�)�����V�����������V��������������.�9rnc�z�UO%cUOUO2QUOmUOO2[
Q2g[cSOOQ2Lh9hSOOQ2[O2oSOSOOS2[OSOOS*
Q*2SOOQ2P!)g@zDeliberate mistakez
Never sentzNever sent, eitherr�zNor this)r�r�r��
retryStartr�rirr2rTr�r�r��	retryTimer�)rE�nows& rI�
test_noserver�SocketHandlerTest.test_noserver�s���� � � ��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�0B�B�r�r�r�r�r��r�rW)rurvrwrxryr�r�r�rJrUr�r�r�rzr{r|s@rIr�r�Ms2����*� �L��G�.�4	$�
#�	:�+�+rnr�zUnix sockets requiredc�N`�\sQsQsnQs\\Q2%c\sQs	Qs
UsP!)�UnixSocketHandlerTesti�z)Test for SocketHandler with unix sockets.r�c��[O2UmUO[O
UO2[OU2P!r
)r�create_unix_domain_namer�r�rr�r�rJrqs&rIrJ�UnixSocketHandlerTest.setUp��8��$�<�<�>������	�(�(�$�,�,�7�����%rn�r�)rurvrwrxry�hasattrrIr�r�rJrzr{r|s@rIr�r��s&����4��v�y�!�!�+��&�&rnr�c�F`�\sQsQsnQs\sQsQsQs	Qs
QsQsUs
P!)	�DatagramHandlerTesti�zTest for DatagramHandler.c��[OU2P9Um9UmUmUOUOUOQ29UmoUO2UOO2[OOo[UO ["2%cUQUO$2UmLUUO P2UmPUmUO(O+UO(O]*2UO(O-UO2[.O02UmP![coX mPo=P!Po=hh9h)znSet up a UDP server to receive log messages, and a DatagramHandler
pointing to that server's address and port.r�r�)rrJr�r�r�r�r��handle_datagramr�r�ror�rrA�DatagramHandlerr�r�rbrKr�r2rNrCr�r�r�r�s&   rIrJ�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
�8F
�9F�F
c�b�UO%cUOO2UO%c@UOO	UO2UOO2[OU2P![OS2h9h)zShutdown the UDP server.)r�rir�r2rNrMrrUrqs&rIrU�DatagramHandlerTest.tearDown�sn��	$��{�{�{���� � �"��~�~�~�� � �.�.�t�~�~�>����$�$�&����d�#��H���d�#���B�+B�?B�B.c�F�[OQ]2oUO[U2Po[O
U2o[OU2oU9OUOQ**
tmUOO2P!)r�r�)r��pack�packetr^r�r�rr�r�r0r�rI)rEr�r�r�r�r�s&&    rIr��#DatagramHandlerTest.handle_datagram�sk���{�{�4��#������D�	�
�+���l�l�6�"���&�&�s�+�����6�:�:��,�,�������rnc��UO%cUOUO2[OQ2oUO	Q2UO
O
2UO
O2UO	Q2UO
O
2UOUOQ2P!)�udpr�r�r�)
r�r�rr r�r�r�rOr]r�r�s& rIr��DatagramHandlerTest.test_output�s���� � � ��M�M�$�/�/�0��"�"�5�)�����V�����������������V��������������.�9rnr�r�)rurvrwrxryr�r�r�rJrUr�r�rzr{r|s@rIr�r��s-����$� �L��G�)�4	$��
:�
:rnr�c�N`�\sQsQsnQs\\Q2%c\sQs	Qs
UsP!)�UnixDatagramHandlerTesti�z,Test for DatagramHandler using Unix sockets.r�c��[O2UmUO[O
UO2[OU2P!r
)rr�r�r�rr�r�rJrqs&rIrJ�UnixDatagramHandlerTest.setUps8��$�<�<�>������	�(�(�$�,�,�7��!�!�$�'rnr��rurvrwrxryr�rIr�r�rJrzr{r|s@rIr�r��s&����7��v�y�!�!�-��(�(rnr�c�h`�\sQsQsnQs\sQsQsQs	Qs
QsQs\
Q2Q	2sQ
sUsP!)�SysLogHandlerTestiz!Test for SysLogHandler using UDP.c�<�[OU2P9Um9UmUmUOUOUOQ29UmoUO2UOO2[OOo[UO ["2%c,UUO ]*UO$12UmLUUO 2UmQUmUO(O+UO(O]*2UO(O-UO2[.O02UmP![coX mPo=P!Po=hh9h)zlSet up a UDP server to receive log messages, and a SysLogHandler
pointing to that server's address and port.r�rn)rrJr��sl_hdlrr�r�r�r�r�r�ror�rrAr�r�r�rbrKr�r2rNrCr�r�r�r�s&   rIrJ�SysLogHandlerTest.setUps5��	���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�>E?�?	F�	F�
F�Fc�b�UO%cUOO2UO%c@UOO	UO2UOO2[OU2P![OS2h9h)zShutdown the server.)r�rirr2rNrMrrUrqs&rIrU�SysLogHandlerTest.tearDown*sn��	$��{�{�{���� � �"��|�|�|�� � �.�.�t�|�|�<����"�"�$����d�#��H���d�#�r�c�^�UOUmUOO2P!r
)r�r�r�rI)rEr�s&&rIr��!SysLogHandlerTest.handle_datagram5s��!�.�.��������rnc�>�UO%cUOUO2[OQ2oUO	Q2UO
O
[O2UOUOQ2UO
O2P
UOm
UO	Q2UO
O
[O2UOUOQ2UO
O2QUOmUO	Q2UO
O
[O2UOUOQ2P!)�slh�späm�
<11>späms	<11>spämuhäm-s<11>häm-späm)r�r�rr r�r�r�rr�r]r�rOr�
append_nul�identr�s& rIr��SysLogHandlerTest.test_output9s��� � � ��M�M�$�/�/�0��"�"�5�)�����Y�������'�.�.�/�������*@�A�������"'��������Y�������'�.�.�/�������*<�=�������&��������Y�������'�.�.�/�������*G�Hrnc�H�[OQ2oUOO2UOO2UO
Q2UOO[O2UOUOQ2P!)rrr	)rr rrMr�rOr�r�rr�r]r�r�s& rI�test_udp_reconnection�'SysLogHandlerTest.test_udp_reconnectionLsk���"�"�5�)�����������������Y�������'�.�.�/�������*@�Arnz
socket.socketc�x�UOo[OUOmUO[O29^tt^2[OOQ[O]Q5PPP2UOO2P!)%fhK,9h)r�)r��socktyper�)r��)�return_valuerIr��connect�side_effectrvrrAr��SOCK_STREAMrM�
assert_called)rE�mock_socket�instance_mock_socks&& rI�test_tcp_timeout�"SysLogHandlerTest.test_tcp_timeoutTs���(�5�5��17����"�"�.�
�
�
�v�~�~�
.�
.����*�*�3E�4:�4F�4F�34�
+�
6�/�
	� � �.�.�0�/�
.�s�1B)�)B9	�2B9	)r�r�r�r�rr�)rurvrwrxryr�r�r�rJrUr�r�rrrrzr{r|s@rIr�r�sH����,� �L��G�)�4	$��I�&B��?��	1��	1rnr�c�N`�\sQsQsnQs\\Q2%c\sQs	Qs
UsP!)�UnixSysLogHandlerTesti`z)Test for SysLogHandler with Unix sockets.r�c��[O2UmUO[O
UO2[OU2P!r
)rr�r�r�rr�r�rJrqs&rIrJ�UnixSysLogHandlerTest.setUphr�rnr�r�r|s@rIrr`s&����4��v�y�!�!�-��&�&rnrz$IPv6 support required for this test.c�L``�\sQsQsnQs\sQsU1QksU1Qks	Qs
UsU9s!)�IPv6SysLogHandlerTestinz&Test for SysLogHandler with IPv6 host.c�l:�[OUOm[[
U_2P!r
)rI�AF_INET6r�r�r�r!rJr�s&�rIrJ�IPv6SysLogHandlerTest.setUpws#���+1�?�?����(�
�#�T�0�2rnc�l:�[OUOm[[
U_2P!r
)rI�AF_INETr�r�r�r!rUr�s&�rIrU�IPv6SysLogHandlerTest.tearDown{s#���+1�>�>����(�
�#�T�3�5rnr�)z::1rW)
rurvrwrxryr�r�r�rJrUrzr{r�r�s@@rIr!r!ns#����1� �L��G�3�6�6rnr!c�8`�\sQsQsnQsQsQsQsQsUs	P!)�HTTPHandlerTestizTest for HTTPHandler.c�f�[OU2[O2UmP!)zlSet up an HTTP server to receive log messages, and a HTTPHandler
pointing to that server's address and port.)rrJr�r�r�rqs&rIrJ�HTTPHandlerTest.setUp�s��	���t�� ���(��rnc��UOUm[UO2UmUOQ6Xc>[	UO
Q*2oUOOU2UmUO]�2UO2UOO2P!PSmKH9h)r�zContent-Length)
�commandrr��log_data�int�headers�rfilerd�	post_data�
send_response�end_headersr�rI)rEr��rlens&& rI�handle_request�HTTPHandlerTest.handle_request�s�������� ����.��
��<�<�6�!�
&��7�?�?�+;�<�=��!(���!3�!3�D�!9���	���c�"������������	
&�!%���s�<B8�8	Cc
���[OQ2oUOoUOUOO]*2QFCDoQoU%c�]PHo[OO[2o[OOUQQ2oUOUO2oUOU2UOUQ5o	LPoPo	[!V@O"QUQ59Umo
U
O'2U
O(O+2QU
O,*oS9%cSo[OO/UQUW	QQ5UmPUmUO5UO02QFCDWo
V�O0mUO8O;2Q
oUO=U2UO8O+[>O@2oUOCUQ2UOEUO2OQ2UOEUOFU
2U
Q	6Xc![IUO2OJ2oL$[IUOLOOQ22oUOEUQ
*Q,2UOEUQ*Q,2UOEUQ*U,2CJZ	UO$OQ2UOOUO02UO0OS2CJ	P![cPoCK�h9h)�http�certdatazkeycert.pem)�cafiler�r�zlocalhost:%dz/frob)�secure�context�credentialsr�rzHTTP request timed outrrG�funcNamer�r0r�r�)�foo�bar)r�r�)*rr r2rNrA�sslrir��dirname�__file__r��
SSLContext�PROTOCOL_TLS_SERVER�load_cert_chain�create_default_context�ImportErrorrzr6r�r�ror��server_portr��h_hdlrr.rCr�r�rOr�r�
SHORT_TIMEOUTrDr]r-r�queryr2�decoderirM)rEr#r2r<rPrB�here�localhost_certr�r=r��host�
secure_clientr�r0r��ds&                rIr��HTTPHandlerTest.test_output�s����"�"�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�"M�	M0�)M0�/M0)r-rKr�r.r2r�)
rurvrwrxryrJr6r�rzr{r|s@rIr)r)s���� �)��6 �6 rnr)c�>`�\sQsQsnQsQsQsQsQsQs	Us
P!)�
MemoryTesti�z*Test memory persistence of logger objects.c�@�[OU2-UmP!)z8Create a dict to remember potentially destroyed objects.)rrJ�
_survivorsrqs&rIrJ�MemoryTest.setUp�s�����t����rnc��SFD<o[U2[U21o[OU2UOU$J>	P!)zCWatch the given objects for survival, by creating weakrefs to
them.)rDr�r�r�rX)rErjr��keys&*  rI�_watch_for_survival�MemoryTest._watch_for_survival�s7���C��S�'�4��9�$�C�#*�;�;�s�#3�D�O�O�C� �rnc�4�[O2,oUOO2FD$vvq#oU2dJUO	U2J&	U%c5UOQ[
U2QOU21*2P!P!)z;Assert that all objects watched for survival have survived.z;%d objects should have survived but have been destroyed: %sz, )�gc�collectrXrrrar^r�)rE�dead�id_�repr_r�s&    rI�_assertTruesurvival�MemoryTest._assertTruesurvival�sy��	�
�
����!%���!6�!6�!8��L�S�#��u�}����E�"�"9���I�I�.�14�T��D�I�I�d�O�0L�M�
N�rnc�L�UOO[O2[OQ2oUOU2UO[O2UOOUO22UOUO22UOQ,2=UO2[OQ2oUOUO22UOQQ,2P!)r@)r@r9r�)r@r9r�)r2r8rr�r r\r9r�rrrlrd)rEr@rAs&  rI�test_persistent_loggers�"MemoryTest.test_persistent_loggers�s���	
���!�!�'�,�,�/�����&��� � ��%����W�]�]�#������t�0�0�2�3��	�	�$�#�#�%�&����!�
�	�
�� � �"�����&���	�	�$�#�#�%�&����!�!�
�	rn)rX)rurvrwrxryrJr\rdrgrzr{r|s@rIrVrV�s"����4��
4�
N��rnrVc�.`�\sQsQsnQsQsQsUsP!)�EncodingTesti	c��[OQ2o[QQ2oQo[OUQQ5oUO	U2UOU2UO
U2UO2[UQQ5oUOUO2O2U2UO2[OOU2%c[OU2P!P!SO
S2SO2h9hSO2h9h[OOS2%c[OS2hh9h)rzr�ztest_logging-1-ufoo€rr�)rr rnr�rCr�rNrMr�r]rd�rstriprir��isfiler)rEr�rmrr�r�s&     rI�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�!�!��	�	�"�
�"�sA�)E
�D�".E
�.D5�?E
�#D2�2E
�5E�E
�
%F�0Fc���[OQ2oQo[OQ2oQUm[
O2oUUQ2o[OU2oUOU2UOU2UOU2UO2UO2oUOUQ2P!SOS2SO2h9h)rzuдо свидания�cp1251�stricts�� �������
)rr �codecs�	getwriterr�r5�BytesIOr:rCr�rNrMr[r])rEr��message�writer_classr7�writerr�rks&       rI�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�#C6r�)rurvrwrxrnryrzr{r|s@rIrjrj	s�����2L�Lrnrjc�.`�\sQsQsnQsQsQsUsP!)�WarningsTesti3	c
�`�[O29^tt^2[OP	2UO	[OP
2[O
Q[Q5[O2o[OU2o[OQ2oUOU2[OQ2UOU2UO2oUO2UO!UO#Q2]2[O2o[O$Q[Q]*UQ2UO2oUO2UO'UQ	2PPP2P!)%fhP!9h)
T�always)�category�py.warningszI'm warning you...z UserWarning: I'm warning you...
�Explicit�dummy.pyz
Dummy linez0dummy.py:42: UserWarning: Explicit
  Dummy line
)�warnings�catch_warningsr�captureWarningsr��filterwarnings�UserWarningr5r6r:r rC�warnrNr[rMr��find�showwarningr])rEr7rTr#rk�a_files&     rI�
test_warnings�WarningsTest.test_warnings5	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�E3F�F-	�%F-	c�2�[O29^tt^2[OP	2UO	[OP
2[O
Q2oUO
UO,2[OQ[Q]*2UO
[UO2]2UOUO]*[O2PPP2P!)%fhP!9h)Tr�r�r�)
r�r�rr�r�r r]rAr�r�r^�assertIsInstance�NullHandlerr�s& rI�test_warnings_no_handlers�&WarningsTest.test_warnings_no_handlersM	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�CD�D	�D	r�)rurvrwrxr�r�rzr{r|s@rIr|r|3	s����F�0K�Krnr|c�0�[OV2!r
)rr<)r,r�s&&rI�
formatFuncr�[	s�����V�-�-rnc�,`�\sQsQsnQQksQsUsP!)�myCustomFormatteri^	c��P!r
r�)rE�fmtr�s&&&rIr��myCustomFormatter.__init___	���rnr�r
)rurvrwrxr�rzr{r|s@rIr�r�^	s����
�
rnr�c�.�[O2!r
)rr:r�rnrI�handlerFuncr�b	s��� � �"�"rnc��\sQsQsQsP!)�
CustomHandlerie	r�r�r�rnrIr�r�e	���rnr�c��\sQsQsQsP!)�CustomListenerih	r�r�r�rnrIr�r�h	r�rnr�c��\sQsQsQsP!)�CustomQueueik	r�r�r�rnrIr�r�k	r�rnr�c�2`�\sQsQsnQQksQsQsUsP!)�CustomQueueProtocolin	c�>�[OU2UmP!r
��queue�Queue)rE�maxsizes&&rIr��CustomQueueProtocol.__init__o	s���[�[��)��
rnc�F�[OUQ2o[V!2!�r�)�object�__getattribute__r/)rE�	attributer�s&& rIr��CustomQueueProtocol.__getattr__r	s���'�'��g�6���u�(�(rnr�)rW)rurvrwrxr�r�rzr{r|s@rIr�r�n	s����*�)�)rnr�c�(`�\sQsQsnQsQsUsP!)�CustomQueueFakeProtocoliv	c��P!r
r�rqs&rI�
put_nowait�"CustomQueueFakeProtocol.put_nowait~	r�rnr�)rurvrwrxr�rzr{r|s@rIr�r�v	s����
�
rnr�c��\sQsQsPsQsP!)�CustomQueueWrongProtocoli�	r�)rurvrwrxr�rzr�rnrIr�r��	s���Jrnr�c�.`�\sQsQsnQsQsQsUsP!)�MinimalQueueProtocoli�	c��P!r
r�)rE�xs&&rIr��MinimalQueueProtocol.put_nowait�	s��Trnc��P!r
r�rqs&rI�get�MinimalQueueProtocol.get�	s��4rnr�)rurvrwrxr�r�rzr{r|s@rIr�r��	s����!��rnr�c�.�[O2!r
r�r�rnrI�
queueMakerr��	s���;�;�=�rnc�`�U1QkoU!)c�J:�UOQR2[U,UN3-U@!��respect_handler_level)�
setdefaultr�)r�rArkr�s&*,�rI�func�listenerMaker.<locals>.func�	s*������1�3H�I��e�9�h�9�&�9�9rnr�)�arg1�arg2r�r�s&&f rI�
listenerMakerr��	s���:��Krnc�`�\sQsQsnQs\OsQsQ]QQQQ--Q	Q
QQQ
QQQQQ--QQQQ	Q
,--sQ]QQQQ--Q	Q
QQQ
QQQQQ--QQQQQ	Q
,--QQQ--s	Q]QQQQ--Q	Q
QQQ
QQQQQ--QQQQ--QQQQ	Q
,--s
Q]QQQQ--Q	Q
QQQ
QQQQQ--QQQQQ	Q
,--QQQ--sQ]QQQQ--Q	Q
QQQ
QQQQQ--QQQQQ	Q
,--QQQ--sQ]QQQQ--Q	Q
QQQ
QQQQQ--QQQQQ	Q
,--QQQ--s
Q]QQQQ--Q	Q
QQQ
QQQQQ--QQQQQ	Q
,--QQQ--sQ]QQQ\Q*QQ--Q	Q
QQQ
QQQQQ--QQQQ	Q
,--sQ]QQQ\QQ-QQ\Q*QQ-Q Q\QQ--Q	Q
QQQ
QQQQQ-Q!Q\--QQQQ	Q
,--sQ]QQQQ--Q	Q
Q\Q"*Q
QQQQQ--QQQQQ	Q
,--QQQ--sQ]QQQQ--Q	Q
Q\Q"*Q
QQQQQQ#Q$--QQQQQ	Q
,--QQQ--sQ]QQQQ--Q	Q
QQQ
QQQQQ--QQ%QQQ	Q
,--QQQ--sQ]Q&P
QQQQ--Q	Q
QQQ
QQQQQ--QQ'QQQ	Q
,-Q%--QQQ--sQ]Q&P	QQQQ--Q	Q
QQQ
QQQQQ--QQ'QQQ	Q
,-Q%--QQQ--sQ]QQQQ--Q	Q
QQQ
QQQQQ--QQQQQ	Q
,--QQQ--sQ]Q(P	Q	Q
QQ--QQQQ)---sQ]Q(P	Q	Q
QQ)--QQQQ)---sQ]QQQQ--Q*Q+Q,Q--Q	Q
QQQ
QQQQQQ*Q+,--QQQQQ*Q+,--QQQQ	Q
,--sQ]Q-QQQ--Q.Q
QQQ
QQQQQ--QQ/Q	Q
Q0-QQQQQ	Q
,--QQQ--sQ-QQQ--Q.Q
QQQ
QQQQQ--QQ/Q	Q
Q0-QQQQQ	Q
,--QQQ--sQ]Q-QQQ--Q.Q
QQQ
QQQQQ--QQ/Q	Q
Q0-QQQQQ	Q
,--QQQ--sQ]QQQQ--Q	Q
QQQ
QQQQQQ1Q2Q3Q4Q5---QQQQ	Q
,--s Q]QQQQ6Q7Q8Q9---Q	Q
QQQ
QQQQQ--QQQQ	Q
,--s!Q:Q;\"OF2s$Q]QQ<Q\$Q=Q>Q?Q@QQAQ1QBQC---Q	Q
QQQ
Q<QQQQ--QQQQ	Q
,--s%Q]Q	QDQQQQ-QEQQFQG]QHQDQQQIQJ--QQKQQQ	QE,QLQM---s&Q]QQNQQOQ=QP--Q	QQQQQQQ
QN-QRQQFQG]Q
QNQHQQQQ--QQKQQQ	QR,QLQM---s'Q]QQQ\Q*QQQSP
--Q	Q
QQQ
QQQQQ--QQTQQQ	Q
,QLQM---s(Q]QQQ\Q*QQQSP
--Q	Q
QQQ
QQQQQ--QQTQQQ	Q
,QLQM---s)Q]QQQ\QU*QQQSP
--Q	Q
QQQ
QQQQQ--QQTQQQ	Q
,QLQM---s*Q]QQQ\QQQSP
--Q	Q
QQQ
QQQQQ--QQTQQQ	Q
,QLQM---s+Q]QQQ\QQVQ7Q8QW---Q	Q
QQQ
QQQQQ--QQTQQQ	Q
,QLQM---s,Q]Q	QXQQY-QZQQ[Q	QX,--QQQQ	QZ,--s-Q\Q]\"O\2s/Q]QQQQ--Q	Q
Q\/Q
QQQQQ--QQQQQ	Q
,--QQQ--s0Q^s1Q_s2Q`s3\	1Qaks4Qbs5Qcs6Qds7Qes8Qfs9Qgs:Qhs;Qis<Qjs=Qks>Qls?Qms@QnsAQosBQpsCQqsDQrsEQssFQtsGQusHQvsIQwsJQ�QxksK\LO�2Qy2sN\LO�2Qz2sO\LO�2Q{2sP\LO�2Q|2sQQ}sRQ~sSQsTQ�sUQ�sVQ�sWQ�sXQ�sYQ�sZQ�s[Q�s\Q�s]Q�s^Q�s_Q�s`\aO�2\LO�2Q�22sdQ�se\aO�2\LO�2\fQ�2Q�222sg\fQ�2Q�2sh\O�2\j\LO�2\kO�\LO�Q�2Q�2222sn\O�2\j\LO�2\kO�\LO�Q�2Q�2222so\pQ�2sq\O�2\j\LO�2Q�222srQ�ssQ�stQ�suQ�svUswP!)��ConfigDictTesti�	z)Reading logging config from a dictionary.r r�r��form1r,z%(levelname)s ++ %(message)srAr�r��logging.StreamHandlerr~r,r�r7zext://sys.stdoutrvr��loggersr<r9zext://sys.stdbout�NTOSET�WRANING�misspelled_name�()z.ExceptionFormatterz"%(levelname)s:%(name)s:%(message)s�form2z.formatFunc�form3�hand2z.CustomHandlerr�zinvalid parameter namerfr��compiler�incrementalr��filters�filt1rG�true_formatters�handler_configszcfg://true_formatterszcfg://handler_configs[hand1]r�r@rA�
terminator�!
z%(message)s ++ %(customfield)sr�r{�defaultvaluec�8``�\sQsQsnQsU1QksQsUsU9s!)�ConfigDictTest.CustomFormatterir�c�$:�[RU_U2!r
)r�r,�rEr�r�s&&�rIr,�%ConfigDictTest.CustomFormatter.formats����7�>�&�)�)rnr�)	rurvrwrx�custom_propertyr,rzr{r�r�s@@rI�CustomFormatterr�s������	*�	*rnr��custom�style�{r��%Y-%m-%d %H:%M:%S�	{message}r��value�console�	bufferingzlogging.handlers.MemoryHandler�capacityr��
flushLevelr��mymoduler��true�mySimpleFormatterz1%(asctime)s (%(name)s) %(levelname)s: %(message)s�$�
fileGlobal�bufferGlobal�validate�my_test_logger_custom_formatterz.myCustomFormatterz2%(levelname)s:%(name)s:%(message)s:%(customfield)s�myvalue�h1�logging.FileHandler�ah�logging.handlers.QueueHandlerc�8``�\sQsQsnQU1QkksQsUsU9s!)�$ConfigDictTest.DeprecatedStrmHandleri�c�*:�[RU_UQ5P!�r�)r�r�)rE�strmr�s&&�rIr��-ConfigDictTest.DeprecatedStrmHandler.__init__�s����G��D��)rnr�r
�rurvrwrxr�rzr{r�r�s@@rI�DeprecatedStrmHandlerr�s����	*�	*rnrc�F�[OOU2P!r
)rr$�
dictConfig)rEr&s&&rIr(�ConfigDictTest.apply_config
s�����!�!�$�'rnc�V�[OU2oUOV22P!r
)r�getHandlerByNamer�)rErGr�rTs&&& rI�
check_handler�ConfigDictTest.check_handler
s ���$�$�T�*�����a�%rnc���[O29^tt^2oUOUO2UO	Q[
O2[
O2oUOUO22UOUO22UOQ,UQ5UO,2PPP2P!)%fhP!9h)r�r�r,)rr-r(r.r
rr:r r�rrr�rlr/s&  rIr1�ConfigDictTest.test_config0_ok
s���
�
$�
$�
&�
&�&����d�l�l�+����w��(=�(=�>��&�&�(�F��K�K��)�)�+�,��L�L��*�*�,�-��!�!��#��
"�
�
�!�!�"�%�'�
&�
&�
&�s�B4C�C.	�&C.	c��[O29^tt^2oUOU2[OQ2oUOUO
22UOUO
22UOQQ,UQ5UO,2PPP2P!)%fhP!9hr;r>r?s&&  rIr@�ConfigDictTest.test_config1_ok+
rBrCc�^�UO[UOUO2P!r
rErqs&rIrG�#ConfigDictTest.test_config2_failure:
rIrnc�^�UO[UOUO2P!r
)rvr�r(�config2arqs&rI�test_config2a_failure�$ConfigDictTest.test_config2a_failure>
������)�T�%6�%6��
�
�Frnc�^�UO[UOUO2P!r
)rvr�r(�config2brqs&rI�test_config2b_failure�$ConfigDictTest.test_config2b_failureB
rrnc�^�UO[UOUO2P!r
rKrqs&rIrM�#ConfigDictTest.test_config3_failureF
rIrnc��[O29^tt^2oUOUO2UO	Q[
O2[2g[c[
OQ2Lh9h[OO]2SOSO2Q2SO,2PPP2P!)%fhP!9h)r�rQrR)rr-r(rSr
rr:rrTr�rUrVr]r[rl�rEr0s& rIrW�ConfigDictTest.test_config4_okJ
s���
�
$�
$�
&�
&�&����d�l�l�+����w��(=�(=�>�
2�"�n�$���
2��!�!�.�1�
2���J�J�O�O�A�����V�_�_�.�A�
C�
�!�!�"�%�'�
&�
&�
&�s6�<C'�
A&�&	B
�0B
�C'�	B
�
AC'�'C8	�0C8	c��[O29^tt^2oUOUO2[	2g[c[
OQ2Lh9h[OO]2SOSO2Q2SO,2PPP2P!)%fhP!9hrP)
rr-r(�config4arrrTr�rUrVr]r[rlr!s& rI�test_config4a_ok�ConfigDictTest.test_config4a_okZ
s���
�
$�
$�
&�
&�&����d�m�m�,�
2�"�n�$���
2��!�!�.�1�
2���J�J�O�O�A�����V�_�_�.�A�
C�
�!�!�"�%�'�
&�
&�
&�s5�C�
A�	A*�A*�'C�)A*�*AC�C	�C	c�l�UOUOQ5UOQ[2P!)r[r�)r@r\r
r�rqs&rIr]�ConfigDictTest.test_config5_oki
s'�����D�L�L��1����7�M�2rnc��QoUO[U29^tt^2UOUOQ5PPP2P!)%fhP!9h)z�Support for custom logging handlers with the 'strm' argument is deprecated and scheduled for removal in Python 3.16. Define handlers with the 'stream' argument instead.r[)�assertWarnsRegex�DeprecationWarningr@�.config_custom_handler_with_deprecated_strm_arg)rEr0s& rI�5test_deprecation_warning_custom_handler_with_strm_arg�DConfigDictTest.test_deprecation_warning_custom_handler_with_strm_argm
sI��
B�	�
�
"�
"�#5�s�
;�
;�� � ��([�([� �\�<�
;�
;�
;�s�A	�	A	�A	c�^�UO[UOUO2P!r
)rvr�r(rarqs&rI�test_config6_failure�#ConfigDictTest.test_config6_failurev
s�����)�T�%6�%6����Ernc���[O29^tt^2oUOUO2[O
Q2oUO
UO22UOUO22UOQQ,UQ5UO,2PPP2[O29^tt^2oUOUO2UOQ[O2[O
Q2oUOUO2[O
Q2oUO
UO22UOUO22UOQQ,UQ5UO,2PPP2P!)%fhCK9h)%fhP!9h)r<r�r�rfr=r,�r�r��r�r�)rr-r(r�rr r�rrr�rlrkr
r:rDrr/s&  rIrn�ConfigDictTest.test_config7_oky
s���
�
$�
$�
&�
&�&����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%�BG�C'G�G	�G	�G0	�(G0	c�b�[O29^tt^2oUOUO2[O
Q2oUO
UO22UOUO22UOQQ,UQ5UO,2PPP2[O29^tt^2oUOUO2UOQ[O2[O
Q2oUOUO2UO
UO22UOUO22[O
Q2oUO
UO22UOUO22UO,QNUQ5UO,2PPP2P!)%fhCK]9h)%fhP!9h)r<r�r�rfr=r,)r3r4�r�r��r�r�)rr-r(r�rr r�rrr�rlrur
r:r�rr/s&  rI�test_config_8_ok�ConfigDictTest.test_config_8_ok�
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%�BH	�D%H�	H	�H	�H.	�&H.	c�J�[O29^tt^2oUOUO2UO	Q[
O2[
OQ2o[
OQ2oUOUO22UOUO22UOUO22UO,QNUQ5UO,2PPP2[O29^tt^2oUOUO2UO	Q[
O2[
OQ2oUOUO2UOUO22UOUO22[
OQ2oUOUO22UOUO22WOUO22UO,QNUQ5UO,2PPP2P!)%fhCK|9h)%fhP!9h)r�r<rer�rfrgrh)rr-r(rir
rr:r r�rrr�rjrl�config8ar�rrls&   rI�test_config_8a_ok� ConfigDictTest.test_config_8a_ok�
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=�/EJ�=J	�J	�J"	�J"	c��[O29^tt^2oUOUO2UO	Q[
O2[
OQ2oUOUO22UO,UQ5UOUO2UOUO22UO,UQ5UOUO2UOUO22UOQ,UQ5PPP2P!)%fhP!9h)r�r<r�r3)
rr-r(r}r
rr:r r�rrrl�config9a�config9br/s&  rI�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�DE�E	�E	c���[O29^tt^2oUOUO2UO	Q[
O2[
OQ2oUOUO22[
OQ2oUOUO22[
OQ2oUOUO22[
OQ2oUOUO22UOQQ,UQ5PPP2P!)%fhP!9h�r�r<r�rfzcompiler.parser.codegenr�)r�r�r4)rr-r(�config10r
rr:r r�rrr�rlr/s&  rI�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�E	�E	c�>�UOUO2P!r
)r@�config11rqs&rI�test_config11_ok�ConfigDictTest.test_config11_ok
s�����T�]�]�+rnc�^�UO[UOUO2P!r
)rvr�r(�config12rqs&rI�test_config12_failure�$ConfigDictTest.test_config12_failure������)�T�%6�%6��
�
�Frnc�^�UO[UOUO2P!r
)rvr�r(�config13rqs&rI�test_config13_failure�$ConfigDictTest.test_config13_failurerQrnc��[O29^tt^2oUOUO2[O
Q*oUO
UOQ2UO
UOQ2[OQ2UOUO2Q2PPP2P!)%fhP!9h)r�rAr��Exclamationz
Exclamation!
)rr-r(�config14rr$r]r@r�r�r�r[)rEr0rTs&  rI�test_config14_ok�ConfigDictTest.test_config14_oks���
�
$�
$�
&�
&�&����d�m�m�,��!�!�'�*�A����Q�U�U�E�*����Q�\�\�5�1��O�O�M�*������� 1�3C�D�
'�
&�
&�
&�s�B!C
�
C	�C	c�b�UO29^tt^2[QQ2oQ]QQQQQUQQ	--Q
QQ,--oUOU2UOU2PPP2[OO
]*oUO
[UW2P!)%fhKJ9h)r�rqr�rAr'r�r��filenamer�rrv)rsrnr(rrvrAr�r)rErmr$r�s&   rI�test_config15_ok�ConfigDictTest.test_config15_oks���
�
+�
+�
-�
-���(9�:�B��1����!6�"�B�"�G���������F�
���f�%����f�%�%.�(�,�,�'�'��*�����(�'�2�6�+.�
-�s�AB�B.	�'B.	c�|�UOUO2[OQ*oUOO[OQQQQ-22oUOUQ2UOO[OQQ-22oUOUQ2P!)r�r0�Hellor{r|zHello ++ customvaluezHello ++ defaultvalue)r(�config16rr$r~r,r�r])rErTrs&  rI�test_config16_ok�ConfigDictTest.test_config16_ok8s������$�-�-�(����g�&�����#�#�G�$9�$9�
�G�]�M�:�%<�=������!7�8����#�#�G�$9�$9�
�G��%�������!8�9rnc��UOUO2[OQ*oUO	UO
OQ2P!)r�r�)r(�config17rr$r]r~r�rys& rI�test_config17_ok�ConfigDictTest.test_config17_okFs>�����$�-�-�(����g�&��������4�4�g�>rnc���UOUO2[OQ2O]*oUOUO[O2P!)r�)r(�config18rr rAr]r�r��rEr�s& rI�test_config18_ok�ConfigDictTest.test_config18_okKsI�����$�-�-�(��#�#�J�/�8�8��;������+�+�W�]�]�;rnc��UOQ2o[OO]U2oUO	2UOUOO[O2QQ5UOoUOO2[OQU1QQ5o[OQ[!U22oVa*o]o[!U2o	U	]6�c&UO#VxP2o
V�*
oV�*o	J,UO%2UOOQ2[OO'2[(O*U2P!SOOQ2[OO'2[(O*S2h9h)rzthe listener did not start�r0r�g@r�r�)r�rr$�listenr�rDror�rr�rKrOrI�create_connectionr�r�r^�sendrM�
stopListeningrrg)rE�text�verifyr]rKr�r�rk�	sentsofar�left�sents&&&        rI�setup_via_listener�!ConfigDictTest.setup_via_listenerPsF���{�{�7�#���N�N�!�!�!�V�,��	���	���������W�%9�%9�:�8�	�	:��v�v��	���
�
��	,��+�+�[�$�,?��M�D��;�;�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�$AF�:5F�AGc���[O29^tt^2oUO[OUO
22UO
Q[O2[OQ2oUOUO22[OQ2oUOUO22[OQ2oUOUO22[OQ2oUOUO22UOQQ,UQ5PPP2P!)%fhP!9hrE)rr-rx�json�dumpsrFr
rr:r r�rrr�rlr/s&  rI�test_listen_config_10_ok�'ConfigDictTest.test_listen_config_10_okls
��
�
$�
$�
&�
&�&��#�#�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�D9E"�"E3	�+E3	c���[O29^tt^2oUO[O[
O22[OQ2oUOUO22UOUO22UOQQ,UQ5UO,2PPP2P!)%fhP!9hr;)
rr-rxr"r#rr�rr r�rrr�rlr/s&  rI�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��*�*�,�-��!�!���#��
"�
�

�!�!�"�%�'�
&�
&�
&�s�B.C�C(	� C(	c�"�QoQo[OQ2o[O[O
2o[O29^tt^2oUOVA2UOUO22UOUO22PPP2UO,WQ5UOQQ,QQ5[O29^tt^2oUOU2[OQ2oUOUO22UOUO22PPP2UOQQ	,UQ5UOQQ,QQ5[O29^tt^2oUOUPPP/*U2[OQ2oUOUO22UOUO22PPP2UOQ
Q,UQ5UOQQ,QQ5P!)%fhCK�9h)%fhCK9h)%fhKd9h)c��P!r
r���stuffs&rI�verify_fail�6ConfigDictTest.test_listen_verify.<locals>.verify_fail�s��rnc��UPPP/*!r
r�r�s&rI�verify_reverse�9ConfigDictTest.test_listen_verify.<locals>.verify_reverse�s����2��;�rnr<r�r)rfr=r,r3r4r7r8)
rr r"r#rr�rr-rxr�rrr�rl)rEr�r�r#�to_sendr0s&     rI�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'�
&�
&��'�
&�
&��$'�
&�s9�AI�<A&I*�1A1I>�I'	�I'	�*I;	�3I;	�>J	�J	c���[OOP2oP	Um[O
29^tt^2oUO
2UOUOO[O2QQ5[OU2UOUO[2PPP2P!)%fhP!9h)r�z'the listener did not report the failurern)rr$ror�r�catch_threading_exceptionr�rDror�rrLrgr2�exc_type�
OverflowError)rEr]�cms&  rI�test_listen_server_error�'ConfigDictTest.test_listen_server_error�s���
�N�N�!�!�"�%�����
�
7�
7�
9�
9�R�
�G�G�I��O�O�A�G�G�L�L��)>�)>�?� I�
�
K��(�(��+��M�M�"�+�+�}�5�:�
9�
9�
9�s�BC�C!	�C!	c�^�UO[UOUO2P!r
)rvr�r(�
bad_formatrqs&rI�test_bad_format�ConfigDictTest.test_bad_format�s�����*�d�&7�&7����Irnc��[OUO2oQUQ*Q*Q$UOU2[O
Q2O]*oUOUO[O2UOUOO[O2UO[[O22QQ,2P!)z-${asctime} (${name}) ${levelname}: ${message}r�r�r,r�r�r�)r%�deepcopyr�r(rr rAr�r�rur~�_style�StringTemplateStyler]�sorted�getHandlerNames�rEr$r�s&  rI�!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�	9rnc���UOUO2[OQ2O]*oUOUO[2P!�r�)r(�custom_formatter_class_validaterr rAr�r~rrjs& rI�)test_custom_formatter_class_with_validate�8ConfigDictTest.test_custom_formatter_class_with_validate�sJ�����$�>�>�?��#�#�$E�F�O�O�PQ�R�����g�/�/�1C�Drnc���UOUO2[OQ2O]*oUOUO[2P!r�)r(� custom_formatter_class_validate2rr rAr�r~rrjs& rI�*test_custom_formatter_class_with_validate2�9ConfigDictTest.test_custom_formatter_class_with_validate2�sJ�����$�?�?�@��#�#�$E�F�O�O�PQ�R�����g�/�/�1C�Drnc��UOO2oQUQ*Q*Q$UOU2[OQ2O
]*oUO
UO[2P!)r�r�r�r�r�)	r�r%r(rr rAr�r~rr�s&  rI�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�Drnc�^�UO[UOUO2P!r
)rvr�r(� custom_formatter_class_validate3rqs&rI�*test_custom_formatter_class_with_validate3�9ConfigDictTest.test_custom_formatter_class_with_validate3�s �����*�d�&7�&7��9^�9^�_rnc�^�UO[UOUO2P!r
)rvr�r(�custom_formatter_with_functionrqs&rI�,test_custom_formatter_function_with_validate�;ConfigDictTest.test_custom_formatter_function_with_validate� �����*�d�&7�&7��9\�9\�]rnc�^�UO[UOUO2P!r
)rvr�r(�custom_formatter_with_defaultsrqs&rI�,test_custom_formatter_function_with_defaults�;ConfigDictTest.test_custom_formatter_function_with_defaultsr�rnc+��	�QQAQ,QBNQQQQ]Q]Q	]	Q
]Q]Q]Q
] P]
QQQQ]Q]Q	]	P]
QQCQQ]Q]Q]---
QQCQQQQ,Q,Q,QDN-o[OOU2oUOUO	Q2]2UOUO	Q2Q2UOUO	Q 2Q2UOUO	Q!2Q2UOUO	Q"2Q2UOUO	Q#2]2UOUO	Q$2]2UOUO	Q%2]	2UOUO	Q&2]
2UOUO	Q'2Q2UOUO	Q(2Q2UOUO	Q)2Q2UOUO	Q*2]2UOUO	Q+2]2UOUO	Q,2]	2UOUO	Q-2]
2UOUO	Q.2Q2UOUO	Q/2Q2UOUO	Q02Q2UOUO	Q12Q2UOUO	Q22]2UOUO	Q32]2UOUO	Q42]2UOUO	Q52]2UOUO	Q62Q2UOUO	Q72Q2UOUO	Q82]2UOUO	Q92]2UO	Q:2oUOUO]2,QBN2UO
[UOQ;2UO
[UOQ<2UO
[UOQ=2UO
[UOQ>2UO
[UOQ?2UO
[UOQ@2P!)E�atuple�alistr��b�adictrSr�r�zalpha numeric 1 with spacesualpha numeric 1 %( - © ©ß¯zalpha numeric ] 1 with spacesu"alpha ]] numeric 1 %( - © ©ß¯]u# alpha [ numeric 1 %( - © ©ß¯] z alpha �nest4�somelist�grTr��j�somedictza with 1 and spaceza with ( and space�nest1�nest2r�lr�r��nest3zcfg://atuple[1]zcfg://alist[1]zcfg://nest1[1][0]zcfg://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]z"cfg://adict[nest4][somelist][1][0]z"cfg://adict[nest4][somelist][1][1]zcfg://adict[nest4][somelist][2]zcfg://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��)r�r��c)r�)rTr�r�)�ozcfg://alist�p)	rr$�BaseConfiguratorr]�convert�poprv�KeyErrorr�)rErS�bcrs&   rI�test_baseconfig�ConfigDictTest.test_baseconfigsB���i��_���S�#�q�-��0�1�/�"�4�r�5���B��R����c�1�1�A�4�q����"8���a�,�q�,�q�"�
��,
�+��c�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�ernc	��]QHGoQQ[O2oUQQQ,2oUQQ,Q	5oQ
]QQQ
UQU--QQQQQ,--o[O
29^tt^2oUO
U2[OQ2PPP2UOWO2Q2P!)%fhK29h)rW)�
namedtuplec�@``�\sQsQsnU1QksU1QksQsUsU9s!)�1ConfigDictTest.test_namedtuple.<locals>.MyHandleriNc�8:�[RU_U-U@VmP!r
)r�r��resource)rEr�rjrkr�s&&*,�rIr��:ConfigDictTest.test_namedtuple.<locals>.MyHandler.__init__Os����� �$�1�&�1�,4�
rnc�:�U9OQUOO0*
tm[RU_U2!�� )r0r��typer�rxr�s&&�rIrx�6ConfigDictTest.test_namedtuple.<locals>.MyHandler.emitSs2����
�
��$�-�-�"4�"4�!5�6�6�
��w�|�F�+�+rn)r�r�r�s@@rI�	MyHandlerr�Ns����
5�
,�
,rnr��Resourcer��labels�my_typer�)r�r�r�rA�	myhandlerr�r�rvr,r�zsome logzsome log my_type
)
�collectionsr�rr:rr3r(r�r]r[)rEr�r�r�r�r$r6s&      rI�test_namedtuple�ConfigDictTest.test_namedtupleJs���*�	,��-�-�	,��j�6�8�*<�=����C�5�9��
�q����)�����
�g�v�z�K�=�A�	
���
$�
$�
&�
&�&����f�%��L�L��$�'�	
������*�,@�A�'�
&�s�'(B9�9C		�C		c	���QoUOQ]QQQQU,--2[O2O]*UIfPg,[O2mP!)c��]!r�r�)r�s&rIr��AConfigDictTest.test_config_callable_filter_works.<locals>.filter_js��rnr�rvr,r9r��r(rr r��rEr�s& rI�!test_config_callable_filter_works�0ConfigDictTest.test_config_callable_filter_worksisc��	�����q�&�7�G�Y��	�"J�
�	�� � �"�*�*�1�-��8�8�8�&(�����#rnc	���[OQ2oUOQ]QQQQU,--2[O2O]*UIfPg,[O2mP!)r�r�rvr,r9r�)rr�r(r r�r�s& rI�test_config_filter_works�'ConfigDictTest.test_config_filter_worksrsl���.�.��-������q�&�7�G�Y��	�"J�
�	�� � �"�*�*�1�-��8�8�8�&(�����#rnc	���QQ2oU2oUOQ]QQQQU,--2[O2O]*UIfPg,[O2mP!)c�(`�\sQsQsnQsQsUsP!)�BConfigDictTest.test_config_filter_method_works.<locals>.FakeFilteri{c��]!r�r�)rEr�s&&rIr��IConfigDictTest.test_config_filter_method_works.<locals>.FakeFilter.filter|s��rnr�rGr|s@rI�
FakeFilterr�{s����
�
rnr�r�rvr,r9r�r�)rEr�r�s&  rI�test_config_filter_method_works�.ConfigDictTest.test_config_filter_method_workszsq��	�	��,������q�&�7�G�Y��	�"J�
�	�� � �"�*�*�1�-��8�8�8�&(�����#rnc
��QQ2oP]U21FD-oUO[UOQ]QQQQU,--2J/	P!)c��\sQsQsQsP!)�;ConfigDictTest.test_invalid_type_raises.<locals>.NotAFilteri�r�r�r�rnrI�
NotAFilterr��s��$rnr�r�rvr,r9r�)rvr�r()rEr�r�s&  rI�test_invalid_type_raises�'ConfigDictTest.test_invalid_type_raises�sL�����a���.�G������!�!��A�v���)�g�Y�'O�P�
�/rnc�$�[OUO2o[QQ2oVCQ*Q*Q$UdVQ*Q*Q$UdV#Q*Q*Q$PoUO	U2[
OQ2oUO[[
O22QQ,2UOUO2UOO2[
OQ2[
OQ	2[
OQ
2[ O"[ O$Q2%c.UOO&O)2%fJWUOO&O+2[-UQQ
59^tt^2oUO/2O12oPPP2UOW,QN2U%cUOO32[
OQ2oU%cUO5[6V�2P!UO5[8O:U2P!)%fhK�9hS%cSOO32[
OQ2oS%cSO5[6X�2hSO5[8O:S2h9h)r�ztest_logging-cqh-rAr�r\r�r��listenerr@rA�bazzqueue not emptyrr�)r@rAr)r%r��config_queue_handlerrnr(rrr]r�r��assertIsNotNonerr�r�r�r�r�sleeping_retryr�r��emptyr�r�rdr\rir�rrir)	rE�qspec�lspec�cdrm�qhr�rrTs	&&&      rI�do_queuehandler_configuration�,ConfigDictTest.do_queuehandler_configuration�s��
�]�]�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�.�sC�/C8J�('J�:J�J�-J�J	�J	�J�L�7L�8Lc	���[2[2,oQQ,Tt,tFDoQ[QU0Q]
-MJ	ooQ[Q*QPQPQP	-oP[Q	*[Q
*,UNUN3oP[Q*U[1o[O
VV2FDvqxUO
Vx2J	P][PQ1oP][PQ
1o[O
VV2FDmvqxUeUeJUO[29^tt^2o	UO
Vx2PPP2[W	O2o
UOU
Q2Jo	P!ttoh)%fhKB9h)r�r�r�r�r�z.listenerMakerr�r�r�z.queueMakerz.CustomQueuez.CustomListenerr@rAz Unable to configure handler 'ah')
r�r�rur��	itertools�productrr/rvr�r�rTr])rE�qsr��dqs�dl�qvalues�lvaluesrr�ctxr0s&          rI�test_config_queue_handler�(ConfigDictTest.test_config_queue_handler�sj���m�0�2�
3��(�*?�@�B�@�3���
�!�C�5�)�9�b�9�@�	�B�
�(�-�-��D��D�#�T�	
����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�E�E	�E'
� E'
c
�>�UOQ]QQQQQU---2P!)r�rA�queue_listenerr�r�r�)r()rErs&&rI�*_apply_simple_queue_listener_configuration�9ConfigDictTest._apply_simple_queue_listener_configuration�s5������q�� ��<��U�#��
�	rnzmultiprocessing.Managerc	�J�QQQP-[O2[O2[2[	21FDGoUOUQ59^tt^2UO
U2UO2PPP2JI	P!)%fhJ^9h)r�zqueue.Queuer��r)r�r��SimpleQueuer�r��subTestr�assert_not_called�rEr!rs&& rI�Atest_config_queue_handler_does_not_create_multiprocessing_manager�PConfigDictTest.test_config_queue_handler_does_not_create_multiprocessing_manager�s����=�)�R�0��K�K�M�����
$�%� �"�
�E����E��*�*��?�?��F��)�)�+�+�*�
�+�*�*�s�!"B	�B"
�B"
c�b�[2[21FDmoUOUQ59^tt^2UO[29^tt^2UOU2UO
2PPP2PPP2Jo	P!)%fhK9h)%fhJ�9h)r)r�r�rrvr�rr r!s&& rI�Ptest_config_queue_handler_invalid_config_does_not_create_multiprocessing_manager�_ConfigDictTest.test_config_queue_handler_invalid_config_does_not_create_multiprocessing_manager�sq���h� 8� :�;�E����E��*�*�D�,=�,=�j�,I�,I��?�?��F��)�)�+�-J�*�*�<�,I�,I��*�*�*�s/�B	�"B

�4B	�
B�B�B	�B.
�&B.
z@requires a debug build for testing assertions in multiprocessingc��]PHo[O%cQ,oL,QNoSFDoUOUQ59^tt^2UOU2oUO2oUO
[29^tt^2UOU2PPP2PPP2J�	P!)%fhK9h)%fhJ�9h)rW�spawn��start_method�r(r��
forkserver)	�multiprocessingr�
MS_WINDOWSr�get_contextrrvr�r)rEr-�
start_methodsr*rrs&     rI�?test_config_reject_simple_queue_handler_multiprocessing_context�NConfigDictTest.test_config_reject_simple_queue_handler_multiprocessing_context�s���	�����$�I�M�;�M�)�L����<��8�8�%�1�1�,�?�����)���&�&�z�2�2��C�C�E�J�3�9�8�*�3�2��9�8�8�s1�AB?	�B,
�B?	�,B<�5B<�7B?	�?C
�C
c��[O%cQ,oL,QNoSFD�oUOUQ59^tt^2[OU2oUO29^tt^2oUO
2o,oUO]UOUQ1]Q59^tt^2UOUO]<Q52PPP2UOUO22PPP2UO[W2]2PPP2J�	P!)%fhK`9h)%fhKL9h)%fhCJ:9h)r(r)rs)�initializer�initargs�maxtasksperchildr�r+)rr.rr-r/�Managerr��Pool�_mpinit_issue121723rr�rDrr]r^)rEr0r*rr!�qrEs&      rI�1test_config_queue_handler_multiprocessing_context�@ConfigDictTest.test_config_queue_handler_multiprocessing_contexts������$�I�M�;�M�)�L����<��8�8�%�1�1�,�?���[�[�]�]�g��
�
��A� �G����!��1I�1I�,-�v�;��"�L�L����q�u�u�R�u�'8�9�L��O�O�A�G�G�I�.�#�� � ��W��q�1�9�8�*�L�L��	#�]��9�8�8�sN�/E	�/<D8
�+"D%�
'D8
�4#E	�%D5�.D5�0D8
�8E�E�E	�E
�E
c
��[OOQ]QP	QQQQQU--QQQ,QQ	--2[O2O	U2P!)
r�r�rA�
log_to_parentr�r�r�rvr,r9)rr$r	r r�)r�message_to_logs&&rIr9�"ConfigDictTest._mpinit_issue121723,sl��	���!�!��q�&�����<��U�"��
�Z�/�!2�G�W�E�
#
�
	�	���� � ��0rnc	��[OUO2o]QHGoGoU2oU2O	2oU2O
2oVEU1FCDBo[QQ2oV�Q*Q*Q$VqQ*Q*Q$Po	UOU2[OQ2o	UO[[O22QQ,2UOU	O2UO!U	O"U2UO!U	OO"U2[OQ2o
U
%cUO%[&V�2CJ"UO%[(O*U2CJE	P![OQ2o
S
%cSO%[&X�2hSO%[(O*S2h9h)	rW)r�r7r�ztest_logging-cmpqh-rAr�r\r�r�)r%r�rr-r�r7�
JoinableQueuernr(rrr]r�r�rrr2r�r�rrir)rEr	�MQ�MM�q1�q2�q3rrmr
rTs&          rI�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)�)H�8Hc��Q]QP
QQQQQQ--QQ	QQQQ,---o[OQ	2oUOUO2UO	U2UOUO2UO	Q]-2UOUO2UQUO	U2UOUO2P!)
r�r�rAr�r,r9r�r�r�r�)rr r�rr(rD)rEr$r#s&  rI�
test_90195�ConfigDictTest.test_90195[s���
�q�&�����W��4���
���W������
�� �"�"�3�'��������)����&�!�������)����9�a�.�)�������(��-�.����&�!�������)rnc
��[OQ2[OQ2oQ]QQQQQUOQ2O2--Q	QQ,Q
Q--o[O
O
U2P!)�_multiprocessingr-r�rA�sinkr�r�r�r(rvr,r9)r�
import_moduler/r�rr$r	)rE�mpr$s&  rI�test_111615�ConfigDictTest.test_111615ys����#�#�$6�7�
�
(�
(�):�
;��
�q����<��R�^�^�G�4�:�:�<���
��V�H����
��	���!�!�&�)rnc	��QQ[OO2oQQ-oQ]QQQU-UA-QQ	Q
QQ,--o[OO	U2[O
Q2oUO
UOU2P!)c�4``�\sQsQsnU1QksQsUsU9s!)�>ConfigDictTest.test_kwargs_passing.<locals>.CustomQueueHandleri�c�Z:�[RU_[O22V mP!r
)r�r�r�r��
custom_kwargs�rErjrkr�s&*,�rIr��GConfigDictTest.test_kwargs_passing.<locals>.CustomQueueHandler.__init__�s����� �����/�%+�"rn)rXrr�s@@rI�CustomQueueHandlerrV�s����
,�
,rnr[r@rAr�rAr�r�rvr,r9)rrA�QueueHandlerr$r	rr]rX)rEr[rXr$r�s&    rI�test_kwargs_passing�"ConfigDictTest.test_kwargs_passing�s���	,��!1�!1�!>�!>�	,�
���
�
�q����/��#���
����X�J��
��	���!�!�&�)��*�*�8�4������.�.�
�>rnr�r
)xrurvrwrxryrrsrZr.r�rirFrrrLrSrr�r�r$r\rarkrur<r}r@rArFrJrNrSrXrarr<r�rerir�r�r�r�r�r�rr:rr,r(r
r1r@rGrrrMrWr%r]r-r0rnr9r=rBrGrKrOrTrYr]rbrfrkrxr�requires_working_socketr}r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrr�requires_subprocessrrrr"r%rrr�
skipUnless�Py_DEBUGr1r;�staticmethodr9rHrKrRr]rzr{r|s@rIr�r��	s����3� /� I� I��,��	�1����9��
�
	���1��g��(��.�	�
�	��i��'��
��G�.	�1����9��
�
	���1��g��(��.�	�
�	���'��g�Y�!�
�	��i�
�+�G�8	�1����9��
�
	���1��g��(��.�	�
�	���'�!�
�
	��i��'��
�)�H�8	�1����9��
�
	���1��g��(��/�	�
�	���'��g�Y�!�
�	��i�
�+�G�8	�1����9��
�
	���1��g��(��.�	�
�	���'��g�Y�!�
�	��i�
�+�H�:	�1����9��
�
	���1��g��(��.�	�
�	���'��g�Y�!�
�	��i�
�+�H�8	�1����9��
�
	���1��/��(��.�	�
�	���'��g�Y�!�
�	��i�
�+�G�8	�1����x�"7�7��?��
�	���1��g��(��.�	�
�	��h��g�Y�
�!�G�0	�1����)��?��
��x�-�/��?��
��z��?��

�	���1��g��(��.�	�
��{��

�	��h��g�Y�
�7�H�F	�1����9��
�
	���(�%5�5��g��(��.�	�
�	���'��g�Y�!�
�	��i�
�+�G�:	�1����9��
�
	���(�%5�5��g��(��.��.��
�	���'��g�Y�!�
�	��i�
�-�G�<	�1����9��
�
	���1��g��(��.�	�
�	���'��g�Y� �
�	��i�
�+�G�<	�1�"�U����9��
�
	���1��g��(��.�	�
�	���'��g�Y��
� �
�	��i�
�1�G�>	�1�"�T����9��
�
	���1��g��(��.�	�
�	���'��g�Y��
� �
�	��i�
�1�H�<	�1����9��
�
	���1��g��)��.�	�
�	���)��g�Y�!�
�	��h�
�+�G�6	�1������)��
�
	���&�!�
�
�H� 	�1������&��
�
	���&�!�
�
�H�"	�1����9��
�
	���*��
�
	���1��g��(��.��W�I��
�	���'��W�I�!�
�	��i��'��
�7�H�F	�1����9��
�
	���1��g��(��.�	�
�	�.���4�
�	���'��g�Y�!�
�	��i�
�3�H�@	���9��
�
	���1��g��(��.�	�
�	�.���4�
�	���'��g�Y�!�
�	��i�
�1�H�>	�1����9��
�
	���1��g��(��.�	�
�	�.���4�
�	���'��g�Y�!�
�	��i�
�3�H�@	�1����9��
�
	���1��g��(��.���5� �%��	�
�	��i��'��
�'�H�8	�1����;��]�N�;��
�	���1��g��(��.�	�
�	��i��'��
�!�H�,*�'�+�+�*�	�1����o����.��+��%�w���

�	���1��h��(��.�	�
�	��i��'��
�+�H�8	�1����0����
��9��A��)����g��
�	�����[�M��V��
��H�2	�1����M���"�
�	���0����0��

��9��A��0��,����


�	�����^�,��V��
�-�J�B	�1����h�!6�6��>��E��
�	���0��W����,�	�
�	�-����W�I��V�0�
�#'�#�8	�1�����$9�9��>��E��
�	���0��W����,�	�
�	�-����W�I��V�0�
�#(�$�8	�1�����$8�8��>��E��
�	���0��W����,�	�
�	�-����W�I��V�0�
�#(�$�8	�1����j��>��E��
�	���0��W����,�	�
�	�-����W�I��V�0�
�#&�"�8	�1����j��N��]�I�6��
�	���0��W����,�	�
�	�-����W�I��V�0�
�#&�"�6	�1����.��
��8��T�F��	
�	��W����
���&*�� 5� 5�*�
	�1����8��
�
	���.��W����,�	�
�	�����W�I� �
�	��Y�
�+6�2�4(�&�&� &-�
&�F�G�G�F�&� 
&�3�]�F�&�< &�D+&�Z�&�(,�G�G�E�7�2:�?�
<�
,�8
�$�$�&��'��(
�$�$�&�&�'�&�
�$�$�&�<,�'�<,�|
�$�$�&�	6�'�	6�J�
9�E�
E�
E�`�^�^�Bf�HB�>)�)�	)��&/�P�0�0�2�� � �"�F�#�3�F�4	��0�0�2�� � �"�
�$�%�,�&�#�3�,�(�$�%�,�&�,��?�?�A��� � �"�
����)�)�,L�M�K�M�#��B�
K�$�?�?�A��� � �"�
����)�)�,L�M�2�M�#��B�
2�&�1��1� �?�?�A��� � �"�3�#��B�3�6*�<*�*?�?rnr�c�.`�\sQsQsnQsQsQsUsP!)�ManagerTesti�c�t`�,nU1QkQ[O2o[OP2oUO[UO
[2UOU2UOQ2oUOQ2[OQ2UORQ,2P!)c�4:`�\sQsQsnQU1QkksQsUsP!)�6ManagerTest.test_manager_loggerclass.<locals>.MyLoggeri�c�,:�ROU2P!r
r)rEr,r0rj�exc_info�extra�loggeds&&&&&&�rI�_log�;ManagerTest.test_manager_loggerclass.<locals>.MyLogger._log�s����
�
�c�"rnr�rt)rurvrwrxrmrzr{)r}rls@�rI�MyLoggerrh�s����
#�
#rnrorzzshould appear in loggedzshould not appear in logged)
rrr7rv�	TypeError�setLoggerClassr/r r�r])rEro�manr#rls&   @rI�test_manager_loggerclass�$ManagerTest.test_manager_loggerclass�s������	#�w�~�~�	#��o�o�d�#�����)�S�%7�%7��=����8�$����v�&�����0�1����5�6�����";�!<�=rnc��[OP2o[2oUOU2UO	UO
U2P!r
)rr7r��setLogRecordFactoryr]�logRecordFactory)rErrris&  rI�test_set_log_record_factory�'ManagerTest.test_set_log_record_factory�s;���o�o�d�#���8������)�����-�-�x�8rnr�)rurvrwrxrsrxrzr{r|s@rIrere�s����>� 9�9rnrec�.`�\sQsQsnQsQsQsUsP!)�ChildLoggerTesti�c��[O2o[OQ2o[OQ2oUOQ2oUOQ2oUOU[OQ22UOU[OQ22UOQ2oUOQ2oUOQ2oUOU[OQ22UOU[OQ22UOVV2P!)�abczdef.ghi�xyzzuvw.xyz�def�ghi�abc.defzabc.def.ghi)rr �getChildr2)rEr��l1�l2�c1�c2�c3s&      rI�test_child_loggers�"ChildLoggerTest.test_child_loggers�s��������
�
�
�u�
%��
�
�
�y�
)��
�Z�Z��
��
�Z�Z�	�
"���
�
�b�'�+�+�E�2�3��
�
�b�'�+�+�I�6�7�
�[�[��
��
�[�[��
��
�[�[��
#���
�
�b�'�+�+�I�6�7��
�
�b�'�+�+�M�:�;��
�
�b�rnc���[O2o[OQ2o[OQ2o[OQ2o[OQ2oUO2oV%.oUOVvU*2UO	V72UO2oUOU.U2UO2oUO[2U2P!)r@�foo.barzfoo.bar.baz.bozzrA)rr �getChildrenr]�assertNotInrI)rEr�r�r��l3�l4�kidsris&       rI�test_get_children�!ChildLoggerTest.test_get_children�s��������
�
�
�u�
%��
�
�
�y�
)��
�
�
�1�
2��
�
�
�u�
%���}�}����8������(�?�3�����&��~�~������"��t�$��~�~���������%rnr�)rurvrwrxr�r�rzr{r|s@rIr{r{�s����
�
&�
&rnr{c��\sQsQsQsP!)�DerivedLogRecordi�r�r�r�rnrIr�r��r�rnr�c�4`�\sQsQsnQsQsQsQsUsP!)�LogRecordFactoryTesti�c��QQ[O2o[OU2U[2UmUOOUO
2[O2Um	P!)c�.`�\sQsQsnQsQsQsUsP!)�2LogRecordFactoryTest.setUp.<locals>.CheckingFilteri�c��VmP!r
�r�)rEr�s&&rIr��;LogRecordFactoryTest.setUp.<locals>.CheckingFilter.__init__�s���rnc�z�[U2oV OIc QU8QUO80o[U2gP	!)zUnexpected LogRecord type z, expected )r�r�rp)rEr�r]r0s&&  rIr��9LogRecordFactoryTest.setUp.<locals>.CheckingFilter.filter�s3����L���H�H�$�IJ� �H�H�&�C�#�C�.�(�rnr�)rurvrwrxr�r�rzr{r|s@rI�CheckingFilterr��s����
�
�
rnr�)
rr�rrJr�r�r2r��getLogRecordFactory�orig_factory)rEr�s& rIrJ�LogRecordFactoryTest.setUp�sV��
	�W�^�^�
	�	���t��$�%5�6������"�"�4�;�;�/�#�7�7�9��rnc��UOOUO2[O	U2[
OUO2P!r
)r2r�r�rrUrrvr�rqs&rIrU�LogRecordFactoryTest.tearDown�s<�����%�%�d�k�k�2����$���#�#�D�$5�$5�6rnc�$�UO[UOOUO	22[
O[2UOOUO	22UOQ,2P!)rv)rvr�r�)
rvrpr2r�rrrrvr�r�rlrqs&rI�test_logrecord_class�)LogRecordFactoryTest.test_logrecord_class�sn�����)�T�%5�%5�%=�%=��+�+�-�	/��#�#�$4�5������t�0�0�2�3����!�
�	rn)r�r�)	rurvrwrxrJrUr�rzr{r|s@rIr�r��s����:�$7�
�rnr�c�\`�\sQsQsnQsQsQsQsQsQs	Qs
Q	sQ
sQs
QsUsP!)
�QueueHandlerTestirc���[OU2[OP2Um[O
O
UO2UmQUm[OQ2Um
P
UOmUOO[O2UOOUO2P!)r��que)rrJr�r�rrAr\�que_hdlrrGr �
que_loggerr�r8r�rCrqs&rIrJ�QueueHandlerTest.setUps������t���[�[��_��
��(�(�5�5�d�j�j�A��
���	�!�+�+�E�2���$)����!���� � ����1����"�"�4�=�=�1rnc�f�UOO2[OU2P!r
)r�rMrrUrqs&rIrU�QueueHandlerTest.tearDownr�rnc��UOOUO22UO[O
UOO2UOOUO22UO[O
UOO2UO2oUOOU2UOO
2oUOU[O2UOUOUOO2UOUOUO1UP12P!r
)r�r�rrrvr��Empty�
get_nowaitr�r�r�rr+r]rGr0rj)rEr0rs&  rI�test_queue_handler�#QueueHandlerTest.test_queue_handlers��������d�/�/�1�2����%�+�+�t�z�z�'<�'<�=������T�.�.�0�1����%�+�+�t�z�z�'<�'<�=����!��������$��z�z�$�$�&�����d�G�$5�$5�6�������D�O�O�$8�$8�9����$�(�(�D�I�I�.��d��<rnc��UO2o[O[O2oQoUO	UO
V!Q5o[OUO2oUOOU2UOOU2UOO2oUOVFO2UOVFO 2P!)z {name} -> {levelname}: {message})rG�	levelnamerv)rrrr�r�r,rGr<r=r�r?r�r�r�r�r]r0rv)rEr0r��log_format_str�
formatted_msgr~�
log_records&      rI�test_formatting� QueueHandlerTest.test_formatting%s������!���(�(����9�	�;��&�-�-�4�9�9�8A�.�P�
��%�%�d�o�o�6�	��
�
�"�"�9�-�������$��Z�Z�*�*�,�
�������7�����(:�(:�;rnc���[[O22o[OOUOU2oUO2UOOUO22UOOUO22UOOUO22UO2UO2UOUO[O QQ52UOUO[O"QQ52UOUO[O$QQ52UO'2[[O22oUO)[O$2[OOUOUP	Q5oUO2UOOUO22UOOUO22UOOUO22UO2UO+UO[O QQ52UO+UO[O"QQ52UOUO[O$QQ52UO'2P!SO2SO2h9hSO2h9h)r�)rrvr�r�r�r�r�r�)rr�MatcherrrA�
QueueListenerr�r�r�r�rrr�rjrirD�matchesr�r�r�rMr8r��rEr�rs&  rI�test_queue_listener�$QueueHandlerTest.test_queue_listener2sB���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��
�
���/
�M�M�O��M�M�O��$
�M�M�O�s�A;L=�A;M"�="M�"M4c��[[O22o[OOUOU29^tt^2oUOU[OO
2UOUO2PPP2UOWO2UO2UOUO2P!)%fhKX9hr
)rrr�rrAr�r�r�rrMr;rir�s&  rI�#test_queue_listener_context_manager�4QueueHandlerTest.test_queue_listener_context_managerTs����g�o�o�/�0��
�
�
�
+�
+�D�J�J��
@�
@�H��!�!�(�G�,<�,<�,J�,J�K�� � ��!1�!1�2�A�	
���(�*�*�+�	�
�
�����(�*�*�+�A�
@�s�AC(�(C8	�1C8	c���[[O22o[OOUOU29^tt^2oUO[UO2PPP2W9^tt^2UO[UO2PPP2UO2UO2P!)%fhKe9h)%fhKE9hr
)rrr�rrAr�r�rvrr�rir�s&  rI�test_queue_listener_multi_start�0QueueHandlerTest.test_queue_listener_multi_start_s����g�o�o�/�0��
�
�
�
+�
+�D�J�J��
@�
@�H����l�H�N�N�;�A��X����l�H�N�N�;��	�����
�
��A�
@���X�s$�!C�!C#�C 	�C 	�#C3	�,C3	c���[OOUOUO2oUO2]]*UOOUO2P	Q5UO2UOUOO2O2O!Q2]2UOUOO2O2O!Q2]2P![c9oSoSOOSO2SQ5Po=CK	Po=hh9h)r��rj��
stack_info�	Traceback�Stack)rrAr�r�r;r��ZeroDivisionErrorr�rTrrr�rir]r7r[r�ra)rErr��excs&   rI�&test_queue_listener_with_StreamHandler�7QueueHandlerTest.test_queue_listener_with_StreamHandlerjs���#�#�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�H��	I�s�	D�	E�%E�&-E�Ec���UOOUO2UOO	UO
2[OOUOUO2oUO2UOOQ2UO2UOUOO2O!2Q2P!)r�zque -> ERROR: error)r�r?r>r�rCr;rrAr�r�r�r�rir]r7r[r�)rErs& rI�*test_queue_listener_with_multiple_handlers�;QueueHandlerTest.test_queue_listener_with_multiple_handlersxs����
�
�"�"�4�#6�#6�7����"�"�4�>�>�2��#�#�1�1�$�*�*�d�m�m�L�����������g�&��
�
��������-�-�/�5�5�7�9N�Orn)rGr�r�r�)rurvrwrxrZrJrUr�r�r�r�r�r�r�rzr{r|s@rIr�r�sC����3��2� �
=�<� �D	,�	�K�	P�	Prnr�r�)rc�
`�\sQsQsnQs]s\Q2s\O\
OOQ2Q2s
\O\
OOQ2Q2s\Q2sQsQ	sQ
sUsP!)�QueueListenerTesti�zf
Tests based on patch submitted for issue #27930. Ensure that
QueueListener handles all log messages.
c�J�[OQU*2oUO[O2[OOU2oUO
U2[OOU2oUO2UOQ2UOQ2UOQ2UOQ2UOQ2UO2UOU2UO2P!)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�five)
rr r8r9rAr\rCr�r�r�rirNrM)�	log_queuerr#r�rs&&   rI�
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�Ornr�c��[UO2FD>o[O2oUO	V0O28QU802J@	UO
UO]UO*Q2P!�r�z&correct number of handled log messages)r��repeatr�r�r�rDr]�
call_count�rE�mock_handler�r�s&&  rI�#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�
Grnc�~�[O2[UO2FD^o[O
2oUO
V0O28QU802UO2UO2J`	UOUO]UO*Q2P!r�)r�*skip_if_broken_multiprocessing_synchronizer�r�r-r�r�rDrMrgr]r�r�s&&  rI� test_handle_called_with_mp_queue�2QueueListenerTest.test_handle_called_with_mp_queue�s���
�>�>�@��4�;�;�'��+�1�1�3�	��"�"�9����A�.F�G����!��%�%�'�	(�

���[�3�3�Q����_�E�
Grnc#�t �UO2w�J[Oc,t!h9h3hr�)r�r�r�)r�s&rI�get_all_from_queue�$QueueListenerTest.get_all_from_queue�s3���
��#�.�.�0�0���;�;�
��	�
�s�8��5�5�8�5�8c�^�[O2[UO2FD�o[O
2oUO
V O28QU802[UOU22oUO2UO2,[OOO,,oSO!X4QSTt,tFD1o[#U[O$2%c
UO&LSMJ3	to*2J�	P!ttoh)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: %s)rr�r�r�r-r�r�rD�listr�rMrgrrAr��	_sentinelr4r�r+r0)rEr�r�rrir�s&     rI�$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�&D*�D*c�D�[O2o[OO	U2oUO2UO
2UO[29^tt^2UO2PPP2P!)%fhP!9hr
)
r�r�rrAr�r�rirvr��	task_done)rEr�rs&  rI�test_calls_task_done_after_stop�1QueueListenerTest.test_calls_task_done_after_stop�sb�����
�I��'�'�5�5�i�@�H��N�N���M�M�O��"�"�:�.�.��#�#�%�/�.�.�.�s�3B�B	�B	r�)rurvrwrxryr�rcr�rr�rrAr�r�r�r�r�r�rzr{r|s@rIr�r��s�����	�
��	�	�
�	�.
���g�&�&�4�4�h�	?�	G�
@�	G�
���g�&�&�4�4�h�	?�
	G�
@�
	G�
�	�
�	�	>�0	&�	&rnr�c�2`�\sQsQsnQs\sQsQsUsP!)�UTCi�c��[!r
)�ZERO�rE�dts&&rI�	utcoffset�
UTC.utcoffset�s���rnc��Q!)r�r�r�s&&rI�tzname�
UTC.tzname�s��rnr�)	rurvrwrxr�dstrrzr{r|s@rIr�r��s������C��rnr�c�(`�\sQsQsnQsQsUsP!)�AssertErrorMessagei�c��UOQ,UN3-U@P!Sc'oSOS[S22Po=P!Po=hh9h)Nr�)rvr]r�)rErTrvrjrkr�s&&&*, rI�assert_error_message�'AssertErrorMessage.assert_error_message�sF��	.����b�2�4�2�6�2���	.����W�c�!�f�-�-��	.�s��A	�A	�A�A	r�)rurvrwrxr	rzr{r|s@rIrr�s����.�.rnrc�`�\sQsQsnQsQQksQsQsQsQs	Qs
Q	sQ
sQs
QsQ
sQsQsQsQsQsUsP!)�
FormatterTesti�c��QQQ[OQ[OO	QQQ2Q]*QPQ	PQ
QQQ-UmQ
Q
Q--UmP!)rGzformatter.testr,�pathnamer��toz	dummy.ext�linenorjr�r0zMessage with %d %srjr�i�)r��placeholders)rr9rir�r��common�variantsrqs&rIrJ�FormatterTest.setUp�sc���$��W�]�]�������V�T�;�?��b����D��'��'�	
���
��$��
��
rnc��[UO2oUd#UOUOU*2[O
U2!r
)r�rrPrrr�)rErGrs&& rI�
get_record�FormatterTest.get_records<���d�k�k�"�����M�M�$�-�-��-�.��$�$�V�,�,rnc��UO2o[OQ2oUOUO	U2Q2[OQ2oUO[UOU2UOUO22[OQ2oUOUO22[OQ2oUOUO22[OQ2oUOUO22P!)z${%(message)s}z${Message with 2 placeholders}z
%(random)s�%(asctime)sz%(asctime)-15sz%(asctime)#15s�
rrr<r]r,rvr�r��usesTimerD�rEr�r�s&  rI�test_percent�FormatterTest.test_percents����O�O������.�/��������!��&F�G����l�+�����*�a�h�h��2��������&����m�,������
�
��%����.�/������
�
��%����.�/������
�
��%rnc���UO2o[OQQQ5oUOUO	U2Q2[OQQQ5oUO[UOU2[OQQQ5oUOUO22[OQQQ5oUOUO22[OQQQ5oUOUO22[OQQQ5oUOUO22P!)	z
$%{message}%$r��r��$%Message with 2 placeholders%$z{random}r��	{asctime}z{asctime!s:15}z{asctime:15}rrs&  rI�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������
�
��%rnc���UO2o[OQQQ5oUOUO	U2Q2[OQQQ5oUOUO	U2Q2[OQQQ5oUOUO	U2Q2[OQQQ5oUO[UOU2UOUO22[OQQQ5oUOUO22[OQ	QQ5oUOUO22[OQQQ5oUOUO22[OQ
QQ5oUOUO22P!)�
${message}r�r zMessage with 2 placeholdersz$messagez$$%${message}%$$r!z	${random}z
${asctime}z$asctimez${asctime}--rrs&  rI�test_dollars�FormatterTest.test_dollars5s^���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������
�
��%rnc��[OQ2oUOUOQ2[OQ2oUOUOQ2[OQ2oUOUOQ2[OQ2oUOUOQ2[OQQQ5oUOUOQ2[OQQQ5oUOUOQ2[OQQQ5oUOUOQ2[OQ	QQ5oUOUOQ	2[OQ
QQ5oUOUOQ
2[OQQQ5oUOUOQ2[OQQQ5oUOUOQ2[OQ
QQ5oUOUOQ
2[OQQQ5oUOUOQ2[OQQQ5oUOUOQ2[OQQQ5oUOUOQ2[OQQQ5oUOUOQ2[OQQQ5oUOUOQ2[OQQQ5oUOUOQ2[OQQQ5oUOUOQ2[OQQQ5oUOUOQ2[OQQQ5oUOUOQ2UO	[
[OQ2UO	[
[OQ2UO	[
[OQ2UO	[
[OQ2UO	[
[OQ2UO	[
[OQ2UO	[
[OQ2UO	[
[OQ2UO	[
[OQ 2UO
[
Q![OQ"QQ5UO
[
Q#[OQ$QQ5UO
[
Q%2UO	[
[OQ&QQ5UO
[
Q'[OQ(QQ5UO
[
Q)[OQ*QQ5UO	[
[OQ+QQ5UO	[
[OQ,QQ5UO	[
[OQ-QQ5UO	[
[OQ.QQ5UO
[
Q/[OQ0QQ5UO
[
Q1[OQ2QQ5UO	[
[OQ3QQ5UO	[
[OQ4QQ5UO	[
[OQ5QQ5UO	[
[OQ6QQ5UO	[
[OQ7QQ5UO	[
[OQ8QQ5UO	[
[OQ9QQ5UO	[
[OQ:QQ5UO	[
[OQ;QQ5UO
[
Q<[OQ=QQ5UO
[
Q<[OQ>QQ5UO
[
Q<[OQ?QQ5UO
[
Q#[OQQQ5UO	[
[OQ$QQ5UO
[
Q#[OQ@QQ5UO	[
[OQAQQ5P!)BzM%(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 fieldsrzinvalid 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)rr<r]�_fmtrvr�r	r�s& rI�test_format_validate�"FormatterTest.test_format_validateJs���
���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��Prnc�h�,QNo,Q	No[V2FCDvq4[OV4QQ-Q5oUO2oUO	UOU2Q2UOQ2oUO	UOU2Q2[OV4Q5oUO2oUO
[UO
U2[OV4QQ-Q5oUOQ2oUO	UOU2Q2CJ	P!)
�%(custom)s %(message)sr��Default)r�r�z#Default Message with 2 placeholdersz 1234 Message with 2 placeholdersr zNon-existing)r.z{custom} {message}z$custom $message)�%r�r�)r_rr<rr]r,rvr�)rE�fmts�stylesr�r�r�r�s&      rI�test_defaults_parameter�%FormatterTest.test_defaults_parameter�s���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�,rnc�V�UO[[OPPQ2P!)Nr�)rvr�rr<rqs&rI�test_invalid_style� FormatterTest.test_invalid_style�s�����*�g�&7�&7��t�S�Irnc
��UO2o[OQ]]]]]][2o[OUOP2O
22Um]{Um[OQ2o[OUmUOUOU2Q2UOUOUQ2Q2UOU2UOUO Q2P!)���%(asctime)s %(message)sz1993-04-21 08:03:00,123z%Y:%dz1993:21)r�datetime�utcr��mktime�
astimezone�	timetuple�created�msecsrr<�gmtime�	converterr]�
formatTimer,�asctime)rEr�r�r�s&   rI�	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�=�	�����������$=�>rnc
��QQ[O2oUO2o[OQ]]]]]]{[2o[
OUOP2O22Um	U2o[
OUmUOUOU2Q2P!)c� �\sQsQsPsQsQsP!)�DFormatterTest.test_default_msec_format_none.<locals>.NoMsecFormatteriz%d/%m/%Y %H:%M:%Sr�)rurvrwrx�default_msec_format�default_time_formatrzr�rnrI�NoMsecFormatterrJs��"&��"5�rnrMr9z21/04/1993 08:03:00)rr<rr;r<r�r=r>r?r@rBrCr]rD)rErMr�r�r�s&    rI�test_default_msec_format_none�+FormatterTest.test_default_msec_format_nones���	6�g�/�/�	6�
�O�O���
�
�
�t�Q��A�q�!�S�#�
>���K�K��
�
�d� 3� =� =� ?�@��	�����k�k���������a��*?�@rnc��[OQQQQ5o[Q2FDbo[OQ2[O
QQU]**-2oUO
U2oUOQU2Jd	P!)	z!{asctime}.{msecs:03.0f} {message}r�r�)r�r�r�i�	g-C��6:?r0z
Message %dz.1000)rr<r�r�r�r�r,r�)rEr�r�r�rks&    rI�test_issue_89047�FormatterTest.test_issue_89047sm�����"E�S�Zm�n���t��A��J�J�v���%�%�u�l�a�!�e�.D�&E�F�A������A����W�a�(�	rnc
�<�QoSFD�vq#[Q29^tt^2oV$m[OQQ-2oPPP2UO	U29^tt^2UOWOU2UOUOUQ*2UOUO[UO2*
UOQ*QQ5PPP2J�	P!)%fhK�9h)%fhCJ9h)	��$�lH:ztime.time_nsr0rz�e��Ag@�@r�)�delta))rTgY@)l'$�T�rH:g8�@)�g�]�rH:�)l�)�T�rH:rX)
rrrr�rr]rAr@�assertAlmostEqualr/)rE�tests�ns�want�
patched_nsr�s&     rI�/test_msecs_has_no_floating_point_precision_loss�=FormatterTest.test_msecs_has_no_floating_point_precision_losss���
���H�B��~�&�&�*�*,�'� �.�.��v��?��'����b�!�!�� � ����t�4�� � �����c��:��&�&�v�~�~��F�N�N�8K�'K�'-�|�|�c�'9�-1�'�3�"�!�	�&�&��"�!�!�s$�C6	�B	D		�6D
�?D
�	D
�D
c
��QoQ
o[OQU8QU8Q02o[QU2vqEoUO2o[	V%O2P	Q5FD�vqxUO
UQ59^tt^2[[UO22vq�UOV�U*Q*]Q5UOV�Q	*]Q5PPP2J�	P!)%fhJ�9h)rWz
            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
        �-c)rr)�	offset_nsrU)�places���.A)��r�iB0i��l*�C7qH:)r"r#rrNr_r\rrF�floatr�rY)rE�start_ns�
offsets_ns�code�rc�out�errrb�liner@�relativeCreateds&          rI�)test_relativeCreated_has_higher_precision�7FormatterTest.test_relativeCreated_has_higher_precision.s���-��J�
����$� �|�$�$��(	� �
��@(��d�3�����j�j�l��"�:�~�~�/?��M�M�O�I����	��2�2�+.�u�d�j�j�l�+C�(���&�&�w�I�1E��0L�UV�&�W��&�&��C��PQ�&�R�	3�2� N�2�2�2�s�?AC)	�)C:
�2C:
c�j�[OQ2oUO[U2Q2P!)�%(message)s�<Formatter (%(message)s)>�rr<r]r�r�s& rI�test_formatter_repr�!FormatterTest.test_formatter_repr`s'�����m�,������a��"=�>rnc�h�[O2oUO[U2Q2P!)rsrtr�s& rI�test_formatter_repr_default�)FormatterTest.test_formatter_repr_defaultds%�����������a��"=�>rnc��QQ[O2oUQ2oUO[U2Q2P!)c��\sQsQsQsP!)�?FormatterTest.test_formatter_repr_subclass.<locals>.MyFormatteriir�r�r�rnrI�MyFormatterr|ir�rnr}rrz<MyFormatter (%(message)s)>rt)rEr}r�s&  rI�test_formatter_repr_subclass�*FormatterTest.test_formatter_repr_subclasshs3��	�'�+�+�	��
�&������a��"?�@rn)rrr
)rurvrwrxrJrrr#r'r+r3r6rFrNrQr^rorurxr~rzr{r|s@rIrr�sd����
�"-�
&�&� &�*TQ�lN�(J�?�
A�)�3�*0S�d?�?�A�Arnrc�.`�\sQsQsnQsQsQsUsP!)�TestBufferingFormatterioc�(�Q[U2*!)z[(%d)�r^�rErEs&&rI�formatHeader�#TestBufferingFormatter.formatHeaderp�����W��%�%rnc�(�Q[U2*!)z(%d)]r�r�s&&rI�formatFooter�#TestBufferingFormatter.formatFootersr�rnr�)rurvrwrxr�r�rzr{r|s@rIr�r�os����&�&�&rnr�c�4`�\sQsQsnQsQsQsQsUsP!)�BufferingFormatterTestivc�r�[OQQ-2[OQQ-2,UmP!)r0r�r�)rr�rErqs&rIrJ�BufferingFormatterTest.setUpws/���!�!�5�%�.�1��!�!�5�%�.�1�
��rnc���[O2oUOPUO,22UOQUOUO22P!)��onetwo)r�BufferingFormatterr]r,rEr�s& rI�test_default�#BufferingFormatterTest.test_default}sE���&�&�(������Q�X�X�b�\�*�����1�8�8�D�L�L�#9�:rnc�
�[2oUOQUOUO22[O
Q2o[U2oUOQUOUO22P!)z[(2)onetwo(2)]z
<%(message)s>z[(2)<one><two>(2)])r�r]r,rErr<)rEr��lfs&  rI�test_custom�"BufferingFormatterTest.test_custom�s`��"�$�����)�1�8�8�D�L�L�+A�B�
�
�
��
/��"�2�&�����-�q�x�x����/E�Frn�rE)	rurvrwrxrJr�r�rzr{r|s@rIr�r�vs����
�;�
G�Grnr�c�(`�\sQsQsnQsQsUsP!)�
ExceptionTesti�c��UOo[2oUOU2[Q2g[c[O
QP	Q5Lh9hSO
S2SO2SO]*oSOSOQ2SOSOQ2SOSOQ2SOSOQ2P!)r�failedr�z#Traceback (most recent call last):
z!
RuntimeError: deliberate mistake�Stack (most recent call last):
z,logging.exception('failed', stack_info=True))
r2�RecordingHandlerrCrrrTrNrMrE�assertStartsWith�exc_textr�r�)rEr�rTs&  rIr��ExceptionTest.test_formatting�s����������	���Q��	9��3�4�4���	9����h�4�8�	9��	�����	���	�
�I�I�a�L�����a�j�j�6�	8����A�J�J�4�	6����a�l�l�2�	4����A�L�L�>�	@s�5�	A�A�Ar�)rurvrwrxr�rzr{r|s@rIr�r��s����@�@rnr�c�(`�\sQsQsnQsQsUsP!)�LastResortTesti�c�n�UOoUOUO2[Oo[O
o[O29^tt^2oUOQ2UOUO2P2UOQ2UOUO2Q2PPP2P[m[O29^tt^2oUOQ2QoUOUO2U2PPP2[O29^tt^2oUOQ2UOUO2P2PPP2P
UOm
P
[m[O29^tt^2oUOQ2UOUO2P2PPP2UOUO2U[mU[mP!)%fhCKr9h)%fhCK"9h)%fhK�9h)%fhK~9hSOSO2S[mS[mh9h)zThis should not appearz
Final chance!zFinal chance!
z-No handlers could be found for logger "root"
)r2rNr;r�
lastResortr1rr3r�r]r[r�r!�emittedNoHandlerWarningrC)rErv�old_lastresort�old_raise_exceptionsr6r0s&     rI�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�#�s��
J�'A#H3�
0J�:4I�.%J�2I�AJ�2I.�8J�3I	�<I	�>	J�I	�I	�	J�I+	�$I+	�&J�.I>	�7I>	�9J�3J4r�)rurvrwrxr�rzr{r|s@rIr�r��s����#;�#;rnr�c�.`�\sQsQsnQsQsQsUsP!)�FakeHandleri�c�T�QFDo[VUOVU22J!	P!)r�)r�r4rMr�)�setattr�record_call)rE�
identifier�calledr�s&&& rIr��FakeHandler.__init__�s#��>�F��D�$�"2�"2�:�v�"N�O�?rnc�```�UUU1QkoU!)c�L:�ROQORR22P!)z{} - {})rr,)r�r��method_names���rI�inner�&FakeHandler.record_call.<locals>.inner�s����M�M�)�*�*�:�{�C�Drnr�)rEr�r�r�r�s&fff rIr��FakeHandler.record_call�s���	E��rnr�)rurvrwrxr�r�rzr{r|s@rIr�r��s����P��rnr�c�:``�\sQsQsnU1QksQsQsUsU9s!)r�i�c�B:�[[U_
U-U@,UmP!r
)r�r�r�rErYs&*,�rIr��RecordingHandler.__init__�s���
���.��?��?���rnc�>�UOOU2P!)z&Keep track of all the emitted records.)rErr
s&&rIr��RecordingHandler.handle�s�������F�#rnr�)	rurvrwrxr�r�rzr{r�r�s@@rIr�r��s�����$�$rnr�c�``�\sQsQsnQsU1QksQsQsQsQs	Qs
Q	sQ
sQs
QsQ
sQsQsQsQsQsQsUsU9s!)�ShutdownTesti�z#Test suite for the shutdown method.c�:�[[U_2,Um[O
oUO
[[QU2P!)r1)r�r�rJr�rr1r�r�)rE�raise_exceptionsr�s& �rIrJ�ShutdownTest.setUp�s7���
�l�D�'�)����"�2�2�������*;�=M�Nrnc�`�U1QkoU!)c�:�R2gr
r��r�s�rIr��'ShutdownTest.raise_error.<locals>.inner�s
����'�Mrnr�)rEr�r�s&f rI�raise_error�ShutdownTest.raise_error�s
���	��rnc�V�[]UO2o[]UO2o[]UO2o[[OO
VU,2o[O[U2Q5,QNoUOVPO2P!)rWr�)z2 - acquirez	2 - flushz	2 - closez2 - releasez1 - acquirez	1 - flushz	1 - closez1 - releasez0 - acquirez	0 - flushz	0 - close�0 - release)	r�r�rFrr�r�rvr�r])rE�handler0�handler1�handler2rAris&     rI�test_no_failure�ShutdownTest.test_no_failure�s}���q�$�+�+�.���q�$�+�+�.���q�$�+�+�.���w���*�*�X��,J�K�����T�(�^�4�L��	
����;�;�/rnc�0�[]UO2o[V1UOU22[O
O
U2,o[O[U2Q5UOQUOP*2P!)rWr�r�)
r�r�r�r�rr�r�rvr�r])rEr�r�r�rAs&&&  rI�_test_with_failure_in_method�)ShutdownTest._test_with_failure_in_method�sh���a����-�����!1�!1�%�!8�9��O�O�'�'��0�1�����T�(�^�4��������B��8rnc�4�UOQ[2P!�r��r�r�rqs&rI�test_with_ioerror_in_acquire�)ShutdownTest.test_with_ioerror_in_acquires���)�)�)�W�=rnc�4�UOQ[2P!�r4r�rqs&rI�test_with_ioerror_in_flush�'ShutdownTest.test_with_ioerror_in_flush	����)�)�'�7�;rnc�4�UOQ[2P!�rMr�rqs&rI�test_with_ioerror_in_close�'ShutdownTest.test_with_ioerror_in_closer�rnc�4�UOQ[2P!r��r�r�rqs&rI�test_with_valueerror_in_acquire�,ShutdownTest.test_with_valueerror_in_acquires���)�)�)�Z�@rnc�4�UOQ[2P!r�r�rqs&rI�test_with_valueerror_in_flush�*ShutdownTest.test_with_valueerror_in_flush����)�)�'�:�>rnc�4�UOQ[2P!r�r�rqs&rI�test_with_valueerror_in_close�*ShutdownTest.test_with_valueerror_in_closer�rnc�J�P
[mUOQ[2P!)Fr��rr1r��
IndexErrorrqs&rI�.test_with_other_error_in_acquire_without_raise�;ShutdownTest.test_with_other_error_in_acquire_without_raises��"'����)�)�)�Z�@rnc�J�P
[mUOQ[2P!)Fr4r�rqs&rI�,test_with_other_error_in_flush_without_raise�9ShutdownTest.test_with_other_error_in_flush_without_raise���"'����)�)�'�:�>rnc�J�P
[mUOQ[2P!)FrMr�rqs&rI�,test_with_other_error_in_close_without_raise�9ShutdownTest.test_with_other_error_in_close_without_raise r�rnc�j�P	[mUO[UOQ[2P!)Tr��rr1rvr�r�rqs&rI�+test_with_other_error_in_acquire_with_raise�8ShutdownTest.test_with_other_error_in_acquire_with_raise$s'��"&������*�d�&G�&G�#�Z�	1rnc�j�P	[mUO[UOQ[2P!)Tr4r�rqs&rI�)test_with_other_error_in_flush_with_raise�6ShutdownTest.test_with_other_error_in_flush_with_raise)�'��"&������*�d�&G�&G�!�:�	/rnc�j�P	[mUO[UOQ[2P!)TrMr�rqs&rI�)test_with_other_error_in_close_with_raise�6ShutdownTest.test_with_other_error_in_close_with_raise.rrn)r�)rurvrwrxryrJr�r�r�r�r�r�r�r�r�r�r�r�r�r�rrzr{r�r�s@@rIr�r��s`����-�O��
0� 9�>�<�<�A�?�?�A�?�?�1�
/�
/�/rnr�c�~`�\sQsQsnQsQsQQksQsQsQs	Qs
Q	sQ
sQs
QsQ
sQsQsQsQsUsP!)�ModuleLevelMiscTesti4z)Test suite for some module level methods.c���[OOOoUO	U]2UO[OU2[O]S2UO	[OOO]S2UO
[[OQ2QQ2oUO
[[OU22[OQ2[O2UO	[OOO[O2P!)rW�
doesnotexistsc��\sQsQsQsP!)�;ModuleLevelMiscTest.test_disable.<locals>._NotAnIntOrStringiCr�r�r�rnrI�_NotAnIntOrStringr	Cr�rnr
�WARN)
rrvr!rQr]r�rvr�rpr�)rE�old_disabler
s&  rI�test_disable� ModuleLevelMiscTest.test_disable8s����l�l�*�*�2�2������a�(��������5������������-�-�5�5�r�:����*�g�o�o��G�	�	�	
���)�W�_�_�6G�6I�J������	����������-�-�5�5�w�7G�7G�Hrnc�T`�,n[OU[QU1Qk2[2o[OOU2[
[U2oUdUUQU2L	UQU2UO[UO2]2UO]*oUOUO2QU*2UdSL[
[UO22oUOUOU2UOR,2P!)�basicConfigc�*:�ROV12!r
r)r��kwr�s*,�rI�<lambda>�/ModuleLevelMiscTest._test_log.<locals>.<lambda>Rs���v�}�}�a�W�'=rnztest me: %r)
rrrr�rvrCr/r]r^rE�
getMessage�upperr)rEr�r,�	recording�
log_methodr��expected_levelr�s&&&    @rI�	_test_log�ModuleLevelMiscTest._test_logOs�������
�
�d�G�]�=�	?�%�&�	������	�*��W�f�-�
����u�m�Y�7��}�i�0�����Y�.�.�/��3��"�"�1�%������*�*�,�m�i�.G�H�"'�"3����&�,�,�.�9Y���������8�	
�����$rnc�H�UOQ[O2P!�r�)rrr�rqs&rI�test_log�ModuleLevelMiscTest.test_loggs�����u�g�m�m�,rnc�*�UOQ2P!�r��rrqs&rI�
test_debug�ModuleLevelMiscTest.test_debugj������w�rnc�*�UOQ2P!�r�r"rqs&rI�	test_info�ModuleLevelMiscTest.test_infom������v�rnc�*�UOQ2P!�r�r"rqs&rI�test_warning� ModuleLevelMiscTest.test_warningp������y�!rnc�*�UOQ2P!r�r"rqs&rI�
test_error�ModuleLevelMiscTest.test_errorsr%rnc�*�UOQ2P!�rjr"rqs&rI�
test_critical�!ModuleLevelMiscTest.test_criticalv������z�"rnc��UO[[O[2QQ[O
2o[OU2UO
[O2U2[O[O
2UO
[O2[O
2P!)c��\sQsQsQsP!)�;ModuleLevelMiscTest.test_set_logger_class.<locals>.MyLoggeri|r�r�r�rnrIror:|r�rnro)rvrprrqr�rr]�getLoggerClass)rEros& rI�test_set_logger_class�)ModuleLevelMiscTest.test_set_logger_classys������)�W�%;�%;�V�D�	�w�~�~�	�	���x�(�����/�/�1�8�<����w�~�~�.�����/�/�1�7�>�>�Brnc�`�,nU1QkQ[O22o[OU2[OQ2oUO	RQ,2[
O2o[OU2oUOU2UO[O2UOQ2UO	UO2O2Q2UO]2UO]2UO[O 2UOQ2UO	UO2P2UO#U2UO%2[O[O&2P!SO#S2SO%2[O[O&2h9h)c�T:``�\sQsQsnQ\O
1UU1QkksQsUsU9s	!)�@ModuleLevelMiscTest.test_subclass_logger_cache.<locals>.MyLoggeri�roc�J:�[RU_V2ROQ2P!)�initialized)r�r�r)rErGr,r�rvs&&&��rIr��IModuleLevelMiscTest.test_subclass_logger_cache.<locals>.MyLogger.__init__�s����� ��-����}�-rnr�)
rurvrwrxrr�r�rzr{r�)r�r}rvs@@�rIror@�s����$.�g�n�n�
.�
.�
.rnro�just_some_loggerrB�hello)rr;rqr r]r5r6r:rCr8r9r�r[r��truncaterVr�rNrMr)rEror#r7rTrvs&    @rI�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�"CF9�9AHc��[OQ2o[QU2vq#oUO2oUO	QU2UO	QU2P!)a*
            import logging

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

            a = A()
        razexception in __del__zValueError: some error)r"r#rrNr4�rErirjrkrls&    rI�test_logging_at_shutdown�,ModuleLevelMiscTest.test_logging_at_shutdown�sP����� �
��(��d�3�����j�j�l���
�
�,�c�2��
�
�.��4rnc�v�[OoUO[OU2[O
QU8Q02o[
QU2[UQQ59^tt^2oUOUO2O2Q2PPP2P!)%fhP!9h)a�
            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
        rarr�zERROR:root:log in __del__)r�TESTFNr�r�r"r#rr�r]rdrl)rEr\ri�fps&   rI�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'�'B8	�0B8	c��[OQ2o[QU2vq#oUO2oUO	QU2UOU]2P!)z�
            import logging

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

            rec()
        raz#Cannot recover from stack overflow.)r"r#rrNr�r]rJs&    rI�test_recursion_error�(ModuleLevelMiscTest.test_recursion_error�sS����� �
��-�T�4�8�����j�j�l�����>��D�����Q�rnc� �[O2oUO[OU2UO	[OU2[O2oUO	V2UOV2P!r
)r�getLevelNamesMappingr]r*�assertIsNot)rE�mapping�new_mappings&  rI�test_get_level_names_mapping�0ModuleLevelMiscTest.test_get_level_names_mapping�sf���.�.�0������-�-�w�7�����-�-�w�7��2�2�4������.�����.rnr�r
)rurvrwrxryr
rrr#r(r-r1r5r<rGrKrPrSrZrzr{r|s@rIrr4sV����3�I�.%�0-� ��"� �#�
C�3�>5�&N�> � /�/rnrc��`�\sQsQsnQsQs\QQk2s\O2\
Q22sQsQs
\O2Q2s\O2Q	2sQ
sUsP!)�
LogRecordTesti�c��[O-2o[U2oUOUQ2UO	UQ2P!)z<LogRecord: �>)rr�r�r�r�)rEr�rks&  rI�test_str_rep�LogRecordTest.test_str_rep�s;���!�!�"�%����F�����a��0����A�s�#rnc��[2o[O2oUOU2QQ-o[OQU2UOUO]*OU2UOUO]*OQ2UOU2UO2P!)�less�morezless is %(less)szless is more)r�rr rCr�r2rErjr]rvrNrM)rErTr�rSs&   rI�
test_dict_arg�LogRecordTest.test_dict_arg�s�����������	���Q��
�f������*�A�.��
�
�a�i�i��l�'�'��+�������1��-�-�~�>�	�����	���	rnc� �[OoU[m]PH
oUO2Oo[O
QQU0-2o[O[OQP29^tt^2[O
QQU0-2oPPP2QUQUOQWO-oU[mU%cUOU2P!U!)%fhKT9hS[mh9h)rWr0�msg1_r-�msg2_�processName�r1.processName�r2.processName)r�logMultiprocessingr-�current_processrGr�r�	swap_itemr��modulesrjrq)	r[rmr��prev_logMultiprocessingrQrG�r1�r2�resultss	&&&      rI�_extract_logrecord_process_name�-LogRecordTest._extract_logrecord_process_names���")�"<�"<��%7��"�	A�(��%�%�'�,�,�D��&�&���s�e�}�'=�>�B��"�"�3�;�;�0A�4�H�H��*�*�E�U�3�%�=�+A�B��I�%��'����'�����G�
*A�G�&���I�I�g���N�I�H��*A�G�&�s*�A'D�C-�!$D�-C=	�6C=	�8D�
D
c�n�[O2Q[O7oUO	[
OP	2P	o[
O-2oUO	UOQ2UO]U2oUO	QUQ*2UO	QUQ*2UO	QUQ*2]PH*oUO2vqgUOUO]V'1Q5oUO2UO2oUOQUQ*2UO	UQ*UQ*2UO	QUQ*2UO!2U%c]PH*oP!P!S%c]PH*ohh9h)r-�MainProcessrjrkrlr�)rr�r�rpr]rrmr�rjrur-�Pipe�Processr�r��assertNotEqualr�)	rE�multiprocessing_imported�LOG_MULTI_PROCESSINGr�rtr-�parent_conn�
child_connr�s	&        rI�test_multiprocessing�"LogRecordTest.test_multiprocessingst��	�:�:�<�#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�E*F%�%F4�.F4c��UOoUOo[O-2oUUO2UUO
2UUO2UUO2UUO2[Oo[Oo[Oo[OoP
[m	P
[m
P
[mP
[m[O-2oUUO2UUO
2UUO2UUO2UUO2U[m	U[m
U[mU[mP!S[m	S[m
S[mS[mh9h�F)
r;rrr�r�
threadName�processrj�taskName�
logThreads�logProcessesrm�logAsyncioTasks)rE�NONE�NOT_NONEr��log_threads�
log_processes�log_multiprocessing�log_asyncio_taskss&       rI�
test_optional�LogRecordTest.test_optionalAsE��� � ���'�'���!�!�"�%�����������������������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��` �[O-2oUUO2P!3hr
)rr�r�)rE�	assertionr�s&& rI�_make_record_async� LogRecordTest._make_record_asyncas!����!�!�"�%���!�*�*��s�,.c���UOo[O29^tt^2oP	[mUOUUO22P
[mUOUUO22PPP2[OOP2P!)%fhK19h[OOP2h9hr�)
r��asyncio�Runnerrr��runrr;�events�_set_event_loop_policy�rE�make_record�runners&  rI�#test_taskName_with_asyncio_imported�1LogRecordTest.test_taskName_with_asyncio_importedes���	8��1�1�K����!�!�V�*.��'��
�
�;�t�';�';�<�=�*/��'��
�
�;�t�'8�'8�9�:�	"�
�N�N�1�1�$�7�
"�!��
�N�N�1�1�$�7�s)�)C�AB.�C�.B>	�7B>	�9C�!C"c	�^�UOo[O29^tt^2o[O[
OQP29^tt^2P	[mUOUUO22P
[mUOUUO22PPP2PPP2[OOP2P!)%fhK99h)%fhKD9h[OOP2h9h)r�)
r�r�r�rror�rprr�r�r;r�r�r�s&  rI�&test_taskName_without_asyncio_imported�4LogRecordTest.test_taskName_without_asyncio_importedqs���	8��1�1�K����!�!�V�W�->�->�s�{�{�I�W[�-\�-\�*.��'��
�
�;�t�'8�'8�9�:�*/��'��
�
�;�t�'8�'8�9�:�	.]�!�
�N�N�1�1�$�7�
.]�-\��!�!��
�N�N�1�1�$�7�sG�)D�/C8�AC%	�4C8�<D�%C5
�.C5
�0C8�8D	�D	�D�!D,r�r
)rurvrwrxr`rercrurrrr�r�r�rr_r�r�rzr{r|s@rIr]r]�s�����$�	�����0�?�?�A��#'��B�#'�J8�@�
�$�$�&�	8�'�	8�
�$�$�&�	8�'�	8rnr]c�``�\sQsQsnQsU1QksU1QksQsQsQs	Qs
Q	sQ
sQs
QsQ
sQsQsQsQsQsQsQsQsQsQsQs\O82Q2sQ"QksQsQs Qs!Qs"Qs#Q s$Q!s%Us&U9s'!)#�BasicConfigTesti~z#Test suite for logging.basicConfig.c�:�[[U_2[OO
Um[OO2Um[OQ*Um
[OOUmUOUO2,[OmP!�r)r�r�rJrrvrAr$r%r&r'r(r,r4r��cleanupr�s&�rIrJ�BasicConfigTest.setUp�sy���
�o�t�*�,����-�-��
�%�/�/�4�4�6���")�"6�"6�q�"9���&-�l�l�&8�&8��#�������%� "����rnc��:�[OOQ*FD2o[OOU2UO	2J4	[
[U_2P!r�)rrvrArNrMr�r�rU)rErTr�s& �rIrU�BasicConfigTest.tearDown�sI������&�&�q�)�)�A��L�L�&�&�q�)�
�G�G�I�*�	�o�t�-�/rnc�l�[[OQUO2[OO2[OO
UO2UO[OQ$[OOUO2P!)rAr)r�rrvrAr$rOrPr&r(r'r8r4rqs&rIr��BasicConfigTest.cleanup�sp������j�$�-�-�8������!���� � ��!4�!4�5�"&�"9�"9����Q�������d�9�9�:rnc���[O2UO[[OO
2]2[OO
]*oUO
U[O2UOUO[O2UOoUOUOO[O2UOUO 2UO
UO[O"2UO[OO$UO&2P!r�)rrr]r^rvrAr�r:r7r�r6r~r�r*�BASIC_FORMATr;r��PercentStyler,r4)rEr�r~s&  rI�test_no_kwargs�BasicConfigTest.test_no_kwargs�s�������	
����W�\�\�2�2�3�Q�7��,�,�'�'��*�����g�w�'<�'<�=����������4��%�%�	�����)�)�.�.��0D�0D�E����)�+�+�,����i�.�.��0D�0D�E�	
������+�+�T�-H�-H�Irnc��[O29^tt^2o[O[O
QQ5[OQ2[O
O]2UOUO2O2Q2PPP2P!)%fhP!9h)r��r7r��Log an error�ERROR:root:Log an error�rr-rrr�rUr�rVr]r[r�r!s& rI�test_strformatstyle�#BasicConfigTest.test_strformatstyle��u��
�
$�
$�
&�
&�&����s�z�z��=��M�M�.�)��J�J�O�O�A�����V�_�_�.�4�4�6�)�
+�	'�
&�
&�
&���B
B3�3C	�<C	c��[O29^tt^2o[O[O
QQ5[OQ2[O
O]2UOUO2O2Q2PPP2P!)%fhP!9h)r�r�r�r�r�r!s& rI�test_stringtemplatestyle�(BasicConfigTest.test_stringtemplatestyle�r�r�c�f�Qo[OQQQ5UO[[OO
2]2[OO
]*oUO
U[O2[OQQQQ5oUOUOOUOO2UOUOOUOO2UOVUQ2P!)c�t�UO2UO2[OU2P!r
r�r��h2rms&&&rIr��.BasicConfigTest.test_filename.<locals>.cleanup�����H�H�J��H�H�J��I�I�b�Mrn�test.logr)r\r�r�r�)rrr]r^rvrAr�r�r7�moderGr��rEr�r�ris&   rI�
test_filename�BasicConfigTest.test_filename�s���	�
	���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�?rnc�H�Qo[OQQQ5[OO]*o[OQQ2oUOUOOUOO2UOVUQ2P!)c�t�UO2UO2[OU2P!r
rr�s&&&rIr��.BasicConfigTest.test_filemode.<locals>.cleanup�r�rnr��wb�r\�filemode)	rrrvrAr�r]r7r�r�r�s&   rI�
test_filemode�BasicConfigTest.test_filemode�ss��	�
	���Z�$�?��,�,�'�'��*���&�&�z�4�8��������,�,�h�o�o�.B�.B�C�����(�J�?rnc��[O2oUOUO2[O
UQ5UO
[[OO2]2[OO]*oUOU[O2UO
UOU2P!r)
r5r6r�rMrrr]r^rvrAr�r:r7)rEr7r�s&  rI�test_stream�BasicConfigTest.test_stream�s��������������%����6�*�����W�\�\�2�2�3�Q�7��,�,�'�'��*�����g�w�'<�'<�=��������0rnc���[OQQ5[OO]*OoUOUOOQ2P!)z%(asctime)s - %(message)s)r,)rrrvrAr~r]r�r*�rEr~s& rI�test_format�BasicConfigTest.test_format�sH�����#>�?��L�L�)�)�!�,�6�6�	�����)�)�.�.�0K�Lrnc���[OQQ5[OO]*OoUOUOQ2P!)rA)r�)rrrvrAr~r]r�r�s& rI�test_datefmt�BasicConfigTest.test_datefmt�s@�����E�*��L�L�)�)�!�,�6�6�	�����*�*�E�2rnc���[OQQ5[OO]*OoUOUO[O2P!)r�r )rrrvrAr~r�r�r�r�s& rI�
test_style�BasicConfigTest.test_style�sF�����#�&��L�L�)�)�!�,�6�6�	����i�.�.��0K�0K�Lrnc��[OOoUO[OOU2[O
]9Q5UO
[OO]92[O
]:Q5UO
[OO]92P!)�9)r,)rrvr,r�r8rr])rE�	old_levels& rI�
test_level�BasicConfigTest.test_level�sy���L�L�&�&�	�������-�-�y�9����"�%�������+�+�R�0����"�%�������+�+�R�0rnc��UOo[O2,o[Oo[O
2oU[[OQUQ5U[[OQUQ5U[[OUUQ5U[[OUQQ5U[[OUQQ5U[[OUQQ	5U[[O[OQ
5[OPQQ5P!)
r�)r\r7)r\rA)r7rArr)r~r,z%H:%M:%S)r~r�r0)r~r�)�loglevelr�r�)	rvrr:r�r6r<r�rr�)rErvrAr7r~s&    rI�test_incompatible�!BasicConfigTest.test_incompatibles����(�(���)�)�+�,�������%�%�'�	��Z��!4�!4�z�=C�	E��Z��!4�!4�z�?G�	I��Z��!4�!4�V�?G�	I��Z��!4�!4�	�=J�	L��Z��!4�!4�	�>H�	J��Z��!4�!4�	�<?�	A�	�Z��!4�!4�w�|�|�L����T�C�8rnc��[O2[O[O2[O2,o[O2oU]*OU2[OUQ5UOU]*[OO]*2UOU]*[OO]*2UOU]*[OO]*2UOU]*O2UOU]*O2UOU]*OU2UOU]*OU]*O2P!)r��rA)rr:r�rUr<r?rr2rvrArr~)rErAr�s&  rI�
test_handlers�BasicConfigTest.test_handlerss0���!�!�#��!�!�#�*�*�-��!�!�#�
��

�������� � ��#����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�Crnc���[O2o[O2o[OU2,o[OU2,o[O[O
UQ5[OQ2[OQ2[OQ2UO[[OO2]2[O[OUP	Q5[OQ2[OQ2[OQ2UO[[OO2]2UOUO2O2Q2UOUO2O2Q2P!))r,rAr�r�r�)r,rA�forcezWARNING:root:warnz WARNING:root:warn
INFO:root:info)r5r6rr:rr�r�r�r�r]r^rvrAr�r[r�)rE�
old_string_io�
new_string_io�old_handlers�new_handlerss&    rI�
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�<�	>rnc	���Qo[OQUQQ[OQ5UO[	[O
O2]2[O
O]*oUOU[O2UOUOU2[OQ2UO2[QQQ59^tt^2oUO2O2oPPP2[O Q2UOWQ2P!)%fhK:9hWO2[QQQ59^tt^2oSO2O2oPPP2L)%fhL9h[O Q2SOWQ2h9h)rr�rrrr�r\r��errorsr,r,�.The Øresund Bridge joins Copenhagen to Malmör��rrr9r]r^rvrAr�r�r�r�rMr�rdr�rir�rEr�r�r�rs&    rI�
test_encoding�BasicConfigTest.test_encoding>sN��	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�3�q��v�v�x�~�~�'��4��I�I�j�!����T�M�
O�4�3��
�M�M�O��j�7�3�3�q��v�v�x�~�~�'��4�3�3�3���I�I�j�!����T�M�
O��<�CE�9E
�
E	�E	�&G'�F+	�"	G'�+F;
�4F;
�61G'c	���Qo[OQUQQ[OQ5UO[	[O
O2]2[O
O]*oUOU[O2UOUOU2[OQ2UO2[QQQ59^tt^2oUO2O2oPPP2[O Q2UOWQ2P!)%fhK:9hWO2[QQQ59^tt^2oSO2O2oPPP2L)%fhL9h[O Q2SOWQ2h9h)	r�r��ignorerrr�r�rr�z*The resund Bridge joins Copenhagen to Malmr�r�s&    rI�test_encoding_errors�$BasicConfigTest.test_encoding_errorsRsH��	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�3�q��v�v�x�~�~�'��4��I�I�j�!����T�#O�P�4�3��
�M�M�O��j�7�3�3�q��v�v�x�~�~�'��4�3�3�3���I�I�j�!����T�#O�P�r�c	�
�Qo[OQUQ[OQ5UO[	[O
O2]2[O
O]*oUOU[O2UOUOU2UOUOQ2[OQ2UO2[QQQ59^tt^2oUO2O2oPPP2[ O"Q2UOWQ2P!)%fhK:9hWO2[QQQ59^tt^2oSO2O2oPPP2L)%fhL9h[ O"Q2SOWQ2h9h)	r�r�rr)r\r�r,r,�backslashreplaceu<😂: ☃️: The Øresund Bridge joins Copenhagen to Malmörr�zL\U0001f602: \u2603\ufe0f: The \xd8resund Bridge joins Copenhagen to Malm\xf6)rrr9r]r^rvrAr�r�r�r�r�rMr�rdr�rirr�s&    rI�test_encoding_errors_default�,BasicConfigTest.test_encoding_errors_defaultesf��	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�3�q��v�v�x�~�~�'��4��I�I�j�!����T�$J�
K�4�3��
�M�M�O��j�7�3�3�q��v�v�x�~�~�'��4�3�3�3���I�I�j�!����T�$J�
K�s<�C,E8�E%�%E5	�.E5	�8&H�G	�=	H�G
�G
�1Hc	�|`�Qo[OQUPQ[OQ5UO[	[O
O2]2[O
O]*oUOU[O2UOUOU2UOUO2,nU1QkoV2m[OQ2UOR2UOQR]*2UO!2[#QQQ59^tt^2oUO%2O'2oPPP2[(O*Q2UOWP2P!)%fhK:9hWO!2[#QQQ59^tt^2oSO%2O'2oPPP2L)%fhL9h[(O*Q2SOWP2h9h)	r�r�rrr�c�d:�RO[[O222P!r
)rr�r�rT)r�rvs&�rI�dummy_handle_error�EBasicConfigTest.test_encoding_errors_none.<locals>.dummy_handle_error�s������s�3�=�=�?�3�4rnr�z:'ascii' codec can't encode character '\xd8' in position 4:rr�)rrr9r]r^rvrAr�r�r�r;r�r'r�rDr4rMr�rdr�rir)rEr�r�r	r�rrvs&     @rI�test_encoding_errors_none�)BasicConfigTest.test_encoding_errors_noneys����	(��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�3�q��v�v�x�~�~�'��4��I�I�j�!����T�3�'�	4�3��
�M�M�O��j�7�3�3�q��v�v�x�~�~�'��4�3�3�3���I�I�j�!����T�3�'�s<�D$F1�
F�F.	�'F.	�1&H;�G?	�6	H;�?H
�H
�
1H;c�Z�[2o[PQ5o[Q29^tt^2o[OV,Q5PPP2UO	UO
O[U2,2UO	WO]2P!)%fhK^9h)N�r~r�)r~rA)	rrrrr]r?�call_args_listrr�)rE�mock_formatter�mock_handler�mock_formatter_inits&   rI�test_formatter_given�$BasicConfigTest.test_formatter_given�s{������d�+��
�&�
'�
'�+>����.�>�R�(�����2�2�A�A�D��DX�CY�Z����,�7�7��;�(�
'�s�B�B*	�#B*	c���[PQ5o[Q29^tt^2o[OU,Q5PPP2UO	WO
]2P!)%fhK.9h)Nr	r�r�)rrrrr]r�)rEr	r	s&  rI�test_formatter_not_given�(BasicConfigTest.test_formatter_not_given�sP���d�+��
�&�
'�
'�+>����,��8�(����,�7�7��;�(�
'�s�A � A0	�)A0	c��QoPo[QQ2oUO[OU2Qo[O
UQU[OQQ5UO[[OO2]2[OO]*oUOU[O2[OP	Q59^tt^2oP	[mUO!U22PPP2[#UQQ59^tt^2oUO%2O'2oPPP2UO)WQ	2[O*O-P2U%cUO/2P!P!)%fhK�9h)%fhKp9h[O*O-P2S%cSO/2hh9h)
c��< �[OQ2P!3h)zhello world)rr�r�rnrIr��5BasicConfigTest.test_log_taskName.<locals>.log_record�s����O�O�M�*�s�r�ztest-logging-taskname-rrrz%(taskName)s - %(message)s)r\r�r�r,r,r!r�zTask-\d+ - hello world)rnr�rirrrr�r]r^rvrAr�r�r�r�r�r�r�rdr��assertRegexr�r�rM)rEr�r��log_filenamer�r�r�rs&       rI�test_log_taskName�!BasicConfigTest.test_log_taskName�sa��	+���%�f�.F�G������	�	�<�0�	 ��H�����h�)1����'C�
E�
���S����!6�!6�7��;��l�l�+�+�A�.�G��!�!�'�7�+>�+>�?����d�+�+�v�*.��'��
�
�:�<�(�,��l�W�5�5���v�v�x�~�~�'��6����T�#<�=��N�N�1�1�$�7���
�
���,�+��6�5��
�N�N�1�1�$�7���
�
���sN�B>G�2"F%�G�1F8�G�%F5	�.F5	�0G�8G	�G	�G�'H�3Hc��```�,n[OnUUU1Qko[OR[QU2[	[U2oUdUUQ2LUQ2RORQ-1,2P!)c�:�R2[OOo[OO]d2RO	[OOU2ROV12P!)�d)rrvr,r8r�r)r�rr�r��old_basic_configrEs*, ���rI�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�'�"rnrztest mer�)rrrrr/r])rEr�r,r!	rr�r 	sf&&  @@rIr�BasicConfigTest._test_log�si�����"�.�.��	#�	�
�
�d�G�]�O�D��W�f�-�
����u�i�(��y�!�	
����2�r�(��,rnc�H�UOQ[O2P!r)rrr�rqs&rIr�BasicConfigTest.test_log�s�����u�g�o�o�.rnc�*�UOQ2P!r!r"rqs&rIr#�BasicConfigTest.test_debug�r%rnc�*�UOQ2P!r'r"rqs&rIr(�BasicConfigTest.test_info�r*rnc�*�UOQ2P!r,r"rqs&rIr-�BasicConfigTest.test_warning�r/rnc�*�UOQ2P!r�r"rqs&rIr1�BasicConfigTest.test_error�r%rnc�*�UOQ2P!r4r"rqs&rIr5�BasicConfigTest.test_critical�r7rn)rAr4r(r&r
)(rurvrwrxryrJrUr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r	r		r	r	rr_r	rrr#r(r-r1r5rzr{r�r�s@@rIr�r�~s�����-�#�0�;�J�(+�+�@�$@�1�M�3�M�1�9�,D�">�*O�(Q�&K�((�@<�<�
�$�$�&� �'� �:-�./� ��"� �#�#rnr�c�``�\sQsQsnU1QksQsQsQsQsQs	Qs
Q	sQ
sQs
QsQ
sQsQsQsQsUsU9s!)�LoggerAdapterTesti�c�R:`�[[U_2[OQ*n[2Um[OUmUOOUO2UOUOOUO2UOUOO2U1QkoUOU2UO[O2[OUOQ5UmP!)rc�0:�R[OQ$P!r�)rr')�old_handler_lists�rIr��(LoggerAdapterTest.setUp.<locals>.cleanup�s���&6�G� � ��#rn)r#)r�r1	rJrr'r�rrvr#rCr�rNrMrvr��adapter)rEr�r4	r�s& @�rIrJ�LoggerAdapterTest.setUp�s����
���,�.�"�/�/��2��)�+����l�l��������t�~�~�.�������1�1�4�>�>�B�������,�,�-�	7�	
���� �����(�(�)��,�,�D�K�K�@��rnc�z�QoPo]]*UO	[UOO2]2UOO]*oUO	UO[O2UO	UOU2UO	UOUO12UO	UOUOV"O12P![c3oSoSOOXO2Po=CK%Po=hh9h�ztesting exception: %r)r�r6	rTrr]r^rErrr�r0rjrjr��
__traceback__�rEr0r�r�r�s&    rI�test_exception� LoggerAdapterTest.test_exceptions���%����	8�
��E�
	
����T�^�^�3�3�4�a�8����'�'��*�����������7�������S�)�������t�~�~�&7�8��������-�-��.?�.?�@�	B��!�	8��C��L�L�"�"�3���7�7��	8���	C=�=	D:�D:�'D5�5D:c��]]*UOOQWQ5UO[	UO
O2]2UO
O]*oUOUOUOV"O12P![c
oSoPo=K�Po=hh9h)r�z
exc_info testr�)
r�r6	rTr]r^rrErjr�r:	)rEr�r�r�s&   rI�test_exception_excinfo�(LoggerAdapterTest.test_exception_excinfos���	�
��E�	
��������=�����T�^�^�3�3�4�a�8����'�'��*���������-�-��.?�.?�@�	B��!�	��C��	�s�	B)�)	C�3C�4B;�;Cc��QoUOOVO2UO[	UOO
2]2UOO
]*oUOUO[O2UOUOU2UOUOUO12UOUOQ2P!)zcritical test! %rr5)r6	rjrr]r^rErrr�r0rjr?)rEr0r�s&  rIr5�LoggerAdapterTest.test_criticals���!�������c�>�>�2�����T�^�^�3�3�4�a�8����'�'��*���������)9�)9�:�������S�)�������t�~�~�&7�8�������/�:rnc�f�UOOOOo]!UOOOmUO	[
UOOOQU2UO
UOO] 22P!)�!rQ)r6	r#r!rQr�r�r��isEnabledFor�rErs& rI�test_is_enabled_for�%LoggerAdapterTest.test_is_enabled_for*sw���l�l�)�)�1�1�9�9��.0������#�#�+��������!4�!4�!<�!<�i�#�	%�������2�2�2�6�7rnc�p�UOUOO22UOOFDoUOOU2J 	UO
UOO22UO
UOO22P!r
)rDr6	r@r#rArNr�rjs& rI�test_has_handlers�#LoggerAdapterTest.test_has_handlers1sy��������0�0�2�3��{�{�+�+�G��K�K�%�%�g�.�,�	
������0�0�2�3�������1�1�3�4rnc��Qo[UOPQ5o[UPQ5oQUmUO[	U2[	U22UO[OVO2UO[UOO2]2UOO]*oUOUO[O2UOUOQU02UOUOUO12UOUOQ2UOoUO!UOU2UO!UOOU2[#2oVcmUO!UOU2UO!UOU2UO!UOOU2VSmUO!UOU2UO!UOU2UO!UOOU2P!XSmh9h)zAdapters can be nested, yo.�r#rk�AdapterAdapterzAdapter AdapterAdapter �test_nested)�
PrefixAdapterr#r�r]r�r�rr�rr^rErr0rjr?r!r2r�)rEr0r6	�adapter_adapterr��orig_manager�temp_managers&      rIrP	�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$I8�8Jc��UOOo[UO2oUO	QQ2UO[
UP*O2Q2UOUP*OQ2UO[OQQ2UO[
UP*O2Q2UOUP*OQ2P!)�
Hello, {}!�worldz
Hello, world!�test_styled_adapter�Goodbye {}.zGoodbye world.)rrE�StyleAdapterr#r�r]r�r0r?r�rr�)rErEr6	s&  rIrY	�%LoggerAdapterTest.test_styled_adapterVs����.�.�(�(���t�{�{�+������g�.�����W�R�[�_�_�-��?�������-�-�/D�E����G�O�O�]�G�<�����W�R�[�_�_�-�/?�@�������-�-�/D�Ernc�$�UOOo[UO2oQUm[U2oUO
QQ2UO[UP*O2Q2UOUP*OQ2UO[OQQ2UO[UP*O2Q2UOUP*OQ2P!)z{}rW	rX	z{} Hello, world!�test_nested_styled_adapterrZ	z{} Goodbye world.)rrErQ	r#r�r[	r�r]r�r0r?r�rr�)rErEr6	�adapter2s&   rIr^	�,LoggerAdapterTest.test_nested_styled_adapteras����.�.�(�(������,�������(������w�/�����W�R�[�_�_�-�/A�B�������-�-�/K�L����W�_�_�m�W�=�����W�R�[�_�_�-�/B�C�������-�-�/K�Lrnc�\````�]nUOOnUU1QknU1QknU1QkoUOOoU2UO	UP*O
Q2UP*OoR]*
nU2UO	UP*O
Q2UOUP*OU2UP*OoR]*
nU2UO	UP*O
Q2UOUP*OU2UP*OoR]*
nU2UO	UP*O
Q2UOUP*OU2P!)r�c�:�RQRQ5P!�rz��
stacklevelr���	the_level�triggers��rI�	innermost�ELoggerAdapterTest.test_find_caller_with_stacklevel.<locals>.innermostq�
����F�y�1rnc�:�R2P!r
r��ri	s�rIr��ALoggerAdapterTest.test_find_caller_with_stacklevel.<locals>.innert�����Krnc�:�R2P!r
r��r�s�rI�outer�ALoggerAdapterTest.test_find_caller_with_stacklevel.<locals>.outerw�����Grnri	r�rr	� test_find_caller_with_stacklevel)r6	r�rrEr]r?rr�)rErr	rErr�ri	rg	rh	s&   @@@@rIru	�2LoggerAdapterTest.test_find_caller_with_stacklevelmsJ����	��,�,�&�&��	2�	�	��.�.�(�(��
��������-�-�{�;����#�#���Q��	�
��������-�-�w�7����7�2�;�-�-�v�6����#�#���Q��	�
��������-�-�w�7����7�2�;�-�-�v�6����#�#���Q��	�
��������-�-�/Q�R����7�2�;�-�-�v�6rnc��[OUOQQ-Q5UmUOO	Q2UO[
UOO2]2UOO]*oUOUQ2UOUOQ2P!)r@r�rN	�foo should be here�rr�r#r6	rjr]r^rrE�
assertHasAttrr@r
s& rI�test_extra_in_records�'LoggerAdapterTest.test_extra_in_records�s����,�,�D�K�K�49�3�<�A���	
�����2�3�����T�^�^�3�3�4�a�8����'�'��*�����6�5�)�������S�)rnc��UOOQQQ-Q5UO[UOO
2]2UOO
]*oUO
UQ2P!)zfoo should NOT be herer@�nope�rk)r6	rjr]r^rrE�assertNotHasAttrr
s& rI� test_extra_not_merged_by_default�2LoggerAdapterTest.test_extra_not_merged_by_default�sa�������6�u�f�o��N�����T�^�^�3�3�4�a�8����'�'��*�����f�e�,rnc�B�[OUOQQ-P	Q5UmUOO	QQQ-Q5UO[
UOO2]2UOO]*oUOUQ2UOUQ2UOUOQ2UOUOQ2UOO	Q2UO[
UOO2]2UOOP*oUOUOQ2UOUQ2UOO	QPQ5UO[
UOO2]2UOOP*oUOUOQ2UOUQ2P!)	r@r��r#rk�merge_extrazfoo and bar should be hererAr�r	�no extra�
none extra)
rr�r#r6	rjr]r^rrErz	r@rAr�	r
s& rI�test_extra_merged�#LoggerAdapterTest.test_extra_merged�s����,�,�D�K�K�49�3�<�9=�?���	
�����:�5�#�,��O�����T�^�^�3�3�4�a�8����'�'��*�����6�5�)����6�5�)�������S�)�������S�)������j�)�����T�^�^�3�3�4�a�8����'�'��+��������S�)����f�e�,������l�$��7�����T�^�^�3�3�4�a�8����'�'��+��������S�)����f�e�,rnc��[OUOQQ-P	Q5UmUOO	QQQ-Q5UO[
UOO2]2UOO]*oUOUQ2UOUOQ2P!)r@r�r�	zfoo shall be minr�r	ry	r
s& rI�)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����'�'��*�����6�5�)�������S�)rnc�L�[OUOP	Q5UmUOO	QQQ-Q5UO[
UOO2]2UOOP*oUOUOQ2UOO	Q2UO[
UOO2]2UOOP*oUOUQ2UOO	QPQ5UO[
UOO2]2UOOP*oUOUQ2P!)T)r#r�	rx	r@r�r	r�	r�	)rr�r#r6	rjr]r^rrEr@r�	r
s& rI�test_extra_merged_without_extra�1LoggerAdapterTest.test_extra_merged_without_extra�s1���,�,�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�,rn)r6	r#r)rurvrwrxrJr<	r@	r5rH	rK	rP	rY	r^	ru	r{	r�	r�	r�	r�	rzr{r�r�s@@rIr1	r1	�s[����A�"B�"B�	;�8�5�9�8	F�
M�7�@*�-�-�2	*�-�-rnr1	c�,`�\sQsQsnQsQsQsUsP!)rQ	i��Adapterc�*�UOQU0U1!r��r�)rEr0rks&&&rIr��PrefixAdapter.process�s���+�+��a��u�%�v�-�-rnr�)rurvrwrxr�r�rzr{r|s@rIrQ	rQ	�s����
�F�.�.rnrQ	c�.`�\sQsQsnQsQsQsUsP!)�Messagei�c� �VmV mP!r
)r�rj)rEr�rjs&&&rIr��Message.__init__�s�����	rnc�N�UOOUO!r
)r�r,rjrqs&rI�__str__�Message.__str__�s���x�x����	�	�*�*rn)rjr�)rurvrwrxr�r�	rzr{r|s@rIr�	r�	�s�����+�+rnr�	c�0`�\sQsQsnQ]-QksQsUsP!)r[	i�re	c���UOU2%cIUOV%2vq%UOOU[	V$21-U@QU]*-@P!P!rd	)rF	r�r#r�r�	)rEr,r0re	rjrks"""$*,rIr��StyleAdapter.log�sT�����U�#�#��,�,�s�3�K�C��K�K�O�O�E�7�3�#5�
5��
5�'1�!�|�
5�$rnr�)rurvrwrxr�rzr{r|s@rIr[	r[	�s����5�1�5�5rnr[	c�``�\sQsQsnU1QksQsQsQsQsQs	Qs
Q	sQ
sQs
QsQ
sQsQsQsQsQsQsUsU9s!)�
LoggerTesti�c�:�[[U_2[2Um[
OQQ5UmUOOUO2UOUOOUO2UOUOO2UO[
O2P!)�blah�rG)
r�r�	rJr�rrrr#rCr�rNrMrvr�s&�rIrJ�LoggerTest.setUp�s����
�j�$�%�'�)�+����n�n�&�1��������t�~�~�.�������1�1�4�>�>�B�������,�,�-�����(�(�)rnc��UO[QUOOP2UO[QUOOQ2P!)z,Level not an integer or a valid string: Nonez.Level not an integer or a valid string: (0, 0))rWrW)r	rpr#r8rqs&rI�test_set_invalid_level�!LoggerTest.test_set_invalid_level�sJ���!�!��E��K�K� � �$�	(�	
�!�!��G��K�K� � �&�	*rnc�z�QoPo]]*UO	[UOO2]2UOO]*oUO	UO[O2UO	UOU2UO	UOUO12UO	UOUOV"O12P![c3oSoSOOXO2Po=CK%Po=hh9hr9	)r�r#rTrr]r^rErrr�r0rjrjr�r:	r;	s&    rIr<	�LoggerTest.test_exceptions���%����	7�
��E�
	
����T�^�^�3�3�4�a�8����'�'��*�����������7�������S�)�������t�~�~�&7�8��������-�-��.?�.?�@�	B��!�	7��C��K�K�!�!�#�~�~�6�6��	7�r>	c���[O[QP	29^tt^2UO[UO
OQQ2PPP2P!)%fhP!9h�r1r�ztest message)r�	swap_attrrrvrpr#r�rqs&rI�!test_log_invalid_level_with_raise�,LoggerTest.test_log_invalid_level_with_raisesD��
�
�
�w�(9�4�
@�
@����i������$��O�A�
@�
@�
@�s�-A�A.	�&A.	c���[O[QP
29^tt^2UOO	QQ2PPP2P!)%fhP!9hr�	)rr�	rr#r�rqs&rI�test_log_invalid_level_no_raise�*LoggerTest.test_log_invalid_level_no_raises:��
�
�
�w�(9�5�
A�
A��K�K�O�O�D�.�1�B�
A�
A�
A�s�A
�
A	�A	c�`�,n[OU[OQU1Qk2UOOP	Q5UO
[R2]2UO
QR]*2P!)�print_stackc�D:�ROUO22!r
)rr[)r�r'r�s&&�rIr�=LoggerTest.test_find_caller_with_stack_info.<locals>.<lambda>s���f�m�m�D�M�M�O�&Drnr�r�)rrr�	tracebackr#�
findCallerr]r^)rEr�s&@rI� test_find_caller_with_stack_info�+LoggerTest.test_find_caller_with_stack_infosd������
�
�d�G�-�-�}�D�	F�	
�����$��/�����V��a�(����;�V�A�Y�Grnc�````�]nUOOnUU1QknU1QknU1QkoUOOoU2UO	UP*O
Q2UP*OoR]*
nU2UO	UP*O
Q2UOUP*OU2UP*OoR]*
nU2UO	UP*O
Q2UOUP*OU2UP*Oo[O2oUOUO2[OnU2UO	UP*O
Q2UOUO2UOOnR]*
nU2UO	UP*O
Q2UOUP*OU2P!)r�c�:�RQRQ5P!rc	r�rf	s��rIri	�>LoggerTest.test_find_caller_with_stacklevel.<locals>.innermost'rk	rnc�:�R2P!r
r�rm	s�rIr��:LoggerTest.test_find_caller_with_stacklevel.<locals>.inner*ro	rnc�:�R2P!r
r�rq	s�rIrr	�:LoggerTest.test_find_caller_with_stacklevel.<locals>.outer-rt	rnri	r�rr	ru	)r#r�rrEr]r?rr�rr rCrN)	rErr	rErr2r�ri	rg	rh	s	&    @@@@rIru	�+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�6rnc�*�Qo]
oP9o9o9o9o9o9q�[OVV4VVVxU	2	o
Q[U
OO	22*FD7oUQ-oUO[UOOVV4VVUV�Q5J9	P!)�	my record�
some value�rk�sinfo)rvrE)	r�_logRecordFactoryrb�__dict__�keysrvr�r#�
makeRecord)
rErGr,rm�lnor0rjrjr�r�	�rvr[rks
&            rI�%test_make_record_with_extra_overwrite�0LoggerTest.test_make_record_with_extra_overwriteJs�������:>�>��>�S�>�3�>��>��>�4�
�
&�
&�t�B�S�'/�u�>��*�E�"�+�+�2B�2B�2D�,E�E�E�C��,�'�E����h����(>�(>�� �s�(�$)�
�
8�Frnc��Qo]
oP9o9o9o9o9o9q�QQ-o
UOOVV4VVVzU	Q5	oUOQUO2P!)r�	�	valid_keyr�	r�	)r#r�	r4r�	)rErGr,rmr�	r0rjrjr�r�	rkrs&           rI�(test_make_record_with_extra_no_overwrite�3LoggerTest.test_make_record_with_extra_no_overwriteWsn������:>�>��>�S�>�3�>��>��>�4��l�+�����'�'��R�c�(0�U�(�L���
�
�k�6�?�?�3rnc��UOUOO22UOOFDoUOO	U2J 	UOUOO22P!r
)rDr#r@rArNr�rjs& rIrK	�LoggerTest.test_has_handlers`s\��������/�/�1�2��{�{�+�+�G��K�K�%�%�g�.�,�������0�0�2�3rnc��[OQ2oP
UmUOUO	22P!)z
blah.child)rr r�r�r@)rE�child_loggers& rI�test_has_handlers_no_propagate�)LoggerTest.test_has_handlers_no_propagategs1���(�(��6��!&�������1�1�3�4rnc�*�UOOOo]UOOmUO[UOOQU2UOUOO
]22P!)�rQ)r#r!rQr�r�r�rF	rG	s& rIrH	�LoggerTest.test_is_enabled_forlsb���k�k�)�)�1�1��&(������#��������!4�!4�i��M�������1�1�"�5�6rnc��UOOoUOOOoP	UOm]UOOmUO	[
UOQU2UO	[
UOOQU2UO
UOO]22P!)TrrQ)r#rr!rQr�r�r�rF	)rE�old_disabledrs&  rI�#test_is_enabled_for_disabled_logger�.LoggerTest.test_is_enabled_for_disabled_loggerrs����{�{�+�+���k�k�)�)�1�1��#�����&(������#��������j�,�G��������!4�!4�i��M�������1�1�"�5�6rnc�"�[O2oUOU[O2UOU[OP22UOU[OP22UOU[OQ22UOU[OQ2O2UOU[OQ2O2UOU[OQ2O2UOU[OQ22UOU[OQ2O2P!)Nrvr@r��)rr r2rvr3rW)rErvs& rI�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�Crnc��UO[[O[2UO[[OQ2P!)sfoo)rvrprr �anyrqs&rI�test_invalid_names�LoggerTest.test_invalid_names�s2�����)�W�%6�%6��<����)�W�%6�%6��?rnc��[[O]*2FD`oQFDVo[OU2o[O
V12o[OU2oUOVS2JX	Jb	P!)r�)r�rvr@r�zbaz.bar)r�r��HIGHEST_PROTOCOLrr r|r�r2)rE�protorGr#rk�	unpickleds&     rI�
test_pickling�LoggerTest.test_pickling�s^���6�2�2�Q�6�7�E�A�� �*�*�4�0���L�L��/��"�L�L��O�	��
�
�i�0�	B�8rnc�x
�UOo[OQ2o[OQ2oUO[O2UOUO
2[O2UOUO-2UOUO[O22UOUO[O22UOUO[OP	[OP
-2UOUO-2UOUO[O22UOUO-2UOUO[O22UOUO[OP	-2UO[O2UOUO
2[O2UOUO-2UOUO[O22UO[O2UOUO
2[O2UOUO-2UOUO-2UOUO-2UOUO[O22UOUO[O22UOUO[O22UOUO[O22UOUO[O22[O2UOUO
2[O2UOUO-2UOUO-2UOUO-2UOUO[O22UOUO[O22UOUO[O22P!)r}r�)r2rr r8r�r]r3�_cacherDrF	r�r9r�r�rQ)rErvr0r1s&   rI�test_caching�LoggerTest.test_caching�sz�������#�#�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�+;�+;�<�=rn)r#r)rurvrwrxrJr�	r<	r�	r�	r�	ru	r�	r�	rK	r�	rH	r�	r�	r�	r�	r�	rzr{r�r�s@@rIr�	r�	�se����*�*�B�"P�2�H�%7�N8�4�4�5�
7�
7�D�@�1�6>�6>rnr�	c�>`�\sQsQsnQsQsQsQsQsQs	Us
P!)�BaseFileTesti�z1Base class for handler tests that write log filesc�b�[OU2[QQ2Um,UmP!)r�ztest_logging-2-)rrJrnrm�rmfilesrqs&rIrJ�BaseFileTest.setUp�s$�����t�� ��):�;�����rnc�$�UOFDo[OU2J	[OO	UO
2%c![OUO
2[OU2P!r
)r�	rir�r�r�rmrrU)rErms& rIrU�BaseFileTest.tearDown�sP���,�,�B��I�I�b�M��
�7�7�>�>�$�'�'�"�"��I�I�d�g�g�����$�rnc��UO[OOU2QU*Q5UOOU2P!)z7Assert a log file is there and register it for deletionzLog file %r does not existrn)rDrir�r�r�	r)rEr\s&&rI�
assertLogFile�BaseFileTest.assertLogFile�s=����������x�0�8�8�C�	�	E������H�%rnc
�v�[OQ[OQ]UO2PPP2!)r�r�)rr+r9rrrqs&rI�next_rec�BaseFileTest.next_rec�s5��� � ��g�m�m�S�!�!%�!2�!2�!4�d�D�$�H�	Hrn)rmr�	)rurvrwrxryrJrUr�	r�	rzr{r|s@rIr�	r�	�s#����7��
 �&�H�Hrnr�	c�.`�\sQsQsnQsQsQsUsP!)�FileHandlerTesti�c�D�[OUO2[OUOQP	Q5oUOUO2UO[OOUO22UO[O-22UOUO2UOOUO22UO2P!)rr�)rir�rmrr�r;r7r�r�r�r�r�rrDrM)rE�fhs& rI�
test_delay�FileHandlerTest.test_delay�s���
�	�	�$�'�'��
�
 �
 ����7�$�
G�����"�)�)�$������������0�1�
�	�	�'�'�'��+�,����R�Y�Y�'���������t�w�w�/�0�
���
rnc�D�[OUO2[OUOQQQ5oUO[OQ22UOUO22UO2UOUO22[UO29^tt^2oUOUO2O2Q2PPP2P!)%fhP!9h)rr�)r�r�rrr�)rir�rmrr�r?r<rxr�	rMr�r]rdr�)rEr
rOs&  rI�%test_emit_after_closing_in_write_mode�5FileHandlerTest.test_emit_after_closing_in_write_mode�s���
�	�	�$�'�'��
�
 �
 ����7��
E��
����)�)�-�8�9�
����
�
�� �
���
�
����
�
�� �
�$�'�'�]�]�b����R�W�W�Y�_�_�.��4��]�]�]�s�/D�D	�D	r�)rurvrwrxr
r
rzr{r|s@rIr
r
�s�����	5�	5rnr
c�`�\sQsQsnQs\O\OQ2Q2s	\O\\Q2Q2Q2s
QsQ	sQQ
ksQsQsQ
s\O(2Q2sQsUsP!)�RotatingFileHandlerTesti�c���[OOUOQ]Q5oUO	UOP22UO
2[OOUOQ]Q5oUO	UOP22UO
2[UOQ29^tt^2oUOQ2PPP2[OOUOQ]Q5oUO	UOP22UO
2P!)%fhKn9h)r�r��maxBytesr��
)	rrAr�rmr��shouldRolloverrMr�r)rE�rhr�s&  rI�test_should_not_rollover�0RotatingFileHandlerTest.test_should_not_rollovers��
�
�
�
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�E�E 	�E 	�WASI does not have /dev/null.c���[OO[OQ]Q5oUOUO
UO222UO2P!)rr
)	rrAr�ri�devnullr�r
r�	rM�rEr
s& rI�!test_should_not_rollover_non_file�9RotatingFileHandlerTest.test_should_not_rollover_non_filesR��
�
�
�
1�
1��
�
�W�q�2�:������*�*�4�=�=�?�;�<�
���
rn�mkfifozrequires os.mkfifo()c	�j``�[OnUO[OR2[O
R2QnUU1Qko[OUQ5o[OU,29^tt^2[OORQ]Q5o[O U29^tt^2UO#2oUO%UO'U22UO)U2PPP2PPP2UO+RO-2WO.[O0*2P![c$oSOQS*2Po=CK<Po=hh9h)%fhK�9h)%fhK�9h)zos.mkfifo(): %sznot readc�:�[RQ29^tt^2oUO2nPPP2P!)%fhP!9h)�rb)r�rd)r�rr\s ��rI�
other_side�ORotatingFileHandlerTest.test_should_not_rollover_named_pipe.<locals>.other_side)s,����h��%�%���v�v�x��&�%�%�%�s�2�A	�A	rrr
)rrNr�r�rir
�PermissionErrorr�r�r�r�
start_threadsrrAr��
contextlib�closingr�	r�r
rxr]rNr0�linesep)rEr�r
rr
r�rr\s&     @@rI�#test_should_not_rollover_named_pipe�;RotatingFileHandlerTest.test_should_not_rollover_named_pipes0����#�#�����	�(�(�(�3�	1��I�I�h����	 �
�!�!��4��
�
+�
+�V�H�
5�
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�sO�E�
AF"�AF	�
F"�	F�(F�)F�F�F
�F
�F"�"F2	�+F2	c�r�[UOQ29^tt^2oUOQ2PPP2[OOUOQ]Q5oUO
UOUO222UO2P!)%fhK|9h)r�r
rr
)
r�rmrrrAr�rDr
r�	rM)rEr�r
s&  rI�test_should_rollover�,RotatingFileHandlerTest.test_should_rollover8sv��
�$�'�'�4�
 �
 �A�
�G�G�E�N�!�
�
�
�
1�
1�$�'�'�G�VW�
1�
X������)�)�$�-�-�/�:�;�
���
�	!�
 �s�B&�&B6	�/B6	c�2�[OUO2[OOUOQQ5oUO
UO22UOUO2UO2P!)rr�)
rir�rmrrAr�rxr�	r�	rMr
s& rI�test_file_created�)RotatingFileHandlerTest.test_file_created?s`��	�	�	�$�'�'��
�
�
�
1�
1�$�'�'�G�
1�
L��
����
�
�� ����4�7�7�#�
���
rnc	�n�U%cQU-L-o[OUO2[OO
UO1QQQ]Q]d-U@oUO
[OOUO2U%(2[OQQ-2o[OQQ	-2oUOUOU22UOUOU22UOU2UOUO2UO[OOUOQ*22UOUOU22UOUOU22UOU2UO[OOUO22UOUOQ*2UO[OOUOQ*22UOUOU22UOUOU22UO2P!)
r�r�r�backupCountr
r0r��.1�.2�dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb)rir�rmrrAr�r2r�r�r�r�r
rxr�	rDrM)rEr�rkr
�small�larges&&    rI�test_max_bytes�&RotatingFileHandlerTest.test_max_bytesHs���%*�'�5�!���
�	�	�$�'�'��
�
�
�
1�
1��G�G�N�%�N�34�N�?B�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�
���
rnc�,�UOP	Q5P!)T)r�)r2
rqs&rI�test_max_bytes_delay�,RotatingFileHandlerTest.test_max_bytes_delay_s�����$��'rnc��Qo[OOUOQ]]Q5oVmUOUO
22UOUO2UO[OOUUOQ*222UOUO
22UOUUOQ*22UO[OOUUOQ*222UOUO
22UOUUOQ*22UO[OOUUOQ*222UOUO
22UO[OOUUOQ*222UO2P!)c��UQ*!��.testr�r�	s&rI�namer�>RotatingFileHandlerTest.test_rollover_filenames.<locals>.namercs���'�>�!rnr�r�r,
r
r-
r.
�.3)
rrAr�rmr;
rxr�	r�	r�rir�r�rM)rEr;
r
s&  rI�test_rollover_filenames�/RotatingFileHandlerTest.test_rollover_filenamesbsn��	"�
�
�
�
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�(=�>�?�
���
rnc���QQ[OO2oUUOQ]]Q5oUO	UOUO2UOQ*2UO
UO22UOUO2UO
UO22UOUOUOQ*2Q*2UO[OOUOUOQ*222UO2P!)c�.`�\sQsQsnQsQsQsUsP!)�ZRotatingFileHandlerTest.test_namer_rotator_inheritance.<locals>.HandlerWithNamerAndRotatorivc��UQ*!r9
r�)rErGs&&rIr;
�`RotatingFileHandlerTest.test_namer_rotator_inheritance.<locals>.HandlerWithNamerAndRotator.namerws���g�~�%rnc��[OOU2%c [OVQ*2P!P!)�.rotated)rir�r�rt)rE�source�dests&&&rI�rotator�bRotatingFileHandlerTest.test_namer_rotator_inheritance.<locals>.HandlerWithNamerAndRotator.rotatorzs+���7�7�>�>�&�)�)��J�J�v�j�'8�9�*rnr�)rurvrwrxr;
rJ
rzr{r|s@rI�HandlerWithNamerAndRotatorrC
vs����
&�
:�
:rnrL
rr=
r:
r-
rG
)rrAr�rmr]r;
rxr�	r�	r�rir�r�rM)rErL
r
s&  rI�test_namer_rotator_inheritance�6RotatingFileHandlerTest.test_namer_rotator_inheritanceus���	:��)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�
���
rnc��QoQo[OOUOQ]]Q5oV#mVmUO
2oUOU2UOUO2UO
2oUOU2UUOQ*2oUOU2[Oo[UQ29^tt^2oUO2o	[OU	2o
UOU
O!Q2UO"U*2PPP2UOUO
22UUOQ*2oUOU2[UQ29^tt^2oUO2o	[OU	2o
UOU
O!Q2UO"U*2PPP2UOUO
22UUOQ*2o[UQ29^tt^2oUO2o	[OU	2o
UOU
O!Q2UO"U*2PPP2UO%[O&O)UUOQ*222UO+2P!)%fhCK�9h)%fhCK)9h)%fhK�9h)	c��UQ*!)z.gzr�r�	s&rIr;
�3RotatingFileHandlerTest.test_rotator.<locals>.namer�s���%�<�rnc	�d�[UQ29^tt^2oUO2o[OU]	2o[UQ29^tt^2oUO	U2PPP2PPP2[
OU2P!)%fhK09h)%fhK;9h)r
r�)r�rd�zlib�compressrrir)rH
rI
�sfr�
compressed�dfs&&    rIrJ
�5RotatingFileHandlerTest.test_rotator.<locals>.rotator�sq���f�d�#�#�r��w�w�y��!�]�]�4��3�
��$��%�%���H�H�Z�(�&�$�

�I�I�f��&�%��$�#�s/�<B�B	�$B�B
�B
�B�B/	�(B/	rr=
r-
r
r�r.
r>
)rrAr�rmrJ
r;
r�	rxr�	rir"
r�rdrS
�
decompressr]rNr0r�r�r�rM)rEr;
rJ
r
�m1�m2rm�newliner�rV
rs&          rI�test_rotator�$RotatingFileHandlerTest.test_rotator�s8��	 �	��
�
�
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�(=�>�?�
���
�%�^�^���^�^���^�s9�,AL�*AL#�AL7�L 	�L 	�#L4	�,L4	�7M	�M	r�r�)rurvrwrxr
rrr�is_wasir
rar�rir#
r&
r)
r2
r5
r?
rM
�
requires_zlibr]
rzr{r|s@rIr	
r	
�s������(�_�_�W�_�_�&E�F��G�������X�.�0F�G�<�H�<�2���.(��&�&
����*��*rnr	
c�\`�\sQsQsn\O
\OQ2Q2sQs	QQks
QsQsQs
Q	sQ
sQs\O"Q2Q
2s\O"Q2Q2s\O"Q2Q2s\O"Q2Q2sQsUsP!)�TimedRotatingFileHandlerTesti�r
c�&�[OO[OQQ]Q5o[
OQ2[OQQ-2oUOUOU22UO2P!)�Sr�r�r,
皙�����?r0ztesting - device file)rrAr�rir
r�r�r�r�r
rM)rEr
r�s&  rIr
�5TimedRotatingFileHandlerTest.test_should_not_rollover�sp���
�
�
6�
6��
�
�C�'�q�7�B���
�
�3���!�!�5�*A�"B�C������*�*�1�-�.�
���
rnc	��[OOUOQQ]Q5o[OQ2oUOU2[OQQ-2oUOU2UOUO2[OQ2[OQQ-2oUOU2UO2P
o[OO2oQo[U2FD�oU[OUQ5*
o	UOU	O!Q	2*o
["O$O'U
2oU%fJlUO(O+U
2L	Q
U*oU%Cf.["O$O-UO2vq�["O.U2T
t,tFDp�O1U
2%fJU
MJ	oo
[3QUO!Q2*[4O6Q
5[3QU*[4O6Q
5SFDjo
[3QU
*2["O$O9V�2o[;UQ29^tt^2o[3UO=22PPP2Jl	UO?V[Q5P!tto
h)%fhJ�9h)rd
rre
r:r0ztesting - initialrf
ztesting - after delay��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�rn�,) rrAr�rmr<r?r�rxr�	r�r�rMr;r�r��	timedelta�strftimerir�r�r�	rr��listdirr�r�r�r6r�r�rdrD)rEr
r�rrrs�foundr��GO_BACK�secs�prevrmr0�dnr��filesr��tfs&                rI�
test_rollover�*TimedRotatingFileHandlerTest.test_rollover�s#��
�
�
�
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���u��W�W�]�]�4�7�7�+�F�B� "�
�
�2��C��1�,�,�r�2B�Q�Q��E�C��/�C�L�L�1D�$E�E�C�J�J�W��3�e�;�#�*�*�M����'�!�+�,��w�w�|�|�B�*���$��_�_���"�'�'�)�$�%�_��
	
�����'��D�%�_�_�s�7K6�K6�<K;	�;L
�L
c	��[OUO2[OO	2oUO2oQUOQ*t96cQ6ffL[
OQUOQ**
Q*2[OO	2oUO2oUO]Q5o[OQ2oU%cQUO20LQo[]2FD|o[OOUOQVSQ	5oUOU2[O Q
QU0-2oUO#U2UO%2J~	UO'UO2[)UOQQ59^tt^2o	[+U	2FDvqjUO-QU0U
2J	PPP2[.O0UOUO32]*
1]*2[]2FD|o[OOUOQVSQ	5oUOU2[O Q
Q
U0-2oUO#U2UO%2J~	S[O4U%c]L]Q5*
oUOQUQ
0oUO'U2[)UOQQ59^tt^2o	[+U	2FDvqjUO-Q
U0U
2J	PPP2[)UQQ59^tt^2o	[+U	2FDvqjUO-QU0U
2J	PPP2P!)%fhCK�9h)%fhKn9h)%fhP!9h)g�������?rdg�������?g�?)�microsecondr:�W�MIDNIGHTr)r��when�atTimer0z	testing1 r�z	testing2 ��daysr�z%Y-%m-%d)rr�rmr;r�r�rz
r�rtrr<�weekdayr�rAr�r?r�rxrMr�	r��	enumerater4ri�utime�	timestamprm
)
rE�weeklyr�r~
r�r}
r�r
rsr�rm�rolloverDate�otherfns
&&           rI�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�(�-�
,�%-�
,�
,��-�
,��-�
,�
,�s6� +O�+O�+O+�O	�
O	�O(	�!O(	�+O<	�4O<	c�,�UOP	Q5P!)T)r�
)r�
rqs&rI�test_rollover_at_weekday�5TimedRotatingFileHandlerTest.test_rollover_at_weekdays���&�&�d�&�3rnc	�X�UOoU[[OOUO
QQP	Q5U[[OOUO
QQP	Q5U[[OOUO
QQP	Q5P!)�Xrr�r{
�W7)rvr�rrAr�rm)rErvs& rI�test_invalid�)TimedRotatingFileHandlerTest.test_invalids���(�(���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�	Brnc��]o[OOUOQQP	PQ5oUO	U2oUOV1Q*2UO	UQ*]*
2oUOV1Q*2UO	UQ*2oUOV1Q*2UO	UQ*2oUOV1Q*2UO
2[O]]]2o[OOUOQQP	UQ5oUO	U2oUOV1Q*2UO	UQ*]*
2oUOV1Q*2UO	UQ*2oUOV1Q*2UO	UQ	*2oUOV1Q*2UO
2P!SO
2h9hSO
2h9h)
rWrr|
�r�r}
r<r~
�Qi�i�_�i@��ж)	rrAr�rm�computeRolloverr]rMr;r�)rE�currentTimer
rhr~
s&    rI�"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�CH�
CH1�H.�1Ic��[[O22oVQ**
o[O]]]2o[OU2Oo[]2FCD8o[OOUOQQU*]]P	UQ5oVE6�c]U*
U*oLVT*
oUQ*oUQ*
oVr*
oUOU2oV�6wc;[Q[O*2[Q[2*2UOV�2UOUQ*]*
2oV�6wc;[Q[O*2[Q[2*2UOV�2VT6Xc
UQ*
oUOUQ*2oV�6wc;[Q[O*2[Q[2*2UOV�2UOUQ*2oV�6wc;[Q[O*2[Q[2*2UOV�2UO2CJ;	P!SO2h9h)	r�
rzW%d)r�r}
�intervalr,
r<r~
zfailed in timezone: %dzlocal vars: %sr�
i�:	r�
)r/r�r;rB�tm_wdayr�rrAr�rmr�
r��timezone�localsr]rM)	rEr�
�todayr~
�wday�dayr
rirhs	&        rI�#test_compute_rollover_weekly_attime�@TimedRotatingFileHandlerTest.test_compute_rollover_weekly_attimeKs���$�)�)�+�&���E�1�1�����r�1�a�(���{�{�5�!�)�)����8�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���
�s5�/J2�5A	J2�?A/J2�/AJ2�&J2�'A(J2�AJ2�2Kc
���[OQQ5oUO[OU2,o[
O
O
2o[]
2FDAoUOUOQ22U[
O]Q5*
oJC	Qo,o,oSFCDo[OOUQU*2o	[OO!U	Q]]P	Q	5o
UOU
2UO#Q2%c%SFDoUOU8Q
U802J	J�UO#Q2%c/QoV�mSFDoUOU8QU8Q
02J	J�UQ6XfJ�QoV�mSFDoUOQU*2J	CJ	SFD@o
[OOV2o	['U	Q29^tt^2oPPP2JB	[)U2FCD�vqHVt*o
U
O+2oUO-[/U2]U2UO#Q2%cIQU*o	SFD6o[OO1U2voo
UO3V�2J8	J�UO#Q2%c�SFD�o[OO1U2voo
UO5U
Q
2UO3V�Q*2UO7U
[/U2]**O922J�	CJ?UQ6XfCJISFDoo[OO1U2voo
UO5U
Q2UO3U
Q2UO7U
]*O922Jq	CJ�	P!)%fhCJ(9h)r�r�	�%Y-%m-%d_%H-%M-%Sri
�a.b�d.er�z%s.logrk�r}
r�
r,
r�z.log.c��[OOU2vqUOQP2Q*o[OO	V2!)r�)rir�r�rtr��r\rC�basenames&  rIr;
�HTimedRotatingFileHandlerTest.test_compute_files_to_delete.<locals>.namer�sA��(*���
�
�h�(?�%�G�'�/�/���;�f�D�H��7�7�<�<��:�:rnr�r�c��[OOU2vqQUQ**Q*o[OOV2!)r�:�NN�.oldlog)rir�r�r�r�
s&  rIr;
r�
�s=��(*���
�
�h�(?�%�G�"�X�b�\�1�I�=�H��7�7�<�<��:�:rnz
g%s.oldlogr�z%s.log.r�
)r�
za.b.cr�
zd.e.fr�)rg�mkdtempr��shutil�rmtreer;r�r�rrn
rm
rir�r�rrAr�r�r;
r�r�
�getFilesToDeleter]r^r�r�r�rD�isdigit)rE�wd�timesr�r��prefixesru
�rotatorsr�r�rJ
r]r;
rmr��
candidatesr�rSs&                 rI�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��)�)�"�0�$��"�"�5�)�)�#�A��G�G�M�M�!�,�E�A�r��'�'��F�3��)�)�"�s�l�;��O�O�B�s�6�{�Q��$7�$?�$?�$A�B�	$�
�3��#�A��G�G�M�M�!�,�E�A�r��'�'��I�6��)�)�"�c�2��O�O�B�q�E�M�M�O�4�	$�!-����s�O%	�%O7
�.O7
c
��[O[OQQ52oUO	[
OU2,o[OO2o]
o[U2FDAoUOUOQ22U[O]Q5*
oJC	Q	o,o,o[U2FDkvq�U	]*o[OO!V*Q]UP	Q5oUOU2SFDo
UOU
8QU
802J	Jm	SFDo
UOQU
*2J	SFDoV*O#2J	[U2FD�vq�U	]*oV�*oUO%2oUO'[)U2VK*
U2[*O,Q2oSFDeo[.O0O3U2vooUO5UU
Q*2U[)U
2]*PoUO7UU2Jg	J�	P!)
r�r�	r�
ri
rkr�
r�z
a.log.%s.cz&^\d{4}-\d{2}-\d{2}_\d{2}-\d{2}-\d{2}\z)za.logza.log.b)�pathlib�Pathrgr�
r�r�
r�
r;r�r�rrn
rm
r�
rrAr��touchr�
r]r^rXrYrir�r�r�r	)rEr�
r�
r��n_filesr�r�
ru
r�
r�r�r,
rJ
r]r�r�
�matcherr�rSrmr�s&                    rI�?test_compute_files_to_delete_same_filename_different_extensions�\TimedRotatingFileHandlerTest.test_compute_files_to_delete_same_filename_different_extensions�s���
�\�\�(�*�*�/�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��%�%�b�&��*�5��S��[��]�,�-��� � ���1�	 �
-rnzEST+05EDT,M3.2.0,M11.1.0c�``�[OoUU1Qko[OOROQQP
Q5nUUQ]]
]];];2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]];];2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]]2UQ]]]]22RO2[OOROQQP
[O]]]2Q5nUUQ]]
]];];2UQ]]
]]22UUQ]]
]]2UQ]]]]22UUQ]]
]
]2UQ]]]]22UUQ]]]];];2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]
]2UQ]]]]22RO2[OOROQQP
[O]]]2Q5nUUQ]]
]];];2UQ]]
]]22UUQ]]
]]2UQ]]]]22UUQ]]
]]2UQ]]]]22UUQ]]]];];2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]];];2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]];];2UQ]]]]22UUQ]]]];];]Q5UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]]2UQ]]]]22RO2[OOROQQP
[O]]]2Q5nUUQ]]
]]];2UQ]]
]]22UUQ]]
]]2UQ]]]]22UUQ]]
]]2UQ]]]]22UUQ]]]];];2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]]];2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]]2UQ]]]]22RO2[OOROQQP
[O]]]2Q5nUUQ]]]]];2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]];];2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]]];2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]];];2UQ]]]]22UUQ]]]]]Q5UQ]]]]]Q52UUQ]]]]];]Q5UQ]]]]]Q52UUQ]]]]]Q5UQ]]]]22UUQ]]]];];]Q5UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]]2UQ]]]]22RO2P!)c��:�ROUO22oV!O2*
oU%c+ROU][OUQ52P!P!�rWri
�r�
r�
r]r;rm
��currentrirh�diffr
rEs&&  ��rIrz�OTimedRotatingFileHandlerTest.test_compute_rollover_MIDNIGHT_local.<locals>.test��R����'�'��(9�(9�(;�<�F��.�.�0�0�D��� � ��q�(�*<�*<�T�*J�K�rnrr|
�r�r}
r<��r�
��fold�r;rrAr�rmrMr��rE�DTrzr
sf  @rI�$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��%;�<�
���
rnc�``�[OoUU1Qko[OOROQQP
Q5nUUQ]]]];];2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]
]]];];2UQ]
]]]22UUQ]
]]]2UQ]]]]22UUQ]
]]]2UQ]]]]22RO2[OOROQQP
[O]]]2Q5nUUQ]]
]];];2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]];];2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]]2UQ]]]]22RO2[OOROQQP
[O]]]2Q5nUUQ]]]];];2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]
]2UQ]]]]22UUQ]
]]];];2UQ]
]]]22UUQ]
]]]2UQ]]]]22UUQ]
]]
]2UQ]]]]22RO2[OOROQQP
[O]]]2Q5nUUQ]]]];];2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]];];2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]
]]];];2UQ]
]]]22UUQ]
]]]2UQ]]]]22UUQ]
]]]2UQ]]]]22UUQ]]]];];2UQ]]]]22UUQ]]]];];]Q5UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]]2UQ]]]]22RO2[OOROQQP
[O]]]2Q5nUUQ]]]]];2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]];];2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]
]]]];2UQ]
]]]22UUQ]
]]]2UQ]]]]22UUQ]
]]]2UQ]]]]22RO2[OOROQQP
[O]]]2Q5nUUQ]]]]];2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]];];2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]]];2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]];];2UQ]]]]22UUQ]]]]]Q5UQ]]]]]Q52UUQ]]]]];]Q5UQ]]]]]Q52UUQ]]]]]Q5UQ]]]]22UUQ]]]];];]Q5UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]]2UQ]]]]22RO2P!)c��:�ROUO22oV!O2*
oU%c+ROU][OUQ52P!P!r�
r�
r�
s&&  ��rIrz�ITimedRotatingFileHandlerTest.test_compute_rollover_W6_local.<locals>.testar�
rnr�W6r�
r�
r�
r�
r�
r�
sf  @rI�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��%<�=�
���
rnc��``�[OoUU1Qko[OOROQQP
]Q5nUUQ]]]];];2UQ]]]]22UUQ]]	]]2UQ]]]]22UUQ]]	]]2UQ]]]]22UUQ]]
]];];2UQ]]
]]22UUQ]]]]2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]];];2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]];];2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]]2UQ]]]]22RO2[OOROQQP
][O]]]2Q5nUUQ]]]];];2UQ]]
]]22UUQ]]]]2UQ]]]]22UUQ]]]
]2UQ]]]]22UUQ]]
]];];2UQ]]]]22UUQ]]
]]2UQ]]
]]22UUQ]]
]
]2UQ]]
]]22UUQ]]]];];2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]
]2UQ]]]]22UUQ]]]];];2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]
]2UQ]]]]22RO2P!)c��:�ROUO22oV!O2*
oU%c+ROU][OUQ52P!P!r�
r�
r�
s&&  ��rIrz�XTimedRotatingFileHandlerTest.test_compute_rollover_MIDNIGHT_local_interval.<locals>.test�r�
rnrr|
�r�r}
r<r�
r�
�r�r}
r<r�
r~
r�
r�
sf  @rI�-test_compute_rollover_MIDNIGHT_local_interval�JTimedRotatingFileHandlerTest.test_compute_rollover_MIDNIGHT_local_interval�s����
�
��	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��%;�<�
���
rnc�J
``�[OoUU1Qko[OOROQQP
]Q5nUUQ]]]];];2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]];];2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]
]]];];2UQ]
]]]22UUQ]
]]]2UQ]]]]22UUQ]
]]]2UQ]]]]22UUQ]
]]];];2UQ]]]]22UUQ]
]]]2UQ]]]]22UUQ]
]]]2UQ]]]]22RO2[OOROQQP
][O]]]2Q5nUUQ]]]];];2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]
]];];2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]
]]];];2UQ]]]]22UUQ]
]]]2UQ]]]]22UUQ]
]]]2UQ]]]]22UUQ]]]];];2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]]2UQ]]]]22RO2[OOROQQP
][O]]]2Q5nUUQ]]]];];2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]
]2UQ]]]]22UUQ]]]];];2UQ]]]]22UUQ]]]]2UQ]]]]22UUQ]]]
]2UQ]]]]22UUQ]
]]];];2UQ]
]]]22UUQ]
]]]2UQ]]]]22UUQ]
]]
]2UQ]]]]22UUQ]
]]];];2UQ]]]]22UUQ]
]]]2UQ]]]]22UUQ]
]]
]2UQ]]]]22RO2P!)c��:�ROUO22oV!O2*
oU%c+ROU][OUQ52P!P!r�
r�
r�
s&&  ��rIrz�RTimedRotatingFileHandlerTest.test_compute_rollover_W6_local_interval.<locals>.testr�
rnrr�
r�
r�
r�
r�
r�
sf  @rI�'test_compute_rollover_W6_local_interval�DTimedRotatingFileHandlerTest.test_compute_rollover_W6_local_intervals����
�
��	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�&=�>�
���
rnr�r�)rurvrwrxrrrr_
r
rw
r�
r�
r�
r�
r�
r�
r�
�run_with_tzr�
r�
r�
r�
rzr{r|s@rIrb
rb
�s�����
�_�_�W�_�_�&E�F��G��((�T)5�V4�B�%�P4�l@5�D&2�T
���3�4�k�5�k�^
���3�4�y�5�y�z
���3�4�.�5�.�d
���3�4�B�5�Brnrb
c�j�[OQ-U@[O]Q5*!)r�ri
r�)r;rm
)rs,rIrr
rr
Ts&�����#��#�x�'9�'9�!�'D�D�Drn�W0)r�
�hoursc	���[OOUOQV]P	Q5oQoUO	U2oUOQ2%c#U[
]U]*
*Q5*
oLV2*oV66wCc�UQ6XCcyUO%c[OU2oL[OU2oU]*oU]*o	U]*o
[OOU]<*U	*]<*U
**
oV[*o[QU8QUO8Q0[OQ	5[Q
U*[OQ	5[QU	*[OQ	5[QU
*[OQ	5[Q
U*[OQ	5[QU*[OQ	5UO!V62UO#2P![c-o
[QS
*[OQ	5Po
=
KUPo
=
hh9h)r)r�r}
r�
r,
r<rXr{
r
r|
zt: z (�)rk
zcurrentHour: %szcurrentMinute: %szcurrentSecond: %szr: %sz
result: %sz exception in diagnostic code: %s)rrAr�rmr�
r�rr
r<r�rB�	localtime�	_MIDNIGHTr�r�r6r�r]rM)rEr}
r�
�expr
r�
rhr]�currentHour�
currentMinute�
currentSecondr�rr�s&&&&          rI�test_compute_rolloverr�
`s����!�!�:�:����'��UV�\`�;�b�B��K��'�'��4�F����s�#�#��t��H�Q�J��0�0������}��:�%�W��6�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�V��W�s%�H.�&E%H.�.	I%�8I%�9"I � I%ztest_compute_rollover_%s�	_intervalc�`�\sQsQsn\O
\Q2Q2s\O
\OQ6HQ2Q2s
QsUsP!)�NTEventLogHandlerTesti�z>win32evtlog/win32evtlogutil/pywintypes required for this test.c�"�Qo[OPU2o[OU2o[OOQ2o[OQQ-2oUOU2UO2UOU[OU22[O[O *oP
o]do	[O"V'U	2o
S
FD8oUO$Q6wcJ[&O(VQ2oUQ6wcJ5P	oL	QU	*oUO+V�Q5P![Oc.oSO]6Xc[OQ2ggPo=hh9h)�Application�test_loggingz#Insufficient privileges to run testr0zTest Log MessagezTest Log Message
z3Record not found in event log, went back %d recordsrn)�win32evtlog�OpenEventLog�GetNumberOfEventLogRecordsrrA�NTEventLogHandler�
pywintypesr��winerrorr�SkipTestr�r�rM�
assertLess�EVENTLOG_BACKWARDS_READ�EVENTLOG_SEQUENTIAL_READ�ReadEventLog�
SourceName�win32evtlogutil�SafeFormatMessagerD)rE�logtype�elh�num_recsrTr�r��flagsrp
rq
r�r0s&           rIr�� 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#�E�F� F�!F	�2F	�	F�win32zWindows required for this testc��[OOQ2oUOUO2UOUOQ2[OQQ-2oUOU2P!)�python_testz"_winapi module should be availabler0zHello!)	rrAr�
r�rMr�_winapir�rx)rErTr�s&  rI�test_without_pywin32�*NTEventLogHandlerTest.test_without_pywin32�s_�����.�.�}�=�������� �	
���Q�Y�Y�(L�M��!�!�5�(�"3�4��	���q�	rnr�)
rurvrwrxrrar�
r�r�r�rrzr{r|s@rIr�
r�
�sS����
����&f�g�(�h�(�B�������0�2R�S��T�rnr�
c�(`�\sQsQsnQsQsUsP!)�MiscTestCasei�c�J�.Qlo[OU[UQ5P!)r�)�not_exported>rvr7�Filtererr��
RootLoggerr��PlaceHolderr��currentframer��StrFormatStyler�rmr�)r�check__all__r)rErs& rI�test__all__�MiscTestCase.test__all__�s��,��
	���T�7��Frnr�)rurvrwrxrrzr{r|s@rIrr�s����G�Grnrc�(`�\sQsQsnQsQsUsP!)�
TestModulei�c�b�QoQFD}oUOUQ59^tt^2UO[U29^tt^2o[[U2PPP2UOWO[2PPP2J	P!)%fhK>9h)%fhJ�9h)z3is deprecated and slated for removal in Python 3.20)�attr)�__version__�__date__)rr*r+r/rr]r\rD)rEr0r$r�s&   rI�%test_deprecated__version__and__date__�0TestModule.test_deprecated__version__and__date__�sw��C��/�D����4��(�(��*�*�+=�s�C�C�r��G�T�*�D�� � ����h�7�)�(�0�C�C��)�(�(�s/�B	�B

�(B	�
B�B�B	�B.
�&B.
r�)rurvrwrxr'rzr{r|s@rIr"r"�s����8�8rnr"c�^�[O[OQP22P!)�LC_ALL)r�enterModuleContextr�run_with_localer�rnrI�setUpModuler-�s������ 7� 7��"� E�Frn�__main__r
r�)rd
r�)�M�<)�Hi)�Dr�
)r|
r�
)r�r�)�ryr�logging.handlers�logging.configrsr4r 
r%r;r�
r�r5rr_r{rir�r�rXr�
rIr�r�rg�test.support.script_helperrrrzr�test.supportrrrrrr	r
�test.support.logging_helperrr"r�r�r�rr�r��http.serverrr
�
unittest.mockrrr�urllib.parserr�socketserverrrrrr�
rrrIrS
r�HAVE_ASAN_FORK_BUGr�check_sanitizerr�TestCaserrr��SILENTr�TERSE�EFFUSIVErrS�	TALKATIVEr�
CHATTERBOX�BORINGr�r"rr�rrrrnrpr�rr:r"r*r.rHrCrlrzr�r�r�r�r�r_rr�r�r<rrrr�rar�r�r�r�r�IPV6_ENABLEDr!r)rVrjr|r�r�r�r�rAr�r�r�r�r�r�r�r�r�r�r�rer{r+r�r�r�r-r�rm
r��tzinfor�r<rrr�r�r�r�r�r�r�r�r�rr]r�r1	r�rQ	r�	r[	r�	r�	r
r	
rb
rr
r}
r�
r�
r�
rGrur�r�
rr"r-�mainr�rnrI�<module>rHs���"����������
�	��	��	��
�	�
�
�
�
��N��&�"�&�)�(�!��3��������:�+�+�+�D�D�6�3�3�	���O�O����E�G���O�O����4�(�-�/��
d'�x� � �d'�NUI��UI�nJ8�h�J8�h�������������	��	��
����F�F�Q�J�'���(��*�	�'��*��*��)�
�+�
�+��,�
�(���+�g�n�n�+�:����:�C'��C'�L�Z:�(�Z:�z1��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�(�	� � �"��,�,�.�U1��U1�/�#�U1�n
���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������V?�X�V?�r89�(�9�.&�h�&�>	�w�(�(�	� �8� �F�,�,�.�zP�x�zP�/�zP�x�7���_�-�-��#���0�0�2�]&�H�]&�3��]&�@���!����(�/�/��
�e��.�.�nA�H�%�%�'9�nA�b&�W�7�7�&�G�X�.�.�G�&@�H�@�,$;�X�$;�N	�	�$�w�*�*�$�T/�8�T/�nx/�(�x/�vL8�H�L8�^n#�h�'�'�n#�bc-��)�)�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,�H�,�^G�8�$�$�G�8��"�"�8�G��z���M�M�O���]d�6�15�5�K�5�/�J�6��
�	��	�s0�!_�._�_�_�_�_ �_ �_ 

Youez - 2016 - github.com/yon3zu
LinuXploit