a
    lcQs                     @   s<  d Z ddlZddlZddlZddlZddlZddlZddlmZ ddlm	Z	 ddl
mZ ddlZddlmZ ddlmZmZmZmZmZmZmZmZmZ ddlmZ dd	lmZ dd
lmZ ddlmZm Z m!Z! zddl
m"Z" W n e#y   ddl
m"Z" Y n0 ej$j%Z&G dd deZ'G dd deZ(G dd deZ)dd Z*G dd deZ+dd Z,G dd deZ-G dd deZ.G dd deZ/G dd  d eZ0G d!d" d"eZ1d#d$ Z2d%d& Z3d'd( Z4d)d* Z5d+d, Z6d-d. Z7d/d0 Z8d1d2 Z9d3d4 Z:d5d6 Z;ej<d7d8 Z=ejj>ej?j@d9kd:d;d<d= ZAeBd>kr8e)C  dS )?z4
Tests for traitlets.config.application.Application
    N)StringIO)TemporaryDirectory)TestCase)mark)	BoolBytesDict	HasTraitsIntegerListSetTupleUnicode)Application)Configurable)Config)check_help_all_outputcheck_help_outputget_output_error_code)mockc                   @   sz   e Zd ZedddjddZedddjddZedd	djddZe	g jddZ
e	e jddZe jdd
dZdS )Foor   z.
    The integer i.

    Details about i.
    helpTconfig   zThe integer j.ZBrianzFirst name.+r   ZmultiplicityN)__name__
__module____qualname__r
   tagijr   namer   lalir   fdict r(   r(   c/var/www/html/django/DPS/env/lib/python3.9/site-packages/traitlets/config/tests/test_application.pyr   '   s   r   c                   @   s   e Zd ZedddjddZedddjddZedjddd	Z	e
 jdd
d	Ze jddZee djddZee e ddjddZdS )Barr   The integer b.r   Tr   zEnable bar.r(   *r   r   )Zvalue_trait)r"   b)Zper_key_traitsN)r   r   r    r
   r!   r-   r   enabledr   tbr   asetr   bdictidictr   Zkey_dictr(   r(   r(   r)   r*   8   s   r*   c                   @   s   e Zd ZedZedddjddZee	e
gZedddjddZed	dd
dZi Zeej eddddddddddd
 i Zeej edddiidfdddiidfddejiidfd dd Zd d! Zd"S )#MyAppmyappFzIs the app running?r   Tr    zLoad this config filez yes the name is wrong on purposezAShould print a warning if `MyApp.warn-typo=...` command is passed)r   r   zFoo.i)zFoo.jz`j` terse help msgzFoo.namezFoo.lazFoo.lizBar.tbz	Bar.bdictzBar.enabledzApplication.log_level)
)Zfooir"   )r#   Zfoojr$   r%   r&   r/   Dr.   enablez	log-levelr*   r.   zSet Bar.enabled to TruezSet Bar.enabled to Falser   	log_levelzset level=CRITICAL))r7   e)ddisablecritc                 C   s   t | d| _d S N)parent)r   fooselfr(   r(   r)   init_fook   s    zMyApp.init_fooc                 C   s   t | d| _d S r=   )r*   barr@   r(   r(   r)   init_barn   s    zMyApp.init_barN)r   r   r    r   r$   r   r!   runningr   r*   r   classesconfig_file	warn_tpyoaliasesupdater   flagsloggingCRITICALrB   rD   r(   r(   r(   r)   r3   C   sD   r3   c                 C   s   dd | D S )Nc                 S   s   g | ]
}|j qS r(   )r   ).0klassr(   r(   r)   
<listcomp>s       z"class_to_names.<locals>.<listcomp>r(   )rF   r(   r(   r)   class_to_namesr   s    rR   c                   @   s0  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zejee d5 d6d7d8d9 Z!ejee d5 d6d7d:d; Z"d<d= Z#d>d? Z$d@dA Z%dBS )CTestApplicationc                 C   sR   t  }ttjd}t|}d|_d|_|g|j_|j	d d|
 v sNJ d S )Nr8   z%(message)sz%Y-%m-%d %H:%MZhello)r   r3   rL   INFOStreamHandlerZ
log_formatZlog_datefmtloghandlersinfogetvalue)rA   streamapphandlerr(   r(   r)   test_logw   s    

zTestApplication.test_logc                 C   s.   t  }|dg |  |jjdks*J d S )Nz--Foo.name=11)r3   
initializerB   r?   r$   rA   r\   r(   r(   r)   test_no_eval_cli_text   s    z%TestApplication.test_no_eval_cli_textc                 C   sH   t  }| |jd | |jd | |jt ttg | |jd d S )Nr4   Fr5   )r3   assertEqualr$   rE   rF   r*   r   rG   ra   r(   r(   r)   
test_basic   s
    zTestApplication.test_basicc                 C   s   t  }| t| g d | t| g d | t|tgdg | t|tgg d | t|tgdg | t|tgddg G dd	 d	t}| t|tgdg | t|tgddg d S )
N)r   r3   r*   r   )r   LoggingConfigurableSingletonConfigurabler   r3   r*   r   r   )r   re   rf   r   r   r   r*   c                   @   s   e Zd ZdS )z2TestApplication.test_mro_discovery.<locals>.MyApp2Nr   r   r    r(   r(   r(   r)   MyApp2   s   rh   )r3   ZassertSequenceEqualrR   Z_classes_with_config_traitsZ_classes_inc_parentsr   r   r*   )rA   r\   rh   r(   r(   r)   test_mro_discovery   s2    

z"TestApplication.test_mro_discoveryc                 C   sf   t  }|g d |j}t| | |jjd | |jjd | |jj	d | |j j
d d S )Nz--i=10z
--Foo.j=10z--enable=Falsez--log-level=50
   F2   )r3   parse_command_liner   printrc   r   r"   r#   r*   r.   r8   rA   r\   r   r(   r(   r)   test_config   s    zTestApplication.test_configc                 C   s   t  }|d  |jdgks$J |j}|jjddgks>J |jjddgksRJ |jj	dksbJ | 
|jjdd	h |  |jjddgksJ |jjddgksJ |  | 
|jjdd	h |jj	dksJ d S )
NzT--li 1 --li 3 --la 1 --tb AB 2 --Foo.la=ab --Bar.aset S1 --Bar.aset S2 --Bar.aset S12r      r_   ab)ZABZS1ZS2)r3   rm   split
extra_argsr   r   r&   r%   r*   r/   rc   r0   rB   r?   rD   rC   ro   r(   r(   r)   test_config_seq_args   s     z$TestApplication.test_config_seq_argsc                 C   s   t  }|d  dddd}dddd}dd	d
d}|j}|jj|ksNJ | |jj| | |jj	| |
  | |jj| |  |jj|ksJ | |jj	| d S )Nz--Foo.fdict a=1 --Foo.fdict b=b --Foo.fdict c=3 --Bar.bdict k=1 -D=a=b -D 22=33 --Bar.idict k=1 --Bar.idict b=2 --Bar.idict c=3 r_   r-   3)ar-   cZ33)krx   Z22r      rr   )rz   r-   ry   )r3   rm   rt   r   r*   r2   ZassertDictEqualr   r'   r1   rB   rc   r?   rD   rC   )rA   r\   r'   r1   r2   r   r(   r(   r)   test_config_dict_args   s     z%TestApplication.test_config_dict_argsc                 C   sX   t  }|g d |  |  | |jjd | |jjd | |jj	d d S )Nrj   rk   F)
r3   rm   rB   rD   rc   r?   r"   r#   rC   r.   ra   r(   r(   r)   test_config_propagation   s    z'TestApplication.test_config_propagationc              	   C   s   d}G dd dt }| }t }t||}t|d}|ddg W d   n1 sZ0    Y  |dg d	|jjv sJ |jjjd
ksJ |jd
ksJ |j	||gd |j
sJ |jjjd
ksJ |jd
ksJ W d   n1 s0    Y  dS )z<Test that loading config files does not override CLI options	config.pyc                   @   s0   e Zd Ze jddZe jddZddiZdS )z2TestApplication.test_cli_priority.<locals>.TestAppTr   vTestApp.valueN	r   r   r    r   r!   valuer   config_file_loadedrI   r(   r(   r(   r)   TestApp   s   r   w c.TestApp.value = 'config file'
$c.TestApp.config_file_loaded = True
N--v=clir   clipath)r   r   pjoinopen
writelinesrm   r   r   r   load_config_filer   )rA   r$   r   r\   tdrG   fr(   r(   r)   test_cli_priority   s"    
"
z!TestApplication.test_cli_priorityc              	   C   s  d}G dd dt }| }t }t||}t|d}|ddg W d    n1 sZ0    Y  |dg |j}d|jjv sJ |jjjd	ksJ |jd	ksJ |j	||gd
 |j
sJ || |jjjd	ksJ |jd	ksJ W d    n1 s0    Y  d S )Nr~   c                   @   s0   e Zd Ze jddZe jddZddiZdS )z:TestApplication.test_ipython_cli_priority.<locals>.TestAppTr   r   )r   z	some helpNr   r(   r(   r(   r)   r     s   r   r   r   r   r   r   r   r   )r   r   r   r   r   rm   r   r   r   r   r   update_config)rA   r$   r   r\   r   rG   r   Z
cli_configr(   r(   r)   test_ipython_cli_priority  s&    
"

z)TestApplication.test_ipython_cli_priorityc                 C   s4   G dd dt }| }|dg |jd u s0J d S )Nc                   @   s    e Zd ZddiZedddZdS )z0TestApplication.test_cli_allow_none.<locals>.AppoptApp.optT)
allow_noner   Nr   r   r    rI   r   r   r(   r(   r(   r)   App8  s   r   z
--opt=None)r   rm   r   )rA   r   r\   r(   r(   r)   test_cli_allow_none7  s    z#TestApplication.test_cli_allow_nonec                 C   s   t  }|dg |  | |jjd t  }|dg |  | |jjd t  }|dg |  | |jjd t  }|dg |  | |jjd d S )N	--disableFz-d--enableTz-e)r3   rm   rD   rc   rC   r.   ra   r(   r(   r)   
test_flags@  s     zTestApplication.test_flagsc                 C   s|   t  }t }t| |  W d    n1 s60    Y  | }| |d | |d | d| | d| d S )Nz(?<!-)-e, --enable\bz(?<!-)-d, --disable\bz#Equivalent to: [--Bar.enabled=True]z$Equivalent to: [--Bar.enabled=False])	r3   ior   
contextlibredirect_stdoutZprint_flag_helprZ   assertRegexassertInrA   r\   stdoutZhmsgr(   r(   r)   test_flags_help_msgU  s    &z#TestApplication.test_flags_help_msgc                 C   s   t  }|ddg |  | |jjd |  | |jjd t  }|ddg |  | |jjd |  | |jjd t  }|ddg |  | |jjd |  | |jjd d S )	Nz--i=5z--j=10   rk   z-i=5z-j=10z--fooi=5z	--fooj=10)r3   rm   rB   rc   r?   r"   r#   ra   r(   r(   r)   test_aliases`  s$    zTestApplication.test_aliasesc                 C   sz   G dd dt }| }|ddg | |jd | }|ddg | |jd | }|d	d
g | |jd d S )Nc                   @   s   e Zd ZeddZddiZdS )z@TestApplication.test_aliases_multiple.<locals>.TestMultiAliasAppTr   )r   rC   ZquxzTestMultiAliasApp.fooN)r   r   r    r
   r?   rI   r(   r(   r(   r)   TestMultiAliasAppx  s   
r   z-frw   rr   z--bar4   z--qux5r   )r   rm   rc   r?   )rA   r   r\   r(   r(   r)   test_aliases_multiplev  s    z%TestApplication.test_aliases_multiplec                 C   s   t  }t }t| |  W d    n1 s60    Y  | }| |d | |d | d| | d| | d| d S )Nz(?<!-)-i, --fooi\bz(?<!-)-j, --fooj\bzEquivalent to: [--Foo.i]zEquivalent to: [--Foo.j]zEquivalent to: [--Foo.name])	r3   r   r   r   r   Zprint_alias_helprZ   r   r   r   r(   r(   r)   test_aliases_help_msg  s    &z%TestApplication.test_aliases_help_msgc                 C   sv   t  }|ddg |  | |jjd | |jjd |ddg |  | |jjd | |jjd d	S )
z9test that setting flags doesn't clobber existing settings	--Bar.b=5r   Fr   r   z
--Bar.b=10Trk   N)r3   rm   rD   rc   rC   r.   r-   ra   r(   r(   r)   test_flag_clobber  s    z!TestApplication.test_flag_clobberc                 C   sZ   t  }ttjd}t|g|j_t }d|j_||_	| 
d|  | 
d|  d S )NrT   ZWOOOO	warn_typorH   )r   r3   rL   rU   rV   rW   rX   r   r   r   r   rZ   )rA   r[   r\   cfgr(   r(   r)   test_warn_autocorrect  s    z%TestApplication.test_warn_autocorrectc                 C   sx   t  }tj|j_t }|| | |jtj | |jjjtj |dg | |jtj	 | |jjjtj	 d S )Nz--crit
r   rL   WARNr3   r8   r   rc   r   r`   rM   rA   r   r\   r(   r(   r)   test_flatten_flags  s    

z"TestApplication.test_flatten_flagsc                 C   sx   t  }tj|j_t }|| | |jtj | |jjjtj |ddg | |jtj	 | |jjjd d S )Nz--log-levelrM   r   r   r(   r(   r)   test_flatten_aliases  s    

z$TestApplication.test_flatten_aliasesc                 C   s   t  }|g d |  | |jjd | |jjd | |jddg t  }|g d |  | |jjd | |jjd | |jg d t  }|g d	 | |jg d
 d S )N)r   extraargsr   Fr   r   r   )r   --r   r   r   T)r   r   r   )r   z--la-r   z	--Bar.b=1r   r   r   )r   r   r   )r3   rm   rD   rc   rC   r.   r-   ru   ra   r(   r(   r)   test_extra_args  s    zTestApplication.test_extra_argsc                 C   s   t  }|dg d S )Nu   ünîcødé)r3   rm   ra   r(   r(   r)   test_unicode_argv  s    z!TestApplication.test_unicode_argvc                 C   s   t  }|  d S N)r3   Zdocument_config_optionsra   r(   r(   r)   test_document_config_option  s    z+TestApplication.test_document_config_optionc                 C   s   t  }d| v sJ d S )Nr+   )r3   generate_config_filera   r(   r(   r)   test_generate_config_file  s    z)TestApplication.test_generate_config_filec                 C   s   G dd dt }G dd dtt|}t }|j| | }t| | d| | d| | 	d| | d| | d	| | d
| | d| | d| | d| | 
|dd | d| | 	d| | 
|dd | 	d| d S )Nc                   @   s    e Zd ZedddjddZdS )zQTestApplication.test_generate_config_file_classes_to_include.<locals>.NotInConfigxzFFrom hidden class

            Details about from_hidden.
            r   Tr   N)r   r   r    r   r!   Zfrom_hiddenr(   r(   r(   r)   NotInConfig  s   r   c                   @   s   e Zd ZdS )zNTestApplication.test_generate_config_file_classes_to_include.<locals>.NoTraitsNrg   r(   r(   r(   r)   NoTraits  s   r   r+   z# Foo(Configurable)z# Configurablez# NoTraits(Foo, Bar)z# c.NoTraits.iz# c.NoTraits.jz# c.NoTraits.nz#  See also: Foo.jz#  See also: Bar.bzDetails about i.r   z# c.NoTraits.from_hiddenz#  See also: NotInConfig.zDetails about from_hidden.)r	   r   r*   r3   rF   appendr   rn   r   ZassertNotInrc   count)rA   r   r   r\   Zconf_txtr(   r(   r)   ,test_generate_config_file_classes_to_include  s(    	z<TestApplication.test_generate_config_file_classes_to_includec              
   C   s6  t  }t |_d}td}tt||d}|d W d    n1 sP0    Y  td}tt||d}|d W d    n1 s0    Y  |j|||gd |	  | 
|jjd |j|||gd |	  | 
|jjd	 W d    n1 s0    Y  W d    n1 s(0    Y  d S )
Nr~   _1r   zget_config().MyApp.Bar.b = 1Z_2zget_config().MyApp.Bar.b = 2r   r{   r   )r3   rL   	getLoggerrW   r   r   r   writer   rD   rc   rC   r-   )rA   r\   r$   td1f1Ztd2f2r(   r(   r)   test_multi_file	  s    
(
(zTestApplication.test_multi_file
assertLogszrequires TestCase.assertLogsreasonc              	   C   s  t  }t |_|jtj d}td}tt||d d}|	d W d    n1 s`0    Y  tt||d d$}t
ddd	ii| W d    n1 s0    Y  | |jtj(}|j||gd
 |  W d    n1 s0    Y  W d    n1 s0    Y  |jjd	ks,J d|j}d|v sFJ d|v sTJ t||d |v slJ t||d |v sJ d S )Nr   r   z.pyr   zget_config().Bar.b = 1z.jsonr*   r-   r{   r   
Z	Collisionz1 ignored, using 2)r3   rL   r   rW   setLevelrU   r   r   r   r   jsondumpr   WARNINGr   rD   rC   r-   joinoutputrA   r\   r$   r   r   Zcapturedr   r(   r(   r)   test_log_collisions  s$    

(2Fz#TestApplication.test_log_collisionsc              	   C   s   t  }t |_d}t }tt||d}|d W d    n1 sL0    Y  | |jtj	 }|j
||gd W d    n1 s0    Y  W d    n1 s0    Y  d|j}| d| d S )Nr~   r   syntax error()r   r   SyntaxError)r3   rL   r   rW   r   r   r   r   r   ERRORr   r   r   r   r   r(   r(   r)   test_log_bad_config/  s    
(Lz#TestApplication.test_log_bad_configc              	   C   s   t  }d|_t |_d}t }tt||d}|d W d    n1 sR0    Y  | 	t
  |j||gd W d    n1 s0    Y  W d    n1 s0    Y  d S )NTr~   r   r   r   )r3   Zraise_config_file_errorsrL   r   rW   r   r   r   r   assertRaisesr   r   )rA   r\   r$   r   r   r(   r(   r)   test_raise_on_bad_config<  s    
(z(TestApplication.test_raise_on_bad_configc                 C   s  t  }|dg | |jt | |jj| t   t  t  }|ddg | |jt | |jjt	 | |jj| | |jjj|j t   t  t  }|ddg | |jt | |jjt
 | |jjj | |jj| | |jjj|j dS )z/Try all ways to specify how to create sub-apps.sub1sub2sub3N)Rootinstancerm   ZassertIsInstanceZsubappSub1ZassertIsr>   Zclear_instanceSub2Sub3
assertTrueflagra   r(   r(   r)   test_subcommands_instanciationG  s*    z.TestApplication.test_subcommands_instanciationc              	   C   s  t  }t |_d}td}t||}t|d}|dg W d    n1 sV0    Y  |j||gd | 	t
|jd | 	|jd | |  | 	|jd t|d}|d	g W d    n1 s0    Y  |j||gd | 	t
|jd | 	|jd
 | t d|_W d    n1 s80    Y  |jd | 	t
|jd |j||gd | 	t
|jd | 	|jd
 W d    n1 s0    Y  d S )Nr~   r   r   zc.MyApp.running = True
r   r   r   Tzc.MyApp.running = False
Fz/fooz/bar)r3   rL   r   rW   r   r   r   r   r   rc   lenZloaded_config_filesstartrE   r   AttributeErrorr   )rA   r\   r$   r   rG   r   r(   r(   r)   test_loaded_config_filesg  s0    

**&z(TestApplication.test_loaded_config_filesN)&r   r   r    r^   rb   rd   ri   rp   rv   r|   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   skipifhasattrr   r   r   r   r   r   r(   r(   r(   r)   rS   v   sB   )	$	%

 rS   c                 C   s   G dd dt }|t d}tt |g d W d    n1 sL0    Y  | dd }|j}d|v svJ d|v sJ d	|v sJ |j	tj
ksJ d S )
Nc                   @   s   e Zd ZddiZeddZdS )z"test_cli_multi_scalar.<locals>.Appr   r   Tr   Nr   r(   r(   r(   r)   r     s   r   )rW   )--optr_   r   rq   callzError loading argumentzApp.opt=['1', '2']zopt only accepts one value)r   rL   r   pytestZraises
SystemExitrm   Zget_recordsmessagelevelnorM   )Zcaplogr   r\   recordr   r(   r(   r)   test_cli_multi_scalar  s    ,r   c                   @   s   e Zd ZddiZdS )r   r   )z,traitlets.config.tests.test_application.Sub1zimport stringN)r   r   r    subcommandsr(   r(   r(   r)   r     s   r   c                   @   s   e Zd ZedZdS )r   FN)r   r   r    r   r   r(   r(   r(   r)   r     s   r   c                   @   s   e Zd ZdS )r   Nrg   r(   r(   r(   r)   r     s   r   c                   @   s"   e Zd Zedfdd dfdZdS )r   zApplication classc                 C   s   t | ddS )NT)r>   r   )r   )rootr(   r(   r)   <lambda>  rQ   zSub1.<lambda>factory)r   r   N)r   r   r    r   r   r(   r(   r(   r)   r     s   
r   c                       s$   e Zd ZdZdZ fddZ  ZS )DeprecatedAppFc                    sX   d _  fdd}tj jd|  t ||| W d    n1 sJ0    Y  d S )NTc                     s
   d _ d S )NT)parent_called)r   r@   r(   r)   _capture  s    z/DeprecatedApp._config_changed.<locals>._capturedebug)override_calledr   patchobjectrW   super_config_changed)rA   r$   oldnewr  	__class__r@   r)   r    s    zDeprecatedApp._config_changed)r   r   r    r  r   r  __classcell__r(   r(   r
  r)   r     s   r   c                  C   sD   t  } | jrJ | jrJ tdddii| _| js6J | js@J d S )NAr-   ry   )r   r  r   r   r   )r\   r(   r(   r)   test_deprecated_notifier  s    


r  c                   C   s   t t d S r   )r   r   r(   r(   r(   r)   test_help_output  s    r  c                   C   s   t t d S r   )r   r   r(   r(   r(   r)   test_help_all_output  s    r  c                  C   s4   t tjdtdg\} }}|dks$J d| vs0J d S )N-mz--show-configr   show_configr   sys
executabler   outerrecr(   r(   r)   test_show_config_cli  s    r  c                  C   s4   t tjdtdg\} }}|dks$J d| vs0J d S )Nr  z--show-config-jsonr   r  r  r  r(   r(   r)   test_show_config_json_cli  s    r  c                 C   s\   t  }d|j_|j t|dd}|  |  \}}d|v s@J d|v sLJ d|vsXJ d S )Nr   T)r   r  r3   zi = 5OtherApp)r   r3   r"   r  r   
readouterr)capsysr   r\   r  r  r(   r(   r)   test_show_config  s    r  c                 C   sR   t  }d|j_|j t|dd}|  |  \}}t|}t ||ksNJ d S )Nr   T)r   Zshow_config_json)r   r3   r"   r  r   r  r   loads)r  r   r\   r  r  Z	displayedr(   r(   r)   test_show_config_json  s    
r!  c                     s   ddl m ddlm} m} G fddd|G fddd| G  fdd	d	| }| }|d
g |jjjdks~J t	t
| dksJ d S )Nr   Int)r   r   c                       s   e Zd Z ddjddZdS )ztest_deep_alias.<locals>.Foor   )default_valueTr   N)r   r   r    r!   valr(   r"  r(   r)   r     s   r   c                       s   e Zd Z fddZ  ZS )ztest_deep_alias.<locals>.Barc                    s"   t  j|i |  | d| _d S r=   )r  __init__r?   rA   r   kwargs)r   r  r(   r)   r&    s    z%test_deep_alias.<locals>.Bar.__init__)r   r   r    r&  r  r(   )r   r
  r)   r*      s   r*   c                       s2   e Zd ZdZddiZgZ fddZ  ZS )z test_deep_alias.<locals>.TestApptestr%  zBar.Foo.valc                    s"   t  j|i |  | d| _d S r=   )r  r`   rC   r'  )r*   r  r(   r)   r`     s    z+test_deep_alias.<locals>.TestApp.initialize)r   r   r    r$   rI   rF   r`   r  r(   )r*   r   r
  r)   r     s   r   z--val=10rk   )	traitletsr#  Ztraitlets.configr   r   r`   rC   r?   r%  r   listZemit_alias_help)r   r   r   r\   r(   )r*   r   r#  r)   test_deep_alias  s    
r,  c                 C   s   | d }t ddddt|diddddgd	id
d}t|jjdksLJ |jd |jd t| }| dks~J W d   n1 s0    Y  |	 j
dksJ dS )z7We should be able to configure additional log handlers.log_filer   filezlogging.FileHandlerDEBUG)classlevelfilenamer   console)r1  rX   )versionrX   loggers)Zlogging_configr{   rY   warnz
info
warn
Nz[Application] WARNING | warn
)r   strr   rW   rX   rY   warningr   readr  r  )Ztmp_pathr  r-  r\   Z
log_handler(   r(   r)   test_logging_config  s,    
.r:  c                 C   s`   |  dd t  }d|vs"J d|vs.J |  dd t  }d|v sPJ d|v s\J dS )z7Ensure logging is correctly disabled for pythonw usage.z'traitlets.config.application.IS_PYTHONWTrX   r5  FN)setattrr   Zget_default_logging_config)monkeypatchr   r(   r(   r)   'test_get_default_logging_config_pythonw9  s    

r=  c                    s    g   fdd}|  d|  S )zCapture logging config events for DictConfigurator objects.

    This suppresses the event (so the configuration doesn't happen).

    Returns a list of (args, kwargs).
    c                     s     | |f d S r   )r   )r   r(  Zcallsr(   r)   
_configureP  s    z caplogconfig.<locals>._configurez)logging.config.DictConfigurator.configure)r;  )r<  r?  r(   r>  r)   caplogconfigF  s    r@  pypyzTest does not work on pypyr   c                 C   sR   t  }~t|dksJ |  \}}d|vs0J t  }d|_~t|dksNJ dS )zEnsure we don't try to open logs in order to close them (See #722).

    If you try to configure logging handlers whilst Python is shutting down
    you may get traceback.
    r   	TracebackTr   N)r   r   r  Z_logging_configured)r  r@  r\   r  r  r(   r(   r)   test_logging_teardown_on_error\  s    	rC  __main__)D__doc__r   r   r   rL   osr  r   tempfiler   Zunittestr   r   r   r*  r   r   r   r	   r
   r   r   r   r   Ztraitlets.config.applicationr   Ztraitlets.config.configurabler   Ztraitlets.config.loaderr   Ztraitlets.tests.utilsr   r   r   r   ImportErrorr   r   r   r   r*   r3   rR   rS   r   r   r   r   r   r   r  r  r  r  r  r  r!  r,  r:  r=  Zfixturer@  r   implementationr$   rC  r   Zlaunch_instancer(   r(   r(   r)   <module>   sh   ,/    	$


