ó
_ªÌWc           @   s  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 d  d l Z e j d d f k  r„ d  d l	 Z
 n d  d l
 Z
 e j d d f k r¸ d  d l m Z n d  d l m Z e j ƒ  Z e j e _ e j e j ƒ Z e j 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 d f k  rÀe j d d d d d d d ƒ n e j d ƒ n9 Xe j e j  ƒ Z! e! j" d d ƒ Z! e! d Ud d „ Z# d S(   iÿÿÿÿNi   i   i   i    (   t   StringIOc         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    			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#   R$   (    (    s@   /Users/weisburd/code/configargparse/tests/test_configargparse.pyt   assertParseArgsRaises=   s    (   t   __name__t
   __module__R&   R(   (    (    (    s@   /Users/weisburd/code/configargparse/tests/test_configargparse.pyR   +   s   	t   TestBasicUseCasesc           B   se   e  Z d  „  Z d „  Z e 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(   R&   (   R   (    (    s@   /Users/weisburd/code/configargparse/tests/test_configargparse.pyt   setUpC   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 d+ k  r‹ d n d d d ƒ|  j t j d, k  r³ d n d d d ƒ|  j t 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(   i   i   (   i   i   (   i   i   (   R   t   intR   t   floatR(   t   syst   version_infoR   t   assertListEqualR.   t   assertEqualt   arg_xR5   t   arg_zR   R   R   (   R   t   ns(    (    s@   /Users/weisburd/code/configargparse/tests/test_configargparse.pyt   testBasicCase1F   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
 dL 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 d  ƒ |  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(M   Nt   modet   wt   deletet   default_config_filess   /etc/settings.inis   /home/jeff/.user_settingst   vcfR/   R0   R1   s   Variant file(s)s   --genomes   Path to genome fileR7   s   -vR4   t   verboseR2   R3   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
se   usage: .* \[-h\] --genome GENOME \[-v\] -g MY_CFG_FILE \[-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(   i   i   (   t   tempfilet   NamedTemporaryFileR   t   flushR&   t   nameR   t   add_argument_groupR(   R=   R>   R   R@   t   genomeRJ   R   t   dbsnpR   RT   R?   RI   R   R   t   writeR   t   close(   R   t
   use_groupst   default_config_fileR%   t   gt   config_file2RC   (    (    s@   /Users/weisburd/code/configargparse/tests/test_configargparse.pyt   testBasicCase2ˆ   sž    







c         C   s   |  j  d t ƒ d  S(   NRi   (   Rm   R   (   R   (    (    s@   /Users/weisburd/code/configargparse/tests/test_configargparse.pyt   testBasicCase2_WithGroups  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   NRE   RF   RG   RY   t   group1s   --genomeR1   s   Path to genome fileR7   s   -vR4   RJ   R2   R3   s   -f1s   --type1-cfg-fileRK   s   -f2s   --type2-cfg-files   -fs   --formatRN   RO   RP   RQ   RR   RS   RT   RU   RV   RL   RW   RX   s   -bs   --bamt   store_constt   constt   BAMt
   BAM_FORMATR#   s   --genome hg19 -f1 %s --bamR\   R]   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
(   R`   Ra   R   R   Rd   R   t   add_mutually_exclusive_groupR   Rc   R@   Re   RJ   R   RT   R   R   R   Rh   (   R   t   config_fileR%   Rk   RC   (    (    s@   /Users/weisburd/code/configargparse/tests/test_configargparse.pyt   testMutuallyExclusiveArgs  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(%   NRE   RF   RG   s   --i = Bs   p = 10t   progt   myProgRY   t   actionst   add_helps   -ps   --pR6   R7   R1   s   set db parametert   createt   parentss   create the orbix environments   --iRL   t   INITRN   t   At   BRX   s   -configRK   t   updates   update the orbix environments   -config2R#   s   create -p 2 -config i   s   update -config2 i
   (   R`   Ra   R   Rg   Rb   R   t   ArgumentParsert   add_subparsersR   R   R;   t
   add_parserR   Rc   R@   R%   t   iRh   (	   R   t   config_file1Rl   R   t
   subparserst   parent_parsert   create_pt   update_pRC   (    (    s@   /Users/weisburd/code/configargparse/tests/test_configargparse.pyt   testSubParsersE  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   --XRK   t   is_write_out_config_file_argsC   arg with is_write_out_config_file_arg=True must have action='store's   -ys   --YR2   R8   (   R   t
   ValueErrorR   R   (   R   (    (    s@   /Users/weisburd/code/configargparse/tests/test_configargparse.pyt   testAddArgsErrorsi  s    c      	   C   sB  |  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	 d  ƒ |  j | j t ƒ |  j | j d g ƒ |  j |  j ƒ  d ƒ |  j t j d) k  r<d n d d d ƒ|  j d d d d d ƒ|  j t 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% d& g ƒ |  j d' t ƒ |  j d d d d" d i d$ d  6ƒ \ } } |  j | d% d& d d( g ƒ d  S(+   Ns   -xR7   R6   s   --ys   --zs   --cs   --bR2   R3   s   --aR8   R#   s   -x 1R]   R:   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   --blat   3t   ignore_unknown_config_file_keyst   1(   i   i   (   i   i   (   R   R   R;   R<   R   R@   t   xt   yt   zt   cR   t   bt   aR   R   R(   R=   R>   R   R?   R&   R   (   R   RC   R#   (    (    s@   /Users/weisburd/code/configargparse/tests/test_configargparse.pyt   testConfigFileSyntaxt  sN    "		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  ƒ  |  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 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  ƒ d  S(#   Ns   --heightRL   t   HEIGHTR7   s   --do-itR4   R”   t   FLAG1R2   R3   s   --dont-do-itt   FLAG2t   store_falseR9   R]   t   tallt   yest   nos   -vs	   --verboset   VERBOSEsN   Unexpected value for VERBOSE: 'bla'. Expecting 'true', 'false', 'yes', or 'no'R   R:   s   verbose=trueRt   RJ   s   -fs   --filet   FILESR8   R6   s   [1,2,3]t   file(   R&   R   R   R   R@   t   heightR”   R   R(   RJ   R;   R¤   R   (   R   RC   (    (    s@   /Users/weisburd/code/configargparse/tests/test_configargparse.pyt   testConfigOrEnvValueErrorsÌ  s<    
##
#
"#c         C   sB  |  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 d  ƒ |  j | j d  ƒ |  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   --arg2RL   t   TEST2R6   s   -ys   --arg3R2   R8   s   -zs   --arg4R7   s   -ws   --arg4-moreR9   R]   t   0t	   TEST_ARG0R“   t	   TEST_ARG1R   t	   TEST_ARG2t   22t
   arg4_valuet	   TEST_ARG4t   magict   TEST_ARG4_MOREi   (   R&   R   R   R;   R   R@   t   arg0R   t   arg1t   arg2t   arg4t	   arg4_more(   R   RC   (    (    s@   /Users/weisburd/code/configargparse/tests/test_configargparse.pyt   testAutoEnvVarPrefixò  s&    (   R)   R*   R-   RD   R   Rm   Rn   Rw   R‹   RŽ   Rš   R¦   R¹   (    (    (    s@   /Users/weisburd/code/configargparse/tests/test_configargparse.pyR+   B   s   		B†		3	$		X	&t   TestMiscc           B   sk   e  Z d  Z d „  Z d d „ Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z d	 „  Z d
 „  Z RS(   s   Test edge casesc         C   s   |  j  d g  ƒ d  S(   NR,   (   R&   (   R   (    (    s@   /Users/weisburd/code/configargparse/tests/test_configargparse.pyR-     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(   NRx   t   usaget   tests:   kwargs besides 'name' can only be passed in the first time(   R   t   getArgumentParserR@   R»   Rx   R   R   (   R   Rc   R%   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
   positionalRL   R   (   t   assertRaisesR   R   t   assertIsNotNoneR@   R4   (   R   R2   (    (    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—   R2   Rž   RK   s   -cs   --configs   --xR7   RE   RF   RG   s   x=blaR#   s   -c %sR   (   RÄ   R   R   R   R`   Ra   Rg   Rb   R   Rc   R@   R”   (   R   Rv   RC   (    (    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
 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 ƒ d  ƒ |  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($   NRE   RF   RG   s   genome=hg19R,   s   -cs   --configt   config_arg_is_requiredt   config_arg_help_messages   my config fileRH   s   --genomeR1   s   Path to genome fileR7   i   s    argument -c/--config is requireds#   arguments are required: -c/--configs   -c R\   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 argumentsR:   s   arg1 = 3Rµ   R9   R#   (   i   i   (   R`   Ra   R   Rg   Rb   R&   Rc   R   R(   R=   R>   R   R@   Re   R   R   R   t   print_valuest   stderrR   R   R   R   R   R   t   getattr(   R   t   temp_cfgt	   temp_cfg2RC   R#   (    (    s@   /Users/weisburd/code/configargparse/tests/test_configargparse.pyt   testConstructor_ConfigFileArgs2  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(   NR,   s   -cs   --configRÈ   RÉ   s   my config fileRH   s   ~/.myconfigt    args_for_writing_out_config_files   -ws   --write-configs   --arg1R1   s   Arg1 help textR7   s   --flags   Flag help textR2   R3   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(   R&   R   R   R   R   (   R   (    (    s@   /Users/weisburd/code/configargparse/tests/test_configargparse.pyt   test_FormatHelph  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(    NRE   s   w+RG   RÑ   s   -wt&   write_out_config_file_arg_help_messages   write configs   -not-config-file-settables   --config-file-settable-argR6   s   --config-file-settable-arg2RX   i   s   --config-file-settable-flagR2   R3   s   -ls   --config-file-settable-listR8   s   -w %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    -w /(   R`   Ra   R   R&   R   R;   Rc   t   assertFalseR   R   R   t
   assertTruet   seekR@   t   readt   stripR   R   (   R   t   cfg_ft   command_line_argsRC   t   expected_config_file_contents(    (    s@   /Users/weisburd/code/configargparse/tests/test_configargparse.pyt&   testConstructor_WriteOutConfigFileArgs†  s0    





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   NRE   s   w+RG   RÑ   s   -wRÓ   s   write configs   -not-config-file-settables   -as   --arg1R6   RL   t   ARG1s   -bs   --arg2RX   i   s   -cs   --arg3s   -ds   --arg4s   -es   --arg5s   --config-file-settable-flagR2   R3   t   FLAG_ARGs   -ls   --config-file-settable-listR8   s   -w %s s   -l a -l b -l c -l d R]   t   10Rt   R   t   SOME_OTHER_ENV_VARR:   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 /(   R`   Ra   R   R&   R   R;   Rc   RÔ   R   R   R   RÕ   RÖ   R@   R×   RØ   R   R   (   R   RÙ   RÚ   RC   RÛ   (    (    s@   /Users/weisburd/code/configargparse/tests/test_configargparse.pyt'   testConstructor_WriteOutConfigFileArgs2«  s>    

	




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-aRX   i   s   -bs   --arg-bR7   s   -cRY   Ro   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   Rd   Ru   RÄ   R   R   R&   R   t   assertDictEqualt   vars(   R   R%   RZ   R[   t   options(    (    s@   /Users/weisburd/code/configargparse/tests/test_configargparse.pyt   testMethodAliases×  s&    	
	N(   R)   R*   t   __doc__R-   R   R¿   RÂ   RÆ   RÇ   RÐ   RÒ   RÜ   Rá   Ré   (    (    (    s@   /Users/weisburd/code/configargparse/tests/test_configargparse.pyRº     s   					6		%	,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 k ƒ t d ƒ } | j | ƒ } | j | ƒ } |  j | j	 ƒ  j
 d d ƒ | ƒ |  j | t d g ƒ ƒ d  S(   Ni    s   a: 3
s   : s    = R™   R‘   (   R™   R‘   (   R   t   DefaultConfigFileParserRÕ   t   lent   get_syntax_descriptionR    R   t	   serializeR@   t   getvaluet   replaceRæ   t   dict(   R   R%   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 | t d d d d d d g f d d d d d g f g ƒ ƒ |  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(   t   _s   : s    = N(   t
   startswithRñ   (   t   .0t   l(    (    s@   /Users/weisburd/code/configargparse/tests/test_configargparse.pys	   <genexpr>  s    t   _aR‘   t   _bR—   t
   _list_arg1R™   R˜   t   _str_argRt   t
   _list_arg2R“   R   (   Rû   R‘   (   s   _bR—   (   Rþ   s   true(
   R   Rì   R    t   joinR   Rï   R@   Ræ   Rò   R?   (   R   R%   t   config_linesRó   Rô   Rõ   (    (    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 k ƒ t d ƒ } | j	 | ƒ } | j
 t | ƒ ƒ } |  j | j ƒ  | ƒ |  j | t d g ƒ ƒ d  S(   NiÿÿÿÿsA   WARNING: PyYAML not installed. Couldn't test YAMLConfigFileParseri    s   a: '3'
R™   R‘   (   R™   R‘   (   t   yamlt   loggingt   warningR   t   YAMLConfigFileParserRÕ   Rí   Rî   R    R   Rï   Rò   R@   Rð   Ræ   (   R   R  R%   Ró   Rô   Rõ   (    (    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 | t d d d d d g f g ƒ ƒ d  S(   NiÿÿÿÿsA   WARNING: PyYAML not installed. Couldn't test YAMLConfigFileParsers   a: '3's	   list_arg:s   - 1s   - 2s   - 3s   
R™   R‘   t   list_argi   i   i   (   R™   R‘   (   R  R  R  R   R  R    R   R   Rï   R@   Rð   Ræ   Rò   (   R   R  R%   R  Ró   Rô   Rõ   (    (    s@   /Users/weisburd/code/configargparse/tests/test_configargparse.pyt   testYAMLConfigFileParser_All<  s$    	(   R)   R*   Rê   Rö   R  R  R	  (    (    (    s@   /Users/weisburd/code/configargparse/tests/test_configargparse.pyRë   ò  s
   		&	s   

t   =i   s2   
INFO: Skipping tests for argparse (Python < 2.7)
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     (   R  t   debugt   sett   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	   functoolst   inspectR  R=   R`   R   R>   t	   unittest2t   unittestt   ioR    t	   getLoggert   loggert   DEBUGt   levelt   StreamHandlert   stdoutt   stream_handlert
   addHandlerR   R   R+   Rº   Rë   t   test.test_argparseR¼   t   ImportErrort   infoR   t	   getsourcet   test_argparset   test_argparse_source_codeRñ   R  (    (    (    s@   /Users/weisburd/code/configargparse/tests/test_configargparse.pyt   <module>   sF   	ÿ Æëq"