o
    ȷeW                     @   s  d Z ddl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 ddlm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mZmZ d
dlmZ G dd de	ZdZdZ e!ddZe !ddZ G dd de	Z"G dd de"Z#dZ$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	Z)G d d! d!e)Z*G d"d# d#eZ+G d$d% d%e	Z,G d&d' d'eZ-G d(d) d)eZ.d*d+ Z/dS ),z'Tests for traitlets.config.configurable    N)TestCase)mark)Application)ConfigurableLoggingConfigurableSingletonConfigurable)Config)
get_logger)CaselessStrEnumDictEnumFloat	FuzzyEnumIntegerListSetUnicode_deprecations_shownvalidate   )expected_warningsc                   @   s<   e Zd ZedddjddZedddjddZedZ	d	S )
MyConfigurable   The integer a.helpTconfigg      ?zThe integer b.	no configN)
__name__
__module____qualname__r   tagar   br   c r&   r&   _/var/www/ideatree/venv/lib/python3.10/site-packages/traitlets/config/tests/test_configurable.pyr   $   s    r   zMyConfigurable(Configurable) options
------------------------------------
--MyConfigurable.a=<Integer>
    The integer a.
    Default: 1
--MyConfigurable.b=<Float>
    The integer b.
    Default: 1.0zMyConfigurable(Configurable) options
------------------------------------
--MyConfigurable.a=<Integer>
    The integer a.
    Current: 5
--MyConfigurable.b=<Float>
    The integer b.
    Current: 4.0z	<Integer>z<Int>c                   @   sN   e Zd ZedddjddZedjddZeg jddZ	e
 jddZdS )Foor   r   r   Tr   nopeN)r   r    r!   r   r"   r#   r   r$   r   flistr   fdictr&   r&   r&   r'   r(   A   s
    r(   c                   @   s   e Zd ZedddjddZeddjddZeg jddd	Z	eg d
jddd	Z
e jddd	Zeddddjddd	ZdS )BargotitzThe string b.r   Fr   zThe string c.T+)r   multiplicity)   r      r#   r$   r%   )r   0r1   N)r   r    r!   r   r"   r$   r   r%   r   bsetbset_valuesr   bdictbdict_valuesr&   r&   r&   r'   r,   H   s    r,   zFoo(Configurable) options
-------------------------
--Foo.a=<Int>
    The integer a.
    Default: 0
--Foo.b=<Unicode>
    Default: 'nope'
--Foo.fdict=<key-1>=<value-1>...
    Default: {}
--Foo.flist=<list-item-1>...
    Default: []a  Bar(Foo) options
----------------
--Bar.a=<Int>
    The integer a.
    Default: 0
--Bar.bdict <key-1>=<value-1>...
    Default: {}
--Bar.bdict_values <key-1>=<value-1>...
    Default: {1: 'a', '0': 'b', 5: 'c'}
--Bar.bset <set-item-1>...
    Default: set()
--Bar.bset_values <set-item-1>...
    Default: {1, 2, 5}
--Bar.c=<Float>
    The string c.
    Default: 0.0
--Bar.fdict=<key-1>=<value-1>...
    Default: {}
--Bar.flist=<list-item-1>...
    Default: []c                   @   s\   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S )TestConfigurablec                 C   sB   t  }t |jd}t |jd}| |j|j | |j|j d S )Nr   )r   r   assertEqual)selfc1c2c3r&   r&   r'   test_defaultt   s
   zTestConfigurable.test_defaultc                 C   s   t  }d|_d|_t|d}t|jd}t|jd}| |j| | |j| | |j| | |j|u  | |j|u  | |j|u  | |j|ju  | |j|ju  d S )Nfoobarr   )r   r>   r?   r   r   r8   
assertTrue)r9   r   r:   r;   r<   r&   r&   r'   test_custom{   s   
zTestConfigurable.test_customc                 C   sx   t  }d|j_d|j_t|d}t|jd}| |j|jj | |j|jj | |j|jj | |j|jj d S )Nr0          @r   )r   r   r#   r$   r   r8   )r9   r   r:   r;   r&   r&   r'   test_inheritance   s   
z!TestConfigurable.test_inheritancec                 C   s   t  }d|j_d|j_d|j_d|j_t|d}tdg t|jd}W d    n1 s.w   Y  | |jd | |jd | |jd | |jd d S )N
   wowlaterg      Y@r   `b` not recognizedr-   )	r   r(   r#   r$   r,   r%   r   r   r8   )r9   r   fr$   r&   r&   r'   test_parent   s   
zTestConfigurable.test_parentc                 C   sT   t  }d|j_d|j_td|d}| |jd | |j|jj | |jd d S )Nr0   rB   r   )r#   r   r   )r   r   r#   r$   r8   r%   r9   r   r%   r&   r&   r'   test_override1   s   zTestConfigurable.test_override1c                 C   s   t  }d|j_d|j_d|j_tdg t|d}W d    n1 s$w   Y  | |j|jj | |jd | |j|jj tdg tddd	|d
}W d    n1 sZw   Y  | |jd | |jd | |jd	 d S )Nr   org      $@rG   r   r-   r0   andg      4@)r#   r$   r%   r   )r   r(   r#   r,   r$   r%   r   r8   rJ   r&   r&   r'   test_override2   s    zTestConfigurable.test_override2c                 C   s4   |  t t |  t t |  t t d S N)r8   r   class_get_helpmc_helpr(   foo_helpr,   bar_helpr9   r&   r&   r'   	test_help   s   zTestConfigurable.test_helpc                 C   s"   t ddd}| t |t d S )Nr1      )r#   r$   )r   r8   rP   mc_help_inst)r9   instr&   r&   r'   test_help_inst   s   zTestConfigurable.test_help_instc                 C   st  G dd dt }d}d}d}d}| }| || | || | || | }| || | || | || | |||| | }| || | || | || G dd dt }	d	}
|	 }| || | || | || | |
| | ||
|| |	 }| || | || | || | |
| | ||
|| d S )
Nc                   @   s$   e Zd Zed ddjddZdS )zDTestConfigurable.test_generated_config_enum_comments.<locals>.MyConfChoice1 choice2Many choices.r   Tr   Nr   r    r!   r   splitr"   an_enumr&   r&   r&   r'   MyConf   s    r_   r[   z&Choices: any of ['Choice1', 'choice2']z3MyConf.an_enum : any of ``'Choice1'``|``'choice2'``or Nonec                   @   (   e Zd Zed ddddjddZdS )zETestConfigurable.test_generated_config_enum_comments.<locals>.MyConf2rZ   Tchoice2r[   
allow_nonedefault_valuer   r   Nr\   r&   r&   r&   r'   MyConf2       
rf   Default: 'choice2')r   rP   assertInassertNotInclass_config_sectionassertGreaterindexclass_config_rst_doc)r9   r_   help_strenum_choices_strrst_choices_stror_none_strcls_helpcls_cfgrst_helprf   defaults_strcls2_msgcls2_cfgr&   r&   r'   #test_generated_config_enum_comments   s@   z4TestConfigurable.test_generated_config_enum_commentsc                 C   sx  d}d}d}G dd dt }d}| }| || | || | || | || | |||| | }| || | || | || | || | |||| G dd dt }d	}| }	| ||	 | ||	 | ||	 | ||	 | |	||	| | }
| ||
 | ||
 | ||
 | ||
 | |
||
| d S )
Nr[   rh   r`   c                   @   ra   )zHTestConfigurable.test_generated_config_strenum_comments.<locals>.MyConf3rZ   Trb   r[   rc   r   N)r   r    r!   r
   r]   r"   r^   r&   r&   r&   r'   MyConf3  rg   rz   z9Choices: any of ['Choice1', 'choice2'] (case-insensitive)c                   @   ra   )zHTestConfigurable.test_generated_config_strenum_comments.<locals>.MyConf4rZ   Trb   r[   rc   r   N)r   r    r!   r   r]   r"   r^   r&   r&   r&   r'   MyConf4!  rg   r{   z>Choices: any case-insensitive prefix of ['Choice1', 'choice2'])r   rP   ri   rl   rm   rk   )r9   ro   rv   rr   rz   rp   cls3_msgcls3_cfgr{   cls4_msgcls4_cfgr&   r&   r'   &test_generated_config_strenum_comments   s>   z7TestConfigurable.test_generated_config_strenum_commentsN)r   r    r!   r=   rA   rC   rI   rK   rN   rU   rY   ry   r   r&   r&   r&   r'   r7   s   s    	9r7   c                   @      e Zd Zdd Zdd ZdS )TestSingletonConfigurablec                 C   sZ   G dd dt }| | d | }| | d | ||  | t jd  d S )Nc                   @      e Zd ZdS )z4TestSingletonConfigurable.test_instance.<locals>.FooNr   r    r!   r&   r&   r&   r'   r(   @      r(   FTr   r8   initializedinstance	_instance)r9   r(   r>   r&   r&   r'   test_instance?  s   z'TestSingletonConfigurable.test_instancec                 C   s   G dd dt }G dd d|}| | d | | d | }| | d | | d | ||j | ||j | t jd  d S )Nc                   @   r   )z7TestSingletonConfigurable.test_inheritance.<locals>.BarNr   r&   r&   r&   r'   r,   J  r   r,   c                   @   r   )z7TestSingletonConfigurable.test_inheritance.<locals>.BamNr   r&   r&   r&   r'   BamM  r   r   FTr   )r9   r,   r   bamr&   r&   r'   rC   I  s   z*TestSingletonConfigurable.test_inheritanceN)r   r    r!   r   rC   r&   r&   r&   r'   r   >  s    
r   c                   @   r   )TestLoggingConfigurablec                 C   s   G dd dt }G dd dt }t d}||d}||d}| |j| | |j| | }|||d}| |jt  | |j| d S )	Nc                   @   r   )z:TestLoggingConfigurable.test_parent_logger.<locals>.ParentNr   r&   r&   r&   r'   Parent\  r   r   c                   @   r   )z9TestLoggingConfigurable.test_parent_logger.<locals>.ChildNr   r&   r&   r&   r'   Child_  r   r   r   )logparent)r   r   )r   r	   getChildr8   r   )r9   r   r   r   r   childr&   r&   r'   test_parent_logger[  s   

z*TestLoggingConfigurable.test_parent_loggerc                 C   sD   G dd dt }G dd dt}| }||d}| |jt  d S )Nc                   @   r   )zLTestLoggingConfigurable.test_parent_not_logging_configurable.<locals>.ParentNr   r&   r&   r&   r'   r   o  r   r   c                   @   r   )zKTestLoggingConfigurable.test_parent_not_logging_configurable.<locals>.ChildNr   r&   r&   r&   r'   r   r  r   r   r   )r   r   r8   r   r	   )r9   r   r   r   r   r&   r&   r'   $test_parent_not_logging_configurablen  s
   
z<TestLoggingConfigurable.test_parent_not_logging_configurableN)r   r    r!   r   r   r&   r&   r&   r'   r   Z  s    r   c                   @   r   )MyParentNr   r&   r&   r&   r'   r   z  r   r   c                   @   r   )	MyParent2Nr   r&   r&   r&   r'   r   ~  r   r   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestParentConfigurablec                 C   sB   t ddddiii}t|d}t|d}| |j|jjjj d S Nr   r   r$   rB   r   r   )r   r   r   r8   r$   r   r9   cfgr   mycr&   r&   r'   test_parent_config     
	
z)TestParentConfigurable.test_parent_configc                 C   sB   t ddddiii}t|d}t|d}| |j|jjjj d S r   r   r   r   r8   r$   r   r   r   r&   r&   r'   test_parent_inheritance  r   z.TestParentConfigurable.test_parent_inheritancec                 C   sX   t ddddiiddidi}t|d}t|d}t|d}| |j|jjjjj d S )	Nr   r   r$   rB         @)r   r   r   r   )r   r   r   r   r8   r$   r   r9   r   parent2r   r   r&   r&   r'   test_multi_parent  s   


z(TestParentConfigurable.test_multi_parentc                 C   sR   t ddidddiidddiid}t|d}t|d}| |j|jjjj d S )	Nr$   rB   r   r         @r   r   r   r   r   )r   r   r   r8   r$   r   r   r&   r&   r'   test_parent_priority  s    

z+TestParentConfigurable.test_parent_priorityc                 C   sh   t ddidddiiddidddiidd}t|d	}t|d
}t|d
}| |j|jjjjj d S )Nr$   rB   r   r   r   g      @)r   r   r   r   r   r   r   r&   r&   r'   test_multi_parent_priority  s(   


z1TestParentConfigurable.test_multi_parent_priorityN)r   r    r!   r   r   r   r   r   r&   r&   r&   r'   r     s    r   c                   @   sN   e Zd Ze jddZdd Ze jddZdd Z	e
 jddZdd Zd	S )

ContainersTr   c                 C   s   dgS )Nr&   rT   r&   r&   r'   _lis_default     zContainers._lis_defaultc                 C   s   dhS )Nr#   r&   rT   r&   r&   r'   
_s_default  r   zContainers._s_defaultc                 C   s   ddiS )Nr#   r$   r&   rT   r&   r&   r'   
_d_default  s   zContainers._d_defaultN)r   r    r!   r   r"   lisr   r   sr   r   dr   r&   r&   r&   r'   r     s    r   c                   @   s|   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S )TestConfigContainersc                 C   sB   t  }|jjttd t|d}| |jttdd d S )Nr1   r   r   )r   r   r   extendlistranger8   r9   r%   objr&   r&   r'   test_extend  s   
z TestConfigContainers.test_extendc                 C   sF   t  }|jjdd |jjdd t|d}| |jg d d S )Nr   r#   r   r$   r   )r#   r$   r   )r   r   r   insertr8   r   r&   r&   r'   test_insert  s
   
z TestConfigContainers.test_insertc                 C   sJ   t  }|jjddg |jjddg t|d}| |jg d d S )Nr   r0   r   r   )r0   r   r   r0   r   )r   r   r   prependr8   r   r&   r&   r'   test_prepend  
   
z!TestConfigContainers.test_prependc                 C   sJ   t  }|jjddg |jjddg t|d}| |jg d d S )Nr   r0   r   r   )r   r0   r   r0   r   )r   r   r   r   r   r8   r   r&   r&   r'   test_prepend_extend  r   z(TestConfigContainers.test_prepend_extendc                 C   sR   t  }|jjddg |jjddg t|d}| |jdddgddg d S )Nr   r0   r   r   r   )r   r   r   appendr   r8   r   r&   r&   r'   test_append_extend  
   
z'TestConfigContainers.test_append_extendc                 C   sR   t  }|jjddg |jjddg t|d}| |jdddddgg d S )Nr0   r   r   r   r   )r   r   r   r   r   r8   r   r&   r&   r'   test_extend_append  r   z'TestConfigContainers.test_extend_appendc                 C   sH   t  }|jjdd |jjddg t|d}| |jg d d S )Nr   r   r0   r   r   )r   r   r0   r   )r   r   r   r   r   r8   r   r&   r&   r'   test_insert_extend"  s
   
z'TestConfigContainers.test_insert_extendc                 C   sH   t  }|jjh d |jjdh t|d}| |jh d d S )N>   r   r   r0   r   r   >   r#   r   r   r0   r   )r   r   r   updater8   r   r&   r&   r'   test_set_update)  s
   
z$TestConfigContainers.test_set_updatec                 C   sN   t  }|jjddi |jjddi t|d}| |jdddd d S )Nr%   r   erH   r   r$   )r#   r%   r   )r   r   r   r   r8   r   r&   r&   r'   test_dict_update0  s
   
z%TestConfigContainers.test_dict_updatec                 C   sp   t  }d|j_t|d}| |jd t  }d|j_|| | |jd d|j_|| | |jd d S )Nr1   r   rD      r   r   r#   r8   update_config)r9   r%   mr;   r&   r&   r'   test_update_twice7  s   


z&TestConfigContainers.test_update_twicec                 C   sJ   t  }d|j_t|d}| |jd d|j_|| | |jd dS )zCupdate_config with same config object still triggers config_changedr1   r   rD   Nr   )r9   r%   r   r&   r&   r'   test_update_selfF  s   

z%TestConfigContainers.test_update_selfc                    sz   G dd dt  G  fdddt}t }d|j_| }| |jd  j|d}| }| |j|j | |jd d S )Nc                   @   r   )z?TestConfigContainers.test_config_default.<locals>.SomeSingletonNr   r&   r&   r&   r'   SomeSingletonQ  r   r   c                       s&   e Zd Ze jddZ fddZdS )zETestConfigContainers.test_config_default.<locals>.DefaultConfigurableTr   c                          r	  jS t S rO   r   r   r   r   rT   r   r&   r'   _config_defaultW     
zUTestConfigContainers.test_config_default.<locals>.DefaultConfigurable._config_defaultN)r   r    r!   r   r"   r#   r   r&   r   r&   r'   DefaultConfigurableT  s    r   r1   r   r   )	r   r   r   r   r#   r8   r   assertIsr   r9   r   r%   d1singled2r&   r   r'   test_config_defaultP  s   z(TestConfigContainers.test_config_defaultc                    s   G dd dt  t  tg  G  fdddt}W d   n1 s%w   Y  t }d|j_| }| |jd  j	|d}| }| 
|j|j | |jd dS )	zDMake sure configurables work even with the deprecations in traitletsc                   @   r   )zJTestConfigContainers.test_config_default_deprecated.<locals>.SomeSingletonNr   r&   r&   r&   r'   r   k  r   r   c                       s"   e Zd ZeddZ fddZdS )zPTestConfigContainers.test_config_default_deprecated.<locals>.DefaultConfigurableTr   c                    r   rO   r   rT   r   r&   r'   r   u  r   z`TestConfigContainers.test_config_default_deprecated.<locals>.DefaultConfigurable._config_defaultN)r   r    r!   r   r#   r   r&   r   r&   r'   r   r  s    
r   Nr1   r   r   )r   r   clearr   r   r   r   r#   r8   r   r   r   r   r&   r   r'   test_config_default_deprecatedh  s   

z3TestConfigContainers.test_config_default_deprecatedc                 C   sp   G dd dt }t }d|j_d|j_|dd|d}|jdks!J |jdks(J |jdks/J |jdks6J d S )Nc                   @   sH   e Zd ZedddZedddZedddZedZeddd Z	dS )	z:TestConfigContainers.test_kwarg_config_priority.<locals>.AdefaultTr   neverr$   c                 S   s   | j | _|jS rO   )r%   c_during_configvalue)r9   proposalr&   r&   r'   	_record_c  s   zDTestConfigContainers.test_kwarg_config_priority.<locals>.A._record_cN)
r   r    r!   r   r#   r$   r%   r   r   r   r&   r&   r&   r'   A  s    r   za-configzb-configza-kwargzc-kwarg)r#   r%   r   )r   r   r   r#   r$   r%   r   )r9   r   r   r   r&   r&   r'   test_kwarg_config_priority  s   z/TestConfigContainers.test_kwarg_config_priorityN)r   r    r!   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r&   r&   r&   r'   r     s    
r   c                   @   s:   e Zd ZG dd deZejeed dddd Z	dS )	
TestLoggerc                   @   s*   e Zd ZeddZeddZeddZdS )zTestLogger.ATr   N)r   r    r!   r   r>   r?   bazr&   r&   r&   r'   r     s    

r   
assertLogszrequires TestCase.assertLogs)reasonc                 C   s^  t d}tdddii}| |t j}tj||d W d    n1 s&w   Y  d|j}| 	d| | 	d| tdd	dii}| |t j}tj||d W d    n1 s^w   Y  d|j}| 	d
| | 	d| tdddii}| |t j}tj||d W d    n1 sw   Y  d|j}| 	d| | 
d| d S )Ntest_warn_matchr   batr1   )r   r   
z Did you mean one of: `bar, baz`?z*Config option `bat` not recognized by `A`.foolz+Config option `fool` not recognized by `A`.zDid you mean `foo`?totally_wrongz4Config option `totally_wrong` not recognized by `A`.zDid you mean)logging	getLoggerr   r   WARNINGr   r   joinoutputri   rj   )r9   loggerr   capturedr   r&   r&   r'   r     s,   
zTestLogger.test_warn_matchN)
r   r    r!   r   r   r   skipifhasattrr   r   r&   r&   r&   r'   r     s    r   c                 C   sP   t d}t |ddi}t|t jd}d|_|jd d| j	v s&J d S )Nr   keyadapted)r   	log_levelz%(key)s %(message)sztest messagezadapted test message)
r   r   LoggerAdapterr   INFO
log_formatr   info
readouterrerr)caplogcapsysr   adapterappr&   r&   r'   test_logger_adapter  s   
r  )0__doc__r   unittestr   pytestr   traitlets.config.applicationr   traitlets.config.configurabler   r   r   traitlets.config.loaderr   traitlets.logr	   traitlets.traitletsr
   r   r   r   r   r   r   r   r   r   r   tests._warningsr   r   rQ   rW   replacer(   r,   rR   rS   r7   r   r   r   r   r   r   r   r   r  r&   r&   r&   r'   <module>   s>    4	
	 L e +"