U
    |e                     @  s   d dl mZ d dlZd dlmZmZmZmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ G dd	 d	eZG d
d deZG dd deZddd	gZdS )    )annotationsN)SUPPRESSArgumentDefaultsHelpFormatterArgumentParser	Namespace)OrderedDict)get_type)get_env_var)	IniConfigc                      s^   e Zd Zdd fddZdd Zdd fddZd	d
 Zedd ZddddZ	  Z
S )VirtualEnvOptionsNonereturnc                   s   t  jf | d | _i | _d S N)super__init___src_sources)selfkwargs	__class__ @/tmp/pip-unpacked-wheel-tuxcr54r/virtualenv/config/cli/parser.pyr      s    zVirtualEnvOptions.__init__c                 C  s(   t | || |drd}|| j|< d S )Nzenv var)setattr
startswithr   )r   keyvaluesrcr   r   r   set_src   s    
zVirtualEnvOptions.set_srcc                   s.   t | dd d k	r| j| j|< t || d S )Nr   )getattrr   r   r   __setattr__)r   r   r   r   r   r   r!      s    zVirtualEnvOptions.__setattr__c                 C  s   | j |S r   )r   get)r   r   r   r   r   
get_source   s    zVirtualEnvOptions.get_sourcec                 C  s*   t | dst | dsd S t| j| j dS )Nverbosequietr   )hasattrmaxr$   r%   r   r   r   r   	verbosity    s    zVirtualEnvOptions.verbositystrc                 C  s.   t | j dddd t|  D  dS )N(z, c                 s  s*   | ]"\}}| d s| d| V  qdS )_=N)r   ).0kvr   r   r   	<genexpr>'   s     
 z-VirtualEnvOptions.__repr__.<locals>.<genexpr>))type__name__joinvarsitemsr(   r   r   r   __repr__&   s    zVirtualEnvOptions.__repr__)r4   
__module____qualname__r   r   r!   r#   propertyr)   r8   __classcell__r   r   r   r   r      s   
r   c                      sN   e Zd ZdZddd fddZdd Zd	d
 Zdd Zd fdd	Z  Z	S )VirtualEnvConfigParserzkCustom option parser which updates its defaults by checking the configuration files and environmental vars.Nr   r   c                   s   |d krt jn|}t|| _g | _|| _| jj|d< d|d< t|d< d|d< t j	|| t
 | _|d k	rt|tsd}t||d krt n|| _d | _d | _d S )NepilogFadd_helpformatter_class
virtualenvprogz)options must be of type VirtualEnvOptions)osenvironr
   file_configZepilog_listenvr>   HelpFormatterr   r   set_fixed
isinstancer   	TypeErroroptions_interpreterZ	_app_data)r   rL   rF   argsr   msgr   r   r   r   -   s     
zVirtualEnvConfigParser.__init__c                 C  s8   | j D ],}t|}|| jkr| | | j| qd S r   )_actionsidrI   _fix_defaultadd)r   actionZ	action_idr   r   r   _fix_defaults?   s
    


z$VirtualEnvConfigParser._fix_defaultsc                 C  s   t |drt |dr|jtkrt|}tdd |jD }d }|D ]}t||| j}|d k	rB qbqB|d kr| jr|D ]}| j	||}|d k	rt qqt|d k	r|\|_|_
n
|jdf}| jj|jf|  d S )Ndefaultdestc                 s  s$   | ]}| d d ddfV  qdS )-r,   N)lstripreplace)r.   ir   r   r   r1   I   s     z6VirtualEnvConfigParser._fix_default.<locals>.<genexpr>)r&   rV   r   r   r   option_stringsr	   rF   rE   r"   default_sourcerL   r   rW   )r   rT   Zas_typenamesZoutcomenamer   r   r   rR   F   s"    
z#VirtualEnvConfigParser._fix_defaultc                 C  s    |    | jdddtdd d S )Nz-hz--helphelpzshow this help message and exit)rT   rV   r`   )rU   add_argumentr   r(   r   r   r   enable_helpZ   s    z"VirtualEnvConfigParser.enable_helpc                   sb   |d kr| j }n|| j k	r&d}t||   d| j _z| j|_t j||dW S d | j _X d S )Nzcan only pass in parser.optionscli)	namespace)rL   
ValueErrorrU   r   rF   r   parse_known_args)r   rN   rd   rO   r   r   r   rf   ^   s    
z'VirtualEnvConfigParser.parse_known_args)NN)NN)
r4   r9   r:   __doc__r   rU   rR   rb   rf   r<   r   r   r   r   r=   *   s   r=   c                      s.   e Zd Zdd fddZ fddZ  ZS )rG   r   r   c                   s   t  j|ddd d S )N       )max_help_positionwidth)r   r   )r   rB   r   r   r   r   n   s    zHelpFormatter.__init__c                   s@   t  |}t|dr<d}||r<|d t|   d}|S )Nr]   z (default: %(default)s)z2 (default: %(default)s -> from %(default_source)s))r   _get_help_stringr&   endswithlen)r   rT   textrV   r   r   r   rl   q   s    

zHelpFormatter._get_help_string)r4   r9   r:   r   rl   r<   r   r   r   r   rG   m   s   rG   )
__future__r   rC   argparser   r   r   r   collectionsr   Zvirtualenv.config.convertr   Zvirtualenv.config.env_varr	   Zvirtualenv.config.inir
   r   r=   rG   __all__r   r   r   r   <module>   s   C