ó
‹n^c           @   s  d  d l  Z  d  d l Z d  d l m 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
 Z
 y d  d l Z Wn! e k
 r¯ d  d l
 m Z n Xe j d d f k rØ d  d l m Z n d  d l m Z d e j d <e j ƒ  Z e j e _ e j e j ƒ Z e j e ƒ d	 „  Z e d
 „  ƒ Z d e
 j f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ y d  d l Z  Wn e k
 rÏe j! d ƒ n9 Xe j" e  j# ƒ Z$ e$ j% d d ƒ Z$ e$ d Ud d „ Z& d S(   iÿÿÿÿN(   t   contextmanager(   t   mocki   i    (   t   StringIOt   80t   COLUMNSc         C   sI   d „  } d „  } t  |  _ t j | |  ƒ |  _ t j | |  ƒ |  _ |  S(   sp   Swap out arg_parser's error(..) method so that instead of calling
    sys.exit(..) it just raises an error.
    c         S   s   t  j d  | ƒ ‚ d  S(   N(   t   argparset   ArgumentErrort   None(   t   selft   message(    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt   error_method#   s    c         S   s   t  |  _ d  S(   N(   t   Truet   _exit_method_called(   R   t   statusR	   (    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt   exit_method&   s    (   t   FalseR   t   typest
   MethodTypet   errort   exit(   t
   arg_parserR
   R   (    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt   replace_error_method   s    			c          c   si   t  ƒ  t  ƒ  }  } t j t j } } z( |  | t _ t _ t j t j f VWd | | t _ t _ Xd S(   sN   
    swap stdout and stderr for StringIO so we can do asserts on outputs.
    N(   R   t   syst   stdoutt   stderr(   t   new_outt   new_errt   old_outt   old_err(    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt   captured_output0   s    t   TestCasec           B   s   e  Z d  „  Z d „  Z RS(   c         O   s¯   t  j | | Ž  } t | ƒ |  _ |  j j |  _ |  j j |  _ |  j j |  _	 |  j j
 |  _
 |  j j |  _ t |  d ƒ sŠ |  j |  _ n  t |  d ƒ s¨ |  j |  _ n  |  j S(   Nt   assertRegext   assertRaisesRegex(   t   configargparset	   ArgParserR   t   parsert   add_argumentt   add_argt
   parse_argst   parset   parse_known_argst   parse_knownt   format_valuest   format_helpt   hasattrt   assertRegexpMatchesR   t   assertRaisesRegexpR    (   R   t   argst   kwargst   p(    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt
   initParser@   s    c         O   s#   |  j  t j | |  j | | Ž d  S(   N(   R    R   R   R'   (   R   t   regexR/   R0   (    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt   assertParseArgsRaisesP   s    (   t   __name__t
   __module__R2   R4   (    (    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyR   >   s   	t   TestBasicUseCasesc           B   s­   e  Z d  „  Z d „  Z e 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   |  j  d g  ƒ d  S(   Nt   args_for_setting_config_path(   R2   (   R   (    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt   setUpV   s    c      	   C   s  |  j  d d d d d ƒ|  j  d d d d	 ƒ|  j  d
 d d d d t d t ƒ|  j  d d d d t d t ƒ|  j t j j d k  rŽ d n d d d ƒ|  j t j j d k  r¹ d n d d d ƒ|  j t j j d k  rä d n d d d ƒ|  j d d d d ƒ } |  j	 | j
 d g ƒ |  j | j t ƒ |  j | j d ƒ |  j | j d  g ƒ |  j |  j ƒ  d! ƒ |  j d d" d d# ƒ } |  j	 | j
 d d$ g ƒ |  j | j t ƒ |  j | j d  ƒ |  j | j d% g ƒ |  j |  j ƒ  d& ƒ |  j d d' d d( ƒ } |  j ƒ  |  j ƒ  |  j	 | j
 d d$ g ƒ |  j | j t ƒ |  j | j d ƒ |  j | j d) g ƒ |  j |  j ƒ  d* ƒ d  S(+   Nt	   filenamest   nargst   +t   helps   positional args   -xs   --arg-xt   actiont
   store_trues   -ys   --arg-yt   destt   y1t   typet   requireds   --arg-zt   appendi   s   too few args$   the following arguments are requiredR/   t    s   argument -y/--arg-y is requireds0   the following arguments are required: -y/--arg-ys   -x --arg-z 11 file1.txts   argument --arg-z is requireds-   the following arguments are required: --arg-zs%   file1.txt file2.txt file3.txt -x -y 1s!   file1.txt --arg-x -y 3 --arg-z 10t   config_file_contentss	   file1.txti
   s6   Command Line Args:   file1.txt --arg-x -y 3 --arg-z 10s   file1.txt file2.txtsž   
            # set all required args in config file
            arg-x = True
            arg-y = 10
            arg-z = 30
            arg-z = 40
            s	   file2.txti(   sy   Command Line Args: \s+ file1.txt file2.txt
Config File \(method arg\):
  arg-x: \s+ True
  arg-y: \s+ 10
  arg-z: \s+ 40
s-   file1.txt file2.txt --arg-x -y 3 --arg-z 100 s]   arg-y = 31.5
                                    arg-z = 30
                                 id   sA   Command Line Args:   file1.txt file2.txt --arg-x -y 3 --arg-z 100(   R%   t   intR   t   floatR4   R   t   version_infot   majorR'   t   assertListEqualR:   t   assertEqualt   arg_xRA   t   arg_zR   R*   R+   (   R   t   ns(    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt   testBasicCase1Y   sR    "			

c         C   sÚ  t  j d d d t ƒ } | j ƒ  |  j d d d | j g ƒ } | j d d d	 d
 d ƒ| s|  j d d
 d d t ƒ|  j d d d d d ƒ|  j d d d t d t ƒ|  j d d d d ƒ|  j d d d d d d  d! d" g d d# d$ d% d d& d' d ƒnÅ | j d( d) ƒ } | j d d
 d d t ƒ| j d d d d d ƒ| j d d d t d t ƒ| j d( d* ƒ } | j d d d d ƒ| j d d d d d d  d! d" g d d# d$ d% d d& d' d ƒ|  j t	 j
 j d+ k  ræd, n d- d. d/ ƒ|  j d0 d. d1 ƒt  j d d d t ƒ } | j ƒ  |  j d. d2 | j ƒ } |  j | j d3 ƒ |  j | j t ƒ |  j | j ƒ |  j | j d ƒ |  j | j d4 g ƒ |  j |  j ƒ  d5 ƒ | j d6 ƒ | j ƒ  |  j d. d7 | j ƒ } |  j | j d ƒ |  j |  j ƒ  d8 ƒ | j d9 ƒ | j ƒ  |  j d. d7 | j ƒ } |  j | j d  ƒ |  j |  j ƒ  d: ƒ |  j d; i d" d& 6d< d 6d. d7 | j ƒ } |  j | j d" ƒ |  j | j d< ƒ |  j |  j ƒ  d= ƒ |  j d; i d" d& 6d< d 6d> d? 6d. d@ | j ƒ } |  j | j d! ƒ |  j | j d< ƒ |  j |  j ƒ  dA ƒ | sl|  j |  j ƒ  dB dC dD dE ƒ n" |  j |  j ƒ  dB dC dF dG ƒ |  j dH d. dI | j ƒ|  j dJ d. dK | j ƒ| j ƒ  | j ƒ  d  S(L   Nt   modet   wt   deletet   default_config_filess   /etc/settings.inis   /home/jeff/.user_settingst   vcfR;   R<   R=   s   Variant file(s)s   --genomes   Path to genome fileRC   s   -vR@   t   verboseR>   R?   s   -gs   --my-cfg-filet   is_config_files   -ds   --dbsnpt   env_vart
   DBSNP_PATHs   -fs   --formatt   choicest   BEDt   MAFt   VCFt   WIGt   Rt   fmtt   metavart   FRMTt   OUTPUT_FORMATt   defaultt   titlet   g1t   g2i   s   too few args;   the following arguments are required: vcf, -g/--my-cfg-fileR/   s   --genome hg19s   not found: file.txts   -g file.txts   --genome hg19 -g %s bla.vcf t   hg19s   bla.vcfsS   Command Line Args:   --genome hg19 -g [^\s]+ bla.vcf
Defaults:
  --format: \s+ BED
s   --format MAFs   --genome hg19 -g %s f.vcf s_   Command Line Args:   --genome hg19 -g [^\s]+ f.vcf
Config File \([^\s]+\):
  --format: \s+ MAF
s   --format VCFs_   Command Line Args:   --genome hg19 -g [^\s]+ f.vcf
Config File \([^\s]+\):
  --format: \s+ VCF
t   env_varss   /a/b.vcfs|   Command Line Args:   --genome hg19 -g [^\s]+ f.vcf
Environment Variables:
  DBSNP_PATH: \s+ /a/b.vcf
  OUTPUT_FORMAT: \s+ R
t	   somethingt   ANOTHER_VARs&   --genome hg19 -g %s --format WIG f.vcfsr   Command Line Args:   --genome hg19 -g [^\s]+ --format WIG f.vcf
Environment Variables:
  DBSNP_PATH: \s+ /a/b.vcf
si   usage: .* \[-h\] --genome GENOME \[-v\] -g MY_CFG_FILE
?\s+\[-d DBSNP\]\s+\[-f FRMT\]\s+vcf \[vcf ...\]

i	   s   (.+\s+)s=  positional arguments:
  vcf \s+ Variant file\(s\)

optional arguments:
  -h, --help \s+ show this help message and exit
  --genome GENOME \s+ Path to genome file
  -v
  -g MY_CFG_FILE, --my-cfg-file MY_CFG_FILE
  -d DBSNP, --dbsnp DBSNP\s+\[env var: DBSNP_PATH\]
  -f FRMT, --format FRMT\s+\[env var: OUTPUT_FORMAT\]
s   .+\s+sG  positional arguments:
  vcf \s+ Variant file\(s\)

optional arguments:
  -h, --help \s+ show this help message and exit

g1:
  --genome GENOME \s+ Path to genome file
  -v
  -g MY_CFG_FILE, --my-cfg-file MY_CFG_FILE

g2:
  -d DBSNP, --dbsnp DBSNP\s+\[env var: DBSNP_PATH\]
  -f FRMT, --format FRMT\s+\[env var: OUTPUT_FORMAT\]
s   invalid choice: 'ZZZ's&   --genome hg19 -g %s --format ZZZ f.vcfs   unrecognized arguments: --blas   --bla --genome hg19 -g %s f.vcf(   t   tempfilet   NamedTemporaryFileR   t   flushR2   t   nameR%   t   add_argument_groupR4   R   RI   RJ   R'   RL   t   genomeRV   R   t   assertIsNonet   dbsnpR`   RK   RU   R   R*   t   writeR+   t   close(   R   t
   use_groupst   default_config_fileR1   t   gt   config_file2RO   (    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt   testBasicCase2›   sž    







c         C   s   |  j  d t ƒ d  S(   NRv   (   Rz   R   (   R   (    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt   testBasicCase2_WithGroups!  s    c      	      s  d ‰  ‡  f d †  } |  j  d | ƒ |  j d d t ƒ|  j d d d d	 t ƒt j d
 d d t ƒ  } | j d ƒ | j } Wd  QXt	 ƒ  p \ } } |  j
 d j | ƒ ƒ } |  j t | d ƒ ƒ |  j | j d ƒ | j ƒ  j ƒ  } |  j | ˆ  ƒ Wd  QXd  S(   Ns   dummy open calledc            s   ˆ  GHt  |  ƒ S(   N(   t   open(   R1   (   t   expected_output(    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt
   dummy_open'  s    t   config_file_open_funcs   --configRW   s   --arg1Rd   i   RB   RQ   RR   RS   s   arg1 2s   --config {}t   arg1i   (   R2   R%   R   RG   Rl   Rm   R   Rt   Ro   R   R'   t   formatt
   assertTrueR,   RL   R€   t   getvaluet   strip(   R   R~   t   config_filet   config_file_patht   outt   _R/   t   output(    (   R}   s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt   testCustomOpenFunction$  s    c         C   su   |  j  ƒ  |  j d ƒ |  j d d d d ƒ|  j d d d ƒ} |  j | j d	 d
 d g ƒ |  j | j d ƒ d  S(   Nt   as   -xs   --argR;   R<   t   positional_valueRF   s$   arg = [Shell, someword, anotherword]t   Shellt   somewordt   anotherword(   R2   R%   R'   RL   t   argR‹   (   R   RO   (    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt   testPositionalAndConfigVarLists:  s    
c         C   s  t  j d d d t ƒ } |  j } | j d d ƒ } | j d d d d	 t ƒ| j d
 d d d d ƒ| j d	 t ƒ } | j d d d t ƒ| j d d d t ƒ| j d	 t ƒ } | j d d d d d d d d g d d d d d d  d! d ƒ| j d" d# d d d d$ d% d& d d' ƒ|  j d( d) | j ƒ } |  j	 | j
 d* ƒ |  j	 | j t ƒ |  j	 | j d& ƒ |  j d+ i d, d' 6d( d- | j ƒ } |  j	 | j
 d* ƒ |  j	 | j t ƒ |  j	 | j d& ƒ |  j |  j ƒ  d. ƒ |  j |  j ƒ  d/ d0 d1 d2 ƒ | j ƒ  d  S(3   NRQ   RR   RS   Re   t   group1s   --genomeR=   s   Path to genome fileRC   s   -vR@   RV   R>   R?   s   -f1s   --type1-cfg-fileRW   s   -f2s   --type2-cfg-files   -fs   --formatRZ   R[   R\   R]   R^   R_   R`   Ra   Rb   RX   Rc   Rd   s   -bs   --bamt   store_constt   constt   BAMt
   BAM_FORMATR/   s   --genome hg19 -f1 %s --bamRh   Ri   t   trues   --genome hg19 -f1 %ssz   Command Line Args:   --genome hg19 -f1 [^\s]+
Environment Variables:
  BAM_FORMAT: \s+ true
Defaults:
  --format: \s+ BED
sp   usage: .* \[-h\] --genome GENOME \[-v\]\s+ \(-f1 TYPE1_CFG_FILE \| \s*-f2 TYPE2_CFG_FILE\)\s+\(-f FRMT \| -b\)

i   s   .+\s+sN  optional arguments:
  -h, --help            show this help message and exit
  -f1 TYPE1_CFG_FILE, --type1-cfg-file TYPE1_CFG_FILE
  -f2 TYPE2_CFG_FILE, --type2-cfg-file TYPE2_CFG_FILE
  -f FRMT, --format FRMT\s+\[env var: OUTPUT_FORMAT\]
  -b, --bam\s+\[env var: BAM_FORMAT\]

group1:
  --genome GENOME       Path to genome file
  -v
(   Rl   Rm   R   R#   Rp   R%   t   add_mutually_exclusive_groupR'   Ro   RL   Rq   RV   R   R`   R   R*   R+   Ru   (   R   R…   R1   Rx   RO   (    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt   testMutuallyExclusiveArgsE  s:    	$!	c   	   	   C   sÆ  t  j d d d t ƒ } | j d ƒ | j ƒ  t  j d d d t ƒ } | j d ƒ | j ƒ  t j d d ƒ } | j d d	 ƒ } t j d
 t ƒ } | j	 d d d t
 d t d d ƒ| j d d | g d d ƒ} | j	 d d d d d d g d d ƒ| j	 d d t ƒ| j d d | g d d ƒ} | j	 d d t d t ƒ| j d  d! | j ƒ } |  j | j d" ƒ |  j | j d ƒ | j d  d# | j ƒ } |  j | j d$ ƒ | j ƒ  | j ƒ  d  S(%   NRQ   RR   RS   s   --i = Bs   p = 10t   progt   myProgRe   t   actionst   add_helps   -ps   --pRB   RC   R=   s   set db parametert   createt   parentss   create the orbix environments   --iRX   t   INITRZ   t   At   BRd   s   -configRW   t   updates   update the orbix environments   -config2R/   s   create -p 2 -config i   s   update -config2 i
   (   Rl   Rm   R   Rt   Rn   R!   t   ArgumentParsert   add_subparsersR   R$   RG   t
   add_parserR&   Ro   RL   R1   t   iRu   (	   R   t   config_file1Ry   R#   t
   subparserst   parent_parsert   create_pt   update_pRO   (    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt   testSubParsersx  s4    

		
c      
   C   sT   |  j  t d |  j d d d t d t ƒ|  j  t d |  j d d d	 d
 d t ƒd  S(   NsR   arg with is_write_out_config_file_arg=True can't also have is_config_file_arg=Trues   -xs   --XRW   t   is_write_out_config_file_argsC   arg with is_write_out_config_file_arg=True must have action='store's   -ys   --YR>   RD   (   R    t
   ValueErrorR%   R   (   R   (    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt   testAddArgsErrorsœ  s    c      	   C   sE  |  j  d d t d t ƒ|  j  d d t d t ƒ|  j  d ƒ |  j  d ƒ |  j  d d d	 ƒ|  j  d
 d d d t ƒ|  j d d d i  d d ƒ } |  j | j d ƒ |  j | j d ƒ |  j | j d ƒ |  j	 | j
 ƒ |  j | j t ƒ |  j | j d g ƒ |  j |  j ƒ  d ƒ |  j t j j d k  r<d n d d d ƒ|  j d d d d d ƒ|  j t j j d k  r€d n d d d d d ƒ|  j d  d d! d d" ƒ|  j d# d d" d i d$ d  6ƒ\ } } |  j | d% g ƒ |  j d& t ƒ |  j d d d d" d i d$ d  6ƒ \ } } |  j t | ƒ d% d d' h ƒ d  S((   Ns   -xRC   RB   s   --ys   --zs   --cs   --bR>   R?   s   --aRD   R/   s   -x 1Ri   RF   s‘  

        #inline comment 1
        # inline comment 2
          # inline comment 3
        ;inline comment 4
        ; inline comment 5
          ;inline comment 6

        ---   # separator 1
        -------------  # separator 2

        y=1.1
          y = 2.1
        y= 3.1  # with comment
        y= 4.1  ; with comment
        ---
        y:5.1
          y : 6.1
        y: 7.1  # with comment
        y: 8.1  ; with comment
        ---
        y  	 9.1
          y 10.1
        y 11.1  # with comment
        y 12.1  ; with comment
        ---
        b
        b = True
        b: True
        ----
        a = 33
        ---
        z z 1
        i   g333333(@s   z 1i!   sm   Command Line Args: \s+ -x 1
Config File \(method arg\):
  y: \s+ 12.1
  b: \s+ True
  a: \s+ 33
  z: \s+ z 1
i   s   argument -x is requireds-   the following arguments are required: -x, --ys   -x 3s   invalid float value: 'abc's   -x 5s   y: abcs   argument --y is requireds)   the following arguments are required: --ys   z: 1t   blas   -x 1 --y 2.3s   bla=3s   -x 10 --y 3.8t   2s   --bla=3t   ignore_unknown_config_file_keyst   1(   R%   R   RG   RH   R'   RL   t   xt   yt   zRr   t   ct   bR‹   R   R*   R4   R   RI   RJ   R)   RK   R2   R   t   set(   R   RO   R/   (    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt   testConfigFileSyntax§  sN    "		c         C   sš  |  j  ƒ  d } |  j d d d d | ƒ|  j d d d ƒ} |  j | j ƒ |  j d d d	 ƒ} |  j | j ƒ |  j d d
 i d | 6ƒ} |  j | j ƒ |  j d d
 i d | 6ƒ} |  j | j ƒ |  j  ƒ  d } |  j d d d d | ƒ|  j d d d ƒ} |  j | j ƒ |  j d d d ƒ} |  j | j ƒ |  j d d
 i d | 6ƒ} |  j | j ƒ |  j d d
 i d | 6ƒ} |  j | j ƒ d  S(   Nt
   STORE_TRUEs   --boolean_store_trueR>   R?   RX   RE   RF   s   boolean_store_true = 1s   boolean_store_true = 0Ri   R´   t   0t   STORE_FALSEs   --boolean_store_falset   store_falses   boolean_store_false = 1s   boolean_store_false = 0(   R2   R%   R'   R‚   t   boolean_store_truet   assertFalset   boolean_store_false(   R   t   store_true_env_var_namet   result_namespacet   store_false_env_var_name(    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt(   testBooleanValuesCanBeExpressedAsNumbersÿ  s,    

c      	   C   sÄ  |  j  ƒ  |  j d d d d t ƒ|  j d d d d d d	 d
 ƒ|  j d d d d d d	 d ƒ|  j d d i d d 6d d 6ƒ} |  j | j d ƒ |  j | j t ƒ |  j d d i d d 6d d 6ƒ} |  j | j t ƒ |  j d d i d d 6d d 6ƒ} |  j | j t ƒ |  j  ƒ  |  j d d d d d	 d
 ƒ|  j	 d d i d d 6ƒ|  j d d d d i d d 6ƒ} |  j | j
 t ƒ |  j d d d d i d d 6ƒ} |  j | j
 t ƒ |  j d d i d d 6d d 6ƒ} |  j | j
 t ƒ |  j d d i d d 6d d 6ƒ} |  j | j
 t ƒ |  j d d d d i d d 6ƒ} |  j | j
 t ƒ |  j  ƒ  |  j d d d d  d	 d! d" t ƒ|  j d d i d# d$ 6d d 6ƒ} |  j | j ƒ d  S(%   Ns   --heightRX   t   HEIGHTRC   s   --do-itR@   Rµ   t   FLAG1R>   R?   s   --dont-do-itR¶   t   FLAG2R¿   RE   Ri   t   tallt   yest   nos   -vs	   --verboset   VERBOSEsW   Unexpected value for VERBOSE: 'bla'. Expecting 'true', 'false', 'yes', 'no', '1' or '0'R±   RF   s   verbose=trueR—   RV   t   falses   -fs   --filet   FILESRD   RB   s   [1,2,3]t   file(   R2   R%   R   R'   RL   t   heightRµ   R¶   R   R4   RV   RG   Rr   RÐ   (   R   RO   (    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt   testConfigOrEnvValueErrors   sD    
###
##
"#c         C   sG  |  j  ƒ  |  j d ƒ |  j d d d ƒ|  j d ƒ |  j d d d ƒ|  j d	 d d d d
 ƒ|  j d d d ƒ|  j d ƒ |  j d d d d i d d 6d d
 6ƒ} |  j | j d ƒ |  j | j d ƒ |  j | j d ƒ |  j | j d d g ƒ |  j | j d d g ƒ |  j | j	 d d g ƒ |  j | j
 d ƒ d  S(   Ns   --arg0s   --arg1RX   t   ARG1s   --arg2s   --arg3R>   RD   s   --arg4t   ARG4s   --arg5s   --arg6s<   --arg0=-foo --arg3=-foo --arg3=-bar --arg6=-test-more-dashesRF   s   arg2: -foo
arg5: [-foo, -bar]Ri   s   -foos   [-foo, -bar]s   -bars   -test-more-dashes(   R2   R%   R'   RL   t   arg0R€   t   arg2t   arg3t   arg4t   arg5t   arg6(   R   RO   (    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt   testValuesStartingWithDashJ  s&    
c         C   sÀ   |  j  ƒ  |  j d d d ƒ|  j d d d d i d d 6ƒ} |  j | j d	 ƒ |  j d
 d d d i d d 6ƒ} |  j | j d	 ƒ |  j d d d d i d d 6ƒ} |  j | j d ƒ d  S(   Ns   --argRX   t   ARGs   --arg command_line_valRF   s   arg: config_valRi   t   env_valt   command_line_vals   --arg=command_line_valRE   (   R2   R%   R'   RL   R   (   R   RO   (    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt   testPriorityKnowna  s"    
c         C   sz   |  j  ƒ  |  j d d d d i d d 6ƒ\ } } |  j | d d g ƒ |  j d	 d d ƒ\ } } |  j | d	 g ƒ d  S(
   Ns   --arg command_line_valRF   s   arg: config_valRi   RÝ   R   s   --argRÞ   s   --arg=command_line_val(   R2   R)   RK   (   R   RO   R/   (    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt   testPriorityUnknownz  s    
c         C   s<  |  j  d d ƒ |  j d d d t ƒ|  j d d d t ƒ|  j d	 d
 d d d t ƒ|  j d d d d d t ƒ|  j d d d t ƒ|  j d d d t ƒ|  j d d i d d 6d d 6d d 6d d 6d  d! 6d" d# 6ƒ} |  j | j ƒ |  j | j ƒ |  j | j	 d$ ƒ |  j | j
 d  ƒ |  j | j d" ƒ d  S(%   Nt   auto_env_var_prefixt   TEST_s   -as   --arg0t   is_config_file_args   -bs   --arg1R®   s   -xs   --arg2RX   t   TEST2RB   s   -ys   --arg3R>   RD   s   -zs   --arg4RC   s   -ws   --arg4-moreRE   Ri   R½   t	   TEST_ARG0R´   t	   TEST_ARG1R²   t	   TEST_ARG2t   22t
   arg4_valuet	   TEST_ARG4t   magict   TEST_ARG4_MOREi   (   R2   R%   R   RG   R'   Rr   RÕ   R€   RL   RÖ   RØ   t	   arg4_more(   R   RO   (    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt   testAutoEnvVarPrefixŠ  s&    c      	   C   sv  |  j  ƒ  |  j d d d d ƒ|  j d d d d d t ƒ|  j d	 d
 d d d d ƒ|  j d d d d d d d t ƒ|  j d d d ƒ|  j d d d d d ƒ|  j d d i d d 6d d 6d d 6d d 6d d 6d d 6ƒ} |  j | j d ƒ |  j | j d ƒ |  j | j d d  d! g ƒ |  j | j d d" d# g ƒ |  j | j	 d ƒ |  j | j
 d$ d% d& g ƒ d  S('   Ns   -xs   --arg2RX   Rä   s   -ys   --arg3t   TEST3RB   s   -zs   --arg4t   TEST4R;   R<   s   -us   --arg5t   TEST5s   --arg6t   TEST6s   --arg7t   TEST7R>   RD   RE   Ri   Rè   s   [Shell, someword, anotherword]s   [22, 99, 33]s   [value6.1, value6.2, value6.3]s   [value7.1, value7.2, value7.3]i   R   RŽ   R   ic   i!   s   value7.1s   value7.2s   value7.3(   R2   R%   RG   R'   RL   RÖ   R×   RØ   RÙ   RÚ   t   arg7(   R   RO   (    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt   testEnvVarListsŸ  s&    
"c         C   s‚   |  j  ƒ  |  j d ƒ |  j d d d d d d ƒ|  j d d	 i d
 d 6ƒ} |  j | j d d d g ƒ |  j | j d ƒ d  S(   NR‹   s   -xs   --argRX   t   TESTR;   R<   RŒ   Ri   s   [Shell, someword, anotherword]R   RŽ   R   (   R2   R%   R'   RL   R   R‹   (   R   RO   (    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt   testPositionalAndEnvVarListsµ  s    
(   R5   R6   R9   RP   R   Rz   R{   RŠ   R‘   R™   R­   R°   R»   RÆ   RÒ   RÛ   Rß   Rà   Rî   Rõ   R÷   (    (    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyR7   U   s$   		B†				3	$		X	!	*					t   TestMiscc           B   sÌ   e  Z d  Z d „  Z e j d ƒ d „  ƒ Z d d „ Z d „  Z	 d „  Z
 d „  Z d „  Z d	 „  Z d
 „  Z d „  Z d „  Z d e f d „  ƒ  YZ e d „  ƒ Z d „  Z d „  Z d „  Z d „  Z RS(   s   Test edge casesc         C   s   |  j  d g  ƒ d  S(   NR8   (   R2   (   R   (    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyR9   Ã  s    s    argparse.ArgumentParser.__init__c         C   s=   i t  d 6d d 6} t j d t  |  } | j | |  d  S(   Nt   allow_abbrevRj   t   whatever_other_argt   add_config_file_help(   R   R!   R¤   t   assert_called_with(   R   t   argparse_initt   kwargs_for_argparseR#   (    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt   testKwrgsArePassedToArgParseÆ  s    c         C   sƒ   t  j | d d d d ƒ} |  j | j d ƒ |  j | j d ƒ |  j t d t  j | d d ƒt  j | ƒ } |  j | | ƒ d  S(   NRš   t   usaget   tests:   kwargs besides 'name' can only be passed in the first time(   R!   t   getArgumentParserRL   R   Rš   R    R¯   (   R   Ro   R1   t   p2(    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt   testGlobalInstancesÎ  s    c         C   s   |  j  d ƒ |  j  d ƒ d  S(   Nt   name1t   name2(   R  (   R   (    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt   testGlobalInstances_WithNameÙ  s    c         C   sO   |  j  t |  j d d d ƒ|  j d ƒ } |  j | ƒ |  j | j d ƒ d  S(   Nt
   positionalRX   R±   (   t   assertRaisesR¯   R%   t   assertIsNotNoneRL   R@   (   R   R>   (    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt   testAddArguments_ArgValidationÝ  s    c         C   sª   |  j  t |  j d d d d t ƒ|  j d d d t ƒ|  j d d t ƒt j d	 d
 d t ƒ } | j d ƒ | j ƒ  |  j d d | j	 ƒ } |  j
 | j d ƒ d  S(   NR¸   R>   R¿   RW   s   -cs   --configs   --xRC   RQ   RR   RS   s   x=blaR/   s   -c %sR±   (   R	  R¯   R%   R   Rl   Rm   Rt   Rn   R'   Ro   RL   Rµ   (   R   R…   RO   (    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt$   testAddArguments_IsConfigFilePathArgã  s    
c      	   C   s<  t  j d d d t ƒ } | j d ƒ | j ƒ  |  j d d d g d t d	 d
 d | j g ƒ |  j d d d d t ƒ|  j t	 j
 j d k  r” d n d ƒ t  j d d d t ƒ } |  j d | j ƒ } |  j | j d ƒ | j d ƒ | j ƒ  |  j d | j ƒ } |  j | j d ƒ |  j |  j ƒ  d d d d ƒ |  j |  j j d t	 j ƒ ƒ |  j d t ƒ |  j t j d |  j d d ƒ|  j d d ƒ \ } } |  j t | d  d! ƒ d! ƒ |  j d t ƒ |  j d" d! d d ƒ } |  j t | d  d! ƒ d! ƒ |  j d d ƒ \ } } |  j t | d  d! ƒ d! ƒ d  S(#   NRQ   RR   RS   s   genome=hg19R8   s   -cs   --configt   config_arg_is_requiredt   config_arg_help_messages   my config fileRT   s   --genomeR=   s   Path to genome fileRC   i   s    argument -c/--config is requireds#   arguments are required: -c/--configs   -c Rh   s   genome=hg20t   hg20s1   usage: .* \[-h\] -c CONFIG_FILE --genome GENOME

i   s   .+\s+s¦   optional arguments:
  -h, --help\s+ show this help message and exit
  -c CONFIG_FILE, --config CONFIG_FILE\s+ my config file
  --genome GENOME\s+ Path to genome file
RÐ   R³   s   unrecognized argumentsRF   s   arg1 = 3R€   RE   R/   (   Rl   Rm   R   Rt   Rn   R2   Ro   R%   R4   R   RI   RJ   R'   RL   Rq   R   R+   Rr   R#   t   print_valuesR   R   R    R   R   R)   t   getattr(   R   t   temp_cfgt	   temp_cfg2RO   R/   (    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt   testConstructor_ConfigFileArgsò  s@    

c      	   C   sÂ   t  j d d d t ƒ } | j d ƒ | j d ƒ | j ƒ  |  j ƒ  |  j d d d t d	 t d
 d ƒ|  j d d t d t ƒd j	 | j
 ƒ } |  j | ƒ \ } } |  j | d d g ƒ d S(   sJ   Tests that abbreviated values don't get pulled from config file.

        RQ   RR   RS   s
   a2a = 0.5
s
   a3a = 0.5
s   -cs   --config_fileRC   RW   R=   s   config file paths   --helloRB   s   -c {} --hello 2s	   --a2a=0.5s	   --a3a=0.5N(   Rl   Rm   R   Rt   Rn   R2   R%   R   RG   R   Ro   R)   RK   (   R   R  t   commandt   knownt   unknown(    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt   test_AbbrevConfigFileArgs'  s    

c         C   sƒ   |  j  d d d g d t d d d d g d	 d
 d g ƒ |  j d d d d t ƒ|  j d d d d d ƒ|  j |  j ƒ  d ƒ d  S(   NR8   s   -cs   --configR  R  s   my config fileRT   s   ~/.myconfigt    args_for_writing_out_config_files   -ws   --write-configs   --arg1R=   s   Arg1 help textRC   s   --flags   Flag help textR>   R?   s+  usage: .* \[-h\] -c CONFIG_FILE\s+\[-w CONFIG_OUTPUT_PATH\]\s* --arg1 ARG1\s*\[--flag\]\s*Args that start with '--' \(eg. --arg1\) can also be set in a config file\s*\(~/.myconfig or specified via -c\).\s*Config file syntax allows: key=value,\s*flag=true, stuff=\[a,b,c\] \(for details, see syntax at https://goo.gl/R74nmi\).\s*If an arg is specified in more than\s*one place, then commandline values\s*override config file values which override\s*defaults.\s*optional arguments:\s*-h, --help \s* show this help message and exit
\s*-c CONFIG_FILE, --config CONFIG_FILE\s+my config file\s*-w CONFIG_OUTPUT_PATH, --write-config CONFIG_OUTPUT_PATH\s*takes\s*the current command line args and writes them\s*out to a config file at the given path, then exits\s*--arg1 ARG1\s*Arg1 help text\s*--flag \s*Flag help text(   R2   R   R%   R   R+   (   R   (    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt   test_FormatHelp=  s    	c         C   s'   |  j  d ƒ |  j |  j ƒ  d ƒ d  S(   Nt   format_help_progs   usage: format_help_prog .*(   R2   R   R+   (   R   (    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt   test_FormatHelpProg[  s    c         C   s)   t  j d ƒ } |  j | j ƒ  d ƒ d  S(   NR  s   usage: format_help_prog .*(   R   R¤   R   R+   (   R   R#   (    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt   test_FormatHelpProgLib_  s    t   CustomClassc           B   s   e  Z d  „  Z d „  Z RS(   c         C   s   | |  _  d  S(   N(   Ro   (   R   Ro   (    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt   __init__d  s    c         C   s   |  j  S(   N(   Ro   (   R   (    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt   __str__g  s    (   R5   R6   R  R   (    (    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyR  c  s   	c         C   s(   |  d k r t  d ƒ ‚ n  t j |  ƒ S(   Nt   invalids   invalid name(   t	   ExceptionRø   R  (   t   s(    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt   valid_customj  s     c         C   s”  t  j d d d t ƒ } |  j d d g d d ƒ |  j d ƒ |  j d	 d
 t ƒ|  j d d
 t d d ƒ|  j d d d ƒ|  j d d
 t j ƒ|  j d d d d ƒd | j } | d 7} | d 7} | d 7} | d 7} |  j	 |  j
 j ƒ |  j | ƒ } |  j |  j
 j ƒ | j d ƒ d } | d 7} | d 7} | d 7} | d 7} |  j | j ƒ  j ƒ  | j ƒ  ƒ |  j t d  |  j d! | d" ƒd  S(#   NRQ   s   w+RS   R  s   -wt&   write_out_config_file_arg_help_messages   write configs   -not-config-file-settables   --config-file-settable-argRB   s   --config-file-settable-arg2Rd   i   s   --config-file-settable-flagR>   R?   s   --config-file-settable-customs   -ls   --config-file-settable-listRD   s   -w %s s   --config-file-settable-arg 1 s   --config-file-settable-flag s+   --config-file-settable-custom custom_value s   -l a -l b -l c -l d i    s   config-file-settable-arg = 1
s!   config-file-settable-flag = true
s+   config-file-settable-custom = custom_value
s)   config-file-settable-list = [a, b, c, d]
s   config-file-settable-arg2 = 3
s   Couldn't open / for writing:R/   s    -w /(   Rl   Rm   R   R2   R%   RG   Rø   R$  Ro   RÁ   R#   R   R'   R‚   t   seekRL   t   readR„   R    R¯   (   R   t   cfg_ft   command_line_argsRO   t   expected_config_file_contents(    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt&   testConstructor_WriteOutConfigFileArgso  s6    







c         C   sÍ  t  j d d d t ƒ } |  j d d g d d ƒ |  j d ƒ |  j d	 d
 d t d d ƒ|  j d d d t d d ƒ|  j d d ƒ |  j d d ƒ |  j d d ƒ |  j d d d d d ƒ|  j d d d d ƒd | j } | d  7} |  j |  j j	 ƒ |  j
 | d! i d" d 6d# d 6d$ d% 6d& d' ƒ} |  j |  j j	 ƒ | j d( ƒ d) } | d* 7} | d+ 7} | d, 7} | d- 7} | d. 7} |  j | j ƒ  j ƒ  | j ƒ  ƒ |  j t d/ |  j
 d0 | d1 ƒd  S(2   NRQ   s   w+RS   R  s   -wR%  s   write configs   -not-config-file-settables   -as   --arg1RB   RX   RÓ   s   -bs   --arg2Rd   i   s   -cs   --arg3s   -ds   --arg4s   -es   --arg5s   --config-file-settable-flagR>   R?   t   FLAG_ARGs   -ls   --config-file-settable-listRD   s   -w %s s   -l a -l b -l c -l d Ri   t   10R—   R²   t   SOME_OTHER_ENV_VARRF   s   arg3 = bla3
arg4 = bla4i    s)   config-file-settable-list = [a, b, c, d]
s
   arg1 = 10
s!   config-file-settable-flag = True
s   arg3 = bla3
s   arg4 = bla4
s	   arg2 = 3
s   Couldn't open / for writing:R/   s    -w /(   Rl   Rm   R   R2   R%   RG   Ro   RÁ   R#   R   R'   R‚   R&  RL   R'  R„   R    R¯   (   R   R(  R)  RO   R*  (    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt'   testConstructor_WriteOutConfigFileArgs2—  s>    

	




c         C   sj  t  j d d d t ƒ } |  j d d g d d ƒ |  j d ƒ |  j d	 d
 t ƒ|  j d d
 t d d ƒ|  j d d d ƒ|  j d d d d ƒd | j } | d 7} | d 7} | d 7} |  j |  j j	 ƒ |  j
 | ƒ } |  j |  j j	 ƒ | j d ƒ d } | d 7} | d 7} | d 7} |  j | j ƒ  j ƒ  | j ƒ  ƒ |  j t d |  j
 d | d ƒd  S(!   sÔ   Test config writing with long version of arg

        There was a bug where the long version of the
        args_for_writing_out_config_file was being dumped into the resultant
        output config file
        RQ   s   w+RS   R  s   --write-configR%  s   write configs   -not-config-file-settables   --config-file-settable-argRB   s   --config-file-settable-arg2Rd   i   s   --config-file-settable-flagR>   R?   s   -ls   --config-file-settable-listRD   s   --write-config %s s   --config-file-settable-arg 1 s   --config-file-settable-flag s   -l a -l b -l c -l d i    s   config-file-settable-arg = 1
s!   config-file-settable-flag = true
s)   config-file-settable-list = [a, b, c, d]
s   config-file-settable-arg2 = 3
s   Couldn't open / for writing:R/   s    --write-config /N(   Rl   Rm   R   R2   R%   RG   Ro   RÁ   R#   R   R'   R‚   R&  RL   R'  R„   R    R¯   (   R   R(  R)  RO   R*  (    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt*   testConstructor_WriteOutConfigFileArgsLongÃ  s0    






c         C   sm  |  j  } | j d d d d ƒ| j d d d t ƒ| j d ƒ | j d	 d
 d d ƒ } | j d d d t ƒ| j d d d t ƒ| j d d d d ƒ| j d t ƒ } | j d d ƒ | j d d ƒ | j d d d d ƒ| j d	 d d d ƒ } |  j t j	 | j d ƒ |  j t j	 | j d ƒ |  j
 ƒ  |  j  } | j d g  ƒ } |  j t | ƒ i  ƒ d  S(   Ns   -as   --arg-aRd   i   s   -bs   --arg-bRC   s   -cRe   R’   t   descriptiont   descrs   -ds   --arg-ds   -es   --arg-es   -fs   --arg-fi   s   -xs   --arg-xs   -ys   --arg-ys   -zs   --arg-zt   group2R/   (   R#   t   addR%   R   R$   Rp   R˜   R	  R   R   R2   R'   t   assertDictEqualt   vars(   R   R1   Rf   Rg   t   options(    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt   testMethodAliasesî  s&    	
	N(   R5   R6   t   __doc__R9   R   t   patchRÿ   R   R  R  R  R  R  R  R  R  R  t   objectR  t   staticmethodR$  R+  R/  R0  R8  (    (    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyRø   ¿  s$   					5					(	,	+t   TestConfigFileParsersc           B   s2   e  Z d  Z d „  Z d „  Z d „  Z d „  Z RS(   s-   Test ConfigFileParser subclasses in isolationc         C   s   t  j ƒ  } |  j t | j ƒ  ƒ d ƒ t d ƒ } | j | ƒ } | j | ƒ } |  j | j	 ƒ  j
 d d ƒ | ƒ |  j | i d d 6ƒ d  S(   Ni    s   a: 3
s   : s    = t   3R‹   (   R!   t   DefaultConfigFileParsert   assertGreatert   lent   get_syntax_descriptionR   R'   t	   serializeRL   Rƒ   t   replaceR5  (   R   R1   t   input_config_strt
   parsed_objt   output_config_str(    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt!   testDefaultConfigFileParser_Basic  s    c      
   C   s  t  j ƒ  } d d d d d d d d d	 d
 g
 } t d j | ƒ d ƒ } | j | ƒ } | j | ƒ } |  j d j d „  | Dƒ ƒ d | ƒ |  j | i d d 6d d 6d d d g d 6d d 6d d d g d 6ƒ |  j | d d d d g ƒ |  j | d d d d g ƒ d  S(   Ns   # comment1 s   [ some section ]s   ----s	   ---------s   _a: 3s   ; comment2 s   _b = cs   _list_arg1 = [a, b, c]s   _str_arg = trues   _list_arg2 = [1, 2, 3]s   
c         s   s0   |  ]& } | j  d  ƒ r | j d d ƒ Vq d S(   Rˆ   s   : s    = N(   t
   startswithRD  (   t   .0t   l(    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pys	   <genexpr>2  s    R>  t   _aR¸   t   _bR‹   R¹   t
   _list_arg1R—   t   _str_argR´   R²   t
   _list_arg2(	   R!   R?  R   t   joinR'   RC  RL   R5  RK   (   R   R1   t   config_linesRE  RF  RG  (    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt   testDefaultConfigFileParser_All  s2    	c         C   s±   y d d  l  } Wn t j d ƒ d  SXt j ƒ  } |  j t | j ƒ  ƒ d ƒ t d ƒ } | j	 | ƒ } | j
 t | ƒ ƒ } |  j | j ƒ  | ƒ |  j | i d d 6ƒ d  S(   NiÿÿÿÿsA   WARNING: PyYAML not installed. Couldn't test YAMLConfigFileParseri    s   a: '3'
R>  R‹   (   t   yamlt   loggingt   warningR!   t   YAMLConfigFileParserR@  RA  RB  R   R'   RC  t   dictRL   Rƒ   R5  (   R   RT  R1   RE  RF  RG  (    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt   testYAMLConfigFileParser_Basic@  s    c         C   sÁ   y d d  l  } Wn t j d ƒ d  SXt j ƒ  } d d d d d g } t d j | ƒ d ƒ } | j | ƒ } | j | ƒ } |  j	 | j
 ƒ  | ƒ |  j | i d	 d
 6d d d g d 6ƒ d  S(   NiÿÿÿÿsA   WARNING: PyYAML not installed. Couldn't test YAMLConfigFileParsers   a: '3's	   list_arg:s   - 1s   - 2s   - 3s   
R>  R‹   i   i   i   t   list_arg(   RT  RU  RV  R!   RW  R   RQ  R'   RC  RL   Rƒ   R5  (   R   RT  R1   RR  RE  RF  RG  (    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt   testYAMLConfigFileParser_AllS  s     	(   R5   R6   R9  RH  RS  RY  R[  (    (    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyR=  	  s
   		&	sÜ   

============================
ERROR: Many tests couldn't be run because 'import test.test_argparse' failed. Try building/installing python from source rather than through a package manager.
============================
s   argparse.ArgumentParsers   configargparse.ArgumentParseri
   c         C   s§   x  | D]˜ } t  j d | ƒ t t | | | | ƒ ƒ } xa t |  j d ƒ d ƒ D]G \ } } | | k rT t  j d | | k r‡ d n d | | f ƒ qT qT Wq Wd  S(   Ns   ##### Code around line %s #####s   
i   s
   %s %5d: %ss   **s     (   RU  t   debugRº   t   ranget	   enumeratet   split(   t   source_codet   line_numberst   context_linest   nt   lines_to_printt   n2t   line(    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt   print_source_code”  s    %	('   R   R!   t
   contextlibR    t   inspectRU  t   osR   Rl   R   t   unittestR   t   ImportErrorRI   t   ioR   t   environt	   getLoggert   loggert   DEBUGt   levelt   StreamHandlerR   t   stream_handlert
   addHandlerR   R   R   R7   Rø   R=  t   test.test_argparseR  R   t	   getsourcet   test_argparset   test_argparse_source_codeRD  Rg  (    (    (    s@   /Users/weisburd/code/ConfigArgParse/tests/test_configargparse.pyt   <module>   sN   	ÿ ÿ lÿ Kn