o
    $¼"b:  ã                   @   s”   d dl mZ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S )é    )Úabsolute_importÚunicode_literalsN)ÚSUPPRESSÚArgumentDefaultsHelpFormatterÚArgumentParserÚ	Namespace)ÚOrderedDict)Úget_typeé   )Úget_env_var)Ú	IniConfigc                       sL   e Zd Z‡ fdd„Zdd„ Z‡ fdd„Zdd„ Zed	d
„ ƒZdd„ Z	‡  Z
S )ÚVirtualEnvOptionsc                    s&   t t| ƒjdi |¤Ž d | _i | _d S )N© )Úsuperr   Ú__init__Ú_srcÚ_sources)ÚselfÚkwargs©Ú	__class__r   ú>/usr/lib/python3/dist-packages/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                    s2   t | dd ƒd ur| j| j|< tt| ƒ ||¡ d S )Nr   )Úgetattrr   r   r   r   Ú__setattr__)r   r   r   r   r   r   r      s   zVirtualEnvOptions.__setattr__c                 C   s   | j  |¡S ©N)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.verbosityc                 C   s*   d  t| ƒjd dd„ t| ƒ ¡ D ƒ¡¡S )Nz{}({})z, c                 s   s*   � | ]\}}|  d ¡sd ||¡V  qdS )Ú_z{}={}N)r   Úformat)Ú.0ÚkÚvr   r   r   Ú	<genexpr>*   s   €( z-VirtualEnvOptions.__repr__.<locals>.<genexpr>)r*   ÚtypeÚ__name__ÚjoinÚvarsÚitemsr'   r   r   r   Ú__repr__'   s   þzVirtualEnvOptions.__repr__)r0   Ú
__module__Ú__qualname__r   r   r   r"   Úpropertyr(   r4   Ú__classcell__r   r   r   r   r      s    
r   c                       sH   e Zd ZdZd‡ fdd„	Zdd„ Zdd„ Zd	d
„ Zd‡ fdd„	Z‡  Z	S )ÚVirtualEnvConfigParserzy
    Custom option parser which updates its defaults by checking the configuration files and environmental variables
    Nc                    s¨   |d u rt jn|}t|ƒ| _g | _|| _| jj|d< d|d< t|d< d|d< tt	| ƒj
|i |¤Ž tƒ | _|d urBt|tƒsBtdƒ‚|d u rItƒ n|| _d | _d | _d S )NÚepilogFÚadd_helpÚformatter_classÚ
virtualenvÚprogz)options must be of type VirtualEnvOptions)ÚosÚenvironr   Úfile_configÚepilog_listÚenvr:   ÚHelpFormatterr   r9   r   ÚsetÚ_fixedÚ
isinstancer   Ú	TypeErrorÚoptionsÚ_interpreterÚ	_app_data)r   rI   rC   Úargsr   r   r   r   r   3   s   

zVirtualEnvConfigParser.__init__c                 C   s8   | j D ]}t|ƒ}|| jvr|  |¡ | j |¡ qd S r    )Ú_actionsÚidrF   Ú_fix_defaultÚadd)r   ÚactionÚ	action_idr   r   r   Ú_fix_defaultsD   s   


€üz$VirtualEnvConfigParser._fix_defaultsc                 C   sÚ   t |dƒrgt |dƒri|jtkrkt|ƒ}tdd„ |jD ƒƒ}d }|D ]}t||| jƒ}|d ur0 nq!|d u rJ| jrJ|D ]}| j 	||¡}|d urI nq:|d urU|\|_|_
n|jdf}| jj|jg|¢R Ž  d S d S d S d S )NÚdefaultÚdestc                 s   s&   � | ]}|  d ¡ d d¡dfV  qdS )ú-r)   N)ÚlstripÚreplace)r+   Úir   r   r   r.   N   s   €$ z6VirtualEnvConfigParser._fix_default.<locals>.<genexpr>)r%   rT   r   r	   r   Úoption_stringsr   rC   rA   r!   Údefault_sourcerI   r   rU   )r   rQ   Úas_typeÚnamesÚoutcomeÚnamer   r   r   rO   K   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)rQ   rT   r`   )rS   Úadd_argumentr   r'   r   r   r   Úenable_help_   s   z"VirtualEnvConfigParser.enable_helpc                    sd   |d u r| j }n	|| j urtdƒ‚|  ¡  d| j _z| j|_tt| ƒj||d�W d | j _S d | j _w )Nzcan only pass in parser.optionsÚcli)Ú	namespace)rI   Ú
ValueErrorrS   r   rC   r   r9   Úparse_known_args)r   rL   rd   r   r   r   rf   c   s   
z'VirtualEnvConfigParser.parse_known_args)NN)
r0   r5   r6   Ú__doc__r   rS   rO   rb   rf   r8   r   r   r   r   r9   .   s    r9   c                       s(   e Zd Z‡ fdd„Z‡ fdd„Z‡  ZS )rD   c                    s   t t| ƒj|ddd� d S )Né    éð   )Úmax_help_positionÚwidth)r   rD   r   )r   r>   r   r   r   r   r   s   zHelpFormatter.__init__c                    sD   t t| ƒ |¡}t|dƒr d}| |¡r d |d t|ƒ … ¡}|S )Nr[   z (default: %(default)s)z4{} (default: %(default)s -> from %(default_source)s))r   rD   Ú_get_help_stringr%   Úendswithr*   Úlen)r   rQ   ÚtextrT   r   r   r   rl   u   s   

zHelpFormatter._get_help_string)r0   r5   r6   r   rl   r8   r   r   r   r   rD   q   s    rD   )Ú
__future__r   r   r?   Úargparser   r   r   r   Úcollectionsr   Úvirtualenv.config.convertr	   Úenv_varr   Úinir   r   r9   rD   r   r   r   r   Ú<module>   s    !C