Sindbad~EG File Manager

Current Path : /proc/2568807/root/usr/local/lib/python3.12/test/__pycache__/
Upload File :
Current File : //proc/2568807/root/usr/local/lib/python3.12/test/__pycache__/test_logging.cpython-312.opt-1.pyc

�

'Μg����>�dZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlmZmZddlmZddlmZddlmZddlmZddlm Z dd	lm!Z!dd
lm"Z"ddlm#Z#ddl$m%Z%ddl&Z&ddl'Z'ddl(Z(ddl)Z)ddl*Z*ddl+Z+ddl,Z,dd
l-m.Z.m/Z/ddl0m1Z1ddl2m3Z3m4Z4ddl5m6Z6m7Z7m8Z8m9Z9	ddl:Z:ddl;Z;ddl<Z<	ddl>Z>e*j~ej�d�ZAe*j~ej�d��d�ZCGd�de*j��ZEGd�deE�ZFGd�deE�ZGdZHdZIdZJdZKdZLd ZMd!ZNd"ZOd#ZPd$ZQeReQeHd%z�ZSeHd&eId'eJd(eKd)eLd*eMd+eNd,eOd-ePd.eQd/i
ZTGd0�d1ej��ZVGd2�d3ej��ZWGd4�d5eE�ZXd6�ZYGd7�d8eE�ZZGd9�d:e[�Z\Gd;�d<ej��Z^Gd=�d>e[�Z_Gd?�d@eE�Z`GdA�dBe#j��ZbGdC�dDe[�ZcGdE�dFece.�ZdGdG�dHece8�ZeGdI�dJece6�ZfegedK�rGdL�dMee�ZhGdN�dOef�Ziej��e j��GdP�dQeE���ZlGdR�dSeE�ZmGdT�dUej��ZodV�ZpGdW�dXeE�Zqej��e j��GdY�dZeE���Zre*j�egedK�d[�Gd\�d]er��Ztej��e j��Gd^�d_eE���Zue*j�egedK�d[�Gd`�daeu��Zvej��e j��Gdb�dceE���Zwe*j�egedK�d[�Gdd�deew��Zxe*j�ej�df�Gdg�dhew��Zzej��e j��Gdi�djeE���Z{Gdk�dleE�Z|Gdm�dneE�Z}Gdo�dpeE�Z~d�dq�ZGdr�ds�Z�dt�Z�Gdu�dvej��Z�Gdw�dxe�j�j�Z�Gdy�dze�j�Z�Gd{�d|�Z�Gd}�d~e��Z�Gd�d�e��Z�d��Z�d�d��Z�Gd��d�eE�Z�Gd��d�eE�Z�Gd��d�eE�Z�Gd��d�e�j �Z�Gd��d�eE�Z�e j��Gd��d�eE��Z�ege�jd��r)ddl�Z�ddl0m1Z1e j��Gd��d�eE��Z�e�j,d�Z�Gd��d�e�j0�Z�e��Z�Gd��d��Z�Gd��d�e*j�e��Z�Gd��d�e�j:�Z�Gd��d�e*j��Z�Gd��d�eE�Z�Gd��d�eE�Z�Gd��d��Z�Gd��d�e�jF�Z�Gd��d�eE�Z�Gd��d�eE�Z�Gd��d�eE�Z�Gd��d�e*j��Z�Gd��d�e*j��Z�Gd��d�e�jT�Z�Gd��d��Z�Gd��d�e�jT�Z�Gd��d�eEe��Z�Gd��d�eE�Z�Gd��d�e��Z�Gd��d�e��Z�Gd��d�e��Z�d��Z�d�d�d�d�d�d�e�d�dƬǫffD]3\Z�Z�d�D])Z�e�e�e�fdɄZ�d�e�zZ�e�d%kDre�d�z
Z�e�e�_�e�e�e�e���+�5e*j�e:d̫Gd̈́d�eE��Z�Gdτd�e*j��Z�dфZ�e�d�k(re*�j|�yy#e=$r
dxZ:xZ;Z<Y���wxYw#e=$rY���wxYw)�zoTest harness for the logging module. Run all tests.

Copyright (C) 2001-2022 Vinay Sajip. All Rights Reserved.
�N)�assert_python_ok�assert_python_failure)�support)�
import_helper)�	os_helper)�
socket_helper)�threading_helper)�warnings_helper)�asyncore)�smtpd)�TestHandler)�
HTTPServer�BaseHTTPRequestHandler)�patch)�urlparse�parse_qs)�ThreadingUDPServer�DatagramRequestHandler�ThreadingTCPServer�StreamRequestHandlerz?libasan has a pthread_create() dead lock related to thread+forkT)�threadz'TSAN doesn't support threads after forkc�6�eZdZdZdZdZdZd�Zd�Zd
d�Z	d	�Z
y)�BaseTestzBase class for logging tests.z&%(name)s -> %(levelname)s: %(message)sz^([\w.]+) -> (\w+): (\d+)$rc��tj�|_tj�j
j}tj�	tjj�|_
tjdd|_|j�x|_
}tjj�|_tj j�|_ix|_}|D]}t'||dd�||<�	tj(�tjd�|_tjd�|_tjd�|_|j.j1�|_t5j6�|_|j.j;tj<�tj>|j8�|_ tjB|jD�|_#|j@jI|jF�|j*jK�r;|j*jL|j.jLz}tOd|z��|j,jK�r;|j,jL|j.jLz}tOd|z��|j.jQ|j@�|jS|j*jK��|jS|j,jK��y#tj(�wxYw)zxSetup the default logging stream to an internal StringIO instance,
        so that we can examine log output as we want.N�disabledu«×»uĿÖG�zUnexpected handlers: %s)*r	�threading_setup�_threading_key�logging�	getLogger�manager�
loggerDict�_acquireLock�	_handlers�copy�saved_handlers�_handlerList�saved_handler_list�
saved_loggers�_nameToLevel�saved_name_to_level�_levelToName�saved_level_to_name�
logger_states�getattr�_releaseLock�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      �./usr/local/lib/python3.12/test/test_logging.py�setUpzBaseTest.setUpas���/�>�>�@����'�'�)�1�1�<�<������	#�")�"3�"3�"8�"8�":�D��&-�&:�&:�1�&=�D�#�1<�1A�1A�1C�C�D���'.�';�';�'@�'@�'B�D�$�'.�';�';�'@�'@�'B�D�$�13�3�D���%��&-�m�D�.A�.8�$�'@�
�d�#�&�
� � �"��(�(��8����(�(�)=�>���"�,�,�R�0���&*�&6�&6�&H�&H�&J��#��k�k�m������!�!�'�-�-�0� �.�.�t�{�{�;���%�/�/����@������#�#�D�$7�$7�8��<�<�#�#�%��L�L�)�)�D�,<�,<�,E�,E�E�E� �!:�U�!B�C�C��<�<�#�#�%��L�L�)�)�D�,<�,<�,E�,E�E�E� �!:�U�!B�C�C����#�#�D�N�N�3�������0�0�2�3�������0�0�2�3��-
� � �"�s
�B;M%�%M;c��|jj�|jj|j�|jj
r[|jj
d}|jj|�|j�|jj
r�[|jj
|j�tj�	tjj�tjj|j�tjj�tjj|j�tj j�tj j|j"�|j$tj&ddtj(�j*}d|_|j.}|j�|j|j0�|j2}|j2D]}||��	|||j0|_�!	tj6�|j9�t;j<|j>�y#tj6�wxYw)zJRemove our logging stream, and restore the original logging
        level.rN) r8�closer3�
removeHandlerr<rBr9r5rr#r,�clear�updater-r*r+r$r&r(r'r r!�disabler"r)r.rr0�
doCleanupsr	�threading_cleanupr)rF�hr!r"r.rHs      rJ�tearDownzBaseTest.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�d�8K�D�&�&�t�,�5�+�
� � �"������*�*�D�,?�,?�@��
� � �"�s�+E.J5�J5�5KNc��|xs|j}tj|xs|j�}|j	�j�}|j
t|�t|��t||�D]U\}}|j|�}|s|jd|z�|j
t|j��|��W|j�}|r|jd|z�yy)z�Match the collected log lines against the regular expression
        self.expected_log_pat, and compare the extracted group values to
        the expected_values list of tuples.z*Log line does not match expected pattern:
z'Remaining output at end of log stream:
N)r8�re�compile�expected_log_pat�getvalue�
splitlines�assertEqual�len�zip�search�fail�tuple�groups�read)	rF�expected_valuesr8�pat�actual_lines�actual�expected�match�ss	         rJ�assert_log_lineszBaseTest.assert_log_lines�s����&�4�;�;���j�j��5�� 5� 5�6�����(�3�3�5������\�*�C��,@�A� #�L�/� B��F�H��J�J�v�&�E���	�	�G�"�#�$����U�5�<�<�>�2�H�=�!C�
�K�K�M����I�I�@�1�D�E�
�c�J�|xjdz
c_d|jzS)zMGenerate a message consisting solely of an auto-incrementing
        integer.�z%d)�message_num�rFs rJ�next_messagezBaseTest.next_message�s&��	
���A����d�&�&�&�&rl�NN)�__name__�
__module__�__qualname__�__doc__r>rYrorKrUrkrq�rlrJrrYs-��'�9�J�4���K�(4�T A�DF�$'rlrc�:�eZdZdZd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
y	)
�BuiltinLevelsTestz*Test builtin levels and their inheritance.c��|j}tjd�}|jtj�tj
tjd�i�}|jtj�tjd�}|jtj�|jtj|��|j|��|jtj|��|j|��|j|��|j|��|jtj|��|j|��|j|��|j|��|j|��|j|��|j|��|j|��|j|��|jgd��y)N�ERR�INF�DEB))r{�CRITICAL�1)r{�ERROR�2)r|r~�3)r|r��4)r|�WARNING�5)r|�INFO�6)r}r~�7)r}r��8)r}r��9)r}r��10)r}r:�11)rqrr r9r��
LoggerAdapterr�r:�logr~�error�warning�info�debugrk)rF�mr{r|r}s     rJ�	test_flatzBuiltinLevelsTest.test_flat�sr����������&�����W�]�]�#��#�#�G�$5�$5�e�$<�b�A�����W�\�\�"�����&�����W�]�]�#�	���� � �!�#�&��	�	�!�#������ � �!�#�&��	�	�!�#�����A�C�������
����� � �!�#�&��	�	�!�#�����A�C�������
��	�	�!�#��	���A�C�������
��	�	�!�#���	�	�!�#�����
�	rlc��|j}tjd�}|jtj�tjd�}|jtj
�|j
tj|��|j|��|j|��|j|��|j|��|jddg�y)Nr|�INF.ERR)r�r~r)r�r�r��
rqrr r9r�r�r�r~r�r�r�r�rk)rFr�r|�INF_ERRs    rJ�test_nested_explicitz&BuiltinLevelsTest.test_nested_explicit�s�����������&�����W�\�\�"��$�$�Y�/��������'�	���G�$�$�a�c�*��
�
�a�c��	���������Q�S���
�
�a�c�����(�%�
�	rlc��|j}tjd�}|jtj�tjd�}|jtj
�tjd�}tjd�}tjd�}|j
tj|��|j|��|j|��|j|��|j
tj|��|j|��|j|��|j|��|j|��|j|��|jgd��y)Nr|r��	INF.UNDEF�
INF.ERR.UNDEF�UNDEF))r�r~r)r�r�r�)r�r�r�)r�r�r�)r�r~r�)r�r�r�r�)rFr�r|r��	INF_UNDEF�
INF_ERR_UNDEFr�s       rJ�test_nested_inheritedz'BuiltinLevelsTest.test_nested_inheriteds>����������&�����W�\�\�"��$�$�Y�/��������'��%�%�k�2�	��)�)�/�:�
��!�!�'�*��	�
�
�g�&�&���,����������!�#�����q�s�����'�*�*�A�C�0����A�C� �	���������a�c�"����1�3�����A�C� ����
�	rlc�B�|j}tjd�}tjd�}tjd�}|jtj�|jtj|��|j|��|jtj|��|j|��|j|��|j|��|jgd��y)Nr|�INF.BADPARENT.UNDEF�
INF.BADPARENT))r�r~r)r�r�r�)r�r~r�)r�r�r�)
rqrr r9r�r��FATALr�r�rk)rFr�r|�
GRANDCHILD�CHILDs     rJ�test_nested_with_virtual_parentz1BuiltinLevelsTest.test_nested_with_virtual_parent2s�����������&���&�&�'<�=�
��!�!�/�2�����W�\�\�"�	���w�}�}�a�c�*�������
�	�	�'�-�-���%�
�
�
�1�3��	������
���A�C�����
�	rlc���|jtjd�tj�|jtjtj�d�y)z&See issue #22386 for more information.r�N)r\r�getLevelNamer�rps rJ�test_regression_22386z'BuiltinLevelsTest.test_regression_22386Ls@������-�-�f�5�w�|�|�D�����-�-�g�l�l�;�V�Drlc�n�tjd�}|j|tj�y)Nr�)rr�r\r�)rF�fatals  rJ�test_issue27935z!BuiltinLevelsTest.test_issue27935Qs&���$�$�W�-�������
�
�.rlc���tjtjd�|jtjtjd�|j	tj
tj�d�|j	tj
tj�d�|j	tj
d�tj�y)z&See issue #29220 for more information.rr��NOTSETN)r�addLevelNamer��
addCleanupr\r�r�rps rJ�test_regression_29220z'BuiltinLevelsTest.test_regression_29220Us������W�\�\�2�.�����,�,�g�l�l�F�C�����-�-�g�l�l�;�R�@�����-�-�g�n�n�=�x�H�����-�-�h�7����HrlN)rsrtrurvr�r�r�r�r�r�r�rwrlrJryry�s,��4�-�^�.!�F�4E�
/�Irlryc�"�eZdZdZd�Zd�Zd�Zy)�BasicFilterTestzTest the bundled Filter class.c��tjd�}|jjd}	|j	|�tj
d�}tj
d�}tj
d�}tj
d�}|j
|j��|j
|j��|j
|j��|j
|j��|jddg�|j|�y#|j|�wxYw)N�	spam.eggsr�spam�spam.eggs.fish�spam.bakedbeans�r�r�r��r�r�r�)
r�Filterr3rB�	addFilterr r�rqrk�removeFilter)rF�filter_�handlerr��	spam_eggs�spam_eggs_fish�spam_bakedbeanss       rJ�test_filterzBasicFilterTest.test_filteras
���.�.��-���"�"�+�+�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�C4D6�6E	c�t�d�}|jjd}	|j|�tjd�}tjd�}tjd�}tjd�}|j|j
��|j|j
��|j|j
��|j|j
��|jddg�|j|�y#|j|�wxYw)	Nc�j�|jjd�}dj|dd�}|dk(S)N�.�r�)rH�split�join)�record�parts�prefixs   rJ�
filterfuncz8BasicFilterTest.test_callable_filter.<locals>.filterfunc}s5���K�K�%�%�c�*�E��X�X�e�B�Q�i�(�F��[�(�(rlrr�r�r�r�r�r�)	r3rBr�rr r�rqrkr�)rFr�r�r�r�r�r�s       rJ�test_callable_filterz$BasicFilterTest.test_callable_filterys��	)�
�"�"�+�+�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�C4D$�$D7c��tj�}tjddi�}|j|j	|��y)NrHr�)rr��
makeLogRecordrE�filter)rF�f�rs   rJ�test_empty_filterz!BasicFilterTest.test_empty_filter�s7���N�N����!�!�6�;�"7�8����������$rlN)rsrtrurvr�r�r�rwrlrJr�r�]s��(�*�0-�:%rlr��x�w�v�u�t�s�r�q�p�orn�Silent�Taciturn�Terse�Effusive�Sociable�Verbose�	Talkative�	Garrulous�
Chatterbox�Boringc��eZdZdZd�Zy)�GarrulousFilterz)A filter which blocks garrulous messages.c�(�|jtk7S�N)�levelno�	GARRULOUS�rFr�s  rJr�zGarrulousFilter.filter�s���~�~��*�*rlN�rsrtrurvr�rwrlrJr�r��s
��3�+rlr�c��eZdZdZd�Zy)�VerySpecificFilterz5A filter which blocks sociable and taciturn messages.c�2�|jttfvSr�)r��SOCIABLE�TACITURNr�s  rJr�zVerySpecificFilter.filter�s���~�~�h��%9�9�9rlNr�rwrlrJr�r��s
��?�:rlr�c�>�eZdZdZdZd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zy
)�CustomLevelsAndFiltersTestz@Test various filtering possibilities with custom logging levels.�^[\w.]+ -> (\w+): (\d+)$c��tj|�tj�D]\}}t	j
||��yr�)rrK�my_logging_levels�itemsrr�)rF�k�vs   rJrKz CustomLevelsAndFiltersTest.setUp�s5�����t��%�+�+�-�D�A�q�� � ��A�&�.rlc�Z�tD]"}|j||j���$yr�)�LEVEL_RANGEr�rq)rF�logger�lvls   rJ�log_at_all_levelsz,CustomLevelsAndFiltersTest.log_at_all_levels�s#���C��J�J�s�D�-�-�/�0�rlc�l�dtjfd�}tjd�}tjd�}tj�}tj�}tj
|�}tj
|�}|j
|�|j|�|j|�|jd�|j�|j�|j|j�d�|j|j�d�y)Nr�c�>�tj|�}d|_|S)Nznew message!)r%�msg)r�s rJ�replace_messagezWCustomLevelsAndFiltersTest.test_handler_filter_replaces_record.<locals>.replace_message�s���Y�Y�v�&�F�'�F�J��Mrl�parentzparent.childzoriginal messagezoriginal message
z
new message!
)r�	LogRecordr r6r7r;r�rDr��flushr\rZ)rFrr�child�stream_1�stream_2�	handler_1�	handler_2s        rJ�#test_handler_filter_replaces_recordz>CustomLevelsAndFiltersTest.test_handler_filter_replaces_record�s���	�G�$5�$5�	��"�"�8�,���!�!�.�1���;�;�=���;�;�=���)�)�(�3�	��)�)�(�3�	����O�,����)�$�
����#�
�
�
�%�&�������������*�*�,�.B�C�����*�*�,�.>�?rlc�h��t��G�fd�dtj�}tjd�}|j	tj
�|j
|��|j
|��|jd�|jdt���y)Nc�2��eZdZdejf�fd�Zy)�WCustomLevelsAndFiltersTest.test_logging_filter_replaces_record.<locals>.RecordingFilterr�c�b���jt|��tj|�Sr�)�add�idr%)rFr��recordss  �rJr�z^CustomLevelsAndFiltersTest.test_logging_filter_replaces_record.<locals>.RecordingFilter.filters"������B�v�J�'��y�y��(�(rlN)rsrtrurr	r�)rs�rJ�RecordingFilterr�s���
)�W�%6�%6�
)rlrrrr�)
�setrr�r r9r�r�r�r\r])rFrrrs   @rJ�#test_logging_filter_replaces_recordz>CustomLevelsAndFiltersTest.test_logging_filter_replaces_record�s~����%��	)�g�n�n�	)�
�"�"�8�,��������%�����*�+�����*�+����E������C��L�)rlc��|jjt�|j|j�|j	gd��y)N)�r�r��r�r��r�r��r�r��r�r��r�r�)r3r9�VERBOSErrkrps rJ�test_logger_filterz-CustomLevelsAndFiltersTest.test_logger_filter
s=�����!�!�'�*����t�/�/�0����
�	rlc��|jjdjt�	|j	|j�|jgd��|jjdjtj�y#|jjdjtj�wxYw)Nr)rrrr r!)r3rBr9r�rrkrr�rps rJ�test_handler_filterz.CustomLevelsAndFiltersTest.test_handler_filters������!�!�!�$�-�-�h�7�	B��"�"�4�#3�#3�4��!�!�#�
�
���%�%�a�(�1�1�'�.�.�A��D���%�%�a�(�1�1�'�.�.�A�s�.B�8Cc�@�|jjd}d}t�}|j|�	|j	|j�gd�}|j|�t
�}|jj|�|j	|j�|j|gd�z�|r|jj|�|j|�y#|r|jj|�|j|�wxYw)Nr)	)r�r)r�r�)r�r�rrrrr r!))r�r�)r��12)r��14)r��15)r��17)r��18)r��20)r3rBr�r�rrkr�r�)rFr��specific_filter�garr�first_liness     rJ�test_specific_filtersz0CustomLevelsAndFiltersTest.test_specific_filters+s����"�"�+�+�A�.����� �����$��!	'��"�"�4�#3�#3�4��K�
�!�!�+�.�0�2�O����&�&��7��"�"�4�#3�#3�4��!�!�+�
1
�
#
�

��� � �-�-�o�>�� � ��&���� � �-�-�o�>�� � ��&�s�BC-�-0DN)rsrtrurvrYrKrrrr#r%r0rwrlrJr�r��s2��J�3��'�
1�@�8*�"�B� ('rlr�c�`�tj|i|��\}}tj|�|Sr�)�tempfile�mkstemp�osrM)�args�kwargs�fd�fns    rJ�make_temp_filer9Vs+��
�
�
�t�
.�v�
.�F�B���H�H�R�L�
�Irlc�f�eZdZd�Zd�Zd�Zejejdk(d�eje
jd�ej�e
jd�d�����Ze
j �ej�eed	�����Zy
)�HandlerTestc��tj�}d|_|j|jd�d|_|j|jd�|j	t
|jd�y)N�generic�anothergeneric)r�HandlerrHr\�assertRaises�NotImplementedError�emit�rFrTs  rJ�	test_namezHandlerTest.test_name]s\���O�O�������������+�!���������!1�2����-�q�v�v�t�<rlc���tjdv�rdD�]�}t�}|stj|�t
jj|dd��}|r�|j|j}}|j|d�|j|d�tjddi�}|j|�tj|�|jtjj|��|j|�|j!tjj|��n8|j|jd�|j|jd�|j#�|s��|tj|����tjd	k(rd
}nd}	t
jj%|�}|j|j&|j(�|j!|j*�|j#�dD]j}|d
k(r2|j/t0t
jj2dd|��:t
jj3dd|�}|j#��lt
jj5d�}tji�}|j!|j7|��|j#�t
jj5d�}|j|j7|��|j#�y#t,$rY��/wxYw)N��linux�darwin)TF�utf-8T��encoding�delay���r�TestrHz/var/run/syslogz/dev/log)�GET�POST�PUTrQ�	localhostz/logrrn)�sys�platformr9r4�unlinkrrB�WatchedFileHandler�dev�inor\r��handle�assertFalse�path�existsrErM�
SysLogHandler�facility�LOG_USER�
unixsocket�OSErrorr@�
ValueError�HTTPHandler�BufferingHandler�shouldFlush)	rF�existingr8rTrWrXr��sockname�methods	         rJ�test_builtin_handlersz!HandlerTest.test_builtin_handlerses|���<�<�.�.�)��#�%����I�I�b�M��$�$�7�7��W�TX�7�Y��� �u�u�a�e�e��C��$�$�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�/����	���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�	M#�"M#c�<�t�}tj|�tj|�}t
j|dfft
jj|dfft
jj|dfff}tjdvr"|t
jj|dfffz
}|D]`\}}||ddi�}|jtjj|��|j!�tj|��by)zx
        Test that path-like objects are accepted as filename arguments to handlers.

        See Issue #27493.
        �w�arTrFrKrIN)r9r4rUr�FakePathr�FileHandlerrB�RotatingFileHandler�TimedRotatingFileHandlerrSrTrVrEr[r\rM)rFr8�pfn�cases�clsr5rTs       rJ�test_pathlike_objectsz!HandlerTest.test_pathlike_objects�s����
��
�	�	�"�
�� � ��$���(�(�3��*�5��%�%�9�9�C��:�F��%�%�>�>��c�
�K���
�<�<�.�.��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�	rl�ntz/WatchedFileHandler not appropriate for Windows.z'Emscripten cannot fstat unlinked files.�walltimec	�����fd�}d}d}d�_d�_dD�]F}tdd�}tj|||f��}d|_|j
�tjj|d|�	�}tjd
�}|j|�	t|�D]Y}	tjd�tjdd
i�}
	tj��_|j!|
��[	|j'�|j)�t*j,j/|�s��2t+j0|���Iy#t"$r't%d�j�d�j����wxYw#|j'�|j)�t*j,j/|�rt+j0|�wwxYw)Nc���t|�D]]}	tj|�tj��_tjdtjdd�z��_y#t
$rY�:wxYw)Ng����Mbp?r�)	�ranger4rU�time�
deletion_timera�sleep�random�randint)�fname�tries�_rFs   �rJ�remove_loopz*HandlerTest.test_race.<locals>.remove_loop�sb����5�\����I�I�e�$�)-����D�&��
�
�5�6�>�>�!�Q�#7�7�8�
"������s�.A.�.	A:�9A:i��FT�.logztest_logging-3-��targetr5TrIrJz'%(asctime)s: %(levelname)s: %(message)s�{�G�zt?r�testingzDeleted at z, opened at )�handle_timer|r9�	threading�Thread�daemon�startrrBrVr=r@rzr{r}r�rY�	Exception�printr�rMr4r[r\rU)rFr��	del_count�	log_countrLr8�removerrTr�r�r�s`          rJ�	test_racezHandlerTest.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�1#��%���04�0B�0B�04�0@�0@�B�C��	���������	��7�7�>�>�"�%��I�I�b�M�&�s%�$:F�*E&�	F�&0F�F�AG0c�H����Gd�dtj�}|jttj�d�|��|j�jjj�d�_	|jttj�d�|jttj�d�tjd�}|j��|jtj�t!j"��t!j"�����fd�}t!j$|d�	�}|j'��j)�t+j,�}|dk(r(	|j/d
�t+j0d�y
|j/d��j3�|j5�t7j8|d��y
#t+j0d�wxYw)z>Ensure child logging locks are not held; bpo-6721 & bpo-36533.c�$��eZdZ�fd�Zd�Z�xZS)�AHandlerTest.test_post_fork_child_no_deadlock.<locals>._OurHandlerc�p��t�|��tjt	ddd����|_y)Nz	/dev/null�wtrI�rK�r8)�super�__init__rr;�open�sub_handler�rF�	__class__s �rJr�zJHandlerTest.test_post_fork_child_no_deadlock.<locals>._OurHandler.__init__�s.����� �"�#*�#8�#8���T�G�D�$F�� rlc���|jj�	|jj|�|jj�y#|jj�wxYwr�)r��acquirerB�releaser�s  rJrBzFHandlerTest.test_post_fork_child_no_deadlock.<locals>._OurHandler.emit�sR��� � �(�(�*�/��$�$�)�)�&�1��$�$�,�,�.��D�$�$�,�,�.�s�A�A.�rsrtrur�rB�
__classcell__�r�s@rJ�_OurHandlerr��s���
F�

/rlr�rz*because we need at least one for this testrn� test_post_fork_child_no_deadlockc�:��tj�	�j�	�j��j	d��j�	tj�y#�j�wxYw#tj�wxYw)N��?)rr#r�r�waitr�r0)�+fork_happened__release_locks_and_end_thread�locks_held__ready_to_fork�refed_hs���rJ�lock_holder_thread_fnzKHandlerTest.test_post_fork_child_no_deadlock.<locals>.lock_holder_thread_fnsq���� � �"�
'����!�&�-�1�1�3�@�D�D�S�I��O�O�%��$�$�&���O�O�%���$�$�&�s"�B�!A/�	B�/B�B�Bz,test_post_fork_child_no_deadlock lock holder)r�rHz#Child process did not deadlock. \o/z&Parent process returned from fork. \o/)�exitcodeN)rr?r\r]r$r�r�r8rMrH�
assertGreater�_at_fork_reinit_lock_weaksetr rDr9r:r��Eventr�r�r�r4�forkr��_exitrr�r�wait_process)	rFr��test_loggerr��lock_holder_thread�pidr�r�r�s	      @@@rJr�z,HandlerTest.test_post_fork_child_no_deadlock�s����	/�'�/�/�	/�	
����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�	'�2'�-�-�,�C�E��	� � �"�!�&�&�(��g�g�i���!�8�
�� � �!G�H������
���F�G�7�;�;�=��#�#�%�� � ��q�1�������s�H
�
H!N)rsrtrurDrirt�unittest�skipIfr4rHr�
is_emscriptenr	�requires_working_threading�requires_resourcer��
requires_fork�skip_if_asan_fork�skip_if_tsan_forkr�rwrlrJr;r;\s���=�3�j�,�X�_�_�R�W�W��_�&W�X��X�_�_����H��1��0�0�2��W���z�*�)"�+�3��Y�)"�^�W����0��0�0�2���H2���3��H2rlr;c��eZdZd�Zy)�	BadStreamc��td��)N�deliberate mistake)�RuntimeError)rF�datas  rJ�writezBadStream.write5s���/�0�0rlN)rsrtrur�rwrlrJr�r�4s��1rlr�c��eZdZd�Zy)�TestStreamHandlerc��||_yr�)�error_recordr�s  rJ�handleErrorzTestStreamHandler.handleError9s
��"��rlN)rsrtrur�rwrlrJr�r�8s��#rlr�c�(�eZdZejZdZy)�StreamWithIntNamer�N)rsrtrurr��levelrHrwrlrJr�r�<s���N�N�E��Drlr�c��eZdZd�Zd�Zd�Zy)�StreamHandlerTestc���tt��}tji�}tj}	|j|�|j
|j|�tjt��}tj�5}|j|�d}|j||j��ddd�dt_tj�5}|j|�|jd|j��ddd�|t_y#1swY�nxYw#1swY�!xYw#|t_wxYw)Nz"
RuntimeError: deliberate mistake
Fr)r�r�rr��raiseExceptionsrY�assertIsr�r;r�captured_stderr�assertInrZr\)rFrTr��	old_raise�stderrrs      rJ�test_error_handlingz%StreamHandlerTest.test_error_handlingAs����i�k�*���!�!�"�%���+�+�	�	0�
�H�H�Q�K��M�M�!�.�.�!�,��%�%�i�k�2�A��(�(�*�f������<���
�
�c�6�?�?�#4�5�+�
',�G�#��(�(�*�f������� � ��V�_�_�%6�7�+�'0�G�#�+�*��+�*��'0�G�#�s<�AE�4D9�'E�32E�%E�9E�>E�E�
E�
Ec�@�tj�}tj�}|j	|�}|j|tj�|j	|�}|j||�|j	|�}|j|�y)z3
        Test setting the handler's stream
        N)	rr;r6r7�	setStreamr�rSr��assertIsNone)rFrTr8�oldrgs     rJ�test_stream_settingz%StreamHandlerTest.test_stream_settingWsu��
�!�!�#��������k�k�&�!���
�
�c�3�:�:�&����S�!���
�
�f�f�%����S�!�����&�!rlc�t�tjt��}|jt	|�d�y)Nz<StreamHandler 2 (NOTSET)>)rr;r�r\�reprrCs  rJ�'test_can_represent_stream_with_int_namez9StreamHandlerTest.test_can_represent_stream_with_int_namees+���!�!�"3�"5�6������a��">�?rlN)rsrtrur�r�r�rwrlrJr�r�@s��0�,"�@rlr�c�.�eZdZdZd�Zd�Zd�Zd�Zd�Zy)�TestSMTPServera
    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���tjj||d|d��|jj	�d|_||_d|_d|_||_	y)NT)�map�decode_datarnF)
r�
SMTPServerr��socket�getsockname�port�_handler�_thread�_quit�
poll_interval)rF�addrr�r��sockmaps     rJr�zTestSMTPServer.__init__�s\��
���!�!�$��d��.2�	"�	4��K�K�+�+�-�a�0��	���
������
�*��rlc�,�|j||||�y)aI
        Delegates to the handler passed in to the server's constructor.

        Typically, this will be a test case method.
        :param peer: The client (host, port) tuple.
        :param mailfrom: The address of the sender.
        :param rcpttos: The addresses of the recipients.
        :param data: The message.
        N)r�)rF�peer�mailfrom�rcpttosr�s     rJ�process_messagezTestSMTPServer.process_message�s��	
�
�
�d�H�g�t�4rlc��tj|j|jf��x|_}d|_|j
�y)zG
        Start the server running on a separate daemon thread.
        r�TN�r�r��
serve_foreverr�r�r�r��rF�ts  rJr�zTestSMTPServer.start��C��%�+�+�4�3E�3E�26�2D�2D�1F�H�	H���q����	���	rlc�|�|js0tj||jd��|js�/yy)a*
        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`.
        rn)r��countN)r�r�loop�_map)rFr�s  rJr�zTestSMTPServer.serve_forever�s(���*�*��M�M�-�T�Y�Y�a�@��*�*rlc��d|_tj|j�d|_|j	�tj|jd��y)zr
        Stop the thread by closing the server instance.
        Wait for the server thread to terminate.
        TN)r��
ignore_all)r�r	�join_threadr�rMr�	close_allrrps rJ�stopzTestSMTPServer.stop�sA��
��
��$�$�T�\�\�2�����
�
�����t�y�y�T�:rlN)	rsrtrurvr�r�r�r�rrwrlrJr�r�ls!���(+�
5��	A�	;rlr�c�4��eZdZdZd�Zd�Z�fd�Zd�Z�xZS)�ControlMixina

    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�`�d|_||_||_tj�|_yr�)r�r�r�r�r��ready)rFr�r�s   rJr�zControlMixin.__init__�s&�����*�����
��_�_�&��
rlc��tj|j|jf��x|_}d|_|j
�y)zI
        Create a daemon thread to run the server, and start it.
        r�TNr�r�s  rJr�zControlMixin.start�r�rlc�`��|jj�tt|�|�y)z^
        Run the server. Set the ready flag before entering the
        service loop.
        N)r
rr�rr�)rFr�r�s  �rJr�zControlMixin.serve_forever�s"���
	
�
�
����
�l�D�/�
�>rlc���|j�|j�&tj|j�d|_|j	�|j
j
�y)zK
        Tell the server thread to stop, and wait for it to do so.
        N)�shutdownr�r	r�server_closer
rOrps rJrzControlMixin.stop�sL��	
�
�
���<�<�#��(�(����6��D�L������
�
���rl)	rsrtrurvr�r�r�rr�r�s@rJrr�s����'��?�	rlrc�"�eZdZdZ		dd�Zd�Zy)�TestHTTPServera�
    An HTTP server which is controllable using :class:`ControlMixin`.

    :param addr: A tuple with the IP address and port to listen on.
    :param handler: A handler callable which will be called with a
                    single parameter - the request - in order to
                    process the request.
    :param poll_interval: The polling interval in seconds.
    :param log: Pass ``True`` to enable log messages.
    Nc����G��fd�dt��tj||��tj|||�||_y)Nc�2���eZdZdd�Zd�Z���fd�Z�xZS)�=TestHTTPServer.__init__.<locals>.DelegatingHTTPRequestHandlerc�R�|jd�r|jSt|��)N�do_)�
startswith�process_request�AttributeError)rFrH�defaults   rJ�__getattr__zITestHTTPServer.__init__.<locals>.DelegatingHTTPRequestHandler.__getattr__�s%���?�?�5�)��/�/�/�$�T�*�*rlc�:�|jj|�yr���serverr�rps rJrzMTestHTTPServer.__init__.<locals>.DelegatingHTTPRequestHandler.process_request�������$�$�T�*rlc�,���rt�|�|g|���yyr�)r��log_message)rF�formatr5�DelegatingHTTPRequestHandlerr�r�s   ���rJr!zITestHTTPServer.__init__.<locals>.DelegatingHTTPRequestHandler.log_message�s)�����6��,�,2�;�59�;�rlr�)rsrtrurrr!r�)r�r#r�s@��rJr#r�s���
+�

+�
;�
;rlr#)rrr�r�sslctx)rFr�r�r�r�r$r#s    ` @rJr�zTestHTTPServer.__init__�s>���	;�+A�	;�	���D�$�(D�E����d�G�]�;���rlc��	|jj�\}}|jr|jj|d��}||fS#t$r(}t
jjd|z��d}~wwxYw)NT)�server_sidezGot an error:
%s
)r��acceptr$�wrap_socketrarSr�r�)rF�sockr��es    rJ�get_requestzTestHTTPServer.get_requestsv��	����+�+�-�J�D�$��{�{��{�{�.�.�t��.�F��
�T�z���	�	��J�J���2�Q�6�7���	�s�AA�	A=�#A8�8A=)r�FN)rsrtrurvr�r+rwrlrJrr�s��	�58�#'��&	rlrc�2��eZdZdZdZ		dd�Z�fd�Z�xZS)�
TestTCPServera�
    A TCP server which is controllable using :class:`ControlMixin`.

    :param addr: A tuple with the IP address and port to listen on.
    :param handler: A handler callable which will be called with a single
                    parameter - the request - in order to process the request.
    :param poll_interval: The polling interval in seconds.
    :bind_and_activate: If True (the default), binds the server and starts it
                        listening. If False, you need to call
                        :meth:`server_bind` and :meth:`server_activate` at
                        some later time before calling :meth:`start`, so that
                        the server will set up the socket and listen on it.
    Tc��Gd�dt�}tj||||�tj|||�y)Nc��eZdZd�Zy)�;TestTCPServer.__init__.<locals>.DelegatingTCPRequestHandlerc�:�|jj|�yr�rrps rJrYzBTestTCPServer.__init__.<locals>.DelegatingTCPRequestHandler.handle&rrlN)rsrtrurYrwrlrJ�DelegatingTCPRequestHandlerr0$s��
+rlr2)rrr�r)rFr�r�r��bind_and_activater2s      rJr�zTestTCPServer.__init__"s;��	+�*>�	+�	�#�#�D�$�0K�$5�	7����d�G�]�;rlc�n��tt|��|jj	�d|_y�Nrn)r�r-�server_bindr�r�r�r�s �rJr6zTestTCPServer.server_bind,�)���
�m�T�.�0��K�K�+�+�-�a�0��	rl�r�T)rsrtrurv�allow_reuse_addressr�r6r�r�s@rJr-r-s%������47�#'�<�1�1rlr-c�8��eZdZdZ		dd�Z�fd�Z�fd�Z�xZS)�
TestUDPServera0
    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���G�fd�dt��tj||�|�tj|||�d|_y)Nc�(���eZdZd�Z��fd�Z�xZS)�;TestUDPServer.__init__.<locals>.DelegatingUDPRequestHandlerc�:�|jj|�yr�rrps rJrYzBTestUDPServer.__init__.<locals>.DelegatingUDPRequestHandler.handleErrlc���|jj�}|r	t�|��yy#t$r|j
js�YywxYwr�)�wfilerZr��finishrar�_closed)rFr��DelegatingUDPRequestHandlerr�s  ��rJrBzBTestUDPServer.__init__.<locals>.DelegatingUDPRequestHandler.finishHsV����z�z�*�*�,���"��9�4�G�I���#�"�#�{�{�2�2�!� 3�"�s�/� A�A)rsrtrurYrBr�)r�rDs@�rJrDr>Cs���
+�
"�
"rlrDF)rrr�rrC)rFr�r�r�r3rDs     @rJr�zTestUDPServer.__init__AsE���	"�*@�	"�	�#�#�D�$�$?�$5�	7�	���d�G�]�;���rlc�n��tt|��|jj	�d|_yr5)r�r;r6r�r�r�r�s �rJr6zTestUDPServer.server_bindWr7rlc�8��tt|��d|_y)NT)r�r;rrCr�s �rJrzTestUDPServer.server_close[s���
�m�T�/�1���rlr8)rsrtrurvr�r6rr�r�s@rJr;r;0s$���� 58�#'��,1��rlr;�AF_UNIXc�$�eZdZejZy)�TestUnixStreamServerN�rsrtrur�rG�address_familyrwrlrJrIrI`������rlrIc�$�eZdZejZy)�TestUnixDatagramServerNrJrwrlrJrNrNcrLrlrNc�0�eZdZejZd�Zd�Zy)�SMTPHandlerTestc���i}ttjdf|jd|�}|j	�tj|j
f}tjj|ddd|j��}|j|jdg�g|_t
jddi�}tj�|_|j#|�|j j%|j�|j'�|j)|j j+��|jt-|j�d	�|jd\}}}}	|j|d�|j|dg�|j/d
|	�|j)|	j1d��|j3�y)Nr���MbP?�me�you�Log��timeoutru	Hello ✓rnz
Subject: Log
u

Hello ✓)r�r�HOSTr�r�r�rrB�SMTPHandler�TIMEOUTr\�toaddrs�messagesr�r�r��handledrYr�rrE�is_setr]r��endswithrM)
rFr�rr�rTr�r�r�r�r�s
          rJ�
test_basiczSMTPHandlerTest.test_basicnsu������!3�!3�Q� 7��9M�9M�u� '�)�������"�"�F�K�K�0�����(�(��t�U�E�15���
)�
?��������U�G�,���
��!�!�5�.�"9�:�� ���(���	����������$�,�,�'����
�������+�+�-�.�����T�]�]�+�Q�/�(,�
�
�a�(8�%��h�������4�(�����5�'�*��
�
�(�$�/�����
�
�&8�9�:�	���	rlc�n�|jj|�|jj�yr�)r\�appendr]r)rFr5s  rJr�zSMTPHandlerTest.process_message�s$���
�
���T�"������rlN)rsrtrur�LONG_TIMEOUTrZr`r�rwrlrJrPrPhs���"�"�G��0rlrPc�`�eZdZdZdZd�Zd�Zd�Zd�Zd�Z	e
j�d��Zy	)
�MemoryHandlerTestzTests for the MemoryHandler.r�c�J�tj|�tjj	dtj
|j�|_tjd�|_	d|j_
|jj|j�y)N�
�memr)rrKrrB�
MemoryHandlerr�r<�mem_hdlrr �
mem_logger�	propagaterDrps rJrKzMemoryHandlerTest.setUp�sj�����t���(�(�6�6�r�7�?�?�7;�~�~�G��
�!�+�+�E�2���$%����!����"�"�4�=�=�1rlc�b�|jj�tj|�yr�)rjrMrrUrps rJrUzMemoryHandlerTest.tearDown�� ���
�
�������$�rlc	�R�|jj|j��|jg�|jj	|j��|jg�|jj|j��gd�}|j|�dD]�}t
d�D]+}|jj|j���-|j|�|jj|j��|t
||dz�D�cgc]}dt|�f��c}z}|j|���|jj|j��|j|�ycc}w)N)�r:r�r�r�)r�r�)ry��	rgr:)rkr�rqrkr�r�rz�str)rF�lines�n�is    rJ�
test_flushzMemoryHandlerTest.test_flush�sT��	
�����d�/�/�1�2����b�!������T�.�.�0�1����b�!������� 1� 1� 3�4�
��
	
���e�$��A��1�X�����%�%�d�&7�&7�&9�:���!�!�%�(�
�O�O�!�!�$�"3�"3�"5�6���a��R��8H�I�8H�1�g�s�1�v�.�8H�I�I�E��!�!�%�(��	
�����d�/�/�1�2����e�$��	Js�=F$c���|jj|j��|jg�|jj	|j��|jg�|jj|j�|jj�ddg}|j|�tjjdtj|jd�|_|jj|j�|jj|j��|j|�|jj	|j��|j|�|jj|j�|jj�|j|�y)zO
        Test that the flush-on-close configuration works as expected.
        rprqrgFN)rkr�rqrkr�rNrjrMrrBrir�r<rD�rFrus  rJ�test_flush_on_closez%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�$rlc���|jj|j��|jg�|jj	|j��|jg�tjt
jj|j�g��ddg}|j|�t
jjdt
j|jd�|_	|jj|j�|jj|j��|j|�|jj	|j��|j|�tjt
jj|j�g��|j|�y)zi
        Test that the flush-on-close configuration is respected by the
        shutdown method.
        ��handlerListrprqrgFN)rkr�rqrkr�rr�weakref�refrjrBrir�r<rDrzs  rJ�test_shutdown_flush_on_closez.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�$rlc���Gd�d�}||j�}	|jj|�td�D]M}tjd�|j
j
d�|j
jd��O	|jD]}tj|��y#|jD]}tj|��wxYw)Nc��eZdZd�Zd�Zd�Zy)�ZMemoryHandlerTest.test_race_between_set_target_and_flush.<locals>.MockRaceConditionHandlerc� �||_g|_yr�)rj�threads)rFrjs  rJr�zcMemoryHandlerTest.test_race_between_set_target_and_flush.<locals>.MockRaceConditionHandler.__init__�s�� (��
�!��rlc�:�|jjd�yr�)rj�	setTargetrps rJ�removeTargetzgMemoryHandlerTest.test_race_between_set_target_and_flush.<locals>.MockRaceConditionHandler.removeTarget�s���
�
�'�'��-rlc��tj|j��}|jj	|�|j�y)N)r�)r�r�r�r�rbr�)rFrrs   rJrYzaMemoryHandlerTest.test_race_between_set_target_and_flush.<locals>.MockRaceConditionHandler.handle�s3��"�)�)��1B�1B�C�����#�#�F�+����rlN)rsrtrur�r�rYrwrlrJ�MockRaceConditionHandlerr��s��
"�
.�
rlr�rgr�znot flushed�flushed)rjr�rzr{r}rkr�r�r�r	r)rFr�r�r�rs     rJ�&test_race_between_set_target_and_flushz8MemoryHandlerTest.test_race_between_set_target_and_flush�s���	�	�*�$�-�-�8��		5��M�M�#�#�F�+��2�Y���
�
�5�!����$�$�]�3����'�'�	�2��
!�.�.�� �,�,�V�4�)��&�.�.�� �,�,�V�4�)�s�A6B<�<(C$N)
rsrtrurvrYrKrUrxr{r�r	r�r�rwrlrJrere�sF��&�3��2� �%�8%�<%�:1��0�0�2�5�3�5rlrec��eZdZdZd�Zy)�ExceptionFormatterzA special exception formatter.c�&�d|djzS)Nz
Got a [%s]r)rs)rF�eis  rJ�formatExceptionz"ExceptionFormatter.formatExceptions���b��e�n�n�,�,rlN)rsrtrurvr�rwrlrJr�r�s
��(�-rlr�c�N�|j�tj|�yr��rMr4�remove)rTr8s  rJ�closeFileHandlerr�s���G�G�I��I�I�b�Mrlc�8�eZdZdZej
ZdZdZdZdZ	ejdd�Zejdd	�Zd
ezdzZ
ejdd
�ZdZdZdZdZdZd�Zd�Zd�Zefd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z d �Z!d!�Z"d"�Z#d#�Z$d$�Z%y%)&�ConfigFileTestz5Reading 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��tjtj|��}t	j
j|fddi|��y)NrKrI)r6r7�textwrap�dedentr�config�
fileConfig)rF�confr6�files    rJ�apply_configzConfigFileTest.apply_config3s5���{�{�8�?�?�4�0�1�����!�!�$�C��C�F�Crlc�z�tj�5}|j|j�t	j
�}|j
|j��|j|j��|jdg|��|jg�ddd�y#1swYyxYw�N�r�r�r�)
r�captured_stdoutr��config0rr r�rqr�rk�rF�outputrs   rJ�test_config0_okzConfigFileTest.test_config0_ok7s���
�
$�
$�
&�&����d�l�l�+��&�&�(�F��K�K��)�)�+�,��L�L��*�*�,�-��!�!��#��
"�
�
�!�!�"�%�'�
&�
&�s�BB1�1B:c�0�tj�5}tjt	j
|j��}tj�}|j|�tjj|�tj�}|j|j��|j!|j��|j#dg|��|j#g�ddd�y#1swYyxYwr�)rr�r6r7r�r�r��configparser�ConfigParser�	read_filerr�r�r r�rqr�rk)rFr�r��cprs     rJ�test_config0_using_cp_okz'ConfigFileTest.test_config0_using_cp_okFs���
�
$�
$�
&�&��;�;�x���t�|�|�<�=�D��*�*�,�B��L�L����N�N�%�%�b�)��&�&�(�F��K�K��)�)�+�,��L�L��*�*�,�-��!�!��#��
"�
�
�!�!�"�%�'�
&�
&�s�C.D�Dc�j�tj�5}|j|�tjd�}|j|j
��|j|j
��|jddg|��|jg�ddd�y#1swYyxYw�N�compiler.parser�r�rr�r��	rr�r�rr r�rqr�rk�rFr�r�rs    rJ�test_config1_okzConfigFileTest.test_config1_okX���
�
$�
$�
&�&����f�%��&�&�'8�9�F��K�K��)�)�+�,��L�L��*�*�,�-��!�!���#��
"�
�

�!�!�"�%�'�
&�
&���BB)�)B2c�Z�|jt|j|j�yr��r@r�r��config2rps rJ�test_config2_failurez#ConfigFileTest.test_config2_failureg������)�T�%6�%6����Erlc�Z�|jt|j|j�yr��r@r�r��config3rps rJ�test_config3_failurez#ConfigFileTest.test_config3_failurekr�rlc��tj�5}|j|j�t	j
�}	t
��#t$rt	jd�YnwxYwtjjd�|j|j�d�|jg�ddd�y#1swYyxYw�N�just testingr�-ERROR:root:just testing
Got a [RuntimeError]
)rr�r��config4rr r��	exceptionrS�stdout�seekr\rZrkr�s   rJ�test_config4_okzConfigFileTest.test_config4_okos���
�
$�
$�
&�&����d�l�l�+��&�&�(�F�
2�"�n�$���
2��!�!�.�1�
2���J�J�O�O�A�����V�_�_�.�A�
C�
�!�!�"�%�'�
&�
&�s*�0C
�
A�A1�.C
�0A1�1AC
�
Cc�<�|j|j��y�N�r�)r��config5rps rJ�test_config5_okzConfigFileTest.test_config5_ok~������D�L�L��1rlc�<�|j|j��yr�)r��config6rps rJ�test_config6_okzConfigFileTest.test_config6_ok�r�rlc�|�tj�5}|j|j�t	j
d�}t	j
d�}|j
|j��|j|j��|j|j��|jgd�|��|jg�ddd�tj�5}|j|j�t	j
d�}|j|j�|j
|j��|j|j��t	j
d�}|j
|j��|j|j��j|j��|jgd�|��|jg�ddd�y#1swY��IxYw#1swYyxYw)Nr��compiler-hyphenated�r�r�)r~r�r��compiler.lexer�)r�r�)r�r�)r�r�)r�r�)rr�r��config1arr r�rqr��criticalrk�config7rZr�rFr�r�
hyphenateds    rJ�test_config7_okzConfigFileTest.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�C	H%�:D"H2�%H/�2H;c��|j�5tdd�}tjdk(r|j	dd�}|j
j
|��}|j|�|j|�ddd�tjjd}|jt|�y#1swY�>xYw)Nr��test_logging-X-ru�\z\\)r2r)
�check_no_resource_warningr9r4rH�replace�config8r"r�r�rootrBr�r�)rFr8r�r�s    rJ�test_config8_okzConfigFileTest.test_config8_ok�s���
�
+�
+�
-���(9�:�B��w�w�$���Z�Z��f�-���l�l�)�)�2�)�6�G����g�&����g�&�.��,�,�'�'��*�����(�'�2�6�.�
-�s�A0B>�>Cc�j�|j|j�tjjdj
}|j
tjddi��}|j|d�|j
tjddd���}|j|d�y)Nrr�testztest ++ defaultvalue�customvalue�r�customfieldztest ++ customvalue)	r��config9rr�rB�	formatterr"r�r\)rFr��results   rJ�test_config9_okzConfigFileTest.test_config9_ok�s������$�,�,�'��L�L�)�)�!�,�6�6�	��!�!�'�"7�"7����"H�I������!7�8��!�!�'�"7�"7��=�9�#;�<������!6�7rlc�v�|j|j�tjd�}|j	|j
�|j|j�|j
|j
�|j|jd��|j	|j
�y)N�some_pristine_loggerF)�disable_existing_loggers)r��disable_testrr rZrrE�rFrs  rJ�test_logger_disablingz$ConfigFileTest.test_logger_disabling�s������$�+�+�,��"�"�#9�:��������)����$�+�+�,�������(����$�+�+�e��L�������)rlc��d}|j|�|jtj�jdj
d�y)Naw
            [loggers]
            keys=root

            [handlers]
            keys=hand1

            [formatters]
            keys=form1

            [logger_root]
            handlers=hand1

            [handler_hand1]
            class=StreamHandler
            formatter=form1

            [formatter_form1]
            format=%(levelname)s ++ %(message)s
            r�hand1)r�r\rr rBrH)rF�test_configs  rJ�test_config_set_handler_namesz,ConfigFileTest.test_config_set_handler_names�sC����(	
���+�&�����*�*�,�5�5�a�8�=�=�w�Grlc��d}tjtj|��}|j	t
tjj|�y)Na�
            [loggers]
            keys=root

            [handlers]
            keys=hand1

            [formatters]
            keys=form1

            [logger_root]
            handlers=hand1

            [handler_hand1]
            class=StreamHandler
            formatter=form1

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

            prince
            )	r6r7r�r�r@r�rr�r�)rFr�r�s   rJ�'test_exception_if_confg_file_is_invalidz6ConfigFileTest.test_exception_if_confg_file_is_invalid�s>����.�{�{�8�?�?�;�7�8�����,����(A�(A�4�Hrlc���tjdd��\}}tj|�|j	t
tjj|�tj|�y)N�test_empty_�.ini�r��suffix)
r2r3r4rMr@r�rr�r�r�)rFr7r8s   rJ�%test_exception_if_confg_file_is_emptyz4ConfigFileTest.test_exception_if_confg_file_is_emptysJ���!�!��v�F���B�
��������,����(A�(A�2�F�
�	�	�"�
rlc�b�|jttjjd�y)N�filenotfound)r@�FileNotFoundErrorrr�r�rps rJ�,test_exception_if_config_file_does_not_existz;ConfigFileTest.test_exception_if_config_file_does_not_exist
s�����+�W�^�^�-F�-F��Wrlc
��tjd�j�}tjdd��\}}	tj||jd��tj|�tjj|dtddd	d
ddd
�i����tj|�y#tj|�wxYw)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��asciirIrnFr=z5%(asctime)s [%(process)d] [%(levelname)s] %(message)sz[%Y-%m-%d %H:%M:%S %z]zlogging.Formatter)r"�datefmt�class)�versionr��
formatters)rK�defaultsN)r�r��stripr2r3r4r��encoderMrr�r��dictrU)rF�inir7r8s    rJ�!test_defaults_do_no_interpolationz0ConfigFileTest.test_defaults_do_no_interpolations����o�o���&���'	�(�!�!���H���B�	��H�H�R����G�,�-��H�H�R�L��N�N�%�%�� ���-2�!�&]�'?�%8�$� �
�
&�
� 
�I�I�b�M��B�I�I�b�M�s�A.C�CN)&rsrtrurvr
r�rYr��config1r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrwrlrJr�r�s��?� /� I� I��,���G�4�G�@�H�@�o�o�l�L�9�G��o�o�/�1L�M�G��*�+�*�+�G�6�o�o�3�5R�S�G�'�G�T#�G�L�G�,�G�2�L�*D�
&�&�$&-�
&�F�F�
&�2�2�)&�V7�$8�*�H�0I�6�X�*rlr�c�6�eZdZdZeZdZd�Zd�Zd�Z	d�Z
d�Zy)	�SocketHandlerTestzTest for SocketHandler objects.�rRrc��tj|�dx|_x|_|_	|j|j|jd�x|_}|j�|jj�tjj}t|j t"�r|d|j$�|_n||j d�|_d|_|j(j+|j(jd�|j(j-|j�t/j0d�|_y#t$r}||_Yd}~yd}~wwxYw)ztSet up a TCP server to receive log messages, and a SocketHandler
        pointing to that server's address and port.N�{�G�z�?rRrr)rrKr�	sock_hdlr�server_exception�server_class�address�
handle_socketr�rar
r�rrB�
SocketHandler�
isinstance�server_addressrar��
log_outputr3rNrDr��	Semaphorer]�rFrr*�hclss    rJrKzSocketHandlerTest.setUpFs,��	���t��?C�C���C�d�n�t�'<�	�#'�#4�#4�T�\�\�59�5G�5G��$O�
O�D�K�&��L�L�N�	���������-�-���f�+�+�U�3�!�+�v�{�{�;�D�N�!�&�"7�"7��>�D�N�������&�&�t�'7�'7�'@�'@��'C�D����#�#�D�N�N�3� �*�*�1�-�����	�$%�D�!���	�s�>E"�"	E<�+E7�7E<c�F�	|jr?|jj|j�|jj�|jr|jj�tj|�y#tj|�wxYw)zShutdown the TCP server.N)rr3rNrMrrrrUrps rJrUzSocketHandlerTest.tearDown`sj��	$��~�~�� � �.�.�t�~�~�>����$�$�&��{�{���� � �"����d�#��H���d�#���A1B	�	B c��|j}	|jd�}t|�dkrytjd|�d}|j|�}t|�|kr/||j|t|�z
�z}t|�|kr�/tj|�}tj|�}|xj|jdzz
c_	|jj���)Nry�>Lr�
)
�
connection�recvr]�struct�unpack�pickle�loadsrr�r!rr]r�)rF�request�conn�chunk�slen�objr�s       rJrzSocketHandlerTest.handle_socketks����!�!����I�I�a�L�E��5�z�A�~���=�=��u�-�a�0�D��I�I�d�O�E��e�*�t�#���	�	�$��U��*;� <�<���e�*�t�#��,�,�u�%�C��*�*�3�/�F��O�O�v�z�z�D�0�0�O��L�L� � �"�rlc�`�|jr|j|j�tjd�}|j	d�|j
j
�|jd�|j
j
�|j|jd�y)N�tcpr��eggs�
spam
eggs
)
r�skipTestrr r�r]r�r�r\r!r�s  rJ�test_outputzSocketHandlerTest.test_outputzsy��� � ��M�M�$�/�/�0��"�"�5�)�����V�����������V��������������.�9rlc�R�|jr|j|j�d|j_|jj�	t
d��#t$r|jjd�YnwxYw|jjd�tj�}|j|jj|�tj|jj|z
dz�|jjd�y)Ng@zDeliberate mistakez
Never sentzNever sent, eitherrRzNor this)rr9r�
retryStartrrr�r3r�r�r{r��	retryTimer})rF�nows  rJ�
test_noserverzSocketHandlerTest.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�BN)rsrtrurvr-rrrKrUrr:r?rwrlrJrr=s*��*� �L��G�.�4	$�
#�	:�+rlrzUnix sockets requiredc�,�eZdZdZeed�reZd�Zy)�UnixSocketHandlerTestz)Test for SocketHandler with unix sockets.rGc��tj�|_|jtj
|j�tj|�yr�)r�create_unix_domain_namerr�rrUrrKrps rJrKzUnixSocketHandlerTest.setUp��8��$�<�<�>������	�(�(�$�,�,�7�����%rlN)	rsrtrurv�hasattrr�rIrrKrwrlrJrArA�s��4��v�y�!�+��&rlrAc�0�eZdZdZeZdZd�Zd�Zd�Z	d�Z
y)�DatagramHandlerTestzTest for DatagramHandler.rc��tj|�dx|_x|_|_	|j|j|jd�x|_}|j�|jj�tjj}t|j t"�r|d|j$�|_n||j d�|_d|_|j(j+|j(jd�|j(j-|j�t/j0�|_y#t$r}||_Yd}~yd}~wwxYw)zvSet up a UDP server to receive log messages, and a DatagramHandler
        pointing to that server's address and port.NrrRrr)rrKrrrrr�handle_datagramr�rar
r�rrB�DatagramHandlerrr rar�r!r3rNrDr�r�r]r#s    rJrKzDatagramHandlerTest.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�!�+�v�{�{�;�D�N�!�&�"7�"7��>�D�N�������&�&�t�'7�'7�'@�'@��'C�D����#�#�D�N�N�3� ���(�����	�$%�D�!���	�s�>E!�!	E;�*E6�6E;c�F�	|jr|jj�|jr?|jj	|j�|jj�tj|�y#tj|�wxYw)zShutdown the UDP server.N)rrrr3rNrMrrUrps rJrUzDatagramHandlerTest.tearDown�sj��	$��{�{���� � �"��~�~�� � �.�.�t�~�~�>����$�$�&����d�#��H���d�#�r&c�,�tjdd�}|jt|�d}t	j
|�}t
j|�}|xj|jdzz
c_|jj�y)Nr(rr))r,�pack�packetr]r.r/rr�r!rr]r)rFr0r3rNr4r�s      rJrIz#DatagramHandlerTest.handle_datagram�sk���{�{�4��#������D�	�
�+���l�l�6�"���&�&�s�+�����6�:�:��,�,�������rlc��|jr|j|j�tjd�}|j	d�|j
j
�|j
j�|j	d�|j
j
�|j|jd�y)N�udpr�r7r8)
rr9rr r�r]r�rOr\r!r�s  rJr:zDatagramHandlerTest.test_output�s���� � ��M�M�$�/�/�0��"�"�5�)�����V�����������������V��������������.�9rlN)rsrtrurvr;rrrKrUrIr:rwrlrJrGrG�s%��$� �L��G�)�4	$��
:rlrGc�,�eZdZdZeed�reZd�Zy)�UnixDatagramHandlerTestz,Test for DatagramHandler using Unix sockets.rGc��tj�|_|jtj
|j�tj|�yr�)rrCrr�rrUrGrKrps rJrKzUnixDatagramHandlerTest.setUp�s8��$�<�<�>������	�(�(�$�,�,�7��!�!�$�'rlN�	rsrtrurvrEr�rNrrKrwrlrJrRrR�s��7��v�y�!�-��(rlrRc�6�eZdZdZeZdZd�Zd�Zd�Z	d�Z
d�Zy)	�SysLogHandlerTestz!Test for SysLogHandler using UDP.rc��tj|�dx|_x|_|_	|j|j|jd�x|_}|j�|jj�tjj}t|j t"�r'||j d|j$f�|_n||j �|_d|_|j(j+|j(jd�|j(j-|j�t/j0�|_y#t$r}||_Yd}~yd}~wwxYw)ztSet up a UDP server to receive log messages, and a SysLogHandler
        pointing to that server's address and port.Nrrrl)rrKr�sl_hdlrrrrrIr�rar
r�rrBr]rr rar�r!r3rNrDr�r�r]r#s    rJrKzSysLogHandlerTest.setUps4��	���t��=A�A���A�d�l�T�%:�	�#'�#4�#4�T�\�\�59�5I�5I�4�$Q�
Q�D�K�&��L�L�N�	���������-�-���f�+�+�U�3���!6�!6�q�!9�6�;�;� G�H�D�L��� 5� 5�6�D�L�������&�&�t�'7�'7�'@�'@��'C�D����#�#�D�L�L�1� ���(�����	�$%�D�!���	�s�>E.�.	F�7F�Fc�F�	|jr|jj�|jr?|jj	|j�|jj�tj|�y#tj|�wxYw)zShutdown the server.N)rrrXr3rNrMrrUrps rJrUzSysLogHandlerTest.tearDownsj��	$��{�{���� � �"��|�|�� � �.�.�t�|�|�<����"�"�$����d�#��H���d�#�r&c�Z�|j|_|jj�yr�)rNr!r]r)rFr0s  rJrIz!SysLogHandlerTest.handle_datagram%s��!�.�.��������rlc�,�|jr|j|j�tjd�}|j	d�|j
j
tj�|j|jd�|j
j�d|j_
|j	d�|j
j
tj�|j|jd�|j
j�d|j_|j	d�|j
j
tj�|j|jd�y)N�slh�späm�
<11>spämFs	<11>spämuhäm-s<11>häm-späm)rr9rr r�r]r�rrcr\r!rOrX�
append_nul�identr�s  rJr:zSysLogHandlerTest.test_output)s��� � ��M�M�$�/�/�0��"�"�5�)�����Y�������'�.�.�/�������*@�A�������"'��������Y�������'�.�.�/�������*<�=�������&��������Y�������'�.�.�/�������*G�Hrlc�B�tjd�}|jj�|jj�|j
d�|jjtj�|j|jd�y)Nr\r]r^)rr rXrMr]rOr�r�rrcr\r!r�s  rJ�test_udp_reconnectionz'SysLogHandlerTest.test_udp_reconnection<sk���"�"�5�)�����������������Y�������'�.�.�/�������*@�ArlN)rsrtrurvr;rrrKrUrIr:rbrwrlrJrVrV�s,��,� �L��G�)�4	$��I�&BrlrVc�,�eZdZdZeed�reZd�Zy)�UnixSysLogHandlerTestz)Test for SysLogHandler with Unix sockets.rGc��tj�|_|jtj
|j�tj|�yr�)rrCrr�rrUrVrKrps rJrKzUnixSysLogHandlerTest.setUpLrDrlNrTrwrlrJrdrdDs��4��v�y�!�-��&rlrdz$IPv6 support required for this test.c�4��eZdZdZeZdZ�fd�Z�fd�Z�xZ	S)�IPv6SysLogHandlerTestz&Test for SysLogHandler with IPv6 host.)z::1rc�h��tj|j_tt
|��yr�)r��AF_INET6rrKr�rgrKr�s �rJrKzIPv6SysLogHandlerTest.setUp[s#���+1�?�?����(�
�#�T�0�2rlc�h��tj|j_tt
|��yr�)r��AF_INETrrKr�rgrUr�s �rJrUzIPv6SysLogHandlerTest.tearDown_s#���+1�>�>����(�
�#�T�3�5rl)
rsrtrurvr;rrrKrUr�r�s@rJrgrgRs!���1� �L��G�3�6�6rlrgc�"�eZdZdZd�Zd�Zd�Zy)�HTTPHandlerTestzTest for HTTPHandler.c�`�tj|�tj�|_y)ztSet up an HTTP server to receive log messages, and a HTTPHandler
        pointing to that server's address and port.N)rrKr�r�r]rps rJrKzHTTPHandlerTest.setUphs��	���t�� ���(��rlc�|�|j|_t|j�|_|jdk(r9	t	|j
d�}|jj|�|_|jd�|j�|jj�y#d|_Y�GxYw)NrPzContent-Length��)
�commandrr[�log_data�int�headers�rfilerc�	post_data�
send_response�end_headersr]r)rFr0�rlens   rJ�handle_requestzHTTPHandlerTest.handle_requestns�������� ����.��
��<�<�6�!�
&��7�?�?�+;�<�=��!(���!3�!3�D�!9���	���c�"������������	
&�!%���s�8B0�0	B;c�N�tjd�}|j}|j|jjd�dD�]�}d}|r�	ddl}tjjt�}tjj|dd�}|j|j�}|j|�|j|��}	nd}d}	t!||j"d|�	�x|_}
|
j'�|
j(j+�d
|
j,z}|xr|}tjj/|d|	d�
�|_d|_|j5|j0�dD�](}
|
|j0_|j8j;�d}|j=|�|j8j+�|j?|j2jd�|j?|j@|
�|
dk(r tC|j2jD�}n$tC|jFjId��}|j?|ddg�|j?|ddg�|j?|d|g���+|j$jK�|jj|j0�|j0jM����y#t$rd}Y��CwxYw)N�httprr�r�certdatazkeycert.pem)�cafiler)r$zlocalhost:%dz/frob)�foo�bar)�secure�context�credentials)rOrPr]rOrIrH�funcNamer:r)'rr r3rNrB�sslr4r[�dirname�__file__r��
SSLContext�PROTOCOL_TLS_SERVER�load_cert_chain�create_default_context�ImportErrorrrzrr�r
r��server_portrc�h_hdlrrrrDrhr]rOr�r\rqr�queryrv�decoderrM)rFrr3r�r�r��here�localhost_certr$r�r�host�
secure_clientrhr�ds                rJr:zHTTPHandlerTest.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�!����!�!�#�� � ����!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����a$��
#�"�!�F�"�s�L�L$�#L$N)rsrtrurvrKrzr:rwrlrJrmrmcs�� �)��5 rlrmc�(�eZdZdZd�Zd�Zd�Zd�Zy)�
MemoryTestz*Test memory persistence of logger objects.c�<�tj|�i|_y)z8Create a dict to remember potentially destroyed objects.N)rrK�
_survivorsrps rJrKzMemoryTest.setUp�s�����t����rlc��|D]:}t|�t|�f}tj|�|j|<�<y)zKWatch the given objects for survival, by creating weakrefs to
        them.N)rr�rr�r�)rFr5r4�keys    rJ�_watch_for_survivalzMemoryTest._watch_for_survival�s7���C��S�'�4��9�$�C�#*�;�;�s�#3�D�O�O�C� �rlc��tj�g}|jj�D]!\\}}}|���|j	|��#|r/|jdt
|�dj|�fz�yy)z;Assert that all objects watched for survival have survived.Nz;%d objects should have survived but have been destroyed: %sz, )�gc�collectr�r�rbr`r]r�)rF�dead�id_�repr_r�s     rJ�_assertTruesurvivalzMemoryTest._assertTruesurvival�s{��	�
�
����!%���!6�!6�!8��L�S�%�#��u�}����E�"�"9���I�I�.�14�T��D�I�I�d�O�0L�M�
N�rlc�D�|jjtj�tjd�}|j|�|jtj�|jj|j��|j|j��|jdg�~|j�tjd�}|j|j��|jddg�y)Nr)rr:r�)rr:r�)r3r9rr�r r�r:r�rqrkr�)rFrr�s   rJ�test_persistent_loggersz"MemoryTest.test_persistent_loggers�s���	
���!�!�'�,�,�/�����&��� � ��%����W�]�]�#������t�0�0�2�3��	�	�$�#�#�%�&����!�
�	�
�� � �"�����&���	�	�$�#�#�%�&����!�!�
�	rlN)rsrtrurvrKr�r�r�rwrlrJr�r��s��4��
4�
N�rlr�c��eZdZd�Zd�Zy)�EncodingTestc���tjd�}tdd�}d}	tj|d��}|j	|�	|j|�|j
|�|j�t|d��}	|j|j�j�|�|j�	tjj|�rtj|�yy#|j
|�|j�wxYw#|j�wxYw#tjj|�rtj|�wwxYw)Nr�r�ztest_logging-1-ufoo€rIr�)rr r9rnrDr�rNrMr�r\rc�rstripr4r[�isfiler�)rFr�r8r�r�r�s      rJ�test_encoding_plain_filez%EncodingTest.test_encoding_plain_file�s������'��
�F�$5�
6����	��)�)�"�w�?�G��N�N�7�#�
 ����D�!��!�!�'�*��
�
���R�'�*�A�
�� � �������!2�D�9����	��w�w�~�~�b�!��	�	�"�
�"���!�!�'�*��
�
������	���w�w�~�~�b�!��	�	�"�
�"�s;�(D>�D�.D>�.D)�<D>�#D&�&D>�)D;�;D>�>7E5c���tjd�}d}tjd�}d|_tj�}||d�}tj|�}|j|�	|j|�|j|�|j�|j�}|j|d�y#|j|�|j�wxYw)Nr�uдо свидания�cp1251�stricts�� �������
)rr �codecs�	getwriterrKr6�BytesIOr;rDr�rNrMrZr\)rFr��message�writer_classr8�writerr�rjs        rJ�test_encoding_cyrillic_unicodez+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�8C
�
#C0N)rsrtrur�r�rwrlrJr�r��s
���2Lrlr�c��eZdZd�Zd�Zy)�WarningsTestc	�*�tj�5tjd�|j	tjd�tj
dt��tj�}tj|�}tjd�}|j|�tjd�|j|�|j�}|j�|j!|j#d�d�tj�}tj$d	td
d|d�|j�}|j�|j'|d
�ddd�y#1swYyxYw)NTF�always)�category�py.warningszI'm warning you...z UserWarning: I'm warning you...
r�Explicit�dummy.py�*z
Dummy linez0dummy.py:42: UserWarning: Explicit
  Dummy line
)�warnings�catch_warningsr�captureWarningsr��filterwarnings�UserWarningr6r7r;r rD�warnrNrZrMr��find�showwarningr\)rFr8rTrrj�a_files      rJ�
test_warningszWarningsTest.test_warnings	s ��
�
$�
$�
&��#�#�D�)��O�O�G�3�3�U�;��#�#�H�{�C��[�[�]�F��%�%�f�-�A��&�&�}�5�F����a� ��M�M�.�/�� � ��#����!�A�
�G�G�I����q�v�v�&I�J�A�N��[�[�]�F�� � ��[�*�b�!'��
7����!�A��L�L�N����Q�D�
F�)'�
&�
&�s�E+F	�	Fc��tj�5tjd�|j	tjd�tj
d�}|j
|jg�tjdtdd�|j
t|j�d�|j|jdtj�ddd�y#1swYyxYw)	NTFr�r�r�r�rnr)
r�r�rr�r�r r\rBr�r�r]�assertIsInstance�NullHandlerr�s  rJ�test_warnings_no_handlersz&WarningsTest.test_warnings_no_handlers0	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�CC3�3C<N)rsrtrur�r�rwrlrJr�r�	s��F�0Krlr�c�.�tj||�Sr�)rr=)r"r	s  rJ�
formatFuncr�>	s�����V�W�-�-rlc��eZdZdd�Zy)�myCustomFormatterNc��yr�rw)rF�fmtr	s   rJr�zmyCustomFormatter.__init__B	���rlr�)rsrtrur�rwrlrJr�r�A	s��
rlr�c�*�tj�Sr�)rr;rwrlrJ�handlerFuncr�E	s��� � �"�"rlc��eZdZy)�
CustomHandlerN�rsrtrurwrlrJr�r�H	���rlr�c��eZdZy)�CustomListenerNr�rwrlrJr�r�K	r�rlr�c��eZdZy)�CustomQueueNr�rwrlrJr�r�N	r�rlr�c��eZdZdd�Zd�Zy)�CustomQueueProtocolc�8�tj|�|_yr���queue�Queue)rF�maxsizes  rJr�zCustomQueueProtocol.__init__R	s���[�[��)��
rlc�F�tj|d�}t||�S)Nr�)�object�__getattribute__r/)rF�	attributer�s   rJrzCustomQueueProtocol.__getattr__U	s!���'�'��g�6���u�i�(�(rlN)r)rsrtrur�rrwrlrJr�r�Q	s��*�)rlr�c��eZdZd�Zy)�CustomQueueFakeProtocolc��yr�rw)rF�xs  rJ�emptyzCustomQueueFakeProtocol.empty_	r�rlN�rsrtrur�rwrlrJr�r�Y	s��
rlr�c��eZdZdZy)�CustomQueueWrongProtocolNr�rwrlrJr�r�b	s���Erlr�c�*�tj�Sr�r�rwrlrJ�
queueMakerr�e	s���;�;�=�rlc����fd�}|S)Nc�F��|jd��t|g|��i|��S)N�respect_handler_level)�
setdefaultr�)r�rBr6r�s   �rJ�funczlistenerMaker.<locals>.funci	s*������1�3H�I��e�9�h�9�&�9�9rlrw)�arg1�arg2r�r�s  ` rJ�
listenerMakerr�h	s���:��Krlc
�`
�eZdZdZej
ZdZddddiidddd	d
d�iddgd
�d�Zddddiidddd	d
d�idddgd
�iddid�Zddddiidddd	d
d�idddiiddgd
�d�Z	ddddiidddd	dd�idddgd
�iddid�Z
ddddiiddddd
d�idddgd
�iddid�Zddddiidddd	d
d�idddgd
�iddid�Zddddiidddd	d
d�idddgd
�iddid�Z
ddedzdd�idddd	d
d�id	dgd
�d�Zdedd�edzdd�edd�d�ddd	d
d�deid�d	dgd
�d�Zddddiidedzdd	d
d�idddgd
�iddid�Zddddiidedzdd	d
dd �idddgd
�iddid�Zddddiidddd	d
d�id!ddgd
�iddid�Zdd"dddiidddd	d
d�iddgd
�id#�ddid$�Zdd%dddiidddd	d
d�iddgd
�id#�ddid$�Zddddiiddddd
d�idddgd
�idd	id�Zdd%dddiiddd&iid'�Zdd%ddd&iiddd&iid'�Zddddiid(d)diidddd	d
d(gd*�iddd(gd+�iddgd
�d,�Zddddiidddd	d
d�id-dd.idddgd
�iddid/�Zdddiidddd	d
d�id-dd.idddgd
�iddid0�Zd1dddiidddd	d
d�id-dd.idddgd
�iddid/�Zddddiidddd	d
d2d3d4�d5�iddgd
�d�Zddd6d7d8id9�idddd	d
d�iddgd
�d�Z Gd:�d;e!jD�Z#dd<e#d=d>d?d@dAidB�iddd<d	d
d�iddgd
�d�Z$ddddC�dDdEdFddGdH�dI�dJddKgdLdM�idN�Z%ddOdPdQdR�idddOdS�dDdEdOdTddU�dV�dJddWgdLdM�idX�Z&ddedzdd"dY�idddd	d
d�idZddgdLdM�idX�Z'ddedzdd"d[�idddd	d
d�idZddgdLdM�idX�Z(dded\zdd"d[�idddd	d
d�idZddgdLdM�idX�Z)ddedd"dY�idddd	d
d�idZddgdLdM�idX�Z*dded]d7d^id_�idddd	d
d�idZddgdLdM�idX�Z+dd`daidbdcgdd�de�ddfgd
�dg�Z,dh�Z-di�Z.dj�Z/efdk�Z0dl�Z1dm�Z2dn�Z3do�Z4dp�Z5dq�Z6dr�Z7ds�Z8dt�Z9du�Z:dv�Z;dw�Z<dx�Z=dy�Z>dz�Z?d{�Z@d|�ZAd}�ZBd~�ZCd�ZDd��ZEd�d��ZFeGj��d���ZIeGj��d���ZJeGj��d���ZKd��ZLd��ZMd��ZNd��ZOd��ZPd��ZQd��ZRd��ZSd��ZTd��ZUd��ZVd��ZWd��ZXd��ZYd��ZZe[j��eGj��d����Z^e[j��eGj��e_d��d�����Z`e_d��d���ZaebeGj��ecj�eGj�d��d�����Zfegd���ZheGj��d���Zid��Zjd��Zkd��Zly�)��ConfigDictTestz)Reading logging config from a dictionary.r�rn�form1r"z%(levelname)s ++ %(message)sr��logging.StreamHandlerr�zext://sys.stdout)r
r�r�r8r��r�rB)rrrBr�r�r:r�)rrrB�loggersr�zext://sys.stdbout�NTOSET�WRANING�misspelled_namez.ExceptionFormatterz"%(levelname)s:%(name)s:%(message)s)�()r"z.formatFunc)r��form2�form3r)r��hand2z.CustomHandlerzinvalid parameter name)r
r�r�r8r�r�F)�compilerr�)rr�rrBrr�Tr�)r�incrementalrBr�filt1rH)r
r�r�r8�filters�r�r)rrrrBrr�zcfg://true_formatterszcfg://handler_configs[hand1])r�true_formatters�handler_configsrrBrr�)r
rrrBrr�r�r��!
)r�
terminator)r
r�r�r8r�z%(message)s ++ %(customfield)sr��defaultvalue)r"r
c�"��eZdZdZ�fd�Z�xZS)�ConfigDictTest.CustomFormatterr�c�"��t�|�|�Sr�)r�r"�rFr�r�s  �rJr"z%ConfigDictTest.CustomFormatter.format�s����7�>�&�)�)rl)rsrtru�custom_propertyr"r�r�s@rJ�CustomFormatterr�s�����	*�	*rlr�custom�{�%Y-%m-%d %H:%M:%S�	{message}r�value)r�styler	r"r�)r
r�zlogging.handlers.MemoryHandler��consoler�)r
�capacityr�r��
flushLevel)r�	buffering�mymoduler"�true)r�rBrl)rrBr�mySimpleFormatterz1%(asctime)s (%(name)s) %(levelname)s: %(message)s�$)r"r)r
r�r��
fileGlobal)r
r r�r�r�)r'�bufferGlobalr()rrrBr)rr"�validate�my_test_logger_custom_formatter)r
r"r)z.myCustomFormatterz2%(levelname)s:%(name)s:%(message)s:%(customfield)s�myvalue)rr"r
r
�logging.FileHandler�logging.handlers.QueueHandler�h1)r
rB)r.�ahr/�rrBr�c�B�tjj|�yr�)rr��
dictConfig)rFr�s  rJr�zConfigDictTest.apply_config�s�����!�!�$�'rlc�R�tj|�}|j||�yr�)r�getHandlerByNamer�)rFrHrsrTs    rJ�
check_handlerzConfigDictTest.check_handler�s"���$�$�T�*�����a��%rlc��tj�5}|j|j�|j	dt
j�tj�}|j|j��|j|j��|jdg|��|jg�ddd�y#1swYyxYw)Nr�r�r�)rr�r�r�r5rr;r r�rqr�rkr�s   rJr�zConfigDictTest.test_config0_ok�s���
�
$�
$�
&�&����d�l�l�+����w��(=�(=�>��&�&�(�F��K�K��)�)�+�,��L�L��*�*�,�-��!�!��#��
"�
�
�!�!�"�%�'�
&�
&�s�B3C�Cc�j�tj�5}|j|�tjd�}|j|j
��|j|j
��|jddg|��|jg�ddd�y#1swYyxYwr�r�r�s    rJr�zConfigDictTest.test_config1_ok�r�r�c�Z�|jt|j|j�yr�r�rps rJr�z#ConfigDictTest.test_config2_failure�r�rlc�Z�|jt|j|j�yr�)r@r�r��config2arps rJ�test_config2a_failurez$ConfigDictTest.test_config2a_failure�������)�T�%6�%6��
�
�Frlc�Z�|jt|j|j�yr�)r@r�r��config2brps rJ�test_config2b_failurez$ConfigDictTest.test_config2b_failure
r<rlc�Z�|jt|j|j�yr�r�rps rJr�z#ConfigDictTest.test_config3_failure
r�rlc���tj�5}|j|j�|j	dt
j�	t��#t$rtjd�YnwxYwtjjd�|j|j�d�|jg�ddd�y#1swYyxYw)Nr�r�rr�)rr�r�r�r5rr;r�r�rSr�r�r\rZrk�rFr�s  rJr�zConfigDictTest.test_config4_ok
s���
�
$�
$�
&�&����d�l�l�+����w��(=�(=�>�
2�"�n�$���
2��!�!�.�1�
2���J�J�O�O�A�����V�_�_�.�A�
C�
�!�!�"�%�'�
&�
&�s*�<C�
A�A=�:C�<A=�=AC�C"c��tj�5}|j|j�	t	��#t$rtjd�YnwxYwtjjd�|j|j�d�|jg�ddd�y#1swYyxYwr�)
rr�r��config4ar�rr�rSr�r�r\rZrkrBs  rJ�test_config4a_okzConfigDictTest.test_config4a_ok
s���
�
$�
$�
&�&����d�m�m�,�
2�"�n�$���
2��!�!�.�1�
2���J�J�O�O�A�����V�_�_�.�A�
C�
�!�!�"�%�'�
&�
&�s'�B9�
<�A�B9�A�AB9�9Cc�h�|j|j��|jdt�y)Nr�r�)r�r�r5r�rps rJr�zConfigDictTest.test_config5_ok'
s'�����D�L�L��1����7�M�2rlc�Z�|jt|j|j�yr�)r@r�r�r�rps rJ�test_config6_failurez#ConfigDictTest.test_config6_failure+
s�����)�T�%6�%6����Erlc��tj�5}|j|j�t	j
d�}|j
|j��|j|j��|jddg|��|jg�ddd�tj�5}|j|j�|jdtj�t	j
d�}|j|j�t	j
d�}|j
|j��|j|j��|jddg|��|jg�ddd�y#1swY��xYw#1swYyxYw)	Nr�r�r�r�r�r��r�r��r�r�)rr�r�rrr r�rqr�rkr�r5r;rErr�s   rJr�zConfigDictTest.test_config7_ok.
sv��
�
$�
$�
&�&����d�l�l�+��&�&�'8�9�F��K�K��)�)�+�,��L�L��*�*�,�-��!�!���#��
"�
�

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

�!�!�"�%�'�
&�'�
&��'�
&�s�BF4�C%G�4F>�G
c��tj�5}|j|j�t	j
d�}|j
|j��|j|j��|jddg|��|jg�ddd�tj�5}|j|j�|jdtj�t	j
d�}|j|j�|j
|j��|j|j��t	j
d�}|j
|j��|j|j��|jgd�|��|jg�ddd�y#1swY��JxYw#1swYyxYw)Nr�r�r�r�r�r�)rJrK�r�r��r�r�)rr�r�rrr r�rqr�rkr�r5r;rZrr�s   rJ�test_config_8_okzConfigDictTest.test_config_8_okL
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�BG2�D#G?�2G<�?Hc��tj�5}|j|j�|j	dt
j�tjd�}tjd�}|j|j��|j|j��|j|j��|jgd�|��|jg�ddd�tj�5}|j|j�|j	dt
j�tjd�}|j|j�|j|j��|j|j��tjd�}|j|j��|j|j��j|j��|jgd�|��|jg�ddd�y#1swY��ixYw#1swYyxYw)Nr�r�r�r�r�r�r�)rr�r�r�r5rr;r r�rqr�r�rk�config8arZrr�s    rJ�test_config_8a_okz ConfigDictTest.test_config_8a_okn
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%�EI2�%I/�2I;c��tj�5}|j|j�|j	dt
j�tjd�}|j|j��|jg|��|j|j�|j|j��|jg|��|j|j�|j|j��|jdg|��ddd�y#1swYyxYw)Nr�r�r�rJ)
rr�r�r�r5rr;r r�rqrk�config9a�config9br�s   rJ�test_config_9_okzConfigDictTest.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�DD<�<Ec��tj�5}|j|j�|j	dt
j�tjd�}|j|j��tjd�}|j|j��tjd�}|j|j��tjd�}|j|j��|jddg|��ddd�y#1swYyxYw�	Nr�r�rr�zcompiler.parser.codegen)r�rrKr�)rr�r��config10r5rr;r r�rqr�rkr�s   rJ�test_config_10_okz 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!D?�?Ec�:�|j|j�yr�)r��config11rps rJ�test_config11_okzConfigDictTest.test_config11_ok�
s�����T�]�]�+rlc�Z�|jt|j|j�yr�)r@r�r��config12rps rJ�test_config12_failurez$ConfigDictTest.test_config12_failure�
������)�T�%6�%6��
�
�Frlc�Z�|jt|j|j�yr�)r@r�r��config13rps rJ�test_config13_failurez$ConfigDictTest.test_config13_failure�
rarlc��tj�5}|j|j�tj
d}|j
|jd�|j
|jd�t	jd�|j|j�jd��ddd�y#1swYyxYw)Nr�r�r�Exclamationz
Exclamation!
)
rr�r��config14rr$r\rrr�rErZr_)rFr�rTs   rJ�test_config14_okzConfigDictTest.test_config14_ok�
s���
�
$�
$�
&�&����d�m�m�,��!�!�'�*�A����Q�U�U�E�*����Q�\�\�5�1��O�O�M�*��O�O�F�O�O�-�6�6�7G�H�I�
'�
&�
&�s�B*C�Cc�0�|j�5tdd�}ddd|dd�iddgid	�}|j|�|j|�ddd�tjj
d
}|j
t|�y#1swY�>xYw)Nr�r�rnr�r,rI)r
�filenamerKrBr0r)r�r9r�rr�rBr�r�)rFr8r�r�s    rJ�test_config15_okzConfigDictTest.test_config15_ok�
s���
�
+�
+�
-���(9�:�B���!6�$&�$+��������F�
���f�%����f�%�%.�(�,�,�'�'��*�����(�'�2�6�+.�
-�s�>B�Bc�j�|j|j�tjd}|jjtjddd���}|j|d�|jjtjddi��}|j|d�y)Nr��Hellor�r�zHello ++ customvaluerzHello ++ defaultvalue)r��config16rr$r�r"r�r\)rFrTr�s   rJ�test_config16_okzConfigDictTest.test_config16_ok�
s������$�-�-�(����g�&�����#�#�G�$9�$9��M�:�%<�=������!7�8����#�#�G�$9�$9�
�G��%�������!8�9rlc��|j|j�tjd}|j	|j
jd�y)Nr�r)r��config17rr$r\r�rrCs  rJ�test_config17_okzConfigDictTest.test_config17_ok�
s>�����$�-�-�(����g�&��������4�4�g�>rlc���|j|j�tjd�jd}|j|jtj�y)Nr#r)r��config18rr rBr\r!r��rFr�s  rJ�test_config18_okzConfigDictTest.test_config18_oksI�����$�-�-�(��#�#�J�/�8�8��;������+�+�W�]�]�;rlNc���|jd�}tjjd|�}|j	�|j
j
�|j}|j
j�	tjtjtj�}|jd�|jd|f�tjdt!|��}||z}d}t!|�}	|	dkDr$|j#||d�}
||
z
}|	|
z}	|	dkDr�$|j%�|j
j
d�tjj'�t)j*|�y#|j
j
d�tjj'�t)j*|�wxYw)NrIrg@rRr()rrr��listenr�r
r�r�rOr�rk�SOCK_STREAM�
settimeout�connectr,rMr]�sendrM�
stopListeningr	r)rF�text�verifyr�r�r)r3rj�	sentsofar�left�sents           rJ�setup_via_listenerz!ConfigDictTest.setup_via_listeners[���{�{�7�#���N�N�!�!�!�V�,��	���	�	�������v�v��	���
�
��	,��=�=�����1C�1C�D�D��O�O�C� ��L�L�+�t�,�-��;�;�t�S��Y�/�D��t��A��I��q�6�D���(��y�y��9�:��/���T�!�	�������(�
�J�J�L�
�G�G�L�L����N�N�(�(�*��(�(��+��
�G�G�L�L����N�N�(�(�*��(�(��+�s�B/F�3F�AG"c��tj�5}|jtj|j
��|j
dtj�tjd�}|j|j��tjd�}|j|j��tjd�}|j|j��tjd�}|j|j��|jddg|��ddd�y#1swYyxYwrX)rr�r��json�dumpsrYr5rr;r r�rqr�rkr�s   rJ�test_listen_config_10_okz'ConfigDictTest.test_listen_config_10_ok!s��
�
$�
$�
&�&��#�#�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�D4E�Ec��tj�5}|jtjt
j��tjd�}|j|j��|j|j��|jddg|��|jg�ddd�y#1swYyxYwr�)
rr�r�r�r�r�rrr r�rqr�rkr�s   rJ�test_listen_config_1_okz&ConfigDictTest.test_listen_config_1_ok6s���
�
$�
$�
&�&��#�#�H�O�O�N�4J�4J�$K�L��&�&�'8�9�F��K�K��)�)�+�,��L�L��*�*�,�-��!�!���#��
"�
�

�!�!�"�%�'�
&�
&�s�B,C
�
Cc��d�}d�}tjd�}tjtj
�}t
j�5}|j||�|j|j��|j|j��ddd�|jg��|jddgd��t
j�5}|j|�tjd�}|j|j��|j|j��ddd�|jd	d
g|��|jddgd��t
j�5}|j|ddd�|�tjd�}|j|j��|j|j��ddd�|jdd
g|��|jddgd��y#1swY���xYw#1swY��xYw#1swY�MxYw)Nc��yr�rw��stuffs rJ�verify_failz6ConfigDictTest.test_listen_verify.<locals>.verify_failHs��rlc��|ddd�S)NrMrwr�s rJ�verify_reversez9ConfigDictTest.test_listen_verify.<locals>.verify_reverseKs����2��;�rlr�r�r�r�r�)rerJrKrMrMrN)
rr r�r�r�rrr�r�r�rqr�rk)rFr�r�r�to_sendr�s      rJ�test_listen_verifyz!ConfigDictTest.test_listen_verifyEs0��	�	��"�"�#4�5���/�/�.�"8�"8�9���
$�
$�
&�&��#�#�G�[�9��K�K��)�)�+�,��L�L��*�*�,�-�	'�
	
���b���0������
�+�	�	,��
$�
$�
&�&��#�#�G�,��&�&�'8�9�F��K�K��)�)�+�,��L�L��*�*�,�-�'�	
�����
��	�	�
	
�����
�+�	�	,��
$�
$�
&�&��#�#�G�D�b�D�M�>�B��&�&�'8�9�F��K�K��)�)�+�,��L�L��*�*�,�-�'�	
�����
��	�	�
	
�����
�+�	�	,�Y'�
&��'�
&��$'�
&�s'�AH2�(A%H?�A,I�2H<�?I�Ic�Z�|jt|j|j�yr�)r@rbr��
bad_formatrps rJ�test_bad_formatzConfigDictTest.test_bad_format�s�����*�d�&7�&7����Irlc���tj|j�}d|ddd<|j|�t	j
d�jd}|j|jtj�|j|jjtj�|jtt	j��ddg�y)	Nz-${asctime} (${name}) ${levelname}: ${message}rr%r"r#rr(r')r%�deepcopyr�r�rr rBr�r�r?r��_style�StringTemplateStyler\�sorted�getHandlerNames�rFr�r�s   rJ�!test_bad_format_with_dollar_stylez0ConfigDictTest.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�	9rlc��|j|j�tjd�jd}|j|jt�y�Nr*r)r��custom_formatter_class_validaterr rBr�r�r�rus  rJ�)test_custom_formatter_class_with_validatez8ConfigDictTest.test_custom_formatter_class_with_validate�sJ�����$�>�>�?��#�#�$E�F�O�O�PQ�R�����g�/�/�1C�Drlc��|j|j�tjd�jd}|j|jt�yr�)r�� custom_formatter_class_validate2rr rBr�r�r�rus  rJ�*test_custom_formatter_class_with_validate2z9ConfigDictTest.test_custom_formatter_class_with_validate2�sJ�����$�?�?�@��#�#�$E�F�O�O�PQ�R�����g�/�/�1C�Drlc���|jj�}d|ddd<|j|�tjd�j
d}|j
|jt�y)Nr&rr�rr*r)	r�r%r�rr rBr�r�r�r�s   rJ�9test_custom_formatter_class_with_validate2_with_wrong_fmtzHConfigDictTest.test_custom_formatter_class_with_validate2_with_wrong_fmt�sn���5�5�:�:�<��14��|��W�%�g�.�	
���&�!��#�#�$E�F�O�O�PQ�R�����g�/�/�1C�Drlc�Z�|jt|j|j�yr�)r@rbr�� custom_formatter_class_validate3rps rJ�*test_custom_formatter_class_with_validate3z9ConfigDictTest.test_custom_formatter_class_with_validate3�s �����*�d�&7�&7��9^�9^�_rlc�Z�|jt|j|j�yr�)r@rbr��custom_formatter_with_functionrps rJ�,test_custom_formatter_function_with_validatez;ConfigDictTest.test_custom_formatter_function_with_validate�� �����*�d�&7�&7��9\�9\�]rlc�Z�|jt|j|j�yr�)r@rbr��custom_formatter_with_defaultsrps rJ�,test_custom_formatter_function_with_defaultsz;ConfigDictTest.test_custom_formatter_function_with_defaults�r�rlc�&�dgd�ddd�dddd	gd
ggd�d�}tjj|�}|j|j	d
�d�|j|j	d�d�|j|j	d�d�|j|j	d�d	�|j|j	d�d�|j|j	d�d�|j	d�}|j|jd�gd��|j
t|jd�|j
t|jd�|j
t|jd�y)N)rnr��)rl�b�cr*r�)r�r�)�g)rTrw�jr��lr�rv)�ozcfg://alist�p)�atuple�alist�adict�nest1�nest2�nest3zcfg://atuple[1]r�zcfg://alist[1]r�zcfg://nest1[1][0]rTzcfg://nest2[1][1]z
cfg://adict.dzcfg://adict[f]zcfg://nest3rnzcfg://nosuchzcfg://!zcfg://adict[2])	rr��BaseConfiguratorr\�convert�popr@�KeyErrorrb)rFr��bcr�s    rJ�test_baseconfigzConfigDictTest.test_baseconfig�sE���$��Q�(�+��C��:�s�+�.�

���^�^�
,�
,�Q�
/��������$5�6��:�������$4�5�s�;�������$7�8�#�>�������$7�8�#�>�������O�4�c�:�������$4�5�q�9��J�J�}�%��������q��?�3����(�B�J�J��?����*�b�j�j�)�<����(�B�J�J�0@�Arlc�p��ddlm�G�fd�dtj�}�dddg�}|dd	g�
�}dd||d
�iddgd�d�}t	j
�5}|j
|�tjd�ddd�|jj�d�y#1swY�*xYw)Nr)�
namedtuplec�,���eZdZ��fd�Z�fd�Z�xZS)�1ConfigDictTest.test_namedtuple.<locals>.MyHandlerc�2��t�|�|i|��||_yr�)r�r��resource)rFr�r5r6r�r�s    ��rJr�z:ConfigDictTest.test_namedtuple.<locals>.MyHandler.__init__�s����� �$�1�&�1�,4��
rlc�z��|xjd|jj��z
c_t�|�|�S�N� )rr��typer�rBrs  �rJrBz6ConfigDictTest.test_namedtuple.<locals>.MyHandler.emit�s2����
�
��$�-�-�"4�"4�!5�6�6�
��w�|�F�+�+rlr�)r�r�s@�rJ�	MyHandlerr��s���
5�
,�
,rlr��Resourcer��labels�my_typerl)r�r�rn�	myhandler)rr�r�r�r0zsome logzsome log my_type
)
�collectionsr�rr;rr�r�r�r\rZ)rFr�r�r�r�r�r�s      @rJ�test_namedtuplezConfigDictTest.test_namedtuple�s����*�	,��-�-�	,��j�6�8�*<�=����C�5�9����#� (��� &�K�=�A�	
���
$�
$�
&�&����f�%��L�L��$�'�	
������*�,@�A�'�
&�s�'B,�,B5c�l�d�}|jdd|gd�d��gtj�_y)Nc��yr5rw)r�s rJr�zAConfigDictTest.test_config_callable_filter_works.<locals>.filter_�s��rlrnr:r�rr��r�rr r�rFr�s  rJ�!test_config_callable_filter_worksz0ConfigDictTest.test_config_callable_filter_works�s9��	�����G��	�"J�
�	�')�����#rlc��tjd�}|jdd|gd�d��gtj�_y)Nr�rnr:rr�)rr�r�r rr�s  rJ�test_config_filter_worksz'ConfigDictTest.test_config_filter_works�sB���.�.��-������G��	�"J�
�	�')�����#rlc��Gd�d�}|�}|jdd|gd�d��gtj�_y)Nc��eZdZd�Zy)�BConfigDictTest.test_config_filter_method_works.<locals>.FakeFilterc��yr5rw)rFr�s  rJr�zIConfigDictTest.test_config_filter_method_works.<locals>.FakeFilter.filter�s��rlN)rsrtrur�rwrlrJ�
FakeFilterr��s��
rlr�rnr:rr�r�)rFr�r�s   rJ�test_config_filter_method_worksz.ConfigDictTest.test_config_filter_method_works�sG��	�	��,������G��	�"J�
�	�')�����#rlc	��Gd�d�}dd|�fD]*}|jt|jdd|gd�d���,y)Nc��eZdZy)�;ConfigDictTest.test_invalid_type_raises.<locals>.NotAFilterNr�rwrlrJ�
NotAFilterr�s�rlr�rnr:rr�)r@rbr�)rFr�r�s   rJ�test_invalid_type_raisesz'ConfigDictTest.test_invalid_type_raisessD�����a���.�G������!�!���g�Y�'O�P�
�/rlc��tj|j�}tdd�}||ddd<|�||ddd<|�||ddd<d}	|j	|�tjd�}|jttj��ddg�|j|j�|jj�tjd	�tjd
�tjd�t!j"t j$d�rJ|jj&j)�rn%t!j"t j$d�r�J|jj&j+�t-|d
��5}|j/�j1�}ddd�|jgd��|r|jj3�tjd�}|r|j5t6||�y|j5t8j:|�y#1swY��xYw#|r|jj3�tjd�}|r|j5t6||�w|j5t8j:|�wxYw)Nr�ztest_logging-cqh-rBr.rjr/r��listenerrr��bazzqueue not emptyrIr�)rr�r�)r%r��config_queue_handlerr9r�rr4r\r�r��assertIsNotNoner�r�r�r�r�r�sleeping_retryrcr�r�r�r�rcr[rr�r�r4r�)	rF�qspec�lspec�cdr8�qhr�r�rTs	         rJ�do_queuehandler_configurationz,ConfigDictTest.do_queuehandler_configuration	s3��
�]�]�4�4�4�
5��
�F�$7�
8��+-��:��t��Z�(���,1�B�z�N�4� ��)���/4�B�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�!�R�8�����	�	�2�.�,�+������ � �"��(�(��.�A����� 0�!�R�8�����	�	�2�.�s,�D6I/�1I/�<I#�I/�#I,�(I/�/A-Kc�r�t�t�g}dD�cgc]}t�d|��dd���}}tdzdddd�}dtdztd	zg|�|��}dtd
z|tf}t	j
||�D]\}}|j
||��ddtdd
f}ddtddf}t	j
||�D]a\}}|�|��|jt�5}	|j
||�ddd�t	j�}
|j|
d��cycc}w#1swY�8xYw)N)r�r�r�rg�rr�z.listenerMakerT)rr�r�r�z.queueMakerz.CustomQueuez.CustomListenerryrrr�z Unable to configure handler 'ah')
r�r�rsr��	itertools�productr�rsr@rbrtr�r\)rF�qsrs�dqs�dl�qvalues�lvaluesr�r��ctxrs           rJ�test_config_queue_handlerz(ConfigDictTest.test_config_queue_handler1sa���m�0�2�
3��@�B�@�3�"�
�!�C�5�)�b�9�@�	�B��-�-���%)�	
����M�1�8�n�3L�X�s�X�UW�X����$5�5�r�>�J��%�-�-�g�w�?�L�E�5��.�.�u�e�<�@���C��U�+����C��U�+��%�-�-�g�w�?�L�E�5��}�����"�"�:�.�#��2�2�5�%�@�/��c�m�m�$�C����S�"D�E�
@��!B�&/�.�s�D(�#D-�-D6	zmultiprocessing.Managerc���ddlm}ddd�}|�}tj�}t�}||||fD]+}|j	ddd|d	�id
��|j��-y)Nr)r�zqueue.QueuerMr�rn�queue_listenerr-�r
r��rrB)�multiprocessingr�r�r�r��assert_not_called)rFr!�MQ�q1�q2�q3�q4r�s        rJ�Atest_config_queue_handler_does_not_create_multiprocessing_managerzPConfigDictTest.test_config_queue_handler_does_not_create_multiprocessing_managerMsw��	0�!�b�
1��
�T��
�[�[�]��%�
&���"�b�"�%�E���� �(�%D�%*�+�!��

�
�%�%�'�&rlc	���t�t�fD]I}|jt�5|j	ddd|d�id��ddd�|j��Ky#1swY�xYw)Nrnrr-rr)r�r�r@rbr�r)rFr!r�s   rJ�Ptest_config_queue_handler_invalid_config_does_not_create_multiprocessing_managerz_ConfigDictTest.test_config_queue_handler_invalid_config_does_not_create_multiprocessing_managermsj���h� 8� :�;�E��"�"�:�.��!�!�#$�,�)H�).�/�%��
�/�
�%�%�'�<�.�.�s�A"�"A+	z?requires a debug build for testingassertions in multiprocessingc	�L�tjrdg}ngd�}|D]�}|j|��5tj|�}|j�5}|j
�}g}|jd|j|dfd��5|j|jd���ddd�|j|j��ddd�|jt�d�ddd���y#1swY�VxYw#1swY�;xYw#1swY��xYw)	N�spawn)rr��
forkserver)�start_methodrnr~)�initializer�initargs�maxtasksperchild�<rV)r�
MS_WINDOWS�subTestr�get_context�Managerr��Pool�_mpinit_issue121723rb�getrEr�r\r])rF�
start_methodsrr�r!�qrs       rJ�1test_config_queue_handler_multiprocessing_contextz@ConfigDictTest.test_config_queue_handler_multiprocessing_context�s������$�I�M�;�M�)�L����<��8�%�1�1�,�?���[�[�]�g��
�
��A� �G����!��1I�1I�,-�v�;��"�L����q�u�u�R�u�'8�9�L��O�O�A�G�G�I�.�#�� � ��W��q�1�9�8�*�L�L��	#�]��9�8�s;�&D�4D
�
"D	�,'D
�#D�D

�D
�
D�D�D#	c��tjjdddd|d�idgdd�d��tj�j	|�y)	NrnT�
log_to_parentr-rr:�rBr�)rr�rBr�)rr�r2r r�)r��message_to_logs  rJrz"ConfigDictTest._mpinit_issue121723�sZ��	���!�!��(,��<�"�"��#2�!2�W�E�
#
�
	�	���� � ��0rlc���tj|j�}ddlm}m}|�}|�j	�}|�j
�}|||fD�]*}tdd�}||ddd<||ddd	<d}		|j|�tjd�}	|jttj��ddg�|j|	j�|j!|	j"|�|j!|	jj"|�tjd�}
|
r|j%t&|
|���|j%t(j*|���-y#tjd�}
|
r|j%t&|
|�w|j%t(j*|�wxYw)
Nr)r�rr�ztest_logging-cmpqh-rBr.rjr/r�)r%r�r�rr�r�
JoinableQueuer9r�rr4r\r�r�r�r�r�r�r�r�r4r�)rFr�r�MMrrr	r�r8r�rTs           rJ�test_multiprocessing_queuesz*ConfigDictTest.test_multiprocessing_queues�sx���]�]�4�4�4�
5��>�
�T��
�T�Z�Z�\��
�T�
�
�
!���"�b�\�E���(=�>�B�/1�B�z�N�4� ��,�,1�B�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�B2F
�
AGc��dddddd�idddgd�id	�}tjd�}|j|j�|j	|�|j|j�|j	d
di�|j|j�|d=|j	|�|j|j�y)NrnFrr:r�)r�r
rlr�)rr�rBrrr�)rr rZrr�rE)rFr�rs   rJ�
test_90195zConfigDictTest.test_90195�s����(-��$�4����$�!*����
�� �"�"�3�'��������)����&�!�������)����9�a�.�)�������(��-�.����&�!�������)rlc���tjd�tjd�}ddd|jd�j�d�idgdd	�d
�}tj
j
|�y)N�_multiprocessingrrn�sinkr-rrr:r"r0)r�
import_modulerr�rr�r2)rF�mpr�s   rJ�test_111615zConfigDictTest.test_111615�sv���#�#�$6�7�
�
(�
(�):�
;����<��^�^�G�4�:�:�<���$�H� ��
��	���!�!�&�)rlc��Gd�dtjj�}ddi}ddd|i|�iddgd	�d
�}tjj	|�tj
d�}|j
|j|�y)Nc���eZdZ�fd�Z�xZS)�>ConfigDictTest.test_kwargs_passing.<locals>.CustomQueueHandlerc�V��t�|�tj��||_yr�)r�r�r�r��
custom_kwargs�rFr5r6r�s   �rJr�zGConfigDictTest.test_kwargs_passing.<locals>.CustomQueueHandler.__init__�s����� �����/�%+��"rl)rsrtrur�r�r�s@rJ�CustomQueueHandlerr2�s
���
,�
,rlr6rr�rnrr
r:r�r0)rrB�QueueHandlerr�r2r4r\r4)rFr6r4r�r�s     rJ�test_kwargs_passingz"ConfigDictTest.test_kwargs_passing�s���	,��!1�!1�!>�!>�	,�
���
����/��#���!�%�J��
��	���!�!�&�)��*�*�8�4������.�.�
�>rlr�)mrsrtrurvr
r�rYr�rr�r�r:r>r�r�r�r�r�rDr�r�r�r�rQr�rTrUrYr\r_rcrgrnrr=rrqrtr�r�r�r�r�r�r�r�r5r�r�r�r;r?r�r�rEr�rHr�rOrRrVrZr]r`rdrhrkrorrrvr�r�requires_working_socketr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r	r��requires_subprocessr�rrr
r�r��
skipUnless�Py_DEBUGr�staticmethodrr'r)r/r8rwrlrJr�r�n	s�
��3� /� I� I��,�����9��
�
�1�%�"�.�	�
� �!��
��G�.���9��
�
�1�%�"�.�	�
�
�!�%�Y�!�
�
�i�
�+�G�8���9��
�
�1�%�"�.�	�
�
��'�!�
� �!��
�)�H�8���9��
�
�1�%�"�/�	�
�
�!�%�Y�!�
�
�i�
�+�G�8���9��
�
�1�%�"�.�	�
�
�!�%�Y�!�
�
�i�
�+�H�:���9��
�
�1�%�"�.�	�
�
�!�%�Y�!�
�
�i�
�+�H�8���9��
�
�1�/�"�.�	�
�
�!�%�Y�!�
�
�i�
�+�G�8���"7�7�?��
�
�1�%�"�.�	�
��%�Y�
�!�G�0�*�?��
 �-�/�?��
"�?��

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

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

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


�
� �+�,�#��
�-�J�B���!6�6�>�!��
�
�0�$�!�,�	�
�
.� �$�I�#�0�
�#'�#�8��!�$9�9�>�!��
�
�0�$�!�,�	�
�
.� �$�I�#�0�
�#(�$�8��!�$8�8�>�!��
�
�0�$�!�,�	�
�
.� �$�I�#�0�
�#(�$�8�� �>�!��
�
�0�$�!�,�	�
�
.� �$�I�#�0�
�#&�"�8�� �N�*�I�6��
�
�0�$�!�,�	�
�
.� �$�I�#�0�
�#&�"�6��.��
9�!�F��	
����
���$(�&�&� &-�
&�F�G�G�F�&� 
&�3�F�&�< &�D+&�Z�&�(,�G�G�J�7�2:�?�
<�
,�8%�W�$�$�&��'��(%�W�$�$�&�&�'�&�%�W�$�$�&�<,�'�<,�|J�
9�E�
E�
E�`�^�^�B�,B�>)�)�	)��&/�P1��0�0�2� �W� � �"�F�#�3�F�41��0�0�2� �W� � �"�
�$�%�(�&�#�3�(�:�$�%�(�&�(�$� �W� � �"��X����)�)�,K�L�2�L�#��2�&�1��1� !�W� � �"�3�#�3�6*�<*�*?rlr�c��eZdZd�Zd�Zy)�ManagerTestc�j��g�G�fd�dtj�}tjd�}|jt|j
t�|j|�|jd�}|jd�tjd�|j�dg�y)Nc���eZdZd�fd�	Zy)�6ManagerTest.test_manager_loggerclass.<locals>.MyLoggerNc�(���j|�yr��rb)rFr�rr5�exc_info�extra�loggeds      �rJ�_logz;ManagerTest.test_manager_loggerclass.<locals>.MyLogger._logs����
�
�c�"rlrr)rsrtrurH)rGs�rJ�MyLoggerrBs���
#rlrIr�zshould appear in loggedzshould not appear in logged)
r�Loggerrr@�	TypeError�setLoggerClassrsr r�r\)rFrI�manrrGs    @rJ�test_manager_loggerclassz$ManagerTest.test_manager_loggerclasss������	#�w�~�~�	#��o�o�d�#�����)�S�%7�%7��=����8�$����v�&�����0�1����5�6�����";�!<�=rlc��tjd�}t�}|j|�|j	|j
|�yr�)rrr��setLogRecordFactoryr\�logRecordFactory)rFrMrhs   rJ�test_set_log_record_factoryz'ManagerTest.test_set_log_record_factory$s;���o�o�d�#���8������)�����-�-�x�8rlN)rsrtrurNrRrwrlrJr?r?s��>� 9rlr?c��eZdZd�Zd�Zy)�ChildLoggerTestc�v�tj�}tjd�}tjd�}|jd�}|jd�}|j|tjd��|j|tjd��|jd�}|jd�}|jd�}|j|tjd��|j|tjd��|j||�y)	N�abczdef.ghi�xyzzuvw.xyz�def�ghi�abc.defzabc.def.ghi)rr �getChildr�)rFr��l1�l2�c1�c2�c3s       rJ�test_child_loggersz"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�"�rlc���tj�}tjd�}tjd�}tjd�}tjd�}|j�}||h}|j|||z�|j	||�|j�}|j|h|�|j�}|jt�|�y)Nr�foo.barzfoo.bar.baz.bozzr�)rr �getChildrenr\�assertNotInr)rFr�r\r]�l3�l4�kidsrhs        rJ�test_get_childrenz!ChildLoggerTest.test_get_children:s��������
�
�
�u�
%��
�
�
�y�
)��
�
�
�1�
2��
�
�
�u�
%���}�}�����8������4�(�?�3�����X�&��~�~������"��t�$��~�~���������%rlN)rsrtrurarirwrlrJrTrT*s��
�
&rlrTc��eZdZy)�DerivedLogRecordNr�rwrlrJrkrkIr�rlrkc��eZdZd�Zd�Zd�Zy)�LogRecordFactoryTestc��Gd�dtj�}tj|�|t�|_|jj|j
�tj�|_	y)Nc��eZdZd�Zd�Zy)�2LogRecordFactoryTest.setUp.<locals>.CheckingFilterc��||_yr�)rs)rFrss  rJr�z;LogRecordFactoryTest.setUp.<locals>.CheckingFilter.__init__Ps	����rlc�p�t|�}||jurd|�d|j��}t|��y)NzUnexpected LogRecord type z, expected T)r�rsrK)rFr�r�rs    rJr�z9LogRecordFactoryTest.setUp.<locals>.CheckingFilter.filterSs5����L���D�H�H�$�IJ� �H�H�&�C�#�C�.�(�rlN)rsrtrur�r�rwrlrJ�CheckingFilterrpOs��
�
rlrs)
rr�rrKrkr�r3r��getLogRecordFactory�orig_factory)rFrss  rJrKzLogRecordFactoryTest.setUpNsV��
	�W�^�^�
	�	���t��$�%5�6������"�"�4�;�;�/�#�7�7�9��rlc��|jj|j�tj	|�tj|j�yr�)r3r�r�rrUrrPrurps rJrUzLogRecordFactoryTest.tearDown`s<�����%�%�d�k�k�2����$���#�#�D�$5�$5�6rlc��|jt|jj|j	��tjt�|jj|j	��|jdg�y)N)r�r�r�)
r@rKr3r�rqrrPrkr�rkrps rJ�test_logrecord_classz)LogRecordFactoryTest.test_logrecord_classesn�����)�T�%5�%5�%=�%=��+�+�-�	/��#�#�$4�5������t�0�0�2�3����!�
�	rlN)rsrtrurKrUrxrwrlrJrmrmLs��:�$7�
rlrmc�$�eZdZdZd�Zd�Zd�Zd�Zeje
ejd�d�d��Z
eje
ejd�d�d	��Zeje
ejd�d�d
��Zy)�QueueHandlerTestr�c��tj|�tjd�|_tj
j
|j�|_d|_t	jd�|_
d|j_|jjtj�|jj|j�y)NrM�queF)rrKr�r�rrBr7�que_hdlrrHr �
que_loggerrlr9r�rDrps rJrKzQueueHandlerTest.setUpts������t���[�[��_��
��(�(�5�5�d�j�j�A��
���	�!�+�+�E�2���$)����!���� � ����1����"�"�4�=�=�1rlc�b�|jj�tj|�yr�)r}rMrrUrps rJrUzQueueHandlerTest.tearDown~rnrlc��|jj|j��|jtj
|jj�|jj|j��|jtj
|jj�|j�}|jj|�|jj
�}|jt|tj��|j|j|jj�|j|j|j f|df�yr�)r~r�rqr@r��Empty�
get_nowaitr�r�rErrr	r\rHrr5)rFrr�s   rJ�test_queue_handlerz#QueueHandlerTest.test_queue_handler�s��������d�/�/�1�2����%�+�+�t�z�z�'<�'<�=������T�.�.�0�1����%�+�+�t�z�z�'<�'<�=����!��������$��z�z�$�$�&�����
�4��):�):�;�<�������D�O�O�$8�$8�9����$�(�(�D�I�I�.��d��<rlc��|j�}tjtj�}d}|j	|j
||��}tj|j�}|jj|�|jj|�|jj�}|j||j�|j||j �y)Nz {name} -> {levelname}: {message})rH�	levelnamer�)rqrr�r�r"rHr=r>r}r@r~r�r�r�r\rr�)rFrr��log_format_str�
formatted_msgr��
log_records       rJ�test_formattingz QueueHandlerTest.test_formatting�s������!���(�(����9�	�;��&�-�-�4�9�9�8A�3�.�P�
��%�%�d�o�o�6�	��
�
�"�"�9�-�������$��Z�Z�*�*�,�
�����
���7�����
�(:�(:�;rl�
QueueListenerz5logging.handlers.QueueListener required for this testc��ttj��}tjj|j|�}|j�	|jj|j��|jj|j��|jj|j��|j�|j|jtj d���|j|jtj"d���|j|jtj$d���|j'�ttj��}|j)tj$�tjj|j|d��}|j�	|jj|j��|jj|j��|jj|j��|j�|j+|jtj d���|j+|jtj"d���|j|jtj$d	���|j'�y#|j�wxYw#|j�wxYw)
Nr)r�r�r�r�T)r�r�r�r�)r
r�MatcherrrBr�r�r�r~r�rqr�r�rrE�matchesr�r�r~rMr9rZ)rFr�r�s   rJ�test_queue_listenerz$QueueHandlerTest.test_queue_listener�s2���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�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�s�A;L)�=A;L>�)L;�>Mc��tjj|j|j�}|j�	ddz|jj|j�d��|j�|j|jj�j�j!d�d�|j|jj�j�j!d�d�y#t$r8}|}|jj|j�|��Yd}~��d}~wwxYw)Nrnr�rET��
stack_info�	Traceback�Stack)rrBr�r�r<r��ZeroDivisionErrorr~r�rqr�rr\r8rZrr�)rFr�r*�excs    rJ�&test_queue_listener_with_StreamHandlerz7QueueHandlerTest.test_queue_listener_with_StreamHandler�s���#�#�1�1�$�*�*�d�n�n�M������	I�
��E�	
�����d�/�/�1�d��C��
�
��������-�-�/�5�5�7�=�=�k�J�A�N�������-�-�/�5�5�7�=�=�g�F��J��
!�	I��C��O�O�%�%�d�&7�&7�&9�C�%�H�H��	I�s�D�	E�-E�Ec���|jj|j�|jj	|j
�tjj|j|j�}|j�|jjd�|j�|j|jj�j!�d�y)Nr�zque -> ERROR: error)r}r@r?r~rDr<rrBr�r�r�r�rr\r8rZr)rFr�s  rJ�*test_queue_listener_with_multiple_handlersz;QueueHandlerTest.test_queue_listener_with_multiple_handlers�s���	
�
�
�"�"�4�#6�#6�7����"�"�4�>�>�2��#�#�1�1�$�*�*�d�m�m�L�����������g�&��
�
��������-�-�/�5�5�7�9N�OrlN)rsrtrurYrKrUr�r�r�r;rErrBr�r�r�rwrlrJrzrzos���3��2� �
=�<��X�����!1�!1�?�C�P�R��R��B�X�����!1�!1�?�C�P�R�K�R�K��X�����!1�!1�?�C�P�R�	P�R�	Prlrzr�c���eZdZdZdZed��Zeje	jjd�d��Zeje	jjd�d��Z
ed��Zd�Zd	�Zy
)�QueueListenerTestz~
        Tests based on patch submitted for issue #27930. Ensure that
        QueueListener handles all log messages.
        �c�<�tjd|z�}|jtj�tjj|�}|j
|�tjj|�}|j�|jd�|jd�|jd�|jd�|jd�|j�|j|�|j�y)z�
            Creates a logger with a QueueHandler that logs to a queue read by a
            QueueListener. Starts the listener, logs five messages, and stops
            the listener.
            ztest_logger_with_id_%s�one�two�three�four�fiveN)
rr r9r:rBr7rDr�r�r�rrNrM)�	log_queuer`rr�r�s     rJ�
setup_and_logzQueueListenerTest.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�OrlrYc��t|j�D];}tj�}|j	||j��d|����=|j
|jd|jzd�y�Nr�rz&correct number of handled log messages)rz�repeatr�r�r�rr\�
call_count�rF�mock_handlerwr�s    rJ�#test_handle_called_with_queue_queuez5QueueListenerTest.test_handle_called_with_queue_queuesa���4�;�;�'��!�K�K�M�	��"�"�9�����A�.F�G�(�
���[�3�3�Q����_�E�
Grlc�f�tj�t|j�D][}t	j
�}|j
||j��d|���|j�|j��]|j|jd|jzd�yr�)r�*skip_if_broken_multiprocessing_synchronizerzr�rr�r�rrMrr\r�r�s    rJ� test_handle_called_with_mp_queuez2QueueListenerTest.test_handle_called_with_mp_queues���
�>�>�@��4�;�;�'��+�1�1�3�	��"�"�9�����A�.F�G����!��%�%�'�	(�

���[�3�3�Q����_�E�
Grlc#�jK�		|j����#tj$rgcYSwxYw�wr�)r�r�r�)r�s rJ�get_all_from_queuez$QueueListenerTest.get_all_from_queues9����
��#�.�.�0�0����;�;�
��	�
�s�3��0�3�0�3c
�6�tj�t|j�D]�}t	j
�}|j
||j��d|���t|j|��}|j�|j�gtjjjgg}|j!||d|D�cgc]*}t#|tj$�r|j&n|��,c}z���ycc}w)a
            Five messages are logged then the QueueListener is stopped. This
            test then gets everything off the queue. Failure of this test
            indicates that messages were not registered on the queue until
            _after_ the QueueListener stopped.
            r�z&Found unexpected messages in queue: %sN)rr�rzr�rr�r�r�listr�rMrrrBr��	_sentinelr�rr	r)rFrwr�r�rhr�s      rJ�$test_no_messages_in_queue_after_stopz6QueueListenerTest.test_no_messages_in_queue_after_stops���
�>�>�@��4�;�;�'��'�-�-�/���"�"�5�D�G�G�I�q�*A�B��T�4�4�U�;�<������
�!��!�!�#���!1�!1�!?�!?�!I�!I� J�K���
�
�e�X�F�5:�%<�5:��/9��G�<M�<M�.N�Q�U�U�*+�&,�5:�%<�=�>�(��%<s�/Dc��tj�}tjj	|�}|j�|j
�|jt�5|j�ddd�y#1swYyxYwr�)
r�r�rrBr�r�rr@rb�	task_done)rFr�r�s   rJ�test_calls_task_done_after_stopz1QueueListenerTest.test_calls_task_done_after_stop5s\�����
�I��'�'�5�5�i�@�H��N�N���M�M�O��"�"�:�.��#�#�%�/�.�.�s�)B�BN)rsrtrurvr�r=r�rr�rrBr�r�r�r�r�r�rwrlrJr�r��s���	�
��	�	�
�	�.
����g�&�&�4�4�h�	?�	G�
@�	G�
����g�&�&�4�4�h�	?�
	G�
@�
	G�
�	�
�	�	>�0	&rlr�c��eZdZd�ZeZd�Zy)�UTCc��tSr�)�ZERO�rF�dts  rJ�	utcoffsetz
UTC.utcoffsetCs���rlc��y)Nr�rwr�s  rJ�tznamez
UTC.tznameHs��rlN)rsrtrur��dstr�rwrlrJr�r�Bs����C�rlr�c��eZdZd�Zy)�AssertErrorMessagec��	|jdg|��i|��y#|$r%}|j|t|��Yd}~yd}~wwxYw)Nrw)r@r\rt)rFr�r�r5r6r*s      rJ�assert_error_messagez'AssertErrorMessage.assert_error_messageOsH��	.��D���b�2�4�2�6�2���	.����W�c�!�f�-�-��	.�s��A�>�AN)rsrtrur�rwrlrJr�r�Ms��.rlr�c�P�eZdZd�Zd
d�Zd�Zd�Zd�Zd�Zd�Z	d	�Z
d
�Zd�Zd�Z
y)�
FormatterTestc	��dtjtjj	ddd�dddddd�|_d	d	d
ii|_y)Nzformatter.testr[�toz	dummy.extr�zMessage with %d %s)r��placeholders)rHr��pathname�linenorEr�rr5ri�)rr:r4r[r��common�variantsrps rJrKzFormatterTest.setUpVsP��$��]�]������V�T�;�?����'�'�	
���
��$��
��
rlNc��t|j�}|�|j|j|�t	j
|�Sr�)rr�rPr�rr�)rFrHr�s   rJ�
get_recordzFormatterTest.get_recordgs<���d�k�k�"�����M�M�$�-�-��-�.��$�$�V�,�,rlc�r�|j�}tjd�}|j|j	|�d�tjd�}|jt|j|�|j|j��tjd�}|j|j��tjd�}|j|j��tjd�}|j|j��y)Nz${%(message)s}z${Message with 2 placeholders}z
%(random)s�%(asctime)sz%(asctime)-15sz%(asctime)#15s�
r�rr=r\r"r@rbrZ�usesTimerE�rFr�r�s   rJ�test_percentzFormatterTest.test_percentms����O�O������.�/��������!��&F�G����l�+�����*�a�h�h��2��������&����m�,������
�
��%����.�/������
�
��%����.�/������
�
��%rlc��|j�}tjdd��}|j|j	|�d�tjdd��}|jt|j|�tjdd��}|j|j��tjdd��}|j|j��tjdd��}|j|j��tjd	d��}|j|j��y)
Nz
$%{message}%$r�r�$%Message with 2 placeholders%$z{random}r�	{asctime}z{asctime!s:15}z{asctime:15}r�r�s   rJ�test_braceszFormatterTest.test_braces|s����O�O������o�S�9��������!��&G�H����j��4�����*�a�h�h��2����k��5���������&����k��5������
�
��%����.�c�:������
�
��%����n�C�8������
�
��%rlc���|j�}tjdd��}|j|j	|�d�tjdd��}|j|j	|�d�tjdd��}|j|j	|�d�tjdd��}|jt|j|�|j|j��tjd	d��}|j|j��tjd
d��}|j|j��tjdd��}|j|j��tjdd��}|j|j��y)N�
${message}r&r�zMessage with 2 placeholdersz$messagez$$%${message}%$$r�z	${random}z
${asctime}z$asctimez${asctime}--r�r�s   rJ�test_dollarszFormatterTest.test_dollars�s^���O�O������l�#�6��������!��&C�D����j��4��������!��&C�D����0��<��������!��&G�H����k��5�����*�a�h�h��2��������&����l�#�6������
�
��%����j��4������
�
��%����l�#�6���������&����n�C�8������
�
��%rlc�h�tjd�}|j|jd�tjd�}|j|jd�tjd�}|j|jd�tjd�}|j|jd�tjdd��}|j|jd�tjdd��}|j|jd�tjd	d��}|j|jd	�tjd
d��}|j|jd
�tjdd��}|j|jd�tjdd��}|j|jd�tjd
d��}|j|jd
�tjdd��}|j|jd�tjdd��}|j|jd�tjdd��}|j|jd�tjdd��}|j|jd�tjdd��}|j|jd�tjdd��}|j|jd�tjdd��}|j|jd�tjdd��}|j|jd�tjdd��}|j|jd�tjdd��}|j|jd�|j	t
tjd�|j	t
tjd�|j	t
tjd�|j	t
tjd�|j	t
tjd�|j	t
tjd�|j	t
tjd�|j	t
tjd �|j	t
tjd!�|j
t
d"tjd#d��|j
t
d$tjd%d��|j
t
d&�|j	t
tjd'd��|j
t
d(tjd)d��|j
t
d*tjd+d��|j	t
tjd,d��|j	t
tjd-d��|j	t
tjd.d��|j	t
tjd/d��|j
t
d0tjd1d��|j
t
d2tjd3d��|j	t
tjd4d��|j	t
tjd5d��|j	t
tjd6d��|j	t
tjd7d��|j	t
tjd8d��|j	t
tjd9d��|j	t
tjd:d��|j	t
tjd;d��|j	t
tjd<d��|j
t
d=tjd>d��|j
t
d=tjd?d��|j
t
d=tjd@d��|j
t
d$tjdd��|j	t
tjd%d��|j
t
d$tjdAd��|j	t
tjdBd��y)CNzM%(levelname)-15s - %(message) 5s - %(process)03d - %(module) - %(asctime)*.3sz1%(asctime)*s - %(asctime)*.3s - %(process)-34.33oz%(process)#+027.23Xz
%(foo)#.*gz5$%{message}%$ - {asctime!a:15} - {customfield['key']}rr�z{process:.2f} - {custom.f:.4f}z{customfield!s:#<30}z{message!r}z{message!s}z{message!a}z{process!r:4.2}z8{process!s:<#30,.12f}- {custom:=+#30,.1d} - {module:^30}z{process!s:{w},.{p}}z{foo:12.{p}}z{foo:{w}.6}z{foo[0].bar[1].baz}z{foo[k1].bar[k2].baz}z{12[k1].bar[k2].baz}z${asctime} - $messager&z$bar $$z	$bar $$$$z%(asctime)Zz%(asctime)bz%(asctime)*z
%(asctime)*3sz%(asctime)_r�r�z
%(foo)#12.3*fz%(foo)0*.8*fz;invalid format: invalid field name/expression: 'name-thing'z{name-thing}zinvalid format: no fieldsr�zinvalid conversion: 'Z'z{asctime!s:#30,15f}z7invalid format: expected ':' after conversion specifierz{asctime!aa:15}z%invalid format: bad specifier: '.2ff'z{process:.2ff}z
{process:.2Z}z{process!s:<##30,12g}z{process!s:<#30#,12g}z{process!s:{{w}},{{p}}}z1invalid format: expected '}' before end of stringz{processz7invalid format: Single '}' encountered in format stringzprocess}z{{foo!r:4.2}z
{{foo!r:4.2}}z	{foo/bar}z{foo:{{w}}.{{p}}}}z{foo!X:{{w}}.{{p}}}z{foo!a:random}z{foo!a:ran{dom}z{foo!a:ran{d}om}z
{foo.!a:d}z$invalid format: bare '$' not allowedz$bar $$$zbar $zfoo $.rz	${asctime)rr=r\�_fmtr@rbr��rFr�s  rJ�test_format_validatez"FormatterTest.test_format_validate�s���
���m�n��������!p�q����Q�R��������!T�U����3�4��������!6�7����l�+���������.�
���U�]`�a��������!X�Y����>�c�J��������!A�B����4�C�@��������!7�8����m�3�7���������/����m�3�7���������/����m�3�7���������/����/�s�;��������!2�3����X�`c�d��������![�\����4�C�@��������!7�8����n�C�8���������0����m�3�7���������/����3�3�?��������!6�7����5�S�A��������!8�9����4�C�@��������!7�8�
���5�S�A��������!8�9����i�s�3���������+����k��5���������-�	
���*�g�&7�&7��G����*�g�&7�&7��G����*�g�&7�&7��G����*�g�&7�&7��I����*�g�&7�&7��G����*�g�&7�&7��E����*�g�&7�&7��F����*�g�&7�&7��I����*�g�&7�&7��H�	
�!�!��I����~�S�	"�	
�	
�!�!��'����}�C�	"�	
�	
�!�!��%�	
�	
���*�g�&7�&7�9N�VY��Z��!�!��E����0��	"�	
�	
�!�!��3����/�s�	"�	
�
	
���*�g�&7�&7��PS��T����*�g�&7�&7�9P�X[��\����*�g�&7�&7�9P�X[��\����*�g�&7�&7�9R�Z]��^��!�!��?����z��	"�	
�
	
�!�!��E����z��	"�	
�
	
���*�g�&7�&7��s��S����*�g�&7�&7��PS��T����*�g�&7�&7��C��P����*�g�&7�&7�9M�UX��Y����*�g�&7�&7�9N�VY��Z����*�g�&7�&7�9I�QT��U����*�g�&7�&7�9J�RU��V����*�g�&7�&7�9K�SV��W����*�g�&7�&7��S��Q�	
�!�!��4����z��	"�	
�
	
�!�!��4����w�c�	"�	
�
	
�!�!��4����x�s�	"�	
�	
�!�!��'����{�#�	"�	
�
	
���*�g�&7�&7��c��R�	
�!�!��'����u�C�	"�	
�
	
���*�g�&7�&7��C��Prlc�b�gd�}gd�}t||�D�]\}}tj||ddi��}|j�}|j	|j|�d�|jd�}|j	|j|�d�tj||��}|j�}|j
t|j
|�tj||d	di��}|jd�}|j	|j|�d���y)
N)z%(custom)s %(message)sz{custom} {message}z$custom $message)�%rr&r�Default)rr
z#Default Message with 2 placeholdersz 1234 Message with 2 placeholdersr�zNon-existing)r^rr=r�r\r"r@rb)rF�fmts�stylesr�rr�r�s       rJ�test_defaults_parameterz%FormatterTest.test_defaults_parameter7s���S�� ���d�F�+�J�C���!�!�#�U�h�	�=R�S�A����!�A����Q�X�X�a�[�*O�P�����)�A����Q�X�X�a�[�*L�M��!�!�#�U�3�A����!�A����j�!�(�(�A�6��!�!�#�U�n�i�=X�Y�A�����)�A����Q�X�X�a�[�*L�M�,rlc�R�|jttjddd�y)Nr�)r@rbrr=rps rJ�test_invalid_stylez FormatterTest.test_invalid_styleKs�����*�g�&7�&7��t�S�Irlc
��|j�}tjdddddddt�}tj|jd�j
��|_d|_tjd�}tj|_|j|j|�d	�|j|j|d
�d�|j|�|j|j d	�y)N��ry��r�r�{�%(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)rFr�r�r�s    rJ�	test_timezFormatterTest.test_timeNs����O�O���
�
�
�t�Q��A�q�!�Q��
<���K�K��
�
�d� 3� =� =� ?�@��	�������7�8���k�k���������a��*C�D�������a��1�9�=�	�����������$=�>rlc
�~�Gd�dtj�}|j�}tjddddddd	t�}tj|jd�j��|_	|�}t
j|_|j|j|�d
�y)Nc��eZdZdZdZy)�DFormatterTest.test_default_msec_format_none.<locals>.NoMsecFormatterNz%d/%m/%Y %H:%M:%S)rsrtru�default_msec_format�default_time_formatrwrlrJ�NoMsecFormatterr�]s��"&��"5�rlrr�ryr�r�r�rr�z21/04/1993 08:03:00)rr=r�r�r�r{r�r�r�r�r�r�r\r�)rFrr�r�r�s     rJ�test_default_msec_format_nonez+FormatterTest.test_default_msec_format_none\s���	6�g�/�/�	6�
�O�O���
�
�
�t�Q��A�q�!�S�#�
>���K�K��
�
�d� 3� =� =� ?�@��	�����k�k���������a��*?�@rlc��tjddd��}td�D]W}tjd�tj
dd|d	zzi�}|j
|�}|jd
|��Yy)Nz!{asctime}.{msecs:03.0f} {message}rr)r�rr	i�	g-C��6:?rz
Message %drnz.1000)rr=rzr{r}r�r"re)rFr�rwr�rjs     rJ�test_issue_89047zFormatterTest.test_issue_89047hsm�����"E�S�Zm�n���t��A��J�J�v���%�%�u�l�a�!�e�.D�&E�F�A������A����W�a�(�	rlr�)rsrtrurKr�r�r�r�r�r�r�r�rrrwrlrJr�r�Us?��
�"-�
&�&� &�*TQ�lN�(J�?�
A�)rlr�c��eZdZd�Zd�Zy)�TestBufferingFormatterc��dt|�zS)Nz[(%d)�r]�rFrs  rJ�formatHeaderz#TestBufferingFormatter.formatHeaderr�����W��%�%rlc��dt|�zS)Nz(%d)]r	r
s  rJ�formatFooterz#TestBufferingFormatter.formatFooterurrlN)rsrtrurrrwrlrJrrqs��&�&rlrc��eZdZd�Zd�Zd�Zy)�BufferingFormatterTestc�j�tjddi�tjddi�g|_y)Nrr�r�)rr�rrps rJrKzBufferingFormatterTest.setUpys/���!�!�5�%�.�1��!�!�5�%�.�1�
��rlc���tj�}|jd|jg��|jd|j|j��y)Nr�onetwo)r�BufferingFormatterr\r"rr�s  rJ�test_defaultz#BufferingFormatterTest.test_defaultsE���&�&�(������Q�X�X�b�\�*�����1�8�8�D�L�L�#9�:rlc��t�}|jd|j|j��t	j
d�}t|�}|jd|j|j��y)Nz[(2)onetwo(2)]z
<%(message)s>z[(2)<one><two>(2)])rr\r"rrr=)rFr��lfs   rJ�test_customz"BufferingFormatterTest.test_custom�s`��"�$�����)�1�8�8�D�L�L�+A�B�
�
�
��
/��"�2�&�����-�q�x�x����/E�FrlN)rsrtrurKrrrwrlrJrrxs��
�;�
Grlrc��eZdZd�Zy)�
ExceptionTestc�V�|j}t�}|j|�	td��#t	j
dd��YnxYw|j
|�|j�|jd}|j|jjd��|j|jjd��|j|jjd��|j|jjd	��y)
Nr��failedTr�rz#Traceback (most recent call last):
z!
RuntimeError: deliberate mistake�Stack (most recent call last):
z,logging.exception('failed', stack_info=True))r3�RecordingHandlerrDr�rr�rNrMrrE�exc_textrr_r�)rFr�rTs   rJr�zExceptionTest.test_formatting�s����������	���Q��	9��3�4�4��	9����h�4�8��	�����	���	�
�I�I�a�L������
�
�-�-�/>�?�	@�����
�
�+�+�-A�B�	C�������/�/�1>�?�	@�������-�-�/?�@�	As	�4�AN)rsrtrur�rwrlrJrr�s��Arlrc��eZdZd�Zy)�LastResortTestc���|j}|j|j�tj}tj
}	t
j�5}|jd�|j|j�d�|jd�|j|j�d�ddd�dt_t
j�5}|jd�d}|j|j�|�ddd�t
j�5}|jd�|j|j�d�ddd�d|j_
dt_t
j�5}|jd�|j|j�d�ddd�|j|j�|t_|t_y#1swY��OxYw#1swY��xYw#1swY��xYw#1swY�axYw#|j|j�|t_|t_wxYw)NzThis should not appearrz
Final chance!zFinal chance!
z-No handlers could be found for logger "root"
F)r3rNr<r�
lastResortr�rr�r�r\rZr�r!�emittedNoHandlerWarningrD)rFr��old_lastresort�old_raise_exceptionsr�rs      rJ�test_last_resortzLastResortTest.test_last_resort�s����������4�>�>�*� �+�+��&�6�6��	;��(�(�*�f��
�
�3�4�� � ����!2�B�7����_�-�� � ����!2�4E�F�	+�"&�G���(�(�*�f����_�-�F��� � ����!2�C�8�+��(�(�*�f����_�-�� � ����!2�B�7�+�
49�D�L�L�0�&+�G�#��(�(�*�f����_�-�� � ����!2�B�7�+�
�O�O�D�N�N�+�!/�G��&:�G�#�7+�*��+�*��+�*��+�*��
�O�O�D�N�N�+�!/�G��&:�G�#�sm�	H?�A#H
�'H?�'4H�H?�72H'�)8H?�!2H3�H?�
H�H?�H$�H?�'H0�,H?�3H<�8H?�?3I2N)rsrtrur'rwrlrJr!r!�s��#;rlr!c��eZdZd�Zd�Zy)�FakeHandlerc
�N�dD] }t|||j|||���"y)N)r�r
rMr�)�setattr�record_call)rF�
identifier�calledrhs    rJr�zFakeHandler.__init__�s'��>�F��D�&�$�"2�"2�:�v�v�"N�O�?rlc��������fd�}|S)Nc�H���jdj����y)Nz{} - {})rbr")r.r-�method_names���rJ�innerz&FakeHandler.record_call.<locals>.inner�s����M�M�)�*�*�:�{�C�Drlrw)rFr-r1r.r2s ``` rJr,zFakeHandler.record_call�s���	E��rlN)rsrtrur�r,rwrlrJr)r)�s
��P�rlr)c�$��eZdZ�fd�Zd�Z�xZS)rc�:��tt|�
|i|��g|_yr�)r�rr�rr5s   �rJr�zRecordingHandler.__init__�s���
���.��?��?���rlc�:�|jj|�y)z&Keep track of all the emitted records.N)rrbr�s  rJrYzRecordingHandler.handle�s�������F�#rl)rsrtrur�rYr�r�s@rJrr�s
����$rlrc�|��eZdZdZ�fd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�Zd�Zd�Zd�Z�xZS)�ShutdownTestz#Test suite for the shutdown method.c���tt|��g|_tj
}|j
ttd|�y)Nr�)r�r7rKr.rr�r�r+)rF�raise_exceptionsr�s  �rJrKzShutdownTest.setUp�s7���
�l�D�'�)����"�2�2�������*;�=M�Nrlc����fd�}|S)Nc������r�rw)r�s�rJr2z'ShutdownTest.raise_error.<locals>.inner�s
����'�Mrlrw)rFr�r2s ` rJ�raise_errorzShutdownTest.raise_error�s
���	��rlc�T�td|j�}td|j�}td|j�}ttjj
|||g�}tjt|���gd�}|j||j�y)Nrrnr�r})z2 - acquirez	2 - flushz	2 - closez2 - releasez1 - acquirez	1 - flushz	1 - closez1 - releasez0 - acquirez	0 - flushz	0 - close�0 - release)	r)r.r�rrr�rr�r\)rF�handler0�handler1�handler2rBrhs      rJ�test_no_failurezShutdownTest.test_no_failure�s����q�$�+�+�.���q�$�+�+�.���q�$�+�+�.���w���*�*�X�x��,J�K�����T�(�^�4�L��	
����4�;�;�/rlc�$�td|j�}t|||j|��tj
j
|�g}t	jt|���|jd|jd�y)Nrr}r>rM)
r)r.r+r<rrr�rr�r\)rFrhr�r�rBs     rJ�_test_with_failure_in_methodz)ShutdownTest._test_with_failure_in_method�sj���a����-������!1�!1�%�!8�9��O�O�'�'��0�1�����T�(�^�4��������B��8rlc�0�|jdt�y�Nr��rDrarps rJ�test_with_ioerror_in_acquirez)ShutdownTest.test_with_ioerror_in_acquires���)�)�)�W�=rlc�0�|jdt�y�Nr
rGrps rJ�test_with_ioerror_in_flushz'ShutdownTest.test_with_ioerror_in_flush����)�)�'�7�;rlc�0�|jdt�y�NrMrGrps rJ�test_with_ioerror_in_closez'ShutdownTest.test_with_ioerror_in_closerLrlc�0�|jdt�yrF�rDrbrps rJ�test_with_valueerror_in_acquirez,ShutdownTest.test_with_valueerror_in_acquires���)�)�)�Z�@rlc�0�|jdt�yrJrQrps rJ�test_with_valueerror_in_flushz*ShutdownTest.test_with_valueerror_in_flush����)�)�'�:�>rlc�0�|jdt�yrNrQrps rJ�test_with_valueerror_in_closez*ShutdownTest.test_with_valueerror_in_closerUrlc�F�dt_|jdt�y)NFr��rr�rD�
IndexErrorrps rJ�.test_with_other_error_in_acquire_without_raisez;ShutdownTest.test_with_other_error_in_acquire_without_raises��"'����)�)�)�Z�@rlc�F�dt_|jdt�y)NFr
rYrps rJ�,test_with_other_error_in_flush_without_raisez9ShutdownTest.test_with_other_error_in_flush_without_raise���"'����)�)�'�:�>rlc�F�dt_|jdt�y)NFrMrYrps rJ�,test_with_other_error_in_close_without_raisez9ShutdownTest.test_with_other_error_in_close_without_raise"r^rlc�f�dt_|jt|jdt�y)NTr��rr�r@rZrDrps rJ�+test_with_other_error_in_acquire_with_raisez8ShutdownTest.test_with_other_error_in_acquire_with_raise&s'��"&������*�d�&G�&G�#�Z�	1rlc�f�dt_|jt|jdt�y)NTr
rbrps rJ�)test_with_other_error_in_flush_with_raisez6ShutdownTest.test_with_other_error_in_flush_with_raise+�'��"&������*�d�&G�&G�!�:�	/rlc�f�dt_|jt|jdt�y)NTrMrbrps rJ�)test_with_other_error_in_close_with_raisez6ShutdownTest.test_with_other_error_in_close_with_raise0rfrl)rsrtrurvrKr<rBrDrHrKrOrRrTrWr[r]r`rcrerhr�r�s@rJr7r7�sY���-�O��
0� 9�>�<�<�A�?�?�A�?�?�1�
/�
/rlr7c�f�eZdZdZd�Zdd�Zd�Zd�Zd�Zd�Z	d	�Z
d
�Zd�Zd�Z
d
�Zd�Zd�Zd�Zy)�ModuleLevelMiscTestz)Test suite for some module level methods.c���tjjj}|j	|d�|jtj|�tjd�|j	tjjjd�|j
ttjd�Gd�d�}|j
ttj|��tjd�tj�|j	tjjjtj�y)Nr�S�
doesnotexistsc��eZdZy)�;ModuleLevelMiscTest.test_disable.<locals>._NotAnIntOrStringNr�rwrlrJ�_NotAnIntOrStringroE���rlrp�WARN)
rr�r!rQr\r�r@rbrKr~)rF�old_disablerps   rJ�test_disablez ModuleLevelMiscTest.test_disable:s����l�l�*�*�2�2������a�(��������5������������-�-�5�5�r�:����*�g�o�o��G�	�	�	
���)�W�_�_�6G�6I�J������	����������-�-�5�5�w�7G�7G�HrlNc�4��g�tj|td�fd��t�}tjj|�t
t|�}|�||d|�n	|d|�|jt|j�d�|jd}|j|j�d|z�|�|nt
t|j��}|j|j|�|j�g�y)N�basicConfigc�*���j||f�Sr�rD)rl�kwr.s  �rJ�<lambda>z/ModuleLevelMiscTest._test_log.<locals>.<lambda>Ts���v�}�}�a��W�'=rlztest me: %rrnr)
rrrrr�rDr/r\r]r�
getMessage�upperr�)rFrhr��	recording�
log_methodr��expected_levelr.s       @rJ�	_test_logzModuleLevelMiscTest._test_logQs�������
�
�d�G�]�=�	?�%�&�	������	�*��W�f�-�
����u�m�Y�7��}�i�0�����Y�.�.�/��3��"�"�1�%������*�*�,�m�i�.G�H�"'�"3����&�,�,�.�9Y���������8�	
�����$rlc�D�|jdtj�y�Nr�)rrr�rps rJ�test_logzModuleLevelMiscTest.test_logis�����u�g�m�m�,rlc�&�|jd�y�Nr��rrps rJ�
test_debugzModuleLevelMiscTest.test_debugl������w�rlc�&�|jd�y�Nr�r�rps rJ�	test_infozModuleLevelMiscTest.test_infoo������v�rlc�&�|jd�y�Nr�r�rps rJ�test_warningz ModuleLevelMiscTest.test_warningr������y�!rlc�&�|jd�y�Nr�r�rps rJ�
test_errorzModuleLevelMiscTest.test_errorur�rlc�&�|jd�y�Nr�r�rps rJ�
test_criticalz!ModuleLevelMiscTest.test_criticalx������z�"rlc��|jttjt�Gd�dtj
�}tj|�|j
tj�|�tjtj
�|j
tj�tj
�y)Nc��eZdZy)�;ModuleLevelMiscTest.test_set_logger_class.<locals>.MyLoggerNr�rwrlrJrIr�~rqrlrI)r@rKrrLr�rJr\�getLoggerClass)rFrIs  rJ�test_set_logger_classz)ModuleLevelMiscTest.test_set_logger_class{s������)�W�%;�%;�V�D�	�w�~�~�	�	���x�(�����/�/�1�8�<����w�~�~�.�����/�/�1�7�>�>�Brlc����g�G�fd�dtj��}tj|�tjd�}|j	�dg�tj�}tj|�}|j|�	|jtj�|jd�|j	|j�j�d�|jd�|jd�|jtj �|jd�|j	|j�d�|j#|�|j%�tjtj&�y#|j#|�|j%�tjtj&�wxYw)Nc�<���eZdZdejf��fd�	Z�xZS)�@ModuleLevelMiscTest.test_subclass_logger_cache.<locals>.MyLoggerrIc�H��t�|�||��jd�y)N�initialized)r�r�rb)rFrHr�r�r�s   ��rJr�zIModuleLevelMiscTest.test_subclass_logger_cache.<locals>.MyLogger.__init__�s����� ��u�-����}�-rl)rsrtrurr�r�r�)r�r�s@�rJrIr��s���$.�g�n�n�
.�
.rlrI�just_some_loggerr��hellorr)rr�rLr r\r6r7r;rDr9r:r�rZr�truncater�r�rNrMrJ)rFrIrr8rTr�s     @rJ�test_subclass_logger_cachez.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�CF0�0AG6c��tjd�}td|�\}}}|j�}|j	d|�|j	d|�y)Na*
            import logging

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

            a = A()
        �-czexception in __del__zValueError: some error)r�r�rr�r��rF�code�rc�out�errs     rJ�test_logging_at_shutdownz,ModuleLevelMiscTest.test_logging_at_shutdown�sR����� �
��(��d�3���C���j�j�l���
�
�,�c�2��
�
�.��4rlc�N�tj}|jtj|�t	j
d|�d��}t
d|�t|d��5}|j|j�j�d�ddd�y#1swYyxYw)Na�
            import builtins
            import logging

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

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

            a = A()

            # Simulate the Python finalization which removes the builtin
            # open() function.
            del builtins.open
        r�rIr�zERROR:root:log in __del__)r�TESTFNr�rUr�r�rr�r\rcr�)rFrjr��fps    rJ�test_logging_at_shutdown_openz1ModuleLevelMiscTest.test_logging_at_shutdown_open�s����#�#�����	�(�(�(�3����$*�+3��6	� �
��&	��t�$�
�(�W�
-�����R�W�W�Y�-�-�/�1L�M�.�
-�
-�s�#/B�B$c��tjd�}td|�\}}}|j�}|j	d|�|j|d�y)Nz�
            import logging

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

            rec()
        r�z#Cannot recover from stack overflow.rn)r�r�rr�rer\r�s     rJ�test_recursion_errorz(ModuleLevelMiscTest.test_recursion_error�sU����� �
��-�T�4�8���C���j�j�l�����>��D�����Q�rlc��tj�}|jtj|�|j	tj|�tj�}|j	||�|j||�yr�)r�getLevelNamesMappingr\r*�assertIsNot)rF�mapping�new_mappings   rJ�test_get_level_names_mappingz0ModuleLevelMiscTest.test_get_level_names_mapping�sj���.�.�0������-�-�w�7�����-�-�w�7��2�2�4������+�.�����+�.rlr�)rsrtrurvrtrr�r�r�r�r�r�r�r�r�r�r�r�rwrlrJrjrj6sN��3�I�.%�0-� ��"� �#�
C�3�>5�&N�> � /rlrjc��eZdZd�Zd�Zed
d��Zd�Zd�Zd�Z	e
j�d��Ze
j�d	��Z
y)�
LogRecordTestc���tji�}t|�}|j|j	d��|j|jd��y)Nz<LogRecord: �>)rr�rtrErr_)rFr�rjs   rJ�test_str_repzLogRecordTest.test_str_rep�sD���!�!�"�%����F��������^�4�5�����
�
�3��(rlc�|�t�}tj�}|j|�ddi}tjd|�|j|jdj|�|j|jdjd�|j|�|j�y)N�less�morezless is %(less)srzless is more)rrr rDr�r�rr5r\r�rNrM)rFrTr�r�s    rJ�
test_dict_argzLogRecordTest.test_dict_arg�s�����������	���Q��
�f������*�A�.��
�
�a�i�i��l�'�'��+�������1��-�-�~�>�	�����	���	rlNc���tj}|t_	ddl}|j�j}tj
dd|��i�}t
jtjdd�5tj
dd|��i�}ddd�||jjd�}|t_|r|j|�y|S#1swY�DxYw#|t_wxYw)Nrr�msg1_r�msg2_)�processName�r1.processName�r2.processName)r�logMultiprocessingr�current_processrHr�r�	swap_itemrS�modulesr�r|)	r�r�r1�prev_logMultiprocessingr.rH�r1�r2�resultss	         rJ�_extract_logrecord_process_namez-LogRecordTest._extract_logrecord_process_names���")�"<�"<��%7��"�	A�(��%�%�'�,�,�D��&�&���s�e�}�'=�>�B��"�"�3�;�;�0A�4�H��*�*�E�U�3�%�=�+A�B��I�)-�)+���)+����G�
*A�G�&���I�I�g���N�I�H��*A�G�&�s$�AC$�:C�"C$�C!�C$�$
C1c��tj�dtjv}	|j	t
jd�d}tji�}|j	|jd�|jd|�}|j	d|d�|j	d|d�|j	d|d�ddl
}|j�\}}|j|jd	||f�
�}|j�|j�}|jd|d�|j	|d|d�|j	d|d�|j!�|rddl
}yy#|rddl
}wwxYw)NrT�MainProcessrnr�r�r�rr�r�)rr�rSr�r\rr�r�r�r�r�Pipe�Processr�r+�assertNotEqualr�)	rF�multiprocessing_imported�LOG_MULTI_PROCESSINGr�r�r�parent_conn�
child_connr�s	         rJ�test_multiprocessingz"LogRecordTest.test_multiprocessingsz���:�:�<�#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�
#�&:�o�&:�&:�&<�#�K��'��'�'��;�;��-�z�;��A�
�G�G�I�!�&�&�(�G����
�w�}�/E�F����W�]�3�W�=M�5N�O����]�G�4D�,E�F�
�F�F�H�(�&�(��'�&�(�s�EE?�?	Fc��|j}|j}tji�}||j�||j
�||j�||j�||j�tj}tj}tj}tj}	dt_	dt_
dt_dt_tji�}||j�||j
�||j�||j�||j�|t_	|t_
|t_|t_y#|t_	|t_
|t_|t_wxYw)NF)
r�r�rr�r�
threadName�processr��taskName�
logThreads�logProcessesr��logAsyncioTasks)rF�NONE�NOT_NONEr��log_threads�
log_processes�log_multiprocessing�log_asyncio_taskss        rJ�
test_optionalzLogRecordTest.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�.F?c��ZK�tji�}||j�y�wr�)rr�r�)rF�	assertionr�s   rJ�_make_record_asyncz LogRecordTest._make_record_asyncas"�����!�!�"�%���!�*�*��s�)+c�~�	|j}tj�5}dt_|j||j��dt_|j||j��ddd�tjd�y#1swY�xYw#tjd�wxYw)NTF)	r��asyncio�Runnerrr��runr�r��set_event_loop_policy�rF�make_record�runners   rJ�#test_taskName_with_asyncio_importedz1LogRecordTest.test_taskName_with_asyncio_importedes���	0��1�1�K����!�V�*.��'��
�
�;�t�';�';�<�=�*/��'��
�
�;�t�'8�'8�9�:�	"�
�)�)�$�/�
"�!��
�)�)�$�/�s#� B%�AB�;B%�B"�B%�%B<c���	|j}tj�5}tjt
jdd�5dt_|j||j��dt_|j||j��ddd�ddd�tjd�y#1swY�'xYw#1swY�+xYw#tjd�wxYw)Nr�TF)r�r�r�rr�rSr�rr�r�r�r�r�s   rJ�&test_taskName_without_asyncio_importedz4LogRecordTest.test_taskName_without_asyncio_importedqs���	0��1�1�K����!�V�W�->�->�s�{�{�I�W[�-\�*.��'��
�
�;�t�'8�'8�9�:�*/��'��
�
�;�t�'8�'8�9�:�	.]�!�
�)�)�$�/�
.]�-\��!�!��
�)�)�$�/�s;� C�&C�AC�!C�)C�C	�C�C�C�C6r�)rsrtrur�r�r=r�r�r�r�rr9r�r�rwrlrJr�r��so��)�	�����0#'�J8�@�%�W�$�$�&�	0�'�	0�%�W�$�$�&�	0�'�	0rlr�c����eZdZdZ�fd�Z�fd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zej2�d��Zdd�Zd�Zd�Zd�Zd�Zd�Z d�Z!�xZ"S)�BasicConfigTestz#Test suite for logging.basicConfig.c�|��tt|��tjj
|_tjj�|_tjdd|_
tjj|_|j|j�gtj_yr�)r�r�rKrr�rBr$r%r&r'r(r�r5r��cleanupr�s �rJrKzBasicConfigTest.setUp�sy���
�o�t�*�,����-�-��
�%�/�/�4�4�6���")�"6�"6�q�"9���&-�l�l�&8�&8��#�������%� "����rlc����tjjddD]1}tjj|�|j	��3t
t|��yr�)rr�rBrNrMr�r�rU)rFrTr�s  �rJrUzBasicConfigTest.tearDown�sF������&�&�q�)�A��L�L�&�&�q�)�
�G�G�I�*�	�o�t�-�/rlc�h�ttjd|j�tjj�tjj
|j�|jtjddtjj|j�y)NrB)r+rr�rBr$rOrPr&r(r'r9r5rps rJr�zBasicConfigTest.cleanup�sp������j�$�-�-�8������!���� � ��!4�!4�5�"&�"9�"9����Q�������d�9�9�:rlc���tj�|jttjj
�d�tjj
d}|j
|tj�|j|jtj�|j}|j|jjtj�|j|j �|j
|jtj"�|jtjj$|j&�y)Nrnr)rrvr\r]r�rBr�r;r8rSr�r�r�r��BASIC_FORMATr�r	�PercentStyler�r5)rFr�r�s   rJ�test_no_kwargszBasicConfigTest.test_no_kwargs�s�������	
����W�\�\�2�2�3�Q�7��,�,�'�'��*�����g�w�'<�'<�=����������4��%�%�	�����)�)�.�.��0D�0D�E����)�+�+�,����i�.�.��0D�0D�E�	
������+�+�T�-H�-H�Irlc�d�tj�5}tjtj
d��tjd�tj
jd�|j|j�j�d�ddd�y#1swYyxYw)Nr�r8r�Log an errorr�ERROR:root:Log an error�rr�rrvrSr�r�r�r\rZrrBs  rJ�test_strformatstylez#BasicConfigTest.test_strformatstyle��o��
�
$�
$�
&�&����s�z�z��=��M�M�.�)��J�J�O�O�A�����V�_�_�.�4�4�6�)�
+�	'�
&�
&���BB&�&B/c�d�tj�5}tjtj
d��tjd�tj
jd�|j|j�j�d�ddd�y#1swYyxYw)Nr&rrrrrrBs  rJ�test_stringtemplatestylez(BasicConfigTest.test_stringtemplatestyle�rrc�X�d�}tjdd��|jttjj
�d�tjj
d}|j
|tj�tjddd��}|j|jj|jj�|j|jj|jj�|j|||d�y)	Nc�n�|j�|j�tj|�yr�r��r.�h2r8s   rJr�z.BasicConfigTest.test_filename.<locals>.cleanup�����H�H�J��H�H�J��I�I�b�Mrl�test.logrI)rjrKrnrrlr�)rrvr\r]r�rBr�rnr8�moderHr��rFr�r�rhs    rJ�
test_filenamezBasicConfigTest.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�?rlc�:�d�}tjdd��tjjd}tjdd�}|j|jj|jj�|j|||d�y)Nc�n�|j�|j�tj|�yr�r�r
s   rJr�z.BasicConfigTest.test_filemode.<locals>.cleanup�rrlr�wb�rj�filemoder)	rrvr�rBrnr\r8rr�rs    rJ�
test_filemodezBasicConfigTest.test_filemode�su��	�
	���Z�$�?��,�,�'�'��*���&�&�z�4�8��������,�,�h�o�o�.B�.B�C������(�J�?rlc��tj�}|j|j�t	j
|��|j
ttjj�d�tjjd}|j|tj�|j
|j|�y)Nr�rnr)
r6r7r�rMrrvr\r]r�rBr�r;r8)rFr8r�s   rJ�test_streamzBasicConfigTest.test_stream�s��������������%����6�*�����W�\�\�2�2�3�Q�7��,�,�'�'��*�����g�w�'<�'<�=��������0rlc���tjd��tjjdj}|j|jjd�y)Nz%(asctime)s - %(message)s)r"r)rrvr�rBr�r\r�r��rFr�s  rJ�test_formatzBasicConfigTest.test_format�sH�����#>�?��L�L�)�)�!�,�6�6�	�����)�)�.�.�0K�Lrlc��tjd��tjjdj}|j|jd�y)Nr�)r	r)rrvr�rBr�r\r	rs  rJ�test_datefmtzBasicConfigTest.test_datefmt�s@�����E�*��L�L�)�)�!�,�6�6�	�����*�*�E�2rlc���tjd��tjjdj}|j|jtj�y)Nr&r�r)rrvr�rBr�r�r�r�rs  rJ�
test_stylezBasicConfigTest.test_style�sF�����#�&��L�L�)�)�!�,�6�6�	����i�.�.��0K�0K�Lrlc��tjj}|jtjj|�tj
d��|j
tjjd�tj
d��|j
tjjd�y)N�9)r��:)rr�r�r�r9rvr\)rF�	old_levels  rJ�
test_levelzBasicConfigTest.test_level�sy���L�L�&�&�	�������-�-�y�9����"�%�������+�+�R�0����"�%�������+�+�R�0rlc��|j}tj�g}tj}|t
tjd|��|t
tjd|��|t
tj||��|t
tjtj��tjdd��y)Nr)rjr8)rjrB)r8rB)�loglevelrlr)r@rr;rSr�rbrvr�)rFr@rBr8s    rJ�test_incompatiblez!BasicConfigTest.test_incompatibles����(�(���)�)�+�,�������Z��!4�!4�z�=C�	E��Z��!4�!4�z�?G�	I��Z��!4�!4�V�?G�	I�	�Z��!4�!4�w�|�|�L����T�C�8rlc�B�tj�tjtj�tj�g}tj�}|dj|�tj|��|j|dtjjd�|j|dtjjd�|j|dtjjd�|j|dj�|j|dj�|j|dj|�|j|dj|dj�y)Nr�)rBrrn)rr;rSr�r=r@rvr�r�rBr�r�)rFrBr�s   rJ�
test_handlerszBasicConfigTest.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�Crlc���tj�}tj�}tj|�g}tj|�g}tjtj
|��tjd�tjd�tjd�|jttjj�d�tjtj|d��tjd�tjd�tjd�|jttjj�d�|j|j�j�d�|j|j�j�d	�y)
Nr�r�r�r�rnT)r�rB�forcezWARNING:root:warnz WARNING:root:warn
INFO:root:info)r6r7rr;rvr�r�r�r�r\r]r�rBr�rZr)rF�
old_string_io�
new_string_io�old_handlers�new_handlerss     rJ�
test_forcezBasicConfigTest.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�<�	>rlc��	d}tjd|ddtj��|jt	tj
j�d�tj
jd}|j|tj�|j|j|�tjd�|j�tdd�	�5}|j�j�}ddd�tj d�|jd�y#1swY�1xYw#j�tdd�	�5}|j�j�}ddd�n#1swYnxYwtj d�|jd�wxYw)
NrIrr��%(message)s�rjrK�errorsr"r�rnr�.The Øresund Bridge joins Copenhagen to Malmör��rrvr:r\r]r�rBr�rnrKr�rMr�rcrr4r��rFrKr�r�r�s     rJ�
test_encodingzBasicConfigTest.test_encoding7sE��	O��H�����h�'/�'4�G�M�M�
K�
���S����!6�!6�7��;��l�l�+�+�A�.�G��!�!�'�7�+>�+>�?����W�-�-�x�8��M�M�J�K��M�M�O��j�7�3�q��v�v�x�~�~�'��4��I�I�j�!����T�M�
O�4�3��
�M�M�O��j�7�3�q��v�v�x�~�~�'��4�3�3���I�I�j�!����T�M�
O��0�CE�*D9�9E�F?�#F�	F?�F�/F?c��	d}tjd|ddtj��|jt	tj
j�d�tj
jd}|j|tj�|j|j|�tjd�|j�tdd	�
�5}|j�j�}ddd�tj d�|jd�y#1swY�1xYw#j�tdd	�
�5}|j�j�}ddd�n#1swYnxYwtj d�|jd�wxYw)Nrr�ignorer5r6rnrr8rIr�z*The resund Bridge joins Copenhagen to Malmr9r:s     rJ�test_encoding_errorsz$BasicConfigTest.test_encoding_errorsKs?��	Q��H�����h�'/�'4�G�M�M�
K�
���S����!6�!6�7��;��l�l�+�+�A�.�G��!�!�'�7�+>�+>�?����W�-�-�x�8��M�M�J�K��M�M�O��j�7�3�q��v�v�x�~�~�'��4��I�I�j�!����T�#O�P�4�3��
�M�M�O��j�7�3�q��v�v�x�~�~�'��4�3�3���I�I�j�!����T�#O�P�r<c��	d}tjd|dtj��|jt	tj
j�d�tj
jd}|j|tj�|j|j|�|j|jd�tjd�|j�tdd	�
�5}|j�j�}ddd�t!j"d�|jd�y#1swY�1xYw#j�tdd	�
�5}|j�j�}ddd�n#1swYnxYwt!j"d�|jd�wxYw)Nrrr5)rjrKr"r�rnr�backslashreplaceu<😂: ☃️: The Øresund Bridge joins Copenhagen to MalmörIr�zL\U0001f602: \u2603\ufe0f: The \xd8resund Bridge joins Copenhagen to Malm\xf6)rrvr:r\r]r�rBr�rnrKr7r�rMr�rcrr4r�r:s     rJ�test_encoding_errors_defaultz,BasicConfigTest.test_encoding_errors_default^s]��	K��H�����h�'4�G�M�M�
K�
���S����!6�!6�7��;��l�l�+�+�A�.�G��!�!�'�7�+>�+>�?����W�-�-�x�8����W�^�^�-?�@��M�M�X�Y��M�M�O��j�7�3�q��v�v�x�~�~�'��4��I�I�j�!����T�$J�
K�4�3��
�M�M�O��j�7�3�q��v�v�x�~�~�'��4�3�3���I�I�j�!����T�$J�
K�s0�C&E �E�E� G�>F&�	G�&F/�+/Gc�$��	d}tjd|ddtj��|jt	tj
j�d�tj
jd}|j|tj�|j|j|�|j|j�g��fd�}||_tjd�|j��|jd	�d�|j!�t#dd
��5}|j%�j'�}ddd�t)j*d�|jd�y#1swY�1xYw#j!�t#dd
��5}|j%�j'�}ddd�n#1swYnxYwt)j*d�|jd�wxYw)
Nrrr5r6rnrc�^���jttj���yr�)rbrtrSr�)r�r�s �rJ�dummy_handle_errorzEBasicConfigTest.test_encoding_errors_none.<locals>.dummy_handle_error�s������s�3�=�=�?�3�4rlr8z:'ascii' codec can't encode character '\xd8' in position 4:rIr�r)rrvr:r\r]r�rBr�rnrKr�r7r�r�rEr�rMr�rcrr4r�)rFrKr�rEr�r�r�s      @rJ�test_encoding_errors_nonez)BasicConfigTest.test_encoding_errors_noners����	(��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�G���M�M�J�K��O�O�G�$��M�M�=�>E�a�j�
J�
�M�M�O��j�7�3�q��v�v�x�~�~�'��4��I�I�j�!����T�3�'�	4�3��
�M�M�O��j�7�3�q��v�v�x�~�~�'��4�3�3���I�I�j�!����T�3�'�s0�DF�:F	�	F�H�3G�	H�G$� /Hc��d�}d}tdd�}|jtj|�	d}t	j
|d|tjd��|jttjj�d�tjjd	}|j|tj�tjd
��5}d
t_|j!|��ddd�t#|d��5}|j%�j'�}ddd�|j)d
�tj*d�|r|j-�yy#1swY�xxYw#1swY�PxYw#tj*d�|r|j-�wwxYw)Nc��6K�tjd�y�w)Nzhello world)rr�rwrlrJr�z5BasicConfigTest.test_log_taskName.<locals>.log_record�s�����O�O�M�*�s�r�ztest-logging-taskname-rIr�z%(taskName)s - %(message)s)rjr7rKr�r"rnrT)r�r�zTask-\d+ - hello world)r9r�r4r�rrvr�r\r]r�rBr�rnr�r�r�r�r�rcr�assertRegexr�rM)rFr�r��log_filenamerKr�r�r�s        rJ�test_log_taskNamez!BasicConfigTest.test_log_taskName�sS��	+���%�f�.F�G������	�	�<�0�	 ��H�����h�)1����'C�
E�
���S����!6�!6�7��;��l�l�+�+�A�.�G��!�!�'�7�+>�+>�?����d�+�v�*.��'��
�
�:�<�(�,��l�W�5���v�v�x�~�~�'��6����T�#<�=��)�)�$�/���
�
���,�+��6�5��
�)�)�$�/���
�
���s<�B0F�#"E<�F�F�9F�<F�F�F�
F�*F>c������g�tj����fd�}tj�td|�t	t|�}|�
||d�n|d��j�difg�y)Nc�����tjj}tjjd��j	tjj|��j||f�y)N�d)rr�r�r9r�rb)rlrxr&r.�old_basic_configrFs   ���rJ�my_basic_configz2BasicConfigTest._test_log.<locals>.my_basic_config�sR��������*�*�I��L�L�!�!�#�&��O�O�G�L�L�1�1�9�=��M�M�1�b�'�"rlrvztest merw)rrvrrr/r\)rFrhr�rPr}r.rOs`    @@rJrzBasicConfigTest._test_log�si�����"�.�.��	#�	�
�
�d�G�]�O�D��W�f�-�
����u�i�(��y�!�	
����2�r�(��,rlc�D�|jdtj�yr�)rrr�rps rJr�zBasicConfigTest.test_log�s�����u�g�o�o�.rlc�&�|jd�yr�r�rps rJr�zBasicConfigTest.test_debug�r�rlc�&�|jd�yr�r�rps rJr�zBasicConfigTest.test_info�r�rlc�&�|jd�yr�r�rps rJr�zBasicConfigTest.test_warning�r�rlc�&�|jd�yr�r�rps rJr�zBasicConfigTest.test_error�r�rlc�&�|jd�yr�r�rps rJr�zBasicConfigTest.test_critical�r�rlr�)#rsrtrurvrKrUr�rrr
rrrrr r"r'r*r,r3r;r?rBrFrr9rKrr�r�r�r�r�r�r�r�s@rJr�r�~s����-�#�0�;�J�(+�+�@�$@�1�M�3�M�1�
9�D�">�*O�(Q�&K�((�@%�W�$�$�&� �'� �:-�./� ��"� �#rlr�c�`��eZdZ�fd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Z�xZS)
�LoggerAdapterTestc�D���tt|��tjdd�t�|_tj|_|jj|j�|j|jj|j�|j|jj��fd�}|j|�|jtj�tj|jd��|_y)Nc�,���tjddyr�)rr')�old_handler_lists�rJr�z(LoggerAdapterTest.setUp.<locals>.cleanup�s���&6�G� � ��#rl�rrF)r�rXrKrr'rr|r�rrDr�rNrMrr��adapter)rFr�r[r�s  @�rJrKzLoggerAdapterTest.setUp�s����
���,�.�"�/�/��2��)�+����l�l��������t�~�~�.�������1�1�4�>�>�B�������,�,�-�	7�	
���� �����(�(�)��,�,�D�K�K�t�L��rlc�f�d}d}	ddz|j	t|jj�d�|jjd}|j	|jtj�|j	|j|�|j	|j|jf�|j	|j|j||jf�y#t$r3}|}|jj||j�Yd}~�� d}~wwxYw�Nztesting exception: %rrnr)r�r]r�r|r\r]rr�rr�rr5rEr��
__traceback__�rFrr�r*r�s     rJ�test_exceptionz LoggerAdapterTest.test_exception�s���%����	8�
��E�
	
����T�^�^�3�3�4�a�8����'�'��*�����������7�������S�)�������t�~�~�&7�8��������-�-��c�.?�.?�@�	B��!�	8��C��L�L�"�"�3����7�7��	8���C4�4	D0�=(D+�+D0c�p�	ddz|jjd��|jt	|j
j�d�|j
jd}|j|j|j||jf�y#t$r}|}Yd}~��d}~wwxYw)Nrnrz
exc_info testr�)
r�r]r�r\r]r|rrEr�r`)rFr*r�r�s    rJ�test_exception_excinfoz(LoggerAdapterTest.test_exception_excinfo�s���	�
��E�	
��������=�����T�^�^�3�3�4�a�8����'�'��*���������-�-��c�.?�.?�@�	B��!�	��C��	�s�B � 	B5�)B0�0B5c��d}|jj||j�|jt	|jj
�d�|jj
d}|j|jtj�|j|j|�|j|j|jf�|j|jd�y)Nzcritical test! %rrnrr�)r]r�r|r\r]rr�rr~rr5r�)rFrr�s   rJr�zLoggerAdapterTest.test_critical
s���!�������c�4�>�>�2�����T�^�^�3�3�4�a�8����'�'��*���������)9�)9�:�������S�)�������t�~�~�&7�8�������/�:rlc�b�|jjjj}d|jjj_|j	t
|jjjd|�|j
|jjd��y)N�!rQ� )r]rr!rQr�r+rZ�isEnabledFor�rFrss  rJ�test_is_enabled_forz%LoggerAdapterTest.test_is_enabled_forsw���l�l�)�)�1�1�9�9��.0������#�#�+��������!4�!4�!<�!<�i�#�	%�������2�2�2�6�7rlc�f�|j|jj��|jjD]}|jj|��|j
|jj��|j
|jj��yr�)rEr]rArrBrNrZrus  rJ�test_has_handlersz#LoggerAdapterTest.test_has_handlerssy��������0�0�2�3��{�{�+�+�G��K�K�%�%�g�.�,�	
������0�0�2�3�������1�1�3�4rlc��d}t|jd��}t|d��}d|_|jt	|�t	|��|jtj||j�|jt|jj�d�|jjd}|j|jtj�|j|jd|���|j|j|jf�|j|jd�|j}|j!|j|�|j!|jj|�t#�}	||_|j!|j|�|j!|j|�|j!|jj|�||_|j!|j|�|j!|j|�|j!|jj|�y#||_wxYw)NzAdapters can be nested, yo.r\�AdapterAdapterrnrzAdapter AdapterAdapter �test_nested)�
PrefixAdapterrr�r\r�r�rr~r|r]rr�rr5r�r!r�r�)rFrr]�adapter_adapterr��orig_manager�temp_managers       rJrqzLoggerAdapterTest.test_nested%s���+���t�{�{�$�?��'�w�d�C��!1�������g���_�(=�>����G�,�,�c�4�>�>�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�O�#��M�M�/�1�1�<�@��M�M�'�/�/�<�8��M�M�$�+�+�-�-�|�<�&2�O�#��
�
�o�-�-�|�<��
�
�g�o�o�|�4��
�
�d�k�k�)�)�<�8��'3�O�#�s
�*A%I5�5	I>c���|jj}t|j�}|j	dd�|jt
|dj�d�|j|djd�|jtjdd�|jt
|dj�d�|j|djd�y)N�
Hello, {}!�worldrMz
Hello, world!�test_styled_adapter�Goodbye {}.zGoodbye world.)r|r�StyleAdapterrr�r\rtrr�r�rr�)rFrr]s   rJryz%LoggerAdapterTest.test_styled_adapterAs����.�.�(�(���t�{�{�+������g�.�����W�R�[�_�_�-��?�������-�-�/D�E����G�O�O�]�G�<�����W�R�[�_�_�-�/?�@�������-�-�/D�Erlc��|jj}t|j�}d|_t|�}|j
dd�|jt|dj�d�|j|djd�|jtjdd�|jt|dj�d�|j|djd�y)	Nz{}rwrxrMz{} Hello, world!�test_nested_styled_adapterrzz{} Goodbye world.)r|rrrrr�r{r�r\rtrr�r�rr�)rFrr]�adapter2s    rJr}z,LoggerAdapterTest.test_nested_styled_adapterLs����.�.�(�(������,�������(������w�/�����W�R�[�_�_�-�/A�B�������-�-�/K�L����W�_�_�m�W�=�����W�R�[�_�_�-�/B�C�������-�-�/K�Lrlc�������d�|jj���fd���fd���fd�}|jj}|�|j	|dj
d�|dj}�dz
�|�|j	|dj
d�|j|dj|�|dj}�dz
�|�|j	|dj
d�|j|dj|�|dj}�dz
�|�|j	|dj
d	�|j|dj|�y)
Nrnc����d���y�Nr���
stacklevelrw��	the_level�triggers��rJ�	innermostzELoggerAdapterTest.test_find_caller_with_stacklevel.<locals>.innermost\�
����F�y�1rlc�����yr�rw�r�s�rJr2zALoggerAdapterTest.test_find_caller_with_stacklevel.<locals>.inner_�����Krlc�����yr�rw�r2s�rJ�outerzALoggerAdapterTest.test_find_caller_with_stacklevel.<locals>.outerb�����GrlrMr�r2r�� test_find_caller_with_stacklevel)r]r�r|rr\r�r�r�)rFr�rr�r2r�r�r�s    @@@@rJr�z2LoggerAdapterTest.test_find_caller_with_stacklevelXsJ����	��,�,�&�&��	2�	�	��.�.�(�(��
��������-�-�{�;����#�#���Q��	�
��������-�-�w�7����7�2�;�-�-�v�6����#�#���Q��	�
��������-�-�w�7����7�2�;�-�-�v�6����#�#���Q��	�
��������-�-�/Q�R����7�2�;�-�-�v�6rlc��tj|jddi��|_|jj	d�|jt
|jj�d�|jjd}|jt|d��|j|jd�y)Nrrr\zfoo should be herernr)rr�rr]r�r\r]r|rrErErr�s  rJ�test_extra_in_recordsz'LoggerAdapterTest.test_extra_in_recordsxs����,�,�D�K�K�49�3�<�A���	
�����2�3�����T�^�^�3�3�4�a�8����'�'��*��������.�/�������S�)rlc��|jjdddi��|jt|jj
�d�|jj
d}|j
t|d��y)Nzfoo should NOT be herer�nope)rFrnr)r]r�r\r]r|rrZrEr�s  rJ� test_extra_not_merged_by_defaultz2LoggerAdapterTest.test_extra_not_merged_by_default�sf�������6�u�f�o��N�����T�^�^�3�3�4�a�8����'�'��*��������/�0rl)rsrtrurKrbrer�rlrnrqryr}r�r�r�r�r�s@rJrXrX�sE���M�"B�"B�	;�8�5�9�8	F�
M�7�@*�1rlrXc��eZdZdZd�Zy)rr�Adapterc�(�|j�d|��|fSr��r�)rFrr6s   rJr�zPrefixAdapter.process�s���+�+��a��u�%�v�-�-rlN)rsrtrur�r�rwrlrJrrrr�s��
�F�.rlrrc��eZdZd�Zd�Zy)�Messagec� �||_||_yr�)r�r5)rFr�r5s   rJr�zMessage.__init__�s�������	rlc�H�|jj|j�Sr�)r�r"r5rps rJ�__str__zMessage.__str__�s���t�x�x����	�	�*�*rlN)rsrtrur�r�rwrlrJr�r��s���+rlr�c��eZdZdd�d�Zy)r{rnr�c��|j|�rE|j||�\}}|jj|t	||�fi|�d|dzi��yy)Nr�rn)rjr�rr�r�)rFr�rr�r5r6s      rJr�zStyleAdapter.log�sY�����U�#��,�,�s�F�3�K�C���D�K�K�O�O�E�7�3��#5�
5��
5�'1�!�|�
5�$rlN)rsrtrur�rwrlrJr{r{�s
��34�5rlr{c�~��eZdZ�fd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�Zd�Zd�Zd�Z�xZS)�
LoggerTestc���tt|��t�|_tjd��|_|jj|j�|j|jj|j�|j|jj�|jt
j�y)N�blah�rH)
r�r�rKrr|rrJrrDr�rNrMrr�s �rJrKzLoggerTest.setUp�s����
�j�$�%�'�)�+����n�n�&�1��������t�~�~�.�������1�1�4�>�>�B�������,�,�-�����(�(�)rlc��|jtd|jjd�|jtd|jjd�y)Nz,Level not an integer or a valid string: Nonez.Level not an integer or a valid string: (0, 0))rr)r�rKrr9rps rJ�test_set_invalid_levelz!LoggerTest.test_set_invalid_level�sJ���!�!��E��K�K� � �$�	(�	
�!�!��G��K�K� � �&�	*rlc�f�d}d}	ddz|j	t|jj�d�|jjd}|j	|jtj�|j	|j|�|j	|j|jf�|j	|j|j||jf�y#t$r3}|}|jj||j�Yd}~�� d}~wwxYwr_)r�rr�r|r\r]rr�rr�rr5rEr�r`ras     rJrbzLoggerTest.test_exception�s���%����	7�
��E�
	
����T�^�^�3�3�4�a�8����'�'��*�����������7�������S�)�������t�~�~�&7�8��������-�-��c�.?�.?�@�	B��!�	7��C��K�K�!�!�#�t�~�~�6�6��	7�rcc��tjtdd�5|jt|j
jdd�ddd�y#1swYyxYw)Nr�Tr��test message)r�	swap_attrrr@rKrr�rps rJ�!test_log_invalid_level_with_raisez,LoggerTest.test_log_invalid_level_with_raise�s>��
�
�
�w�(9�4�
@����i������$��O�A�
@�
@�s�-A�Ac��tjtdd�5|jj	dd�ddd�y#1swYyxYw)Nr�Fr�r�)rr�rrr�rps rJ�test_log_invalid_level_no_raisez*LoggerTest.test_log_invalid_level_no_raise�s4��
�
�
�w�(9�5�
A��K�K�O�O�D�.�1�B�
A�
A�s�A�Ac����g�tj|tjd�fd��|jjd��|j
t��d�|j
d�d�y)N�print_stackc�B���j|j��Sr�)rbrZ)r�r�r.s  �rJryz=LoggerTest.test_find_caller_with_stack_info.<locals>.<lambda>�s���f�m�m�D�M�M�O�&DrlTr�rnrr)rrr�	tracebackr�
findCallerr\r])rFr.s @rJ� test_find_caller_with_stack_infoz+LoggerTest.test_find_caller_with_stack_info�sd������
�
�d�G�-�-�}�D�	F�	
�����$��/�����V��a�(����;�V�A�Y�Grlc������d�|jj���fd���fd���fd�}|jj}|�|j	|dj
d�|dj}�dz
�|�|j	|dj
d�|j|dj|�|dj}�dz
�|�|j	|dj
d�|j|dj|�|dj}tj�}|j|j�tj�|�|j	|dj
d�|j|j�|jj��dz
�|�|j	|dj
d	�|j|dj|�y)
Nrnc����d���yr�rwr�s��rJr�z>LoggerTest.test_find_caller_with_stacklevel.<locals>.innermost�r�rlc�����yr�rwr�s�rJr2z:LoggerTest.test_find_caller_with_stacklevel.<locals>.inner�r�rlc�����yr�rwr�s�rJr�z:LoggerTest.test_find_caller_with_stacklevel.<locals>.outer�r�rlrMr�r2r�r�)rr�r|rr\r�r�r�rr rDrN)	rFr�rr�r3r2r�r�r�s	     @@@@rJr�z+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�6rlc�(�d}d}dx}x}x}x}x}x}}	tj|||||||||	�	}
dt|
jj	��zD]:}|di}|jt|jj|||||||||	���<y)N�	my record�
)r�r��
some value�rF�sinfo)	r�_logRecordFactoryra�__dict__�keysr@r�r�
makeRecord)
rFrHr�r8�lnorr5rEr�r��rvr�rFs
             rJ�%test_make_record_with_extra_overwritez0LoggerTest.test_make_record_with_extra_overwrite�s�������:>�>��>�S�>�3�>��>��>�4�%�
�
&�
&�t�U�B��S�$�'/��u�>��*�E�"�+�+�2B�2B�2D�,E�E�C��,�'�E����h����(>�(>��e� �#�s�D�(�$)��
�
8�Frlc��d}d}dx}x}x}x}x}x}}	ddi}
|jj||||||||
|	��	}|jd|j�y)Nr�r��	valid_keyr�r�)rr�r�r�)rFrHr�r8r�rr5rEr�r�rFr�s            rJ�(test_make_record_with_extra_no_overwritez3LoggerTest.test_make_record_with_extra_no_overwritesx������:>�>��>�S�>�3�>��>��>�4�%��l�+�����'�'��e�R��c�4�(0��U�(�L���
�
�k�6�?�?�3rlc��|j|jj��|jjD]}|jj	|��|j|jj��yr�)rErrArBrNrZrus  rJrnzLoggerTest.test_has_handlerss\��������/�/�1�2��{�{�+�+�G��K�K�%�%�g�.�,�������0�0�2�3rlc�z�tjd�}d|_|j|j	��y)Nz
blah.childF)rr rlrZrA)rF�child_loggers  rJ�test_has_handlers_no_propagatez)LoggerTest.test_has_handlers_no_propagates1���(�(��6��!&�������1�1�3�4rlc�&�|jjj}d|jj_|jt|jjd|�|j|jj
d��y)N�rQ�)rr!rQr�r+rZrjrks  rJrlzLoggerTest.test_is_enabled_for sb���k�k�)�)�1�1��&(������#��������!4�!4�i��M�������1�1�"�5�6rlc��|jj}|jjj}d|j_d|jj_|j	t
|jd|�|j	t
|jjd|�|j
|jjd��y)NTr�rrQr�)rrr!rQr�r+rZrj)rF�old_disabledrss   rJ�#test_is_enabled_for_disabled_loggerz.LoggerTest.test_is_enabled_for_disabled_logger&s����{�{�+�+���k�k�)�)�1�1��#�����&(������#��������j�,�G��������!4�!4�i��M�������1�1�"�5�6rlc��tj�}|j|tj�|j|tjd��|j|tjd��|j|tjd��|j|tjd�j�|j|tjd�j�|j|tjd�j�|j|tjd��|j|tjd�j�y)Nrr�rrc�)rr r�r�rr�)rFr�s  rJ�test_root_logger_aliasesz#LoggerTest.test_root_logger_aliases2s��� � �"���
�
�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�Crlc��|jttjt�|jttjd�y)Nsfoo)r@rKrr �anyrps rJ�test_invalid_nameszLoggerTest.test_invalid_names?s2�����)�W�%6�%6��<����)�W�%6�%6��?rlc��ttjdz�D][}dD]T}tj|�}tj
||�}tj|�}|j||��V�]y)Nrn)rr�rrczbaz.bar)rzr.�HIGHEST_PROTOCOLrr r�r/r�)rF�protorHrrj�	unpickleds      rJ�
test_picklingzLoggerTest.test_picklingCsb���6�2�2�Q�6�7�E�A�� �*�*�4�0���L�L���/��"�L�L��O�	��
�
�i��0�	B�8rlc�n
�|j}tjd�}tjd�}|jtj�|j|j
�tj�|j|ji�|j|jtj��|j|jtj��|j|jtjdtjdi�|j|ji�|j|jtj��|j|ji�|j|jtj��|j|jtjdi�|jtj�|j|j
�tj�|j|ji�|j|jtj��|jtj�|j|j
�tj�|j|ji�|j|ji�|j|ji�|j|jtj��|j|jtj��|j|jtj��|j|jtj��|j|jtj��tj�|j|j
�tj�|j|ji�|j|ji�|j|ji�|j|jtj��|j|jtj��|j|jtj��y)NrVrZTF)r3rr r9r�r\r4�_cacherErjrZr:r~r�rQ)rFr�r1r2s    rJ�test_cachingzLoggerTest.test_cachingKsz�������#�#�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�+;�+;�<�=rl)rsrtrurKr�rbr�r�r�r�r�r�rnr�rlr�r�r�r�r�r�r�s@rJr�r��s^���*�*�B�"P�2�H�%7�N8�4�4�5�
7�
7�D�@�1�6>rlr�c�(�eZdZdZd�Zd�Zd�Zd�Zy)�BaseFileTestz1Base class for handler tests that write log filesc�^�tj|�tdd�|_g|_y)Nr�ztest_logging-2-)rrKr9r8�rmfilesrps rJrKzBaseFileTest.setUp�s$�����t�� ��):�;�����rlc�
�|jD]}tj|��tjj	|j
�rtj|j
�tj|�yr�)r�r4rUr[r\r8rrU)rFr8s  rJrUzBaseFileTest.tearDown�sM���,�,�B��I�I�b�M��
�7�7�>�>�$�'�'�"��I�I�d�g�g�����$�rlc��|jtjj|�d|z��|jj|�y)z7Assert a log file is there and register it for deletionzLog file %r does not exist�rN)rEr4r[r\r�rb)rFrjs  rJ�
assertLogFilezBaseFileTest.assertLogFile�s=����������x�0�8�8�C�	�	E������H�%rlc
�r�tjdtjdd|j�ddd�S)Nrvr�rn)rr	r:rqrps rJ�next_reczBaseFileTest.next_rec�s5��� � ��g�m�m�S�!�!%�!2�!2�!4�d�D�$�H�	HrlN)rsrtrurvrKrUr�r�rwrlrJr�r��s��7��
 �&�Hrlr�c��eZdZd�Zd�Zy)�FileHandlerTestc�:�tj|j�tj|jdd��}|j|j�|jtjj|j��|jtji��|j|j�|jtjj|j��|j�y)NrITrJ)r4rUr8rrnr�r8rZr[r\rYr�r�rErM)rF�fhs  rJ�
test_delayzFileHandlerTest.test_delay�s���
�	�	�$�'�'��
�
 �
 ����7�$�
G�����"�)�)�$������������0�1�
�	�	�'�'�'��+�,����R�Y�Y�'���������t�w�w�/�0�
���
rlc��tj|j�tj|jdd��}|jtjd��|j|j��|j�|j|j��t|j�5}|j|j�j�d�ddd�y#1swYyxYw)NrIrk)rKrr5r)r4rUr8rrnr@r=rBr�rMr�r\rcr)rFr�r�s   rJ�%test_emit_after_closing_in_write_modez5FileHandlerTest.test_emit_after_closing_in_write_mode�s���
�	�	�$�'�'��
�
 �
 ����7��
E��
����)�)�-�8�9�
����
�
�� �
���
�
����
�
�� �
�$�'�'�]�b����R�W�W�Y�_�_�.��4��]�]�s�	/D�D
N)rsrtrur�r�rwrlrJr�r��s���	5rlr�c��eZdZd�Zej
ejd�d��Zd�Z	d�Z
dd�Zd�Zd�Z
d	�Zej�d
��Zy)
�RotatingFileHandlerTestc��tjj|jdd��}|j	|jd��|j
�tjj|jdd��}|j	|jd��|j
�t|jd�5}|jd�ddd�tjj|jdd��}|j	|jd��|j
�y#1swY�fxYw)NrIrn�rK�maxBytesrr�
)	rrBror8rZ�shouldRolloverrMr�r�)rF�rhr�s   rJ�test_should_not_rolloverz0RotatingFileHandlerTest.test_should_not_rollover�s��
�
�
�
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�WASI does not have /dev/null.c���tjjtjdd��}|j|j
|j���|j�y)NrIrnr�)	rrBror4�devnullrZr�r�rM�rFr�s  rJ�!test_should_not_rollover_non_filez9RotatingFileHandlerTest.test_should_not_rollover_non_file�sR��
�
�
�
1�
1��
�
�W�q�2�:������*�*�4�=�=�?�;�<�
���
rlc�P�t|jd�5}|jd�ddd�tjj|jdd��}|j
|j|j���|j�y#1swY�txYw)Nrr�rIr�r�)
r�r8r�rrBrorEr�r�rM)rFr�r�s   rJ�test_should_rolloverz,RotatingFileHandlerTest.test_should_rollover�ss��
�$�'�'�4�
 �A�
�G�G�E�N�!�
�
�
�
1�
1�$�'�'�G�VW�
1�
X������)�)�$�-�-�/�:�;�
���
�	!�
 �s�B�B%c�,�tj|j�tjj|jd��}|j
|j��|j|j�|j�y)NrIr�)
r4rUr8rrBrorBr�r�rMr�s  rJ�test_file_createdz)RotatingFileHandlerTest.test_file_created�s`��	�	�	�$�'�'��
�
�
�
1�
1�$�'�'�G�
1�
L��
����
�
�� ����4�7�7�#�
���
rlc�0�|rd|ini}tj|j�tjj
|jfdddd�|��}|j
tjj|j�|�tjddi�}tjddi�}|j|j|��|j|j|��|j|�|j|j�|jtjj|jd	z��|j|j|��|j|j|��|j|�|jtjj|j��|j|jd	z�|jtjj|jd
z��|j|j|��|j|j|��|j�y)NrLrIr�rN�rK�backupCountr�rrl�dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb�.1�.2)r4rUr8rrBror�r[r\r�rZr�rBr�rErM)rFrLr6r��small�larges      rJ�test_max_bytesz&RotatingFileHandlerTest.test_max_bytes�s���%*�'�5�!���
�	�	�$�'�'��
�
�
�
1�
1��G�G�N�%�1�s�N�FL�N���
�
�b�g�g�n�n�T�W�W�-�5�y�9��%�%�u�c�l�3���%�%�u�g�&6�7������*�*�5�1�2�����*�*�5�1�2�
��������4�7�7�#������������$��7�8�����*�*�5�1�2�����)�)�%�0�1�
�������������t�w�w�/�0����4�7�7�T�>�*������������$��7�8�����)�)�%�0�1�����)�)�%�0�1�
���
rlc�(�|jd��y)NT)rL)rrps rJ�test_max_bytes_delayz,RotatingFileHandlerTest.test_max_bytes_delay�s�����$��'rlc�X�d�}tjj|jddd��}||_|j|j
��|j|j�|jtjj||jdz���|j|j
��|j||jdz��|jtjj||jdz���|j|j
��|j||jdz��|jtjj||jdz���|j|j
��|jtjj||jdz���|j�y)	Nc��|dzS�N�.testrwr�s rJ�namerz>RotatingFileHandlerTest.test_rollover_filenames.<locals>.namer�s���'�>�!rlrIr�rnrrr	�.3)
rrBror8rrBr�r�rZr4r[r\rM)rFrr�s   rJ�test_rollover_filenamesz/RotatingFileHandlerTest.test_rollover_filenames�sp��	"�
�
�
�
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�(=�>�?�
���
rlc��Gd�dtjj�}||jddd��}|j	|j|j�|jdz�|j
|j��|j|j�|j
|j��|j|j|jdz�d	z�|jtjj|j|jdz���|j�y)
Nc��eZdZd�Zd�Zy)�ZRotatingFileHandlerTest.test_namer_rotator_inheritance.<locals>.HandlerWithNamerAndRotatorc��|dzSrrw)rFrHs  rJrz`RotatingFileHandlerTest.test_namer_rotator_inheritance.<locals>.HandlerWithNamerAndRotator.namers���g�~�%rlc�v�tjj|�rtj||dz�yy)N�.rotated)r4r[r\r�)rF�source�dests   rJ�rotatorzbRotatingFileHandlerTest.test_namer_rotator_inheritance.<locals>.HandlerWithNamerAndRotator.rotators*���7�7�>�>�&�)��J�J�v�t�j�'8�9�*rlN)rsrtrurrrwrlrJ�HandlerWithNamerAndRotatorrs��
&�
:rlrrIr�rnrrrr)rrBror8r\rrBr�r�rZr4r[r\rM)rFrr�s   rJ�test_namer_rotator_inheritancez6RotatingFileHandlerTest.test_namer_rotator_inheritances���	:��)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�
���
rlc��d�}d�}tjj|jddd��}||_||_|j
�}|j|�|j|j�|j
�}|j|�||jdz�}|j|�tj}t|d�5}|j�}	tj|	�}
|j|
j!d	�|j"|z�ddd�|j|j
��||jd
z�}|j|�t|d�5}|j�}	tj|	�}
|j|
j!d	�|j"|z�ddd�|j|j
��||jd
z�}t|d�5}|j�}	tj|	�}
|j|
j!d	�|j"|z�ddd�|j%tj&j)||jdz���|j+�y#1swY���xYw#1swY��xYw#1swY�uxYw)Nc��|dzS)Nz.gzrwr�s rJrz3RotatingFileHandlerTest.test_rotator.<locals>.namer$s���%�<�rlc� �t|d�5}|j�}tj|d�}t|d�5}|j	|�ddd�ddd�tj|�y#1swY�'xYw#1swY�+xYw)N�rbrsr)r�rc�zlib�compressr�r4r�)rr�sfr��
compressed�dfs      rJrz5RotatingFileHandlerTest.test_rotator.<locals>.rotator'sk���f�d�#�r��w�w�y��!�]�]�4��3�
��$��%���H�H�Z�(�&�$�

�I�I�f��&�%��$�#�s#�3B�A8�B�8B	�=B�B
rIr�rnrrr$rr	r)rrBror8rrr�rBr�r4�linesepr�rcr%�
decompressr\r�rrZr[r\rM)rFrrr��m1�m2r8�newliner�r(r�s           rJ�test_rotatorz$RotatingFileHandlerTest.test_rotator"s2��	 �	��
�
�
1�
1��G�G�g�1�q�2�B����
����
�]�]�_��
��������4�7�7�#�
�]�]�_��
�����
�4�7�7�T�>�
"�����2���*�*��
�"�d�^�q�����J��?�?�:�.�D����T�[�[��1�2�6�6�G�3C�D��	����
�
�� �
�4�7�7�T�>�
"�����2��
�"�d�^�q�����J��?�?�:�.�D����T�[�[��1�2�6�6�G�3C�D��	����
�
�� �
�4�7�7�T�>�
"��
�"�d�^�q�����J��?�?�:�.�D����T�[�[��1�2�6�6�G�3C�D��	
���������d�g�g��n�(=�>�?�
���
�%�^���^���^�s'�!AK�AK%�*AK2�K"�%K/�2K;N�F)rsrtrur�r�r�r�is_wasir�rrrrrr �
requires_zlibr/rwrlrJr�r��sk���(�X�_�_�W�_�_�&E�F��G�����.(��&�&�W����*��*rlr�c�D�eZdZejejd�d��Zd�Zdd�Z	d�Z
d�Zd�Zd�Z
d	�Zd
�Zej d�d��Zej d�d
��Zej d�d��Zej d�d��Zy)�TimedRotatingFileHandlerTestr�c��tjjtjddd��}tjd�tjddi�}|j|j|��|j�y)N�SrIrn�rKr皙�����?rztesting - device file)rrBrpr4r�r{r}r�rZr�rM)rFr�r�s   rJr�z5TimedRotatingFileHandlerTest.test_should_not_rolloverPsp���
�
�
6�
6��
�
�C�'�q�7�B���
�
�3���!�!�5�*A�"B�C������*�*�1�-�.�
���
rlc��tjj|jddd��}tjd�}|j|�tjddi�}|j|�|j|j�tjd�tjdd	i�}|j|�|j�d
}tjj�}d}t|�D]w}|tj|��z
}	|j|	j!d
�z}
t"j$j'|
�}|s�\|j(j+|
�nd|z}|�st"j$j-|j�\}}
t#j.|�D�
cgc]}
|
j1|
�s�|
��}}
t3d|j!d�zt4j6��t3d|zt4j6��|D]^}
t3d|
z�t"j$j9||
�}t;|d�5}t3|j=��ddd��`|j?||��ycc}
w#1swY��xYw)Nr6rIrnr7r�rztesting - initialr8ztesting - after delayFi,��secondsz.%Y-%m-%d_%H-%M-%Sz,No rotated files found, went back %d secondsz
Test time: %sz%Y-%m-%d %H-%M-%S�r�zThe only matching files are: %szContents of %s:r�r�) rrBrpr8r=r@r�rBr�r{r}rMr�r>rz�	timedelta�strftimer4r[r\r�rbr��listdirrr�rSr�r�r�rcrE)rFr�r�r�r��foundr>�GO_BACK�secs�prevr8r�dnr��filesr[�tfs                 rJ�
test_rolloverz*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�����#�#�B�'��
#�=�w�F����W�W�]�]�4�7�7�+�F�B�� "�
�
�2��C��1�!�,�,�r�2B�Q��E�C��/�C�L�L�1D�$E�E�C�J�J�W��3�e�;�#�*�*�M����'�!�+�,��w�w�|�|�B��*���$��_���"�'�'�)�$�%�_��
	
����3��'��D�%�_�s�J5�-J5�=J:�:K	c�*�tj|j�tjj	�}|j�}d|jdzcxkrdksXntjd|jdzz
dz�tjj	�}|j�}|jd��}tjd�}|rd|j���nd	}td
�D]{}tjj|jd||��}|j|�tj d
d|��i�}|j#|�|j%��}|j'|j�t)|jd��5}	t+|	�D]\}}
|j-d|��|
��	ddd�t/j0|j|j3�dz
fdz�td�D]{}tjj|jd||��}|j|�tj d
d|��i�}|j#|�|j%��}|tj4|rdnd��z
}|j�d|d��}|j'|�t)|jd��5}	t+|	�D]\}}
|j-d|��|
��	ddd�t)|d��5}	t+|	�D]\}}
|j-d|��|
��	ddd�y#1swY���xYw#1swY�VxYw#1swYyxYw)Ng�������?g��.Ag�������?g�?r)�microsecondr��W�MIDNIGHTr�rI)rK�when�atTimerz	testing1 r�rnr�z	testing2 ���daysr�z%Y-%m-%d)rrUr8r�r>r{rIr}r�rr=�weekdayrzrBrpr@r�rBrMr�r��	enumerater�r4�utime�	timestampr=)
rF�weeklyr>rMr�rLrwr�r�r��line�rolloverDate�otherfns
             rJ�test_rollover_at_midnightz6TimedRotatingFileHandlerTest.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��!�!�:�:����'��V�;�E�B��O�O�C� ��&�&���1�#��'?�@�B��G�G�B�K��H�H�J�
�	
���4�7�7�#�
�$�'�'�G�
,��$�Q�<���4��
�
�	�!��o�t�4�(�-�	������3�=�=�?�Q�.�0��2�3��q��A��!�!�:�:����'��V�;�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�<���4��
�
�	�!��o�t�4�(�-��'�G�
,��$�Q�<���4��
�
�	�!��o�t�4�(�-�
,�%-�
,��-�
,��-�
,�s$�7)M0�>)M=�=)N	�0M:�=N�	Nc�(�|jd��y)NT)rU)rYrps rJ�test_rollover_at_weekdayz5TimedRotatingFileHandlerTest.test_rollover_at_weekday�s���&�&�d�&�3rlc�T�|j}|ttjj|j
ddd��|ttjj|j
ddd��|ttjj|j
ddd��y)N�XrITrJrJ�W7)r@rbrrBrpr8)rFr@s  rJ�test_invalidz)TimedRotatingFileHandlerTest.test_invalid�s���(�(���Z��!1�!1�!J�!J��W�W�c�G�4�	A��Z��!1�!1�!J�!J��W�W�c�G�4�	A��Z��!1�!1�!J�!J��W�W�d�W�D�	Brlc��d}tjj|jdddd��}	|j	|�}|j||dz�|j	|dzdz
�}|j||dz�|j	|dz�}|j||dz�|j	|d	z�}|j||dz�|j
�tjd
dd�}tjj|jddd|��}	|j	|�}|j||dz�|j	|dzdz
�}|j||dz�|j	|dz�}|j||dz�|j	|d
z�}|j||dz�|j
�y#|j
�wxYw#|j
�wxYw)NrrIrKT�rKrLr�rM�Qrni�i�_��i@��ж)	rrBrpr8�computeRolloverr\rMr�r{)rF�currentTimer�rgrMs     rJ�"test_compute_rollover_daily_attimez?TimedRotatingFileHandlerTest.test_compute_rollover_daily_attime�s�����
�
�
�
6�
6��G�G�g�J��T�7�#��
	��'�'��4�F����V�[�<�%?�@��'�'��l�(B�Q�(F�G�F����V�[�<�%?�@��'�'��l�(B�C�F����V�[�<�%?�@��'�'��l�(B�C�F����V�[�<�%?�@��H�H�J����r�1�a�(��
�
�
�
6�
6��G�G�g�J��V�7�%��
	��'�'��4�F����V�[�<�%?�@��'�'��l�(B�Q�(F�G�F����V�[�<�%?�@��'�'��l�(B�C�F����V�[�<�%?�@��'�'��l�(B�C�F����V�[�<�%?�@��H�H�J��'
�H�H�J��&
�H�H�J�s�B$G!�,B$G6�!G3�6Hc
���ttj��}||dzz
}tjddd�}tj|�j}td�D�]�}tjj|jdd|zddd|�	�}	||kDr	d|z
|z}n||z
}|dz}|d
z
}||z
}|j|�}||k7r2tdtjz�tdt�z�|j||�|j|d
zdz
�}||k7r2tdtjz�tdt�z�|j||�||k(r|d
z
}|j|d
z�}||k7r2tdtjz�tdt�z�|j||�|j|dz�}||k7r2tdtjz�tdt�z�|j||�|j����y#|j�wxYw)NrbrcrrNrIzW%drnT)rKrL�intervalrr�rMrdzfailed in timezone: %dzlocal vars: %si�:	re)rsr{r�r��tm_wdayrzrrBrpr8rfr��timezone�localsr\rM)	rFrg�todayrM�wday�dayr�rhrgs	         rJ�#test_compute_rollover_weekly_attimez@TimedRotatingFileHandlerTest.test_compute_rollover_weekly_attime�s1���$�)�)�+�&���k�E�1�1�����r�1�a�(���{�{�5�!�)�)����8�C��!�!�:�:����'����a�UV���;�)�B�)
��#�:�!"�D��3��H� #�d�
�H��L�(���L�(���E�!���+�+�E�2���X�%��2�T�]�]�B�C��*�V�X�5�6�� � ���2��+�+�E�L�,@�1�,D�E���X�%��2�T�]�]�B�C��*�V�X�5�6�� � ���2��$�;�� 0�0�H��+�+�E�L�,@�A���X�%��2�T�]�]�B�C��*�V�X�5�6�� � ���2��+�+�E�L�,@�A���X�%��2�T�]�]�B�C��*�V�X�5�6�� � ���2����
�[��Z���
�s
�F I�I%c�`�tjd��}|jtj|�g}t
j
j
�}td�D];}|j|jd��|tjd��z
}�=d}g}g}|D]�}tjj|d|z�}	tjj!|	d	dd
d��}
|j|
�|j#d
�r|D]}|j|�d|������|j#d�r)d�}||
_|D]}|j|�d|�d�����|dk(s��d�}||
_|D]}|jd|z����|D]8}
tjj||
�}	t'|	d�5}	ddd��:t)|�D�]�\}}||}
|
j+�}|j-t/|�d|�|j#d
�rOd|z}	|D]D}tjj1|�\}}
|j3|
j#|	���F��|j#d�r�|D]�}tjj1|�\}}
|j3|
j5d�|
�|j3|
j#|dz�xr|
t/|�dzj7������9|dk(s��@|D]y}tjj1|�\}}
|j3|
j5d��|j3|
j#d�xr|
dj7���{���y#1swY��xYw)Nrr�rg�%Y-%m-%d_%H-%M-%Srr:)�a.bza.b.c�d.ezd.e.fr�z%s.logrjrNT�rLrjrrLrtz.log.ruc��tjj|�\}}|jdd�dz}tjj	||�S)Nr�r)r4r[r�r�r��rjr��basenames   rJrzHTimedRotatingFileHandlerTest.test_compute_files_to_delete.<locals>.namer2sE��(*���
�
�h�(?�%�G�X�'�/�/���;�f�D�H��7�7�<�<���:�:rlr�r�r�c��tjj|�\}}d|ddzdz}tjj||�S)Nr���.oldlog)r4r[r�r�rxs   rJrzHTimedRotatingFileHandlerTest.test_compute_files_to_delete.<locals>.namer:sC��(*���
�
�h�(?�%�G�X�"�X�a�b�\�1�I�=�H��7�7�<�<���:�:rlz
g%s.oldlogrr�z%s.log.r�r|rn)r2�mkdtempr��shutil�rmtreer�r>rzrbr>r=r4r[r�rrBrprrr�rR�getFilesToDeleter\r]r�rEr_�isdigit)rF�wd�timesr�rw�prefixesrE�rotatorsr�r�rr�rr8r��
candidatesr�r�s                  rJ�test_compute_files_to_deletez9TimedRotatingFileHandlerTest.test_compute_files_to_deletes"��
�
�
�_�
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�v��q�k�G� �1�1�3�J����S��_�a��<�� � ��'���&��#�A��G�G�M�M�!�,�E�A�r��O�O�B�M�M�!�$4�5�$��"�"�5�)�#�A��G�G�M�M�!�,�E�A�r��O�O�B�K�K��$7��<��O�O�B�M�M�&�3�,�$?�%B�$&�s�6�{�Q��$7�$?�$?�$A�C�$�
�3��#�A��G�G�M�M�!�,�E�A�r��O�O�B�K�K�	�$:�;��O�O�B�M�M�#�$6�$J�2�a�5�=�=�?�K�$�!-���s�
N#�#N-	c�\�tjtjd���}|j	t
j|�g}tjj�}d}t|�D];}|j|jd��|tjd��z
}�=d}g}g}t|�D]_\}	}
|	dz}tjj!||
zd	d|d
��}|j|�|D]}
|j|
�d|
�����a|D]}
|jd
|
z��|D]}||zj#��t|�D]�\}	}
|	dz}||	}|j%�}|j't)|�||z
|�t+j,d�}|D]j}t.j0j3|�\}}|j5|j7|
dz��|t)|
�dzd}|j9||��l��y)Nrr�rgrsrr:)za.logza.log.brnrjTrvr�z
a.log.%s.cz&^\d{4}-\d{2}-\d{2}_\d{2}-\d{2}-\d{2}\Z)�pathlib�Pathr2r}r�r~rr�r>rzrbr>r=rRrrBrp�touchr�r\r]rWrXr4r[r�rErrI)rFr�r�r��n_filesr�r�rEr�rwr�rrr�r�r��matcherr�r�r8rs                     rJ�?test_compute_files_to_delete_same_filename_different_extensionsz\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�v��A�#�K��&�&�?�?��V��RU�IJ�LW�FJ�@�L�G�
�O�O�G�$��������2�3��-��A��L�L���)�*���A�
�!�V�N�N���#�8�,�I�A�v��A�#�K��q�k�G� �1�1�3�J����S��_�g��.C�Z�P��j�j�!J�K�G������
�
�a�(���2�����
�
�f�S�j� 9�:��S��[��]�,�-��� � ���1�	 �
-rlzEST+05EDT,M3.2.0,M11.1.0c����tj}��fd�}tjj�jddd���||dddd	d
d
�|ddddd��||ddddd�|ddd
dd��||ddddd�|ddd
dd��||dddd	d
d
�|ddddd��||ddddd�|ddddd��||ddddd�|ddddd���j�tjj�jdddtjd
dd����||ddddd
d
�|dddd
d��||dddd
d�|dddd
d��||ddddd�|dddd
d��||ddddd
d
�|dddd
d��||dddd
d�|dddd
d��||ddddd�|dddd
d���j�tjj�jdddtjddd����||ddddd
d
�|ddddd��||ddddd�|ddddd��||ddddd�|ddddd��||ddddd
d
�|ddddd��||ddddd�|ddd
dd��||ddddd�|ddd
dd��||ddddd
d
�|ddddd��||ddddd�|ddddd��||ddddd�|ddddd��||ddddd
d
�|ddddd��||ddddd
d
d��|ddddd��||ddddd�|ddddd��||ddddd�|ddddd���j�tjj�jdddtjddd����||dddddd
�|ddddd��||ddddd�|ddddd��||ddddd�|ddddd��||ddddd
d
�|ddddd��||ddddd�|ddd
dd��||ddddd�|ddd
dd��||dddddd
�|ddddd��||ddddd�|ddddd��||ddddd�|ddddd���j�tjj�jdddtjddd����||dddddd
�|ddddd��||ddddd�|ddd
dd��||ddddd
d
�|ddd
dd��||ddddd�|ddd
dd��||ddddd�|ddd
dd��||ddddd�|ddddd��||dddddd
�|ddddd��||ddddd�|ddddd��||ddddd
d
�|ddddd��||dddddd��|dddddd���||dddddd
d��|dddddd���||dddddd��|ddddd��||ddddd
d
d��|ddddd��||ddddd�|ddddd��||ddddd�|ddddd���j�y)Nc����j|j��}||j�z
}|r(�j|dtj|���yy�Nrr:�rfrTr\r�r=��currentrhrg�diffr�rFs    ��rJr�zOTimedRotatingFileHandlerTest.test_compute_rollover_MIDNIGHT_local.<locals>.test��T����'�'��(9�(9�(;�<�F��H�.�.�0�0�D��� � ��q�(�*<�*<�T�*J�K�rlrIrKF�rKrLr���r�rgr��;�rrcrnryrrar�r���fold���r�rrBrpr8rMr{�rF�DTr�r�s`  @rJ�$test_compute_rollover_MIDNIGHT_localzATimedRotatingFileHandlerTest.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��%;�<�
���
rlc����tj}��fd�}tjj�jddd���||dddd	d
d
�|ddddd��||ddddd�|ddd
dd��||ddddd�|ddd
dd��||dddd	d
d
�|ddddd��||ddddd�|ddddd��||ddddd�|ddddd���j�tjj�jdddtjddd����||dddd	d
d
�|ddddd��||ddddd�|ddddd��||ddddd�|ddddd��||dddd	d
d
�|ddddd��||ddddd�|ddddd��||ddddd�|ddddd���j�tjj�jdddtjd
dd����||ddddd
d
�|dddd
d��||dddd
d�|dddd
d��||ddddd�|dddd
d��||ddddd
d
�|dddd
d��||dddd
d�|dddd
d��||ddddd�|dddd
d���j�tjj�jdddtjddd����||ddddd
d
�|ddddd��||ddddd�|ddddd��||ddddd�|ddddd��||ddddd
d
�|ddddd��||ddddd�|ddddd��||ddddd�|ddddd��||ddddd
d
�|ddddd��||ddddd�|ddddd��||ddddd�|ddddd��||ddddd
d
�|ddddd��||ddddd
d
d��|ddddd��||ddddd�|ddddd��||ddddd�|ddddd���j�tjj�jdddtjddd����||dddddd
�|ddddd��||ddddd�|ddddd��||ddddd�|ddddd��||ddddd
d
�|ddddd��||ddddd�|ddddd��||ddddd�|ddddd��||dddddd
�|ddddd��||ddddd�|ddddd��||ddddd�|ddddd���j�tjj�jdddtjddd����||dddddd
�|ddddd��||ddddd�|ddddd��||ddddd
d
�|ddddd��||ddddd�|ddddd��||ddddd�|ddddd��||ddddd�|ddddd��||dddddd
�|ddddd��||ddddd�|ddddd��||ddddd
d
�|ddddd��||dddddd��|dddddd���||dddddd
d��|dddddd���||dddddd��|ddddd��||ddddd
d
d��|ddddd��||ddddd�|ddddd��||ddddd�|ddddd���j�y)Nc����j|j��}||j�z
}|r(�j|dtj|���yyr�r�r�s    ��rJr�zITimedRotatingFileHandlerTest.test_compute_rollover_W6_local.<locals>.test�r�rlrI�W6Fr�r�r�ryr�r�rrrcrnrg�r�r�ra�r�r�r�r�r�r�s`  @rJ�test_compute_rollover_W6_localz;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��%<�=�
���
rlc�����tj}��fd�}tjj�jdddd���||dddd	d
d
�|ddddd��||ddd
dd�|ddddd��||ddd
dd�|ddddd��||dddd	d
d
�|ddddd��||ddddd�|ddddd��||ddddd�|ddddd��||dddd	d
d
�|ddddd��||ddddd�|ddddd��||ddddd�|ddddd��||dddd	d
d
�|ddddd��||ddddd�|ddddd��||ddddd�|ddddd���j�tjj�jddddtjddd����||ddddd
d
�|ddddd��||ddddd�|ddddd��||ddddd�|ddddd��||ddddd
d
�|ddddd��||ddddd�|ddddd��||ddddd�|ddddd��||ddddd
d
�|ddddd��||ddddd�|ddddd��||ddddd�|ddddd��||ddddd
d
�|ddddd��||ddddd�|ddddd��||ddddd�|ddddd���j�y)Nc����j|j��}||j�z
}|r(�j|dtj|���yyr�r�r�s    ��rJr�zXTimedRotatingFileHandlerTest.test_compute_rollover_MIDNIGHT_local_interval.<locals>.testxr�rlrIrKFr��rKrLr�rjr�r�r�r�r�rrsrcrnrgr�rrryr�rr{rN�rKrLr�rjrMr�r�s`  @rJ�-test_compute_rollover_MIDNIGHT_local_intervalzJTimedRotatingFileHandlerTest.test_compute_rollover_MIDNIGHT_local_intervalts����
�
��	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��%;�<�
���
rlc�@
���tj}��fd�}tjj�jdddd���||ddd	d
dd�|dddd
d
��||dddd
d
�|dddd
d
��||ddddd
�|dddd
d
��||dddd
dd�|ddd	d
d
��||dddd
d
�|dddd
d
��||ddddd
�|dddd
d
��||dddd
dd�|dddd
d
��||dddd
d
�|dddd
d
��||ddddd
�|dddd
d
��||dddd
dd�|dddd
d
��||dddd
d
�|ddd	d
d
��||ddddd
�|ddd	d
d
���j�tjj�jddddtjd
d
d
����||dddd
dd�|dddd
d
��||dddd
d
�|dddd
d
��||ddddd
�|dddd
d
��||dddd
dd�|dddd
d
��||dddd
d
�|dddd
d
��||ddddd
�|dddd
d
��||dddd
dd�|dddd
d
��||dddd
d
�|dddd
d
��||ddddd
�|dddd
d
��||dddd
dd�|dddd
d
��||dddd
d
�|dddd
d
��||ddddd
�|dddd
d
���j�tjj�jddddtjdd
d
����||dddddd�|ddddd
��||ddd	dd
�|ddddd
��||ddd	dd
�|ddddd
��||dddddd�|ddddd
��||ddddd
�|ddddd
��||ddddd
�|ddddd
��||dddddd�|ddddd
��||ddddd
�|ddddd
��||ddddd
�|ddddd
��||dddddd�|ddddd
��||ddddd
�|ddddd
��||ddddd
�|ddddd
���j�y)Nc����j|j��}||j�z
}|r(�j|dtj|���yyr�r�r�s    ��rJr�zRTimedRotatingFileHandlerTest.test_compute_rollover_W6_local_interval.<locals>.test�r�rlrIr�Fr�r�r�r��r�r�rrr�rcrnry�rgrrr��r�r�r��r�r�r�r�r�s`  @rJ�'test_compute_rollover_W6_local_intervalzDTimedRotatingFileHandlerTest.test_compute_rollover_W6_local_interval�s����
�
��	L��
�
�
6�
6��G�G�g�D�e�a�7�I��	
�R��a��R��R�
(�"�T�1�a��A�*>�?��R��a��Q��
"�B�t�Q��A�q�$9�:��R��a��Q��
"�B�t�Q��A�q�$9�:��R��a��B��B�
'��D�!�R��A�)>�?��R��a��A�q�
!�2�d�A�r�1�a�#8�9��R��a��A�q�
!�2�d�A�r�1�a�#8�9��R��b�"�b�"�b�
)�2�d�B��A�q�+A�B��R��b�"�a��
#�R��b�!�Q��%:�;��R��b�"�a��
#�R��b�!�Q��%:�;��R��b�"�b�"�b�
)�2�d�B��A�q�+A�B��R��b�"�a��
#�R��b�"�a��%;�<��R��b�"�a��
#�R��b�"�a��%;�<�
���
�
�
�
�
6�
6��G�G�g�D�e�a��=�=��A�q�)�7�+��	
�R��a��R��R�
(�"�T�1�b�!�Q�*?�@��R��a��Q��
"�B�t�Q��A�q�$9�:��R��a��Q��
"�B�t�Q��A�q�$9�:��R��a��R��R�
(�"�T�1�b�!�Q�*?�@��R��a��Q��
"�B�t�Q��1�a�$8�9��R��a��Q��
"�B�t�Q��1�a�$8�9��R��b�"�b�"�b�
)�2�d�B��1�a�+@�A��R��b�"�a��
#�R��b�"�a��%;�<��R��b�"�a��
#�R��b�"�a��%;�<��R��b�!�R��R�
(�"�T�2�r�1�a�*@�A��R��b�!�Q��
"�B�t�R��Q��$:�;��R��b�!�Q��
"�B�t�R��Q��$:�;�
���
�
�
�
�
6�
6��G�G�g�D�e�a��=�=��Q��*�7�,��	
�R��a��R��R�
(�"�T�1�a��Q�*?�@��R��a��R��
#�R��a��R��%;�<��R��a��R��
#�R��a��R��%;�<��R��a��B��B�
'��D�!�R��Q�)?�@��R��a��B��
"�B�t�Q��B��$:�;��R��a��B��
"�B�t�Q��B��$:�;��R��b�"�b�"�b�
)�2�d�B��B��+B�C��R��b�"�b�!�
$�b��r�1�b�!�&<�=��R��b�"�b�!�
$�b��r�1�b�!�&<�=��R��b�"�b�"�b�
)�2�d�B��B��+B�C��R��b�"�b�!�
$�b��r�2�r�1�&=�>��R��b�"�b�!�
$�b��r�2�r�1�&=�>�
���
rlNr0)rsrtrur�r�rr1r�rGrYr[r_rhrqr�r��run_with_tzr�r�r�r�rwrlrJr4r4Os����X�_�_�W�_�_�&E�F��G��((�T)5�V4�B�%�P4�l?L�B&2�T�W���3�4�k�5�k�^�W���3�4�y�5�y�z�W���3�4�.�5�.�d�W���3�4�B�5�Brlr4c�Z�tjdi|��tjd��zS)Nrnr:rw)r�r=)rxs rJrBrB�s&�����#��#�x�'9�'9�!�'D�D�Drl)r6rn)�Mr)�Hi)�Drb)rKrb�W0ry�)rP�hours)rnr�c��tjj|jd||dd��}d}|j	|�}|jd�r|t
d|dz
z�	�z
}n||z}||k7�r=|d
k(�r7	|jrtj|�}ntj|�}|d}|d}	|d
}
tjj|dz|	zdz|
zz
}||z}td|�d|j�d�tj��td|ztj��td|	ztj��td|
ztj��td|ztj��td|ztj��|j!||�|j#�y#t$r(}
td|
ztj��Yd}
~
�Od}
~
wwxYw)NrIrT)rKrLrjrr�grJrNrnrOrKr�ryrrzt: z (�)r<zcurrentHour: %szcurrentMinute: %szcurrentSecond: %szr: %sz
result: %sz exception in diagnostic code: %s)rrBrpr8rfrrBr�r{r��	localtime�	_MIDNIGHTr�rSr�r�r\rM)rFrLrj�expr�rgrgr��currentHour�
currentMinute�
currentSecondr�r�r*s              rJ�test_compute_rolloverr��s����!�!�:�:����'��x�UV�\`�;�b�B��K��'�'��4�F����s�#��t��H�Q�J��0�0���x����f�}��:�%�W��6�6� $���K� 8�A� $���{� ;�A�&'��d��()�!��
�()�!��
�#�,�,�6�6�;��;K�8E�<F�IK�;L� -�;.�/��"-�q����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�<D6G�	H�H�Hztest_compute_rollover_%s�	_intervalz>win32evtlog/win32evtlogutil/pywintypes required for this test.c��eZdZd�Zy)�NTEventLogHandlerTestc���d}tjd|�}tj|�}	tjjd�}tjddi�}|j|�|j�|j|tj|��tjtj z}d}d}	tj"|||	�}
|
D]1}|j$dk7r�t'j(||�}|d	k7r�/d
}nd|	z}|j+||��y#tj$r*}|jdk(rtjd���d}~wwxYw)
N�Application�test_loggingrz#Insufficient privileges to run testrzTest Log MessageFrNzTest Log Message
Tz3Record not found in event log, went back %d recordsr�)�win32evtlog�OpenEventLog�GetNumberOfEventLogRecordsrrB�NTEventLogHandler�
pywintypesr��winerrorr��SkipTestr�rYrM�
assertLess�EVENTLOG_BACKWARDS_READ�EVENTLOG_SEQUENTIAL_READ�ReadEventLog�
SourceName�win32evtlogutil�SafeFormatMessagerE)rF�logtype�elh�num_recsrTr*r��flagsr@rA�eventsrs            rJr`z NTEventLogHandlerTest.test_basic'sT�����&�&�t�W�5���9�9�#�>��	�� � �2�2�>�B�A�
�!�!�5�*<�"=�>��	�����	���	�����+�"H�"H��"M�N��3�3��4�4�5�������)�)�#�u�g�>���A��|�|�~�-��!�3�3�A�w�?�C��,�,���E���D�g�M������3��'��1���	��z�z�Q���'�'�(M�N�N���	�s�D6�6E3�	%E.�.E3N)rsrtrur`rwrlrJr�r�%s��(rlr�c��eZdZd�Zy)�MiscTestCasec�D�hd�}tj|t|��y)N>r�r�Filtererr��
RootLoggerr��PlaceHolderr��currentframer��StrFormatStyler�r�r�)�not_exported)r�check__all__r)rFr�s  rJ�test__all__zMiscTestCase.test__all__Js��,��
	���T�7��FrlN)rsrtrur�rwrlrJr�r�Is��Grlr�c�V�tjtjdd��y)N�LC_ALLr)r��enterModuleContextr�run_with_localerwrlrJ�setUpModuler�Vs������ 7� 7��"� E�Frl�__main__r�r0)�rvr�logging.handlers�logging.configr�r�r%r�r�r.r6r�r�r�r4r�r~rWr~r�r,rSr2�test.support.script_helperrrr�r�test.supportrrrr	r
rr�test.support.logging_helperr
r�r�r�r{r�r�r�http.serverrr�
unittest.mockr�urllib.parserr�socketserverrrrrr�r�r�r�r%r��HAVE_ASAN_FORK_BUGr��check_sanitizerr��TestCaserryr��SILENTr��TERSE�EFFUSIVEr�r"�	TALKATIVEr��
CHATTERBOX�BORINGrzrr�r�r�r�r�r9r;r�r�r;r�r�r�r�r�rrr-r;rErIrNr9r�rPrer=r�r�r�rr;rArGrRrVrd�IPV6_ENABLEDrgrmr�r�r�r�r�r�r�rBr�r�r�r�r�r�r�r�r�r�r?rTr	rkrmrzrr�r=r��tzinfor�r�r�r�rrrrr!r)r�rr7rjr�r�rXr�rrr�r{r�r�r�r�r4rBrLr�rjr�rHrsr+r�r�r��mainrwrlrJ�<module>r	s���"����
�����
�	��	��	��
�	�
�
�
�
��N��&�"�&�)�(�!��3��������:��+�D�D�6�3�3�	��$�H�O�O����E�G��$�H�O�O��G���4�(�-�/��
j'�x� � �j'�ZUI��UI�n<%�h�<%�L�������������	��	��
����F�F�Q�J�'���(��*�	�'��*��*��)�
�+�
�+��,�
�(���+�g�n�n�+�:����:�C'��C'�L�U2�(�U2�p1��1�#��-�-�#�
��
�'@��'@�XG;�U�%�%�G;�T0�6�0�d'�\�:�'�R1�L�"4�1�>-�L�"4�-�^�6�9��(�}�(�(��(�
!�� � �"�,��,�,�.��h��/�#��@C5��C5�L-��*�*�-�
�a�X�a�H!�� � �"�,��,�,�.�W+��W+�/�#�W+�t����W�V�Y�/�1H�I�&�-�&�J�&�!�� � �"�,��,�,�.�>:�(�>:�/�#�>:�@����W�V�Y�/�1H�I�(�1�(�J�(�!�� � �"�,��,�,�.�IB��IB�/�#�IB�V����W�V�Y�/�1H�I�&�-�&�J�&�����]�/�/�;�=�
6�-�
6�=�
6�!�� � �"�,��,�,�.�K �h�K �/�#�K �Z1��1�h-L�8�-L�`%K�8�%K�P.�
�
�#�	�G�)�)�	�	�W�%�%�3�3�	�	�%�+�+�	�)�)�
�1�
��2����b?�X�b?�J59�(�9�.&�h�&�>	�w�(�(�	� �8� �F-��,�,�.�iP�x�iP�/�iP�V�7���_�-��#�0��0�0�2�]&�H�]&�3�]&�@�x���!����(�/�/��
�e��.�.�Y)�H�%�%�'9�Y)�x&�W�7�7�&�G�X�.�.�G�&A�H�A�,$;�X�$;�N	�	�$�w�*�*�$�T/�8�T/�nx/�(�x/�vJ0�H�J0�ZY#�h�'�'�Y#�x
l1��)�)�l1�^.�G�)�)�.�+�+�5�7�(�(�5�`>��-�`>�FH�8�H�25�l�5�,Z�l�Z�x[
�<�[
�|E��� �%�,���1�B�/�0�
�I�D�#���-1�H�#�$	�J*�D�0���a�<��K��D�)-��&��,�d�4I�J�U��j����[�"b�c� (�H� (�d� (�FG�8�$�$�G�G��z���H�M�M�O���iX�6�15�5�K�5�/�J�6��
�	��	�s$�^�%^�^�^�^�^

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists