ó
;a›]c           @   sµ  d  Z  d d l Z d d l Z d d l Z d d l m Z d d l m Z y d d l m Z Wn e	 k
 r} d d l Z n Xe j
 j Z d d l m Z d d l m Z d d l m Z d d	 l 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 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 „  Z% d „  Z& e' d k r±e" j( ƒ  n  d S(   s4   
Tests for traitlets.config.application.Application
iÿÿÿÿN(   t   StringIO(   t   TestCase(   t   mock(   t   mark(   t   Configurable(   t   Config(   t   check_help_outputt   check_help_all_output(   t   Application(   t   TemporaryDirectory(   t   Boolt   Unicodet   Integert   Listt   Dictt   Fooc           B   sb   e  Z e d  d d ƒj d e ƒ Z e d d d ƒj d e ƒ Z e d d d ƒj d e ƒ Z RS(   i    t   helps   The integer i.t   configi   s   The integer j.u   Brians   First name.(	   t   __name__t
   __module__R   t   tagt   Truet   it   jR   t   name(    (    (    sF   lib/python2.7/site-packages/traitlets/config/tests/test_application.pyR   &   s   t   Barc           B   sD   e  Z e d  d d ƒj d e ƒ Z e e d d ƒj d e ƒ Z RS(   i    R   s   The integer b.R   s   Enable bar.(   R   R   R   R   R   t   bR
   t   enabled(    (    (    sF   lib/python2.7/site-packages/traitlets/config/tests/test_application.pyR   -   s   t   MyAppc           B   s  e  Z e d  ƒ Z e e d d ƒj d e ƒ Z e	 e
 e g ƒ Z e d d d ƒj d e ƒ Z e d d e d d ƒZ e i d d	 6d
 d 6d d 6d d 6d d 6ƒ Z e e d i i e d 6d 6d f d i i e d 6d 6d f d i i e j d 6d 6d f ƒ ƒ Z d „  Z d „  Z RS(   u   myappR   s   Is the app running?R   u    s   Load this config fileu    yes the name is wrong on purposesA   Should print a warning if `MyApp.warn-typo=...` command is passeds   Foo.iR   s   Foo.jR   s   Foo.nameR   s   Bar.enabledR   s   Application.log_levels	   log-levelt   enableR   s   Set Bar.enabled to Truet   disables   Set Bar.enabled to Falset   critt	   log_levelR   s   set level=CRITICALc         C   s   t  d |  ƒ |  _ d  S(   Nt   parent(   R   t   foo(   t   self(    (    sF   lib/python2.7/site-packages/traitlets/config/tests/test_application.pyt   init_fooK   s    c         C   s   t  d |  ƒ |  _ d  S(   NR!   (   R   t   bar(   R#   (    (    sF   lib/python2.7/site-packages/traitlets/config/tests/test_application.pyt   init_barN   s    (   R   R   R   R   R
   t   FalseR   R   t   runningR   R   R   t   classest   config_filet	   warn_tpyoR   t   aliasest   dictt   loggingt   CRITICALt   flagsR$   R&   (    (    (    sF   lib/python2.7/site-packages/traitlets/config/tests/test_application.pyR   3   s$   	#	t   TestApplicationc           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 d „  Z e j e e d ƒ d d ƒd „  ƒ Z e j e e d ƒ d d ƒd „  ƒ Z d „  Z d „  Z RS(   c         C   sw   t  ƒ  } t d t j ƒ } t j | ƒ } | g | j _ d | _ d | _ | j j	 d ƒ d | j
 ƒ  k ss t ‚ d  S(   NR    s   %(message)ss   %Y-%m-%d %H:%Mt   hello(   R    R   R.   t   INFOt   StreamHandlert   logt   handlerst
   log_formatt   log_datefmtt   infot   getvaluet   AssertionError(   R#   t   streamt   appt   handler(    (    sF   lib/python2.7/site-packages/traitlets/config/tests/test_application.pyt   test_logT   s    			c         C   sb   t  ƒ  } |  j | j d ƒ |  j | j t ƒ |  j | j t  t t g ƒ |  j | j d ƒ d  S(   Nu   myappu    (	   R   t   assertEqualR   R(   R'   R)   R   R   R*   (   R#   R=   (    (    sF   lib/python2.7/site-packages/traitlets/config/tests/test_application.pyt
   test_basic_   s
    	c         C   s‡   t  ƒ  } | j d d d d g ƒ | j } |  j | j j d ƒ |  j | j j d ƒ |  j | j j t	 ƒ |  j | j  j
 d ƒ d  S(   Ns   --i=10s
   --Foo.j=10s   --enabled=Falses   --log-level=50i
   i2   (   R   t   parse_command_lineR   R@   R   R   R   R   R   R'   R    (   R#   R=   R   (    (    sF   lib/python2.7/site-packages/traitlets/config/tests/test_application.pyt   test_configf   s    		c         C   s|   t  ƒ  } | j d d d d g ƒ | j ƒ  | j ƒ  |  j | j j d ƒ |  j | j j d ƒ |  j | j j	 t
 ƒ d  S(   Ns   --i=10s
   --Foo.j=10s   --enabled=Falses   --log-level=50i
   (   R   RB   R$   R&   R@   R"   R   R   R%   R   R'   (   R#   R=   (    (    sF   lib/python2.7/site-packages/traitlets/config/tests/test_application.pyt   test_config_propagationo   s    	

c         C   s"  d } d t  f d „  ƒ  Y} | ƒ  } t ƒ  î } t | | ƒ } t | d ƒ  } | j d d g ƒ Wd QX| j d g ƒ d	 | j j k s“ t ‚ | j j j	 d
 k s® t ‚ | j	 d
 k sÃ t ‚ | j
 | d | g ƒ| j sè t ‚ | j j j	 d
 k st ‚ | j	 d
 k st ‚ Wd QXd S(   s<   Test that loading config files does not override CLI optionss	   config.pyt   TestAppc           B   s?   e  Z e ƒ  j d  e ƒ Z e ƒ  j d  e ƒ Z i d d 6Z RS(   R   s   TestApp.valuet   v(	   R   R   R   R   R   t   valueR
   t   config_file_loadedR,   (    (    (    sF   lib/python2.7/site-packages/traitlets/config/tests/test_application.pyRE   {   s   t   ws    c.TestApp.value = 'config file'
s$   c.TestApp.config_file_loaded = True
Ns   --v=cliRG   t   clit   path(   R   R	   t   pjoint   opent
   writelinesRB   R   RE   R;   RG   t   load_config_fileRH   (   R#   R   RE   R=   t   tdR*   t   f(    (    sF   lib/python2.7/site-packages/traitlets/config/tests/test_application.pyt   test_cli_priorityx   s"    	c         C   s8  d } d t  f d „  ƒ  Y} | ƒ  } t ƒ  } t | | ƒ } t | d ƒ  } | j d d g ƒ Wd  QX| j d g ƒ | j } d | j j k sœ t ‚ | j j j	 d	 k s· t ‚ | j	 d	 k sÌ t ‚ | j
 | d
 | g ƒ| j sñ t ‚ | j | ƒ | j j j	 d	 k st ‚ | j	 d	 k s.t ‚ Wd  QXd  S(   Ns	   config.pyRE   c           B   s?   e  Z e ƒ  j d  e ƒ Z e ƒ  j d  e ƒ Z i d d 6Z RS(   R   s   TestApp.valueRF   (	   R   R   R   R   R   RG   R
   RH   R,   (    (    (    sF   lib/python2.7/site-packages/traitlets/config/tests/test_application.pyRE   —   s   RI   s    c.TestApp.value = 'config file'
s$   c.TestApp.config_file_loaded = True
s   --v=cliRG   RJ   RK   (   R   R	   RL   RM   RN   RB   R   RE   R;   RG   RO   RH   t   update_config(   R#   R   RE   R=   RP   R*   RQ   t
   cli_config(    (    sF   lib/python2.7/site-packages/traitlets/config/tests/test_application.pyt   test_ipython_cli_priority’   s&    		c         C   sm   t  ƒ  } | j d g ƒ | j ƒ  |  j | j j t ƒ | j d g ƒ | j ƒ  |  j | j j t ƒ d  S(   Ns	   --disables   --enable(   R   RB   R&   R@   R%   R   R'   R   (   R#   R=   (    (    sF   lib/python2.7/site-packages/traitlets/config/tests/test_application.pyt
   test_flagsµ   s    	

c         C   s`   t  ƒ  } | j d d g ƒ | j ƒ  |  j | j j d ƒ | j ƒ  |  j | j j d ƒ d  S(   Ns   --i=5s   --j=10i   i
   (   R   RB   R$   R@   R"   R   R   (   R#   R=   (    (    sF   lib/python2.7/site-packages/traitlets/config/tests/test_application.pyt   test_aliases¾   s    	

c         C   sŸ   t  ƒ  } | j d d g ƒ | j ƒ  |  j | j j t ƒ |  j | j j d ƒ | j d d g ƒ | j ƒ  |  j | j j t ƒ |  j | j j d ƒ d S(   s9   test that setting flags doesn't clobber existing settingss	   --Bar.b=5s	   --disablei   s   --enables
   --Bar.b=10i
   N(	   R   RB   R&   R@   R%   R   R'   R   R   (   R#   R=   (    (    sF   lib/python2.7/site-packages/traitlets/config/tests/test_application.pyt   test_flag_clobberÆ   s    	

c         C   s   t  ƒ  } t d t j ƒ } t j | ƒ g | j _ t ƒ  } d | j _ | | _	 |  j
 d | j ƒ  ƒ |  j
 d | j ƒ  ƒ d  S(   NR    t   WOOOOt	   warn_typoR+   (   R    R   R.   R3   R4   R5   R6   R   RZ   R   t   assertInR:   (   R#   R<   R=   t   cfg(    (    sF   lib/python2.7/site-packages/traitlets/config/tests/test_application.pyt   test_warn_autocorrectÒ   s    			c         C   s¦   t  ƒ  } t j | j _ t ƒ  } | j | ƒ |  j | j t j ƒ |  j | j j j t j ƒ | j d g ƒ |  j | j t j	 ƒ |  j | j j j t j	 ƒ d  S(   Ns   --crit(
   R   R.   t   WARNR   R    RS   R@   R   t
   initializeR/   (   R#   R\   R=   (    (    sF   lib/python2.7/site-packages/traitlets/config/tests/test_application.pyt   test_flatten_flagsß   s    		c         C   s¦   t  ƒ  } t j | j _ t ƒ  } | j | ƒ |  j | j t j ƒ |  j | j j j t j ƒ | j d d g ƒ |  j | j t j	 ƒ |  j | j j j d ƒ d  S(   Ns   --log-levelR/   (
   R   R.   R^   R   R    RS   R@   R   R_   R/   (   R#   R\   R=   (    (    sF   lib/python2.7/site-packages/traitlets/config/tests/test_application.pyt   test_flatten_aliasesë   s    		c         C   sì   t  ƒ  } | j d d d d g ƒ | j ƒ  |  j | j j t ƒ |  j | j j d ƒ |  j | j d d g ƒ t  ƒ  } | j d d d d d g ƒ | j ƒ  |  j | j j t	 ƒ |  j | j j d ƒ |  j | j d d d g ƒ d  S(   Ns	   --Bar.b=5t   extras	   --disablet   argsi   s   --(
   R   RB   R&   R@   R%   R   R'   R   t
   extra_argsR   (   R#   R=   (    (    sF   lib/python2.7/site-packages/traitlets/config/tests/test_application.pyt   test_extra_args÷   s    	
	
c         C   s   t  ƒ  } | j d g ƒ d  S(   Ns   Ã¼nÃ®cÃ¸dÃ©(   R   RB   (   R#   R=   (    (    sF   lib/python2.7/site-packages/traitlets/config/tests/test_application.pyt   test_unicode_argv  s    	c         C   s   t  ƒ  } | j ƒ  d  S(   N(   R   t   document_config_options(   R#   R=   (    (    sF   lib/python2.7/site-packages/traitlets/config/tests/test_application.pyt   test_document_config_option	  s    	c         C   s%   t  ƒ  } d | j ƒ  k s! t ‚ d  S(   Ns   The integer b.(   R   t   generate_config_fileR;   (   R#   R=   (    (    sF   lib/python2.7/site-packages/traitlets/config/tests/test_application.pyt   test_generate_config_file  s    	c         C   s’   d t  t f d „  ƒ  Y} t ƒ  } | j j | ƒ | j ƒ  } |  j d | ƒ |  j d | ƒ |  j d | ƒ |  j d | ƒ |  j d | ƒ d  S(   Nt   NoTraitsc           B   s   e  Z RS(    (   R   R   (    (    (    sF   lib/python2.7/site-packages/traitlets/config/tests/test_application.pyRk     s   s   The integer b.s   # Bar(Configurable)s   # Foo(Configurable)s   # Configurables   # NoTraits(Foo,Bar)(   R   R   R   R)   t   appendRi   R[   t   assertNotIn(   R#   Rk   R=   t   conf_txt(    (    sF   lib/python2.7/site-packages/traitlets/config/tests/test_application.pyt,   test_generate_config_file_classes_to_include  s    	c         C   s  t  ƒ  } t j ƒ  | _ d } t d ƒ ê } t t | | ƒ d ƒ  } | j d ƒ Wd  QXt d ƒ § } t t | | ƒ d ƒ  } | j d ƒ Wd  QX| j | d | | g ƒ| j	 ƒ  |  j
 | j j d ƒ | j | d | | g ƒ| j	 ƒ  |  j
 | j j d	 ƒ Wd  QXWd  QXd  S(
   Ns	   config.pyt   _1RI   s   get_config().MyApp.Bar.b = 1t   _2s   get_config().MyApp.Bar.b = 2RK   i   i   (   R   R.   t	   getLoggerR5   R	   RM   RL   t   writeRO   R&   R@   R%   R   (   R#   R=   R   t   td1t   f1t   td2t   f2(    (    sF   lib/python2.7/site-packages/traitlets/config/tests/test_application.pyt   test_multi_file  s    	

t
   assertLogst   reasons   requires TestCase.assertLogsc         C   sŒ  t  ƒ  } t j ƒ  | _ | j j t j ƒ d } t d ƒ ½ } t t | | d ƒ d ƒ  } | j	 d ƒ Wd  QXt t | | d ƒ d ƒ % } t
 j i i d d 6d	 6| ƒ Wd  QX|  j | j t j ƒ ' } | j | d
 | g ƒ| j ƒ  Wd  QXWd  QX| j j d k st ‚ d j | j ƒ } d | k s8t ‚ d | k sJt ‚ t | | d ƒ | k sit ‚ t | | d ƒ | k sˆt ‚ d  S(   NR   Rp   s   .pyRI   s   get_config().Bar.b = 1s   .jsoni   R   R   RK   s   
t	   Collisions   1 ignored, using 2(   R   R.   Rr   R5   t   setLevelR3   R	   RM   RL   Rs   t   jsont   dumpRy   t   WARNINGRO   R&   R%   R   R;   t   joint   output(   R#   R=   R   RP   RQ   t   capturedR   (    (    sF   lib/python2.7/site-packages/traitlets/config/tests/test_application.pyt   test_log_collisions/  s*    		c         C   s»   t  ƒ  } t j ƒ  | _ d } t ƒ  l } t t | | ƒ d ƒ  } | j d ƒ Wd  QX|  j | j t j	 ƒ  } | j
 | d | g ƒWd  QXWd  QXd j | j ƒ } |  j d | ƒ d  S(   Ns	   config.pyRI   s   syntax error()RK   s   
t   SyntaxError(   R   R.   Rr   R5   R	   RM   RL   Rs   Ry   t   ERRORRO   R€   R   R[   (   R#   R=   R   RP   RQ   R‚   R   (    (    sF   lib/python2.7/site-packages/traitlets/config/tests/test_application.pyt   test_log_bad_configH  s    	"c         C   s—   t  ƒ  } t | _ t j ƒ  | _ d } t ƒ  a } t t | | ƒ d ƒ  } | j	 d ƒ Wd  QX|  j
 t ƒ  | j | d | g ƒWd  QXWd  QXd  S(   Ns	   config.pyRI   s   syntax error()RK   (   R   R   t   raise_config_file_errorsR.   Rr   R5   R	   RM   RL   Rs   t   assertRaisesR„   RO   (   R#   R=   R   RP   RQ   (    (    sF   lib/python2.7/site-packages/traitlets/config/tests/test_application.pyt   test_raise_on_bad_configU  s    		c         C   sÅ  t  ƒ  } t j ƒ  | _ d } t d ƒ •} t | | ƒ } t | d ƒ  } | j d g ƒ Wd  QX| j | d | g ƒ|  j	 t
 | j ƒ d ƒ |  j | j d | ƒ | j ƒ  |  j	 | j t ƒ t | d ƒ  } | j d g ƒ Wd  QX| j | d | g ƒ|  j	 t
 | j ƒ d ƒ |  j	 | j t ƒ |  j t ƒ  d	 | _ Wd  QX| j j d
 ƒ |  j	 t
 | j ƒ d ƒ | j | d | g ƒ|  j	 t
 | j ƒ d ƒ |  j	 | j t ƒ Wd  QXd  S(   Ns	   config.pyRp   RI   s   c.MyApp.running = True
RK   i   i    s   c.MyApp.running = False
s   /foos   /bar(   R   R.   Rr   R5   R	   RL   RM   RN   RO   R@   t   lent   loaded_config_filest   assertEqualst   startR(   R   R'   Rˆ   t   AttributeErrorRl   (   R#   R=   R   Rt   R*   RQ   (    (    sF   lib/python2.7/site-packages/traitlets/config/tests/test_application.pyt   test_loaded_config_files`  s4    	
(   R   R   R?   RA   RC   RD   RR   RU   RV   RW   RX   R]   R`   Ra   Re   Rf   Rh   Rj   Ro   Rx   R   t   skipift   hasattrR   Rƒ   R†   R‰   R   (    (    (    sF   lib/python2.7/site-packages/traitlets/config/tests/test_application.pyR1   R   s,   								#													((	t   DeprecatedAppc           B   s   e  Z e Z e Z d  „  Z RS(   c            sZ   t  ˆ  _ ‡  f d †  } t j j ˆ  j d | ƒ ! t t ˆ  ƒ j | | | ƒ Wd  QXd  S(   Nc             s   t  ˆ  _ d  S(   N(   R   t   parent_called(   Rc   (   R#   (    sF   lib/python2.7/site-packages/traitlets/config/tests/test_application.pyt   _capture  s    t   debug(	   R   t   override_calledR   t   patcht   objectR5   t   superR’   t   _config_changed(   R#   R   t   oldt   newR”   (    (   R#   sF   lib/python2.7/site-packages/traitlets/config/tests/test_application.pyRš   Ž  s    	(   R   R   R'   R–   R“   Rš   (    (    (    sF   lib/python2.7/site-packages/traitlets/config/tests/test_application.pyR’   ‹  s   c          C   sh   t  ƒ  }  |  j s t ‚ |  j s) t ‚ t i i d d 6d 6ƒ |  _ |  j sU t ‚ |  j sd t ‚ d  S(   Nt   cR   t   A(   R’   R–   R;   R“   R   R   (   R=   (    (    sF   lib/python2.7/site-packages/traitlets/config/tests/test_application.pyt   test_deprecated_notifier–  s    	c           C   s   t  t ƒ t t ƒ d  S(   N(   R   R   R   (    (    (    sF   lib/python2.7/site-packages/traitlets/config/tests/test_application.pyt   test_help_outputŸ  s    
t   __main__()   t   __doc__R}   R.   t   ost   ioR    t   unittestR   R   t   ImportErrorRK   R€   RL   t   pytestR   t   traitlets.config.configurableR   t   traitlets.config.loaderR   t   traitlets.tests.utilsR   R   t   traitlets.config.applicationR   t   ipython_genutils.tempdirR	   t   traitlets.traitletsR
   R   R   R   R   R   R   R   R1   R’   RŸ   R    R   t   launch_instance(    (    (    sF   lib/python2.7/site-packages/traitlets/config/tests/test_application.pyt   <module>   s6   (ÿ :			