3
h}\#                 @   s   d Z ddlZddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlZdd	 Z	d
d Z
G dd deZdd Zdd Zdd Zdd ZG dd deZG dd deZdS )zBCustom extensions to OptionParse for parsing command line options.    N)copy)Option)OptionParser)IndentedHelpFormatter)OptionValueErrorc             C   s&   | s|s|s|rt |j tj  d S )N)print	copyrightsysexit)optionoptvalueparser r   J/home/birch/.local/lib/python3.6/site-packages/weblogo/utils/deoptparse.py_copyright_callback7   s    
r   c             C   s&   | s|s|s|rt |j tj  d S )N)r   long_descriptionr	   r
   )r   r   r   r   r   r   r   _doc_callback>   s    
r   c               @   s   e Zd Zd
ddZdd Zd	S )DeHelpFormatter       N      c             C   s   t j| |||| d S )N)r   __init__)selfZindent_incrementZmax_help_positionwidthshort_firstr   r   r   r   F   s    zDeHelpFormatter.__init__c                sl   |j  r4|jp|jj  |j} fdd|jD }n|j}|j}|sJdg}| jrZ|| }n|| }dj|S )z@Return a comma-separated list of option strings & metavariables.c                s   g | ]}|d    qS ) r   ).0Zlopt)metavarr   r   
<listcomp>T   s    z9DeHelpFormatter.format_option_strings.<locals>.<listcomp>z  r   )Ztakes_valuer   destupperZ_short_optsZ
_long_optsr   join)r   r   
short_opts	long_optsoptsr   )r   r   format_option_stringsO   s    
z%DeHelpFormatter.format_option_stringsN)r   r   r   r   )__name__
__module____qualname__r   r'   r   r   r   r   r   E   s
      
r   c             C   s@   | s|s|ry
t |dS  tk
r:   td||f Y nX d S )Nrzoption %s: cannot open file: %s)openIOErrorr   )r   r   r   r   r   r   _check_file_ind   s
    
r.   c             C   s@   | s|s|ry
t |dS  tk
r:   td||f Y nX d S )Nzw+zoption %s: cannot open file: %s)r,   r-   r   )r   r   r   r   r   r   _check_file_outm   s
    
r/   c             C   sX   | s|s|r|j  }ddddddd}y|| S  tk
rR   td||f Y nX d S )NFT)nofalse0yestrue1zNoption %s: invalid choice: '%s' (choose from 'yes' or 'no', 'true' or 'false'))lowerKeyErrorr   )r   r   r   vchoicesr   r   r   _check_booleanv   s    r:   c             C   sT   | s|s|r|j  }| j}y|| S  tk
rN   td||dj|f Y nX d S )Nz2option %s: invalid choice: '%s' (choose from '%s')z', ')r6   r9   r7   r   r#   )r   r   r   r8   r9   r   r   r   _check_dict   s    r;   c               @   sZ   e Zd Zejd	 ZeejZeed< eed< e	ed< e
ed< dZdd ZejZeed< dS )
DeOptionfile_infile_outbooleandictNc             C   sZ   | j dkrN| jd krtdn,t| jtsJtdtt | jjdd  d S | j  d S )Nr@   z3must supply a dictionary of choices for type 'dict'z,choices must be a dictionary ('%s' supplied)'r   )typer9   r   
isinstancer@   strsplitZ_check_choice)r   r   r   r   _new_check_choice   s    


zDeOption._new_check_choicer   )r=   r>   r?   r@   )r(   r)   r*   r   ZTYPESr   ZTYPE_CHECKERr.   r/   r:   r;   r9   rF   ZCHECK_METHODSr   r   r   r   r<      s   

r<   c               @   s<   e Zd Zddedddde dddddfddZd	ddZdS )
DeOptionParserNerrorTFc             C   s   t j| ||||||||	|

 |r8|| _| jddtdd |rT|| _| jddtdd |r| jddd	d
ddd | jdddd
ddd d| _|rd| _| jddddddd | jddddddd d S ) Nz--doccallbackzDetailed documentation)actionrI   helpz--copyright z-qz--quiteZstore_falseverboseFzRun quietly (default))rJ   r!   defaultrK   z-vz	--verbose
store_truezVerbose output (Not quite)Tz--seedstoreintrandom_seedzGInitial seed for pseudo-random number generator. (default: System time)ZINTEGER)rJ   rB   r!   rK   r   z--generatorrandom_generatorMersenneTwisterzOSelect MersenneTwister (default) or WichmannHill pseudo-random number generatorZTYPE)rJ   r!   rN   rK   r   )r   r   r   
add_optionr   r   r   random_options)r   usageZoption_listZoption_classversionZconflict_handlerdescriptionr   	formatterZadd_help_optionprogr   Zadd_verbose_optionsZadd_random_optionsr   r   r   r      s`    zDeOptionParser.__init__c             C   sx   t j| ||\}}| jrp|jd ks,|jdkr6tj }n|jdkrJtj }n
| jd |jrf|j	|j ||j
d< ||fS )NrT   WichmannHillzCAcceptible generators are MersenneTwister (default) or WichmannHillrandom)r   
parse_argsrV   rS   r]   Randomr\   rH   rR   seed__dict__)r   argsvaluesoptionsr+   r   r   r   r^      s    




zDeOptionParser.parse_args)N)r(   r)   r*   r<   r   r   r^   r   r   r   r   rG      s   <rG   )__doc__r	   r   Zoptparser   r   r   r   r]   r   r   r   r.   r/   r:   r;   r<   rG   r   r   r   r   <module>   s    		