o
    WiI                     @  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mZ er4d dlmZ d dlmZ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g dZdS )    )annotationsN)SUPPRESSArgumentDefaultsHelpFormatterArgumentParser	Namespace)OrderedDict)TYPE_CHECKINGAny)Action)MappingSequence)get_type)get_env_var)	IniConfigc                      sX   e Zd Zd fddZdddZd fddZdddZedddZdddZ	  Z
S )VirtualEnvOptionskwargsr	   returnNonec                   s"   t  jdi | d | _i | _d S )N )super__init___src_sources)selfr   	__class__r   P/home/ubuntu/.local/lib/python3.10/site-packages/virtualenv/config/cli/parser.pyr      s   
zVirtualEnvOptions.__init__keystrvaluesrcc                 C  s(   t | || |drd}|| j|< dS )zSet an option value and record where it came from.

        :param key: the option name
        :param value: the option value
        :param src: the source of the value (e.g. ``"cli"``, ``"env var"``, ``"default"``)

        zenv varN)setattr
startswithr   r   r   r   r    r   r   r   set_src   s   
zVirtualEnvOptions.set_srcc                   s0   t | dd  }d ur|| j|< t || d S )Nr   )getattrr   r   __setattr__r#   r   r   r   r&   $   s   
zVirtualEnvOptions.__setattr__
str | Nonec                 C  s   | j |S )zReturn the source that provided a given option value.

        :param key: the option name

        :returns: the source string (e.g. ``"cli"``, ``"env var"``, ``"default"``), or ``None`` if not tracked

        )r   get)r   r   r   r   r   
get_source)   s   zVirtualEnvOptions.get_source
int | Nonec                 C  s*   t | dst | dsdS t| j| j dS )zThe verbosity level, computed as ``verbose - quiet``, clamped to zero.

        :returns: the verbosity level, or ``None`` if neither ``--verbose`` nor ``--quiet`` has been parsed yet

        verbosequietNr   )hasattrmaxr+   r,   r   r   r   r   	verbosity3   s   zVirtualEnvOptions.verbosityc                 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__)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____qualname__r   r$   r&   r)   propertyr0   r>   __classcell__r   r   r   r   r      s    



r   c                      sX   e Zd ZdZ		dd fddZdddZdddZdddZ	dd fddZ  Z	S ) VirtualEnvConfigParserzkCustom option parser which updates its defaults by checking the configuration files and environmental vars.NoptionsVirtualEnvOptions | NoneenvMapping[str, str] | Noneargsr	   r   r   r   c                   s   |d u rt jn|}t|| _g | _|| _| jj|d< d|d< t|d< d|d< t j	|i | t
 | _|d urBt|tsBd}t||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_listrF   rI   HelpFormatterr   r   set_fixed
isinstancer   	TypeErrorrD   _interpreter	_app_data)r   rD   rF   rH   r   msgr   r   r   r   E   s    

zVirtualEnvConfigParser.__init__c                 C  s8   | j D ]}t|}|| jvr| | | j| qd S )N)_actionsidrT   _fix_defaultadd)r   action	action_idr   r   r   _fix_defaults]   s   


z$VirtualEnvConfigParser._fix_defaultsr^   r
   c                 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 )-r2   N)lstripreplace)r4   ir   r   r   r7   g   s   $ z6VirtualEnvConfigParser._fix_default.<locals>.<genexpr>)r-   ra   r   r   r   option_stringsr   rF   rP   r(   default_sourcerD   r$   rb   )r   r^   as_typenamesoutcomenamer   r   r   r\   d   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)r^   ra   rm   )r`   add_argumentr   r/   r   r   r   enable_helpx   s   z"VirtualEnvConfigParser.enable_helpSequence[str] | None	namespace#tuple[VirtualEnvOptions, list[str]]c                   sd   |d u r| j }n|| j urd}t||   d| j _z| j|_t j||dW d | j _S d | j _w )Nzcan only pass in parser.optionscli)rq   )rD   
ValueErrorr`   r   rF   r   parse_known_args)r   rH   rq   rY   r   r   r   ru   |   s   
z'VirtualEnvConfigParser.parse_known_args)NN)
rD   rE   rF   rG   rH   r	   r   r	   r   r   )r   r   )r^   r
   r   r   )rH   rp   rq   rE   r   rr   )
r:   r?   r@   __doc__r   r`   r\   ro   ru   rB   r   r   r   r   rC   B   s    


rC   c                      s,   e Zd Zd fddZd fddZ  ZS )rR   rM   r   r   r	   r   r   c                   s   t  j|fddd| d S )N       )max_help_positionwidth)r   r   )r   rM   r   r   r   r   r      s   zHelpFormatter.__init__r^   r
   r'   c                   sH   t  |}|d ur"t|dr"d}||r"|d t|   d}|S )Nrh   z (default: %(default)s)z2 (default: %(default)s -> from %(default_source)s))r   _get_help_stringr-   endswithlen)r   r^   textra   r   r   r   r{      s   
zHelpFormatter._get_help_string)rM   r   r   r	   r   r   )r^   r
   r   r'   )r:   r?   r@   r   r{   rB   r   r   r   r   rR      s    rR   )rR   rC   r   )
__future__r   rN   argparser   r   r   r   collectionsr   typingr   r	   r
   collections.abcr   r   virtualenv.config.convertr   virtualenv.config.env_varr   virtualenv.config.inir   r   rC   rR   __all__r   r   r   r   <module>   s    1K