???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................3

  \                 @   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d=ZG d3d dZd>Zd?ZG d7d dZ G d8d dZ!G d9d de!Z"G d:d de!Z#d;d< 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/lib64/python3.6/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singularZ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 j| | || _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| 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 )	NZ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   r0   r:   r6   r>   r   r   r   r       s$    
 zHelpFormatter.__init__c             C   s
   || _ d S )N)r/   )r   r/   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)rD   rE   )r5   rA   )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=rE   z.invalid metavar delimiter for long options: %rz%s)rH   rE   )r5   rB   )r   rF   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;   r0   r<   )r   r   r   r   indent   s    zHelpFormatter.indentc             C   s"   |  j | j8  _ |  jd8  _d S )Nr   )r;   r0   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)rL   )r   headingr   r   r   format_heading  s    zHelpFormatter.format_headingc             C   s.   t | j| j d}d| j }tj||||dS )N   rE   )Zinitial_indentZsubsequent_indent)r8   r6   r;   textwrapZfill)r   textZ
text_widthrJ   r   r   r   _format_text  s    
zHelpFormatter._format_textc             C   s   |r| j |d S dS d S )N
rD   )rT   )r   descriptionr   r   r   format_description  s    z HelpFormatter.format_descriptionc             C   s   |rd| j | d S dS d S )NrU   rD   )rT   )r   epilogr   r   r   format_epilog  s    zHelpFormatter.format_epilogc             C   sR   | j d ks| j r|jS | j jj|j}|tks8|d kr>| j}|jj| jt	|S )N)
r/   r?   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| |jr j|}tj| j	}|jd|d|d f  |j
 fdd|dd  D  n|d
 d	kr|jd	 dj|S )Nr-   z%*s%s
rD   z	%*s%-*s  r   c                s   g | ]}d  j d|f qS )z%*s%s
rD   )r9   ).0line)r   r   r   
<listcomp>E  s   z/HelpFormatter.format_option.<locals>.<listcomp>r   rU   )r@   r9   r;   lenappendrZ   ra   rR   Zwrapr=   extendr+   )r   r&   resultoptsZ	opt_widthZindent_firstZ	help_textZ
help_linesr   )r   r   format_option(  s$    



zHelpFormatter.format_optionc             C   s   | j   d}x6|jD ],}| j|}|| j|< t|t|| j }qW | j   xF|jD ]<}x6|jD ],}| j|}|| j|< t|t|| j }q`W qTW | j  | j  t	|d | j
| _t| j| j d| _d S )Nr   r-   rQ   )rJ   option_listformat_option_stringsr@   r8   rf   r;   option_groupsrK   r7   r:   r9   r6   r=   )r   r/   Zmax_lenoptZstringsgroupr   r   r   store_option_stringsK  s     



z"HelpFormatter.store_option_stringsc                st   |j  rF|jp|jj   fdd|jD } fdd|jD }n|j}|j}jrb|| }n|| }dj|S )Nc                s   g | ]}j | f qS r   )rA   )rb   Zsopt)metavarr   r   r   rd   a  s   z7HelpFormatter.format_option_strings.<locals>.<listcomp>c                s   g | ]}j | f qS r   )rB   )rb   Zlopt)rr   r   r   r   rd   c  s   z, )takes_valuerr   r]   upper_short_opts
_long_optsr>   r+   )r   r&   Z
short_optsZ	long_optsrj   r   )rr   r   r   rm   ]  s    

z#HelpFormatter.format_option_stringsN)r   r"   r#   r_   r    rC   rG   rI   rJ   rK   rN   rP   rT   rW   rY   ra   rk   rq   rm   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 j| |||| d S )N)r	   r    )r   r0   r:   r6   r>   r   r   r   r    t  s    zIndentedHelpFormatter.__init__c             C   s   t d| S )Nz
Usage: %s
)r(   )r   rM   r   r   r   rN   |  s    z"IndentedHelpFormatter.format_usagec             C   s   d| j d|f S )Nz%*s%s:
rD   )r;   )r   rO   r   r   r   rP     s    z$IndentedHelpFormatter.format_heading)r-   rw   Nr   )r   r"   r#   r    rN   rP   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   rw   Nc             C   s   t j| |||| d S )N)r	   r    )r   r0   r:   r6   r>   r   r   r   r      s    zTitledHelpFormatter.__init__c             C   s   d| j td|f S )Nz%s  %s
ZUsage)rP   r(   )r   rM   r   r   r   rN     s    z TitledHelpFormatter.format_usagec             C   s   d|d| j  t| f S )Nz%s
%s
z=-)r<   rf   )r   rO   r   r   r   rP     s    z"TitledHelpFormatter.format_heading)r   rw   Nr   )r   r"   r#   r    rN   rP   r   r   r   r   r     s      
c             C   sh   | d d j  dkrd}nD| d d j  dkrDd}| dd  p@d} n| d d dkrZd}nd}|| |S )	Nr-   Z0x   Z0b0r      
   )lower)valtyperadixr   r   r   
_parse_num  s    r   c             C   s
   t | tS )N)r   r1   )r}   r   r   r   
_parse_int  s    r   Zintegerzfloating-pointcomplex)r1   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~   r5   r   r(   )r&   ro   valueZcvtZwhatr   r   r   check_builtin  s    r   c             C   s:   || j kr|S djtt| j }ttd|||f d S )Nz, z.option %s: invalid choice: %r (choose from %s))choicesr+   mapreprr   r(   )r&   ro   r   r   r   r   r   r     s    
NODEFAULTc               @   s   e Zd Zddddddddd	d
ddgZdAZdBZdCZdDZdEZdFZ	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/d0 Zd1d2 ZeeeeeeegZd3d4 ZeZd5d6 Zd7d8 Zd9d: Zd;d< Zd=d> Z d?d@ Z!dS )Gr   actionr~   r]   defaultnargsconstr   callbackcallback_argscallback_kwargsrZ   rr   storestore_const
store_truestore_falserg   append_constcountversionstringr1   r   r   r   choice)r1   r   r   r   r   Nc             O   sF   g | _ g | _| j|}| j| | j| x| jD ]}||  q2W d S )N)ru   rv   _check_opt_strings_set_opt_strings
_set_attrsCHECK_METHODS)r   rj   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   )rb   ro   r   r   r   rd   K  s    z-Option._check_opt_strings.<locals>.<listcomp>z+at least one option string must be supplied)	TypeError)r   rj   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oH|d dksXtd| | | jj| q|dd dko|d dkstd| | | j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)rf   r   ru   rg   rv   )r   rj   ro   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|j }tddj| | d S )Nr   zinvalid keyword arguments: %sz, )ATTRSsetattrr^   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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  jdd| _n| jd d | _d S )Nr   r-   r   r(   r   )r   STORE_ACTIONSr~   r]   rv   r`   ru   )r   rs   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rvt| js$td| j | | jd k	rLt| jt rLtd| j | | jd k	rt| jt rt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| j S )N/)r+   ru   rv   )r   r   r   r   r!     s    zOption.__str__c             C   s
   | j d k	S )N)r~   )r   r   r   r   rs     s    zOption.takes_valuec             C   s   | j r| j d S | jd S d S )Nr   )rv   ru   )r   r   r   r   get_opt_string  s    
zOption.get_opt_stringc             C   s*   | j j| j}|d kr|S || ||S d S )N)TYPE_CHECKERr\   r~   )r   ro   r   r   r   r   r   check_value  s    zOption.check_valuec                s:   |d k	r6j dkrj |S t fdd|D S d S )Nr   c                s   g | ]}j  |qS r   )r   )rb   v)ro   r   r   r   rd     s    z(Option.convert_value.<locals>.<listcomp>)r   r   r   )r   ro   r   r   )ro   r   r   convert_value   s    
zOption.convert_valuec             C   s$   | j ||}| j| j| j||||S )N)r   take_actionr   r]   )r   ro   r   valuesr/   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|j|g j| n|dkr|j|g j| j n|d	krt |||j|d
d  n||dkr| jpf }| jpi }| j| |||f|| nF|dkr|j  |j  n*|dkr(|j	  |j  nt
d| j dS )Nr   r   r   Tr   Frg   r   r   r   r   r   rZ   r   zunknown action %r)r   r   ensure_valuerg   r   r   r   
print_helpexitprint_versionr5   r   )	r   r   r]   ro   r   r   r/   argskwargsr   r   r   r     s4    





zOption.take_action)
r   r   r   r   rg   r   r   r   rZ   r   )r   r   r   r   rg   r   r   )r   rg   r   )r   rg   )r   r   )r   r1   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   r   r   r!   r   __repr__rs   r   r   r   r   r   r   r   r   r   r     s                      			ZSUPPRESSZHELPZUSAGEc               @   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 |j  D ]\}}t| || qW d S )N)itemsr   )r   r[   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 j| d S )N)r   update)r   r   r   r   r   _update_looseX  s    zValues._update_loosec             C   s8   |dkr| j | n |dkr(| j| ntd| d S )NcarefulZloosezinvalid update mode: %r)r   r   r5   )r   r   moder   r   r   _update`  s
    zValues._updater   c             C   s&   t | tj| }| 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|j | | j|| d S )N)execopenreadr   )r   filenamer   r   r   r   r   	read_filem  s    zValues.read_filec             C   s0   t | | s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&   | j   || _| j| | j| d S )N)_create_option_listoption_classset_conflict_handlerset_description)r   r   conflict_handlerrV   r   r   r   r      s    
zOptionContainer.__init__c             C   s   i | _ i | _i | _d S )N)
_short_opt	_long_optr[   )r   r   r   r   _create_option_mappings  s    z'OptionContainer._create_option_mappingsc             C   s   |j | _ |j| _|j| _d S )N)r   r   r[   )r   r/   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)r   r   )r5   r   )r   handlerr   r   r   r     s    z$OptionContainer.set_conflict_handlerc             C   s
   || _ d S )N)rV   )r   rV   r   r   r   r     s    zOptionContainer.set_descriptionc             C   s   | j S )N)rV   )r   r   r   r   get_description  s    zOptionContainer.get_descriptionc             C   s   | ` | `| `d S )N)r   r   r[   )r   r   r   r   destroy  s    zOptionContainer.destroyc             C   s   g }x,|j D ]"}|| jkr|j|| j| f qW x,|jD ]"}|| jkr:|j|| j| f q:W |r| j}|dkrtddjdd |D  |nh|dkrx^|D ]V\}}|jdr|jj	| | j|= n|j j	| | j|= |j p|js|j
jj	| qW d S )Nr   z conflicting option string(s): %sz, c             S   s   g | ]}|d  qS )r   r   )rb   cor   r   r   rd     s    z3OptionContainer._check_conflict.<locals>.<listcomp>r   z--)ru   r   rg   rv   r   r   r   r+   
startswithremove	containerrl   )r   r&   Zconflict_optsro   r   Zc_optionr   r   r   _check_conflict  s.    



zOptionContainer._check_conflictc             O   s   t |d tr| j||}n:t|dkrN| rN|d }t |tsVtd| ntd| j| | jj| | |_	x|j
D ]}|| j|< qzW 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   rf   r   r   r   rl   rg   r   ru   r   rv   r   r]   r   r^   r[   )r   r   r   r&   ro   r   r   r   
add_option  s(    



zOptionContainer.add_optionc             C   s   x|D ]}| j | qW d S )N)r   )r   rl   r&   r   r   r   add_options  s    
zOptionContainer.add_optionsc             C   s   | j j|p| jj|S )N)r   r\   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 j|}|d kr | jj|}|d kr4td| x|jD ]}| j |= q<W x|jD ]}| j|= qTW |jjj| d S )Nzno such option %r)	r   r\   r   r5   ru   rv   r   rl   r   )r   r'   r&   ro   r   r   r   remove_option  s    zOptionContainer.remove_optionc             C   sB   | j s
dS g }x(| j D ]}|jtk	r|j|j| qW dj|S )NrD   )rl   rZ   r   rg   rk   r+   )r   	formatterri   r&   r   r   r   format_option_help  s    
z"OptionContainer.format_option_helpc             C   s   |j | j S )N)rW   r   )r   r   r   r   r   rW   (  s    z"OptionContainer.format_descriptionc             C   s:   g }| j r|j| j| | jr0|j| j| dj|S )NrU   )rV   rg   rW   rl   r  r+   )r   r   ri   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  rW   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|j| || _d S )N)r/   r   r    r   r   title)r   r/   r  rV   r   r   r   r    6  s    zOptionGroup.__init__c             C   s   g | _ | j| j d S )N)rl   r   r/   )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 j|  | `d S )N)r   r   rl   )r   r   r   r   r   C  s    
zOptionGroup.destroyc             C   s0   |j | j}|j  |tj| |7 }|j  |S )N)rP   r  rJ   r   r  rK   )r   r   ri   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 j| ||| | j| |	| _|| _d| _d| _|d kr@t }|| _| jj	|  |
| _
| j||d | j  d S )NT)add_help)r   r    	set_usageprogr   allow_interspersed_argsprocess_default_valuesr
   r   rC   rX   _populate_option_list_init_parsing_state)r   rM   rl   r   r   r   rV   r   Zadd_help_optionr  rX   r   r   r   r      s    
zOptionParser.__init__c             C   s2   t j|  x| jD ]}|j  qW | `| `| `d S )N)r   r   rn   rl   r   )r   rp   r   r   r   r     s    
zOptionParser.destroyc             C   s   g | _ g | _| j  d S )N)rl   rn   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--helprZ   zshow this help message and exit)r   rZ   )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   rZ   )r   r(   )r   r   r   r   _add_version_option  s    z OptionParser._add_version_optionc             C   s>   | j r| j| j  |r | j| | jr.| j  |r:| j  d S )N)standard_option_listr   r   r  r  )r   rl   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$|j jdrB|dd  | _n|| _d S )Nz%prog [options]zusage:    )r(   rM   r   r|   r   )r   rM   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)r[   )r   r]   r   r   r   r   set_default  s    zOptionParser.set_defaultc             K   s   | j j| d S )N)r[   r   )r   r   r   r   r   set_defaults  s    zOptionParser.set_defaultsc             C   s.   | j d d  }x| jD ]}|j|j  qW |S )N)rl   rn   rh   )r   Zoptionsrp   r   r   r   _get_all_options  s    zOptionParser._get_all_optionsc             C   sd   | j st| jS | jj }x@| j D ]4}|j|j}t|tr$|j	 }|j
||||j< q$W t|S )N)r	  r   r[   copyr  r\   r]   r   r$   r   r   )r   r[   r&   r   r'   r   r   r   get_default_values  s    


zOptionParser.get_default_valuesc             O   s|   t |d tr t| f||}nLt|dkrd| rd|d }t |tsPtd| |j| k	rltdntd| jj| |S )Nr   r   znot an OptionGroup instance: %rz"invalid OptionGroup (wrong parser)zinvalid arguments)	r   r$   r   rf   r   r/   r5   rn   rg   )r   r   r   rp   r   r   r   add_option_group+  s    


zOptionParser.add_option_groupc             C   s0   | j j|p| jj|}|r,|j| k	r,|jS d S )N)r   r\   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   | j |}|d kr| j }|| _g  | _}|| _y| j|||}W n4 ttfk
rv } z| jt	| W Y d d }~X nX || }| j
||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>| j || q|d d dkrht|dkrh| j|| q| jr|j| |d= qd S qW d S )Nr   z--r-   r   r   )_process_long_optrf   _process_short_optsr  rg   )r   r  r  r   argr   r   r   r    s    

zOptionParser._process_argsc             C   s   t || jS )N)_match_abbrevr   )r   ro   r   r   r   _match_long_opt  s    zOptionParser._match_long_optc       
      C   s   |j d}d|kr4|jdd\}}|jd| d}n|}d}| j|}| j| }|j r|j}t||k r| jt	dd|||d  q|dkr|j d}	qt
|d| }	|d|= n|r| jtd	|  nd }	|j||	||  d S )
Nr   rH   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   insertr'  r   rs   r   rf   r   r   r   r(   r   )
r   r  r   r%  ro   Znext_argZhad_explicit_valuer&   r   r   r   r   r   r#    s0    


zOptionParser._process_long_optc             C   s   |j d}d}d}x|dd  D ]}d| }| jj|}|d7 }|sLt||j r|t|k rx|jd||d   d}|j}	t||	k r| jt	dd|	||	d  q|	dkr|j d}
qt
|d|	 }
|d|	= nd }
|j||
||  |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&   r(  )r)  r   r\   r   rs   rf   r*  r   r   r   r   r   )r   r  r   r%  r   iZchro   r&   r   r   r   r   r   r$    s6    
z OptionParser._process_short_optsc             C   s&   | j d krtjjtjd S | j S d S )Nr   )r  r2   pathbasenamer   r  )r   r   r   r   get_prog_name  s    
zOptionParser.get_prog_namec             C   s   |j d| j S )Nz%prog)r`   r.  )r   sr   r   r   expand_prog_name  s    zOptionParser.expand_prog_namec             C   s   | j | jS )N)r0  rV   )r   r   r   r   r     s    zOptionParser.get_descriptionr   c             C   s   |rt jj| t j| d S )N)r   stderrwriter   )r   Zstatusr   r   r   r   r     s    zOptionParser.exitc             C   s(   | j tj | jdd| j |f  d S )Nr-   z%s: error: %s
)print_usager   r1  r   r.  )r   r   r   r   r   r     s    zOptionParser.errorc             C   s"   | j r| jj| j| j S dS d S )NrD   )rM   r   rN   r0  )r   r   r   r   	get_usage#  s    zOptionParser.get_usagec             C   s   | j rt| j |d d S )N)file)rM   printr4  )r   r5  r   r   r   r3  *  s    	zOptionParser.print_usagec             C   s   | j r| j| j S dS d S )NrD   )r   r0  )r   r   r   r   get_version6  s    zOptionParser.get_versionc             C   s   | j rt| j |d d S )N)r5  )r   r6  r7  )r   r5  r   r   r   r   <  s    zOptionParser.print_versionc             C   s   |d kr| j }|j|  g }|j|jtd |j  | jrZ|jtj| | |jd x(| j	D ]}|j|j
| |jd qbW |j  dj|d d S )NZOptionsrU   rD   r   re   )r   rq   rg   rP   r(   rJ   rl   r   r  rn   r  rK   r+   )r   r   ri   rp   r   r   r   r  G  s    

zOptionParser.format_option_helpc             C   s   |j | jS )N)rY   rX   )r   r   r   r   r   rY   X  s    zOptionParser.format_epilogc             C   sn   |d kr| j }g }| jr*|j| j d  | jrD|j| j|d  |j| j| |j| j| dj|S )NrU   rD   )	r   rM   rg   r4  rV   rW   r  rY   r+   )r   r   ri   r   r   r   r  [  s    zOptionParser.format_helpc             C   s    |d krt j}|j| j  d S )N)r   stdoutr2  r  )r   r5  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  r'  r#  r$  r.  r0  r   r   r   r4  r3  r7  r   r  rY   r  r   r   r   r   r   r   R  s^   F

	

'3	$)





c                sZ    |kr S  fdd|j  D }t|dkr6|d S |sDt n|j  t |d S )Nc                s   g | ]}|j  r|qS r   )r   )rb   Zword)r/  r   r   rd     s    z!_match_abbrev.<locals>.<listcomp>r   r   )r   rf   r   sortr)   )r/  Zwordmapr*   r   )r/  r   r&  t  s    
r&  )r   r   ZSUPPRESSHELPZSUPPRESSUSAGE)&__version____all__Z__copyright__r   r2   rR   r   r   r   ImportErrorr(   	Exceptionr   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   r   r   <module>   s|    

 P


  uA =    &