B
    u9a                 @   s  d Z ddddddddd	d
dddddddgZdZddlZddlZddlZdd ZyddlmZmZ W n$ e	k
r   dd Zdd ZY nX eZ
G dd deZG dd deZG dd deZG dd deZG d d deZG d!d" d"eZG d#d	 d	ZG d$d
 d
eZG d%d deZd&d' Zd(d) Zee
d*fee
d*fee
d+fee
d,fd-Zd.d/ Zd0d Zd1ZG d2d dZd3Zd4ZG d5d dZ G d6d dZ!G d7d de!Z"G d8d de!Z#d9d: Z$eZ%dS );z1.5.3Optionmake_optionSUPPRESS_HELPSUPPRESS_USAGEValuesOptionContainerOptionGroupOptionParserHelpFormatterIndentedHelpFormatterTitledHelpFormatterOptParseErrorOptionErrorOptionConflictErrorOptionValueErrorBadOptionErrorcheck_choicea"  
Copyright (c) 2001-2006 Gregory P. Ward.  All rights reserved.
Copyright (c) 2002-2006 Python Software Foundation.  All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

  * Redistributions of source code must retain the above copyright
    notice, this list of conditions and the following disclaimer.

  * Redistributions in binary form must reproduce the above copyright
    notice, this list of conditions and the following disclaimer in the
    documentation and/or other materials provided with the distribution.

  * Neither the name of the author nor the names of its
    contributors may be used to endorse or promote products derived from
    this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    Nc             C   s   d| j jt| | f S )Nz<%s at 0x%x: %s>)	__class____name__id)self r   /usr/lib/python3.7/optparse.py_reprO   s    r   )gettextngettextc             C   s   | S )Nr   )messager   r   r   r   \   s    r   c             C   s   |dkr| S |S )N   r   )Zsingularpluralnr   r   r   r   _   s    r   c               @   s   e Zd Zdd Zdd ZdS )r   c             C   s
   || _ d S )N)msg)r   r    r   r   r   __init__h   s    zOptParseError.__init__c             C   s   | j S )N)r    )r   r   r   r   __str__k   s    zOptParseError.__str__N)r   
__module____qualname__r!   r"   r   r   r   r   r   g   s   c               @   s   e Zd Zdd Zdd ZdS )r   c             C   s   || _ t|| _d S )N)r    str	option_id)r   r    optionr   r   r   r!   u   s    zOptionError.__init__c             C   s    | j rd| j | jf S | jS d S )Nzoption %s: %s)r&   r    )r   r   r   r   r"   y   s    zOptionError.__str__N)r   r#   r$   r!   r"   r   r   r   r   r   o   s   c               @   s   e Zd ZdS )r   N)r   r#   r$   r   r   r   r   r      s   c               @   s   e Zd ZdS )r   N)r   r#   r$   r   r   r   r   r      s   c               @   s   e Zd Zdd Zdd ZdS )r   c             C   s
   || _ d S )N)opt_str)r   r(   r   r   r   r!      s    zBadOptionError.__init__c             C   s   t d| j S )Nzno such option: %s)_r(   )r   r   r   r   r"      s    zBadOptionError.__str__N)r   r#   r$   r!   r"   r   r   r   r   r      s   c               @   s   e Zd Zdd Zdd ZdS )AmbiguousOptionErrorc             C   s   t | | || _d S )N)r   r!   possibilities)r   r(   r+   r   r   r   r!      s    zAmbiguousOptionError.__init__c             C   s   t d| jd| jf S )Nzambiguous option: %s (%s?)z, )r)   r(   joinr+   )r   r   r   r   r"      s    zAmbiguousOptionError.__str__N)r   r#   r$   r!   r"   r   r   r   r   r*      s   r*   c               @   s   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd S )!r	   Znonec          	   C   s   d | _ || _|d krLyttjd }W n ttfk
rB   d}Y nX |d8 }|| _t|t	|d |d  | _
| _d| _d| _d | _|| _d| _i | _d| _d| _d S )	NCOLUMNSP         r   z%defaultz%s %sz%s=%s)parserindent_incrementintosenvironKeyError
ValueErrorwidthminmaxhelp_positionmax_help_positioncurrent_indentlevel
help_widthshort_firstdefault_tagoption_strings_short_opt_fmt_long_opt_fmt)r   r2   r<   r8   r@   r   r   r   r!      s$    
 zHelpFormatter.__init__c             C   s
   || _ d S )N)r1   )r   r1   r   r   r   
set_parser   s    zHelpFormatter.set_parserc             C   s&   |dkrt d| d| d | _d S )N)  z/invalid metavar delimiter for short options: %rz%s)r7   rC   )r   delimr   r   r   set_short_opt_delimiter   s    
z%HelpFormatter.set_short_opt_delimiterc             C   s&   |dkrt d| d| d | _d S )N)=rG   z.invalid metavar delimiter for long options: %rz%s)r7   rD   )r   rH   r   r   r   set_long_opt_delimiter   s    
z$HelpFormatter.set_long_opt_delimiterc             C   s"   |  j | j7  _ |  jd7  _d S )Nr   )r=   r2   r>   )r   r   r   r   indent   s    zHelpFormatter.indentc             C   s"   |  j | j8  _ |  jd8  _d S )Nr   )r=   r2   r>   )r   r   r   r   dedent   s    zHelpFormatter.dedentc             C   s   t dd S )Nzsubclasses must implement)NotImplementedError)r   usager   r   r   format_usage   s    zHelpFormatter.format_usagec             C   s   t dd S )Nzsubclasses must implement)rN   )r   headingr   r   r   format_heading  s    zHelpFormatter.format_headingc             C   s.   t | j| j d}d| j }tj||||dS )N   rG   )initial_indentsubsequent_indent)r:   r8   r=   textwrapfill)r   text
text_widthrL   r   r   r   _format_text  s    
zHelpFormatter._format_textc             C   s   |r|  |d S dS d S )N
rF   )rZ   )r   descriptionr   r   r   format_description  s    z HelpFormatter.format_descriptionc             C   s   |rd|  | d S dS d S )Nr[   rF   )rZ   )r   epilogr   r   r   format_epilog  s    zHelpFormatter.format_epilogc             C   sP   | j d ks| js|jS | j j|j}|tks6|d kr<| j}|j| jt	|S )N)
r1   rA   helpdefaultsgetdest
NO_DEFAULTNO_DEFAULT_VALUEreplacer%   )r   r'   Zdefault_valuer   r   r   expand_default  s    zHelpFormatter.expand_defaultc                s   g } j | } j j d }t||krBd jd|f } j}nd jd||f }d}|| |jr |}t| j	}|d|d|d f  |
 fdd|dd  D  n|d	 d
kr|d
 d|S )Nr/   z%*s%s
rF   z	%*s%-*s  r   c                s   g | ]}d  j d|f qS )z%*s%s
rF   )r;   ).0line)r   r   r   
<listcomp>E  s   z/HelpFormatter.format_option.<locals>.<listcomp>r   r[   )rB   r;   r=   lenappendr`   rg   rV   wrapr?   extendr,   )r   r'   resultoptsZ	opt_widthindent_first	help_text
help_linesr   )r   r   format_option(  s$    



zHelpFormatter.format_optionc             C   s   |    d}x6|jD ],}| |}|| j|< t|t|| j }qW |    xF|jD ]<}x6|jD ],}| |}|| j|< t|t|| j }q`W qTW |   |   t	|d | j
| _t| j| j d| _d S )Nr   r/   rS   )rL   option_listformat_option_stringsrB   r:   rl   r=   option_groupsrM   r9   r<   r;   r8   r?   )r   r1   Zmax_lenoptstringsgroupr   r   r   store_option_stringsK  s     



z"HelpFormatter.store_option_stringsc                st   |  rF|jp|j   fdd|jD } fdd|jD }n|j}|j}jrb|| }n|| }d|S )Nc                s   g | ]}j | f qS r   )rC   )rh   Zsopt)metavarr   r   r   rj   a  s   z7HelpFormatter.format_option_strings.<locals>.<listcomp>c                s   g | ]}j | f qS r   )rD   )rh   Zlopt)r}   r   r   r   rj   c  s   z, )takes_valuer}   rc   upper_short_opts
_long_optsr@   r,   )r   r'   Z
short_optsZ	long_optsrq   r   )r}   r   r   rw   ]  s    

z#HelpFormatter.format_option_stringsN)r   r#   r$   re   r!   rE   rI   rK   rL   rM   rP   rR   rZ   r]   r_   rg   ru   r|   rw   r   r   r   r   r	      s    +
#c               @   s&   e Zd ZdddZdd Zd	d
 ZdS )r
   r/      Nr   c             C   s   t | |||| d S )N)r	   r!   )r   r2   r<   r8   r@   r   r   r   r!   t  s    zIndentedHelpFormatter.__init__c             C   s   t d| S )Nz
Usage: %s
)r)   )r   rO   r   r   r   rP   |  s    z"IndentedHelpFormatter.format_usagec             C   s   d| j d|f S )Nz%*s%s:
rF   )r=   )r   rQ   r   r   r   rR     s    z$IndentedHelpFormatter.format_heading)r/   r   Nr   )r   r#   r$   r!   rP   rR   r   r   r   r   r
   p  s      
c               @   s&   e Zd Zd
ddZdd Zdd	 ZdS )r   r   r   Nc             C   s   t | |||| d S )N)r	   r!   )r   r2   r<   r8   r@   r   r   r   r!     s    zTitledHelpFormatter.__init__c             C   s   d|  td|f S )Nz%s  %s
ZUsage)rR   r)   )r   rO   r   r   r   rP     s    z TitledHelpFormatter.format_usagec             C   s   d|d| j  t| f S )Nz%s
%s
z=-)r>   rl   )r   rQ   r   r   r   rR     s    z"TitledHelpFormatter.format_heading)r   r   Nr   )r   r#   r$   r!   rP   rR   r   r   r   r   r     s      
c             C   sh   | d d   dkrd}nD| d d   dkrDd}| dd  p@d} n| d d dkrZd}nd}|| |S )	Nr/   0x   Z0b0r      
   )lower)valtyperadixr   r   r   
_parse_num  s    r   c             C   s
   t | tS )N)r   r3   )r   r   r   r   
_parse_int  s    r   Zintegerzfloating-pointcomplex)r3   longfloatr   c             C   sF   t | j \}}y||S  tk
r@   ttd|||f Y nX d S )Nzoption %s: invalid %s value: %r)_builtin_cvtr   r7   r   r)   )r'   ry   valueZcvtZwhatr   r   r   check_builtin  s    r   c             C   s:   || j kr|S dtt| j }ttd|||f d S )Nz, z.option %s: invalid choice: %r (choose from %s))choicesr,   mapreprr   r)   )r'   ry   r   r   r   r   r   r     s    
)ZNOZDEFAULTc               @   s   e Zd Zddddddddd	d
ddgZdZdZdZdZdZdZ	e
e
e
e
edZdZdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* ZeeeeeeegZd+d, ZeZd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Z d7d8 Z!dS )9r   actionr   rc   defaultnargsconstr   callbackcallback_argscallback_kwargsr`   r}   )
storestore_const
store_truestore_falserm   append_constcountr   r`   version)r   r   r   r   rm   r   r   )r   rm   r   )r   rm   )r   r   )stringr3   r   r   r   choice)r3   r   r   r   r   Nc             O   sF   g | _ g | _| |}| | | | x| jD ]}||  q2W d S )N)r   r   _check_opt_strings_set_opt_strings
_set_attrsCHECK_METHODS)r   rq   attrscheckerr   r   r   r!   4  s    


zOption.__init__c             C   s   dd |D }|st d|S )Nc             S   s   g | ]}|r|qS r   r   )rh   ry   r   r   r   rj   K  s    z-Option._check_opt_strings.<locals>.<listcomp>z+at least one option string must be supplied)	TypeError)r   rq   r   r   r   r   G  s    zOption._check_opt_stringsc             C   s   x|D ]}t |dk r&td| | qt |dkrf|d dkrJ|d dksXtd| | | j| q|dd dkr|d dkstd| | | j| qW d S )	Nr/   z>invalid option string %r: must be at least two characters longr   -r   zMinvalid short option string %r: must be of the form -x, (x any non-dash char)z--zGinvalid long option string %r: must start with --, followed by non-dash)rl   r   r   rm   r   )r   rq   ry   r   r   r   r   P  s$    
zOption._set_opt_stringsc             C   sz   xP| j D ]F}||kr,t| |||  ||= q|dkrBt| |t qt| |d  qW |rvt| }tdd| | d S )Nr   zinvalid keyword arguments: %sz, )ATTRSsetattrrd   sortedkeysr   r,   )r   r   attrr   r   r   r   e  s    zOption._set_attrsc             C   s2   | j d krd| _ n| j | jkr.td| j  | d S )Nr   zinvalid action: %r)r   ACTIONSr   )r   r   r   r   _check_actionx  s    
zOption._check_actionc             C   s   | j d kr0| j| jkr| jd k	r(d| _ qd| _ n^t| j t rF| j j| _ | j dkrVd| _ | j | jkrrtd| j  | | j| jkrtd| j | d S )Nr   r   r%   zinvalid option type: %rz$must not supply a type for action %r)	r   r   ALWAYS_TYPED_ACTIONSr   
isinstancer   TYPESr   TYPED_ACTIONS)r   r   r   r   _check_type~  s    



zOption._check_typec             C   sr   | j dkrT| jd kr td| qnt| jttfsntdtt | jdd  | n| jd k	rntd| j  | d S )Nr   z/must supply a list of choices for type 'choice'z1choices must be a list of strings ('%s' supplied)'r   z#must not supply choices for type %r)r   r   r   r   tuplelistr%   split)r   r   r   r   _check_choice  s    


 
zOption._check_choicec             C   s\   | j | jkp| jd k	}| jd krX|rX| jrH| jd dd  dd| _n| jd d | _d S )Nr   r/   r   r)   r   )r   STORE_ACTIONSr   rc   r   rf   r   )r   r~   r   r   r   _check_dest  s    
zOption._check_destc             C   s*   | j | jkr&| jd k	r&td| j  | d S )Nz*'const' must not be supplied for action %r)r   CONST_ACTIONSr   r   )r   r   r   r   _check_const  s    zOption._check_constc             C   s<   | j | jkr| jd kr8d| _n| jd k	r8td| j  | d S )Nr   z*'nargs' must not be supplied for action %r)r   r   r   r   )r   r   r   r   _check_nargs  s    

zOption._check_nargsc             C   s   | j dkrrt| js$td| j | | jd k	rJt| jtsJtd| j | | jd k	rt| jtstd| j | nB| jd k	rtd| j | | jd k	rtd| | jd k	rtd| d S )Nr   zcallback not callable: %rz3callback_args, if supplied, must be a tuple: not %rz4callback_kwargs, if supplied, must be a dict: not %rz.callback supplied (%r) for non-callback optionz.callback_args supplied for non-callback optionz0callback_kwargs supplied for non-callback option)	r   callabler   r   r   r   r   r   dict)r   r   r   r   _check_callback  s0    






zOption._check_callbackc             C   s   d | j| j S )N/)r,   r   r   )r   r   r   r   r"     s    zOption.__str__c             C   s
   | j d k	S )N)r   )r   r   r   r   r~     s    zOption.takes_valuec             C   s   | j r| j d S | jd S d S )Nr   )r   r   )r   r   r   r   get_opt_string  s    
zOption.get_opt_stringc             C   s*   | j | j}|d kr|S || ||S d S )N)TYPE_CHECKERrb   r   )r   ry   r   r   r   r   r   check_value  s    zOption.check_valuec                s:   |d k	r6j dkr |S t fdd|D S d S )Nr   c                s   g | ]}  |qS r   )r   )rh   v)ry   r   r   r   rj     s    z(Option.convert_value.<locals>.<listcomp>)r   r   r   )r   ry   r   r   )ry   r   r   convert_value   s    
zOption.convert_valuec             C   s$   |  ||}| | j| j||||S )N)r   take_actionr   rc   )r   ry   r   valuesr1   r   r   r   process  s    zOption.processc       	      C   s:  |dkrt ||| n|dkr2t ||| j n|dkrHt ||d n|dkr^t ||d n|dkrz||g | n|dkr||g | j n|d	krt ||||d
d  n||dkr| jpd}| jpi }| j| |||f|| nF|dkr|  |  n*|dkr(|	  |  nt
d| j dS )Nr   r   r   Tr   Frm   r   r   r   r   r   r   r`   r   zunknown action %r)r   r   ensure_valuerm   r   r   r   
print_helpexitprint_versionr7   r   )	r   r   rc   ry   r   r   r1   argskwargsr   r   r   r     s4    





zOption.take_action)"r   r#   r$   r   r   r   r   r   r   r   r   r   r   r   r!   r   r   r   r   r   r   r   r   r   r   r"   r   __repr__r~   r   r   r   r   r   r   r   r   r   r     sd   
			ZSUPPRESSHELPZSUPPRESSUSAGEc               @   s^   e Zd ZdddZdd ZeZdd Zdd	 Zd
d Z	dd Z
dddZdddZdd ZdS )r   Nc             C   s*   |r&x |  D ]\}}t| || qW d S )N)itemsr   )r   ra   r   r   r   r   r   r!   9  s    zValues.__init__c             C   s
   t | jS )N)r%   __dict__)r   r   r   r   r"   >  s    zValues.__str__c             C   s2   t |tr| j|jkS t |tr*| j|kS tS d S )N)r   r   r   r   NotImplemented)r   otherr   r   r   __eq__C  s
    


zValues.__eq__c             C   s:   x4t | D ](}||kr
|| }|d k	r
t| || q
W d S )N)dirr   )r   r   r   Zdvalr   r   r   _update_carefulK  s
    zValues._update_carefulc             C   s   | j | d S )N)r   update)r   r   r   r   r   _update_looseX  s    zValues._update_loosec             C   s8   |dkr|  | n |dkr(| | ntd| d S )NcarefulZloosezinvalid update mode: %r)r   r   r7   )r   r   moder   r   r   _update`  s
    zValues._updater   c             C   s&   t | tj| }| t|| d S )N)
__import__sysmodulesr   vars)r   modnamer   modr   r   r   read_moduleh  s    
zValues.read_modulec             C   s&   i }t t| | | || d S )N)execopenreadr   )r   filenamer   r   r   r   r   	read_filem  s    zValues.read_filec             C   s.   t | |rt| |d kr$t| || t| |S )N)hasattrgetattrr   )r   r   r   r   r   r   r   r  s    zValues.ensure_value)N)r   )r   )r   r#   r$   r!   r"   r   r   r   r   r   r   r   r   r   r   r   r   r   r   7  s   


c               @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!S )"r   c             C   s&   |    || _| | | | d S )N)_create_option_listoption_classset_conflict_handlerset_description)r   r   conflict_handlerr\   r   r   r   r!     s    
zOptionContainer.__init__c             C   s   i | _ i | _i | _d S )N)
_short_opt	_long_optra   )r   r   r   r   _create_option_mappings  s    z'OptionContainer._create_option_mappingsc             C   s   |j | _ |j| _|j| _d S )N)r   r   ra   )r   r1   r   r   r   _share_option_mappings  s    z&OptionContainer._share_option_mappingsc             C   s   |dkrt d| || _d S )N)errorresolvez$invalid conflict_resolution value %r)r7   r   )r   handlerr   r   r   r     s    z$OptionContainer.set_conflict_handlerc             C   s
   || _ d S )N)r\   )r   r\   r   r   r   r     s    zOptionContainer.set_descriptionc             C   s   | j S )N)r\   )r   r   r   r   get_description  s    zOptionContainer.get_descriptionc             C   s   | ` | `| `d S )N)r   r   ra   )r   r   r   r   destroy  s    zOptionContainer.destroyc             C   s   g }x,|j D ]"}|| jkr||| j| f qW x,|jD ]"}|| jkr:||| j| f q:W |r| j}|dkrtdddd |D  |nh|dkrx^|D ]V\}}|dr|j	| | j|= n|j 	| | j|= |j s|js|j
j	| qW d S )Nr   z conflicting option string(s): %sz, c             S   s   g | ]}|d  qS )r   r   )rh   cor   r   r   rj     s    z3OptionContainer._check_conflict.<locals>.<listcomp>r   z--)r   r   rm   r   r   r   r   r,   
startswithremove	containerrv   )r   r'   Zconflict_optsry   r   Zc_optionr   r   r   _check_conflict  s.    



zOptionContainer._check_conflictc             O   s   t |d tr| j||}n8t|dkrL|sL|d }t |tsTtd| ntd| | | j| | |_	x|j
D ]}|| j|< qxW x|jD ]}|| j|< qW |jd k	r|jtk	r|j| j|j< n|j| jkrd | j|j< |S )Nr   r   znot an Option instance: %rzinvalid arguments)r   r%   r   rl   r   r   r  rv   rm   r  r   r   r   r   rc   r   rd   ra   )r   r   r   r'   ry   r   r   r   
add_option  s(    



zOptionContainer.add_optionc             C   s   x|D ]}|  | qW d S )N)r  )r   rv   r'   r   r   r   add_options  s    
zOptionContainer.add_optionsc             C   s   | j |p| j|S )N)r   rb   r   )r   r(   r   r   r   
get_option  s    zOptionContainer.get_optionc             C   s   || j kp|| jkS )N)r   r   )r   r(   r   r   r   
has_option  s    
zOptionContainer.has_optionc             C   sv   | j |}|d kr | j|}|d kr4td| x|jD ]}| j |= q<W x|jD ]}| j|= qTW |jj| d S )Nzno such option %r)	r   rb   r   r7   r   r   r  rv   r  )r   r(   r'   ry   r   r   r   remove_option  s    zOptionContainer.remove_optionc             C   sB   | j s
dS g }x(| j D ]}|jtk	r||| qW d|S )NrF   )rv   r`   r   rm   ru   r,   )r   	formatterrp   r'   r   r   r   format_option_help  s    
z"OptionContainer.format_option_helpc             C   s   | |  S )N)r]   r   )r   r
  r   r   r   r]   (  s    z"OptionContainer.format_descriptionc             C   s:   g }| j r|| | | jr0|| | d|S )Nr[   )r\   rm   r]   rv   r  r,   )r   r
  rp   r   r   r   format_help+  s    zOptionContainer.format_helpN)r   r#   r$   r!   r   r   r   r   r   r   r  r  r  r  r  r	  r  r]   r  r   r   r   r   r   x  s     			c               @   s6   e Zd ZdddZdd Zdd Zdd	 Zd
d ZdS )r   Nc             C   s$   || _ t| |j|j| || _d S )N)r1   r   r!   r   r   title)r   r1   r  r\   r   r   r   r!   6  s    zOptionGroup.__init__c             C   s   g | _ | | j d S )N)rv   r   r1   )r   r   r   r   r   <  s    zOptionGroup._create_option_listc             C   s
   || _ d S )N)r  )r   r  r   r   r   	set_title@  s    zOptionGroup.set_titlec             C   s   t |  | `d S )N)r   r   rv   )r   r   r   r   r   C  s    
zOptionGroup.destroyc             C   s0   | | j}|  |t| |7 }|  |S )N)rR   r  rL   r   r  rM   )r   r
  rp   r   r   r   r  J  s
    zOptionGroup.format_help)N)r   r#   r$   r!   r   r  r   r  r   r   r   r   r   4  s
   
c            
   @   s^  e Zd Zg Zddedddddddf
ddZdd Zdd	 Zd
d Zdd Z	dOddZ
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' ZdPd(d)Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 ZdQd;d<Z d=d> Z!d?d@ Z"dRdAdBZ#dCdD Z$dSdEdFZ%dTdGdHZ&dIdJ Z'dUdKdLZ(dVdMdNZ)dS )Wr   Nr   Tc             C   sr   t | ||| | | |	| _|| _d| _d| _|d kr@t }|| _| j	|  |
| _
| j||d |   d S )NT)add_help)r   r!   	set_usageprogr   allow_interspersed_argsprocess_default_valuesr
   r
  rE   r^   _populate_option_list_init_parsing_state)r   rO   rv   r   r   r   r\   r
  Zadd_help_optionr  r^   r   r   r   r!     s    
zOptionParser.__init__c             C   s2   t |  x| jD ]}|  qW | `| `| `d S )N)r   r   rx   rv   r
  )r   r{   r   r   r   r     s    
zOptionParser.destroyc             C   s   g | _ g | _|   d S )N)rv   rx   r   )r   r   r   r   r     s    z OptionParser._create_option_listc             C   s   | j dddtdd d S )Nz-hz--helpr`   zshow this help message and exit)r   r`   )r  r)   )r   r   r   r   _add_help_option  s    zOptionParser._add_help_optionc             C   s   | j ddtdd d S )Nz	--versionr   z&show program's version number and exit)r   r`   )r  r)   )r   r   r   r   _add_version_option  s    z OptionParser._add_version_optionc             C   s>   | j r| | j  |r | | | jr.|   |r:|   d S )N)standard_option_listr  r   r  r  )r   rv   r  r   r   r   r    s    
z"OptionParser._populate_option_listc             C   s   d | _ d | _d | _d S )N)rargslargsr   )r   r   r   r   r    s    z OptionParser._init_parsing_statec             C   sL   |d krt d| _n4|tkr$d | _n$| drB|dd  | _n|| _d S )Nz%prog [options]zusage:    )r)   rO   r   r   r  )r   rO   r   r   r   r    s    zOptionParser.set_usagec             C   s
   d| _ d S )NT)r  )r   r   r   r   enable_interspersed_args  s    z%OptionParser.enable_interspersed_argsc             C   s
   d| _ d S )NF)r  )r   r   r   r   disable_interspersed_args  s    z&OptionParser.disable_interspersed_argsc             C   s
   || _ d S )N)r  )r   r   r   r   r   set_process_default_values  s    z'OptionParser.set_process_default_valuesc             C   s   || j |< d S )N)ra   )r   rc   r   r   r   r   set_default  s    zOptionParser.set_defaultc             K   s   | j | d S )N)ra   r   )r   r   r   r   r   set_defaults  s    zOptionParser.set_defaultsc             C   s.   | j d d  }x| jD ]}||j  qW |S )N)rv   rx   ro   )r   optionsr{   r   r   r   _get_all_options  s    zOptionParser._get_all_optionsc             C   sd   | j st| jS | j }x@|  D ]4}||j}t|tr$|	 }|
||||j< q$W t|S )N)r  r   ra   copyr"  rb   rc   r   r%   r   r   )r   ra   r'   r   r(   r   r   r   get_default_values  s    


zOptionParser.get_default_valuesc             O   sz   t |d tr t| f||}nJt|dkrb|sb|d }t |tsNtd| |j| k	rjtdntd| j| |S )Nr   r   znot an OptionGroup instance: %rz"invalid OptionGroup (wrong parser)zinvalid arguments)	r   r%   r   rl   r   r1   r7   rx   rm   )r   r   r   r{   r   r   r   add_option_group+  s    


zOptionParser.add_option_groupc             C   s0   | j |p| j|}|r,|j| k	r,|jS d S )N)r   rb   r   r  )r   r(   r'   r   r   r   get_option_group;  s
    zOptionParser.get_option_groupc             C   s&   |d krt jdd  S |d d  S d S )Nr   )r   argv)r   r   r   r   r   	_get_argsE  s    zOptionParser._get_argsc          
   C   s   |  |}|d kr|  }|| _g  | _}|| _y| |||}W n4 ttfk
rv } z| t	| W d d }~X Y nX || }| 
||S )N)r(  r$  r  r  r   _process_argsr   r   r   r%   check_values)r   r   r   r  r  stoperrr   r   r   
parse_argsK  s    

 zOptionParser.parse_argsc             C   s   ||fS )Nr   )r   r   r   r   r   r   r*  r  s    zOptionParser.check_valuesc             C   s   x|r|d }|dkr |d= d S |dd dkr>|  || q|d d dkrht|dkrh| || q| jr|| |d= qd S qW d S )Nr   z--r/   r   r   )_process_long_optrl   _process_short_optsr  rm   )r   r  r  r   argr   r   r   r)    s    

zOptionParser._process_argsc             C   s   t || jS )N)_match_abbrevr   )r   ry   r   r   r   _match_long_opt  s    zOptionParser._match_long_optc       
      C   s   | d}d|kr4|dd\}}|d| d}n|}d}| |}| j| }| r|j}t||k r| t	dd|||d  q|dkr| d}	qt
|d| }	|d|= n|r| td	|  nd }	|||	||  d S )
Nr   rJ   r   TFz.%(option)s option requires %(number)d argumentz/%(option)s option requires %(number)d arguments)r'   numberz%s option does not take a value)popr   insertr2  r   r~   r   rl   r   r   r   r)   r   )
r   r  r   r0  ry   Znext_argZhad_explicit_valuer'   r   r   r   r   r   r.    s0    


zOptionParser._process_long_optc             C   s   | d}d}d}x|dd  D ]}d| }| j|}|d7 }|sLt|| r|t|k rx|d||d   d}|j}	t||	k r| t	dd|	||	d  q|	dkr| d}
qt
|d|	 }
|d|	= nd }
|||
||  |r P q W d S )	Nr   Fr   r   Tz.%(option)s option requires %(number)d argumentz/%(option)s option requires %(number)d arguments)r'   r3  )r4  r   rb   r   r~   rl   r5  r   r   r   r   r   )r   r  r   r0  r+  iZchry   r'   r   r   r   r   r   r/    s6    
z OptionParser._process_short_optsc             C   s&   | j d krtjtjd S | j S d S )Nr   )r  r4   pathbasenamer   r'  )r   r   r   r   get_prog_name  s    
zOptionParser.get_prog_namec             C   s   | d|  S )Nz%prog)rf   r9  )r   sr   r   r   expand_prog_name  s    zOptionParser.expand_prog_namec             C   s   |  | jS )N)r;  r\   )r   r   r   r   r     s    zOptionParser.get_descriptionr   c             C   s   |rt j| t | d S )N)r   stderrwriter   )r   statusr    r   r   r   r     s    zOptionParser.exitc             C   s(   |  tj | dd|  |f  d S )Nr/   z%s: error: %s
)print_usager   r<  r   r9  )r   r    r   r   r   r     s    zOptionParser.errorc             C   s"   | j r| j| | j S dS d S )NrF   )rO   r
  rP   r;  )r   r   r   r   	get_usage#  s    zOptionParser.get_usagec             C   s   | j rt|  |d d S )N)file)rO   printr@  )r   rA  r   r   r   r?  *  s    	zOptionParser.print_usagec             C   s   | j r| | j S dS d S )NrF   )r   r;  )r   r   r   r   get_version6  s    zOptionParser.get_versionc             C   s   | j rt|  |d d S )N)rA  )r   rB  rC  )r   rA  r   r   r   r   <  s    zOptionParser.print_versionc             C   s   |d kr| j }||  g }||td |  | jrZ|t| | |d x(| j	D ]}||
| |d qbW |  d|d d S )NZOptionsr[   rF   rk   )r
  r|   rm   rR   r)   rL   rv   r   r  rx   r  rM   r,   )r   r
  rp   r{   r   r   r   r  G  s    

zOptionParser.format_option_helpc             C   s   | | jS )N)r_   r^   )r   r
  r   r   r   r_   X  s    zOptionParser.format_epilogc             C   sn   |d kr| j }g }| jr*||  d  | jrD|| |d  || | || | d|S )Nr[   rF   )	r
  rO   rm   r@  r\   r]   r  r_   r,   )r   r
  rp   r   r   r   r  [  s    zOptionParser.format_helpc             C   s    |d krt j}||   d S )N)r   stdoutr=  r  )r   rA  r   r   r   r   g  s    zOptionParser.print_help)T)NN)r   N)N)N)N)N)N)*r   r#   r$   r  r   r!   r   r   r  r  r  r  r  r  r  r  r  r   r"  r$  r%  r&  r(  r-  r*  r)  r2  r.  r/  r9  r;  r   r   r   r@  r?  rC  r   r  r_   r  r   r   r   r   r   r   R  s^   F

	

'3	$)





c                sZ    |kr S  fdd|  D }t|dkr6|d S |sDt n|  t |d S )Nc                s   g | ]}|  r|qS r   )r  )rh   Zword)r:  r   r   rj     s    z!_match_abbrev.<locals>.<listcomp>r   r   )r   rl   r   sortr*   )r:  Zwordmapr+   r   )r:  r   r1  t  s    
r1  )&__version____all__Z__copyright__r   r4   rV   r   r   r   ImportErrorr)   	Exceptionr   r   r   r   r   r*   r	   r
   r   r   r   r   r   r   r   r   rd   r   r   r   r   r   r   r   r1  r   r   r   r   r   <module>   s|    

 P


  uA =    &