ó
;a›]c           @   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 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 d Z d Z d	 Z d d l Z e j d
 ƒ Z e j d ƒ d e	 f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e	 f d „  ƒ  YZ d e	 f d „  ƒ  YZ d e f d „  ƒ  YZ  d e	 f d „  ƒ  YZ! d S(   s!   Tests for traitlets.config.loaderiÿÿÿÿN(   t   mkstemp(   t   TestCase(   t   skip(   t   Configt   LazyConfigValuet   PyFileConfigLoadert   JSONFileConfigLoadert   KeyValueConfigLoadert   ArgParseConfigLoadert   KVArgParseConfigLoadert   ConfigErrorsj   
c = get_config()
c.a=10
c.b=20
c.Foo.Bar.value=10
c.Foo.Bam.value=list(range(10))
c.D.C.value='hi there'
sÜ   
{
  "version": 1,
  "a": 10,
  "b": 20,
  "Foo": {
    "Bam": {
      "value": [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
    },
    "Bar": {
      "value": 10
    }
  },
  "D": {
    "C": {
      "value": "hi there"
    }
  }
}
s   
{
  "version": 2
}
t   devnulli    t
   TestFileCLc           B   sG   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s   |  j  | j d ƒ |  j  | j d ƒ |  j  | j j j d ƒ |  j  | j j j t t d ƒ ƒ ƒ |  j  | j	 j
 j d ƒ d  S(   Ni
   i   s   hi there(   t   assertEqualt   at   bt   Foot   Bart   valuet   Bamt   listt   ranget   Dt   C(   t   selft   config(    (    sA   lib/python2.7/site-packages/traitlets/config/tests/test_loader.pyt   _check_confH   s
    %c         C   sj   t  d ƒ \ } } t j | d ƒ } | j t ƒ | j ƒ  t | d t ƒ} | j ƒ  } |  j	 | ƒ d  S(   Ns   .pyt   wt   log(
   R    t   ost   fdopent   writet   pyfilet   closeR   R   t   load_configR   (   R   t   fdt   fnamet   ft   clR   (    (    sA   lib/python2.7/site-packages/traitlets/config/tests/test_loader.pyt   test_pythonO   s    
c         C   sj   t  d ƒ \ } } t j | d ƒ } | j t ƒ | j ƒ  t | d t ƒ} | j ƒ  } |  j	 | ƒ d  S(   Ns   .jsonR   R   (
   R    R   R   R   t	   json1fileR!   R   R   R"   R   (   R   R#   R$   R%   R&   R   (    (    sA   lib/python2.7/site-packages/traitlets/config/tests/test_loader.pyt	   test_jsonY   s    
c         C   s¶   t  d ƒ \ } } t j | d ƒ } | j d ƒ | j ƒ  t | d t ƒ} d } |  } | | j _ Wd  QX|  j	 | j
 j j | ƒ t | d t ƒ} |  j	 | j
 j j | ƒ d  S(   Ns   .jsonR   s   {}R   t   context_manager(   R    R   R   R   R!   R   R   t   MyAttrR   R   R   (   R   R#   R$   R%   R&   R   t   ct   cl2(    (    sA   lib/python2.7/site-packages/traitlets/config/tests/test_loader.pyt   test_context_managerc   s    
	c         C   sñ   t  d ƒ \ } } t j | d ƒ } | j d ƒ | j ƒ  t | d t ƒ } d | j _ Wd  QX|  j	 t
 ƒ / t | d t ƒ } d „  | j _ Wd  QXWd  QXt | d t ƒ} | j ƒ  } | j j d k sØ t ‚ d | j k sí t ‚ d  S(   Ns   .jsonR   s   {}R   i   c         S   s   |  S(   N(    (   t   x(    (    sA   lib/python2.7/site-packages/traitlets/config/tests/test_loader.pyt   <lambda>‚   t    t	   cant_json(   R    R   R   R   R!   R   R   t   AR   t   assertRaisest	   TypeErrorR2   R"   t   AssertionError(   R   R#   R$   R%   R   t   loadert   cfg(    (    sA   lib/python2.7/site-packages/traitlets/config/tests/test_loader.pyt   test_json_context_bad_writew   s    
c         C   s  t  ƒ  } t  ƒ  } |  j | j | ƒ i  ƒ d | j _ d | j _ |  j | j | ƒ i  ƒ d | j _ |  j | j | ƒ i  ƒ d | j _ |  j | j | ƒ i i d d 6d 6ƒ |  j | j | ƒ i i d d 6d 6ƒ d | j _ |  j | j | ƒ i i d d 6d	 d
 6d 6ƒ d  S(   Ni   i   i    s   1 ignored, using 0t   trait1R3   s   0 ignored, using 1i   s   2 ignored, using 3t   trait2(   R   R   t
   collisionsR3   R:   R;   (   R   R   R   (    (    sA   lib/python2.7/site-packages/traitlets/config/tests/test_loader.pyt   test_collision‰   s(    		c         C   sq   t  d ƒ \ } } t j | d ƒ } | j t ƒ | j ƒ  t | d t ƒ} |  j t	 ƒ  | j
 ƒ  Wd  QXd  S(   Ns   .jsonR   R   (   R    R   R   R   t	   json2fileR!   R   R   R4   t
   ValueErrorR"   (   R   R#   R$   R%   R&   (    (    sA   lib/python2.7/site-packages/traitlets/config/tests/test_loader.pyt   test_v2raise¥   s    
(	   t   __name__t
   __module__R   R'   R)   R.   R9   R=   R@   (    (    (    sA   lib/python2.7/site-packages/traitlets/config/tests/test_loader.pyR   F   s   		
	
			t	   MyLoader1c           B   s   e  Z d d d  „ Z RS(   c         C   sn   |  j  } | j d d d d d t ƒ| j d d d d t ƒ| j d d d	 d
 d ƒ| j d d t ƒd  S(   Ns   -fs   --foot   dests
   Global.foot   types   -bs   MyClass.bars   -nt   nt   actiont
   store_trues
   Global.bam(   t   parsert   add_argumentt   strt   int(   R   t   aliasest   flagst   p(    (    sA   lib/python2.7/site-packages/traitlets/config/tests/test_loader.pyt   _add_arguments±   s
    	N(   RA   RB   t   NoneRP   (    (    (    sA   lib/python2.7/site-packages/traitlets/config/tests/test_loader.pyRC   °   s   t	   MyLoader2c           B   s   e  Z d d d  „ Z RS(   c         C   sW   |  j  j d d ƒ } | j d ƒ } | j d d d ƒ| j d ƒ } | j d ƒ d  S(   NRD   t   subparser_namet   1s   -xs   Global.xt   2t   y(   RI   t   add_subparserst
   add_parserRJ   (   R   RM   RN   t
   subparserst
   subparser1t
   subparser2(    (    sA   lib/python2.7/site-packages/traitlets/config/tests/test_loader.pyRP   ¹   s
    N(   RA   RB   RQ   RP   (    (    (    sA   lib/python2.7/site-packages/traitlets/config/tests/test_loader.pyRR   ¸   s   t   TestArgParseCLc           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   sà   t  ƒ  } | j d j ƒ  ƒ } |  j | j j d ƒ |  j | j j d ƒ |  j | j t	 ƒ |  j | j j
 d ƒ | j d g ƒ } |  j t | j ƒ  ƒ d g ƒ |  j t | j j ƒ  ƒ d g ƒ |  j | j j
 d ƒ d  S(   Ns   -f hi -b 10 -n wowt   hii
   t   wowt   Globalt   bam(   RC   R"   t   splitR   R_   t   foot   MyClasst   barRF   t   TrueR`   R   t   keys(   R   R&   R   (    (    sA   lib/python2.7/site-packages/traitlets/config/tests/test_loader.pyt
   test_basicÂ   s    	"c         C   s†   t  ƒ  } | j d j ƒ  ƒ } |  j | j d ƒ |  j | j d ƒ | j d j ƒ  ƒ } |  j | j d ƒ |  j | j j d ƒ d  S(   Ns	   2 frobbleRU   t   frobbles   1 -x frobbleRT   (   RR   R"   Ra   R   RS   RV   R_   R/   (   R   R&   R   (    (    sA   lib/python2.7/site-packages/traitlets/config/tests/test_loader.pyt   test_add_argumentsÎ   s    	c         C   sz   t  d d j ƒ  ƒ } | j ƒ  } |  j | j j d ƒ |  j | j j d ƒ |  j | j t	 ƒ |  j | j j
 d ƒ d  S(   Nt   argvs   -f hi -b 10 -n wowR]   i
   R^   (   RC   Ra   R"   R   R_   Rb   Rc   Rd   RF   Re   R`   (   R   R&   R   (    (    sA   lib/python2.7/site-packages/traitlets/config/tests/test_loader.pyt	   test_argv×   s    (   RA   RB   Rg   Ri   Rk   (    (    (    sA   lib/python2.7/site-packages/traitlets/config/tests/test_loader.pyR\   À   s   			t   TestKeyValueCLc           B   sM   e  Z e Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 RS(   c         C   ss   |  j  d t ƒ } | j d j ƒ  ƒ } |  j | j j d ƒ |  j | j j d ƒ |  j | j j d d g ƒ d  S(   NR   sH   --Class.str_trait=all --Class.int_trait=5 --Class.list_trait=["hello",5]t   alli   t   hello(	   t   klassR   R"   Ra   R   t   Classt	   str_traitt	   int_traitt
   list_trait(   R   R&   R   (    (    sA   lib/python2.7/site-packages/traitlets/config/tests/test_loader.pyt	   test_evalã   s
    c         C   sÔ   |  j  d t ƒ } g  t j d ƒ D]# } | j d ƒ r" d | d ^ q" } | GH| j | ƒ } |  j | j d ƒ |  j | j d ƒ |  j | j	 j
 j d ƒ |  j | j	 j j d ƒ |  j | j j j d	 ƒ d  S(
   NR   s   
s   c.s   --i   i
   i   s   list(range(10))s   hi there(   Ro   R   R    Ra   t
   startswithR"   R   R   R   R   R   R   R   R   R   (   R   R&   t   sRj   R   (    (    sA   lib/python2.7/site-packages/traitlets/config/tests/test_loader.pyRg   ê   s    9c         C   s§   |  j  d t ƒ } d d d d g } | j | ƒ } |  j | j t j j d ƒ ƒ |  j | j t j j d ƒ ƒ |  j | j	 t j j d ƒ ƒ |  j | j
 d ƒ d  S(	   NR   s   --a=~/1/2/3s   --b=~s   --c=~/s   --d="~/"s   ~/1/2/3t   ~s   ~/(   Ro   R   R"   R   R   R   t   patht
   expanduserR   R,   t   d(   R   R&   Rj   R   (    (    sA   lib/python2.7/site-packages/traitlets/config/tests/test_loader.pyt   test_expanduserö   s    c         C   s¡   |  j  d t ƒ } | j d d d d g ƒ } |  j | j d d g ƒ |  j | j d ƒ |  j | j d ƒ | j d d d g ƒ } |  j | j d d g ƒ d  S(	   NR   s   --a=5R   s   --c=10Rz   i   i
   s   --(   Ro   R   R"   R   t
   extra_argsR   R,   (   R   R&   R   (    (    sA   lib/python2.7/site-packages/traitlets/config/tests/test_loader.pyt   test_extra_argsÿ   s    c         C   sA   |  j  d t ƒ } d g } | j | ƒ } |  j | j d ƒ d  S(   NR   u   --a=Ã©psÃ®lÃ¶nu
   Ã©psÃ®lÃ¶n(   Ro   R   R"   R   R   (   R   R&   Rj   R   (    (    sA   lib/python2.7/site-packages/traitlets/config/tests/test_loader.pyt   test_unicode_args  s    	c         C   s€   d } y | j  t j j ƒ } Wn# t t f k
 rD t d ƒ ‚ n X|  j d t ƒ } | j	 | g ƒ } |  j
 | j d ƒ d  S(   Nu   --a=Ã©s$   sys.stdin.encoding can't handle 'Ã©'R   u   Ã©(   t   encodet   syst   stdint   encodingR5   t   UnicodeEncodeErrorR   Ro   R   R"   R   R   (   R   t   uargt   bargR&   R   (    (    sA   lib/python2.7/site-packages/traitlets/config/tests/test_loader.pyt   test_unicode_bytes_args  s    c         C   sS   |  j  d t ƒ } d g } | j | d t d d ƒ ƒ} |  j | j j d ƒ d  S(   NR   u   --a=Ã©psÃ®lÃ¶nRM   R   s   A.au
   Ã©psÃ®lÃ¶n(   Ro   R   R"   t   dictR   R3   R   (   R   R&   Rj   R   (    (    sA   lib/python2.7/site-packages/traitlets/config/tests/test_loader.pyt   test_unicode_alias  s    	(   RA   RB   R   Ro   Rt   Rg   R{   R}   R~   R†   Rˆ   (    (    (    sA   lib/python2.7/site-packages/traitlets/config/tests/test_loader.pyRl   à   s   								t   TestArgParseKVCLc           B   s    e  Z e Z d  „  Z d „  Z RS(   c         C   s„   |  j  d t ƒ } d d d d g } | j | d t d d d	 d
 ƒ ƒ} |  j | j j t j j	 d ƒ ƒ |  j | j j
 d ƒ d  S(   NR   s   -as   ~/1/2/3s   --bs	   '~/1/2/3'RM   R   s   A.aR   s   A.b(   Ro   R   R"   R‡   R   R3   R   R   Rx   Ry   R   (   R   R&   Rj   R   (    (    sA   lib/python2.7/site-packages/traitlets/config/tests/test_loader.pyt   test_expanduser2#  s
    $"c         C   sV   |  j  d t ƒ } d d g } | j | d t d d ƒ ƒ} |  j | j j d ƒ d  S(   NR   s   -cs   a=5RM   R,   s   A.cu   a=5(   Ro   R   R"   R‡   R   R3   R,   (   R   R&   Rj   R   (    (    sA   lib/python2.7/site-packages/traitlets/config/tests/test_loader.pyRt   *  s    (   RA   RB   R	   Ro   RŠ   Rt   (    (    (    sA   lib/python2.7/site-packages/traitlets/config/tests/test_loader.pyR‰      s   	t
   TestConfigc           B   s¡   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s?   t  ƒ  } d | _ |  j | j d ƒ |  j d | k t ƒ d  S(   Ni
   R   (   R   R   R   t   False(   R   R,   (    (    sA   lib/python2.7/site-packages/traitlets/config/tests/test_loader.pyt   test_setget3  s    		c         C   sœ   t  ƒ  } |  j d | ƒ | j d ƒ s/ t ‚ | j } d | _ |  j d | ƒ | j d ƒ sf t ‚ |  j | j j d ƒ | ` |  j | j t  ƒ  ƒ d  S(   NR3   s   hi there(   R   t   assertNotInt   _has_sectionR6   R3   Rb   t   assertInR   (   R   R,   R3   (    (    sA   lib/python2.7/site-packages/traitlets/config/tests/test_loader.pyt   test_auto_section9  s    			c         C   s   t  ƒ  } t  ƒ  } d | _ d | j _ | j | ƒ |  j | j j d ƒ |  j | j d ƒ d | j _ | j | ƒ |  j | j j d ƒ d  S(   Ni
   (   R   Rd   R   t   mergeR   R   (   R   t   c1t   c2(    (    sA   lib/python2.7/site-packages/traitlets/config/tests/test_loader.pyt   test_merge_doesnt_existE  s    			c         C   sÊ   t  ƒ  } t  ƒ  } d | j _ d | j _ d | j _ d | j _ | j | ƒ |  j | j j d ƒ |  j | j j d ƒ |  j | j j d ƒ d | j j _ | j | ƒ |  j | j j j d ƒ d  S(   Ni
   i   i   i(   (   R   R   Rd   R`   R^   R’   R   R   (   R   R“   R”   (    (    sA   lib/python2.7/site-packages/traitlets/config/tests/test_loader.pyt   test_merge_existsQ  s    		c         C   s	  t  ƒ  } d | j _ d | j _ d | _ t d ƒ | _ t j d ƒ | j	 _
 t j d ƒ | j	 _ t j | ƒ } |  j | | ƒ |  j | | k	 ƒ |  j | j | j k	 ƒ |  j | j	 | j	 k	 ƒ |  j | j	 j
 | j	 j
 k ƒ |  j | j	 j | j	 j k ƒ d  S(   Ni
   i   t   asdft   test(   R   R   Rd   R`   R   R   R   t   loggingt   Loggert   Testt   loggert	   getLoggert
   get_loggert   copyt   deepcopyR   t
   assertTrue(   R   R“   R”   (    (    sA   lib/python2.7/site-packages/traitlets/config/tests/test_loader.pyt   test_deepcopy`  s    		c         C   s   t  ƒ  } d | _ d  S(   Nt   json(   R   t   format(   R   R“   (    (    sA   lib/python2.7/site-packages/traitlets/config/tests/test_loader.pyt   test_builtinp  s    	c         C   sJ   t  i i d d 6d 6ƒ } |  j | j j t  ƒ |  j | j j d ƒ d  S(   Ni   Rd   R   (   R   R   R   t	   __class__Rd   (   R   R“   (    (    sA   lib/python2.7/site-packages/traitlets/config/tests/test_loader.pyt   test_fromdictt  s    c         C   s`   t  ƒ  } t  i i d d 6d 6ƒ } | j | ƒ |  j | j j t  ƒ |  j | j j d ƒ d  S(   Ni   Rd   R   (   R   R’   R   R   R¦   Rd   (   R   R“   R”   (    (    sA   lib/python2.7/site-packages/traitlets/config/tests/test_loader.pyt   test_fromdictmergey  s
    	c         C   sš   t  i i d d 6d 6ƒ } t  i i d d 6d 6ƒ } | j | ƒ |  j | j j t  ƒ |  j | j j d ƒ |  j | j j d ƒ |  j d | j ƒ d  S(   Ni   t   bazR   i   Rd   (   R   R’   R   R   R¦   Rd   R©   RŽ   (   R   R“   R”   (    (    sA   lib/python2.7/site-packages/traitlets/config/tests/test_loader.pyt   test_fromdictmerge2€  s    c         C   sx   t  i i d d 6d 6ƒ } t  i i d d 6d 6ƒ } |  j d | ƒ |  j d | ƒ |  j d | ƒ |  j d | ƒ d  S(   Ni   R©   R   i   Rd   s   Foo.bazs   Foo.bar(   R   R   RŽ   (   R   R“   R”   (    (    sA   lib/python2.7/site-packages/traitlets/config/tests/test_loader.pyt   test_contains‰  s    c         C   sG   t  ƒ  } d | j _ t j | ƒ } t j | ƒ } |  j | | ƒ d  S(   Ni   (   R   R   Rd   t   picklet   dumpst   loadsR   (   R   R8   t   pcfgt   cfg2(    (    sA   lib/python2.7/site-packages/traitlets/config/tests/test_loader.pyt   test_pickle_config‘  s
    	c         C   sK   t  ƒ  } |  j d | ƒ | j } t | t  ƒ s7 t ‚ |  j d | ƒ d  S(   NR   (   R   RŽ   R   t
   isinstanceR6   R   (   R   R8   R   (    (    sA   lib/python2.7/site-packages/traitlets/config/tests/test_loader.pyt   test_getattr_section˜  s
    		c         C   sL   t  ƒ  } |  j d | ƒ | d } t | t  ƒ s8 t ‚ |  j d | ƒ d  S(   NR   (   R   RŽ   R²   R6   R   (   R   R8   R   (    (    sA   lib/python2.7/site-packages/traitlets/config/tests/test_loader.pyt   test_getitem_sectionŸ  s
    	
c         C   sK   t  ƒ  } |  j d | ƒ | j } t | t ƒ s7 t ‚ |  j d | ƒ d  S(   NRb   (   R   RŽ   Rb   R²   R   R6   R   (   R   R8   Rb   (    (    sA   lib/python2.7/site-packages/traitlets/config/tests/test_loader.pyt   test_getattr_not_section¦  s
    		c         C   sb   t  ƒ  } |  j d | ƒ |  j t ƒ  | j } Wd  QX|  j d | ƒ |  j t | ƒ d ƒ d  S(   Nt   _repr_html_i    (   R   RŽ   R4   t   AttributeErrorR¶   R   t   len(   R   R8   t   _(    (    sA   lib/python2.7/site-packages/traitlets/config/tests/test_loader.pyt   test_getattr_private_missing­  s    	c         C   sL   t  ƒ  } |  j d | ƒ | d } t | t ƒ s8 t ‚ |  j d | ƒ d  S(   NRb   (   R   RŽ   R²   R   R6   R   (   R   R8   Rb   (    (    sA   lib/python2.7/site-packages/traitlets/config/tests/test_loader.pyt   test_getitem_not_sectionµ  s
    	
c         C   sŠ   t  ƒ  } t  ƒ  } g  | j _ | j | ƒ | j j j d ƒ |  j | j | j ƒ |  j | j j d g ƒ |  j | j j d g ƒ d  S(   Ni   (   R   R   t   traitR’   t   appendt   assertIsR   (   R   R,   R”   (    (    sA   lib/python2.7/site-packages/traitlets/config/tests/test_loader.pyt   test_merge_no_copies¼  s    		(   RA   RB   R   R‘   R•   R–   R¢   R¥   R§   R¨   Rª   R«   R±   R³   R´   Rµ   Rº   R»   R¿   (    (    (    sA   lib/python2.7/site-packages/traitlets/config/tests/test_loader.pyR‹   1  s"   																	("   t   __doc__RŸ   R™   R   R¬   R€   t   tempfileR    t   unittestR   t   pytestR   t   traitlets.config.loaderR   R   R   R   R   R   R	   R
   R    R(   R>   R   R   t   setLevelR   RC   RR   R\   Rl   R‰   R‹   (    (    (    sA   lib/python2.7/site-packages/traitlets/config/tests/test_loader.pyt   <module>   s,   :j @