a
    hbòfð"  ã                   @   s²   d dl Z d dlZd dlZd dlmZ d dlmZmZmZ d dl	m
Z
 d dlmZm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mZ e  e¡ZG d
d„ de
ƒZdS )é    N)ÚValues)ÚAnyÚListÚOptional)ÚCommand)ÚERRORÚSUCCESS)ÚConfigurationÚKindÚget_configuration_filesÚkinds)ÚPipError)Ú
indent_log)Úget_progÚwrite_outputc                   @   s*  e Zd ZdZdZdZddœdd„Zeee	 e
dœd	d
„Zeeee dœdd„Zeee	 ddœdd„Zeee	 ddœdd„Zeee	 ddœdd„Zeee	 ddœdd„Zeee	 ddœdd„Zeddœdd„Zddœdd„Zeee	 ddœdd„Zee	 e	e
edœd d!„Zddœd"d#„Zee	d$œd%d&„ZdS )'ÚConfigurationCommandaa  
    Manage local and global configuration.

    Subcommands:

    - list: List the active configuration (or from the file specified)
    - edit: Edit the configuration file in an editor
    - get: Get the value associated with name
    - set: Set the name=value
    - unset: Unset the value associated with name
    - debug: List the configuration files and values defined under them

    If none of --user, --global and --site are passed, a virtual
    environment configuration file is used if one is active and the file
    exists. Otherwise, all modifications happen to the user file by
    default.
    Ta  
        %prog [<file-option>] list
        %prog [<file-option>] [--editor <editor-path>] edit

        %prog [<file-option>] get name
        %prog [<file-option>] set name value
        %prog [<file-option>] unset name
        %prog [<file-option>] debug
    N)Úreturnc                 C   sl   | j jdddd dd� | j jdddd	d
d� | j jdddd	dd� | j jdddd	dd� | j d| j ¡ d S )Nz--editorÚeditorÚstorez\Editor to use to edit the file. Uses VISUAL or EDITOR environment variables if not provided.)ÚdestÚactionÚdefaultÚhelpz--globalÚglobal_fileÚ
store_trueFz+Use the system-wide configuration file onlyz--userÚ	user_filez$Use the user configuration file onlyz--siteÚ	site_filez3Use the current environment configuration file onlyr   )Úcmd_optsÚ
add_optionÚparserÚinsert_option_group©Úself© r#   úa/home/httpd/docs/test/DocsMgr/lib/python3.9/site-packages/pip/_internal/commands/configuration.pyÚadd_options4   s:    úûûûz ConfigurationCommand.add_options)ÚoptionsÚargsr   c              
   C   s  | j | j| j| j| j| jdœ}|r.|d |vrHt dd t	|ƒ¡¡ t
S |d }z| j||dv d�}W n8 tyž } z t |jd ¡ t
W  Y d }~S d }~0 0 t|j|d�| _| j ¡  z|| ||dd … ƒ W n: t�y } z t |jd ¡ t
W  Y d }~S d }~0 0 tS )	N)ÚlistÚeditÚgetÚsetÚunsetÚdebugr   zNeed an action (%s) to perform.z, )r*   r+   r,   r)   )Ú
need_value)ÚisolatedÚ	load_onlyé   )Úlist_valuesÚopen_in_editorÚget_nameÚset_name_valueÚ
unset_nameÚlist_config_valuesÚloggerÚerrorÚjoinÚsortedr   Ú_determine_filer   r'   r	   Úisolated_modeÚconfigurationÚloadr   )r"   r&   r'   Úhandlersr   r0   Úer#   r#   r$   ÚrunZ   s>    ú
þÿ
ÿ
zConfigurationCommand.run)r&   r.   r   c                 C   s€   dd„ t j|jft j|jft j|jffD ƒ}|s`|s8d S tdd„ tƒ t j D ƒƒrXt jS t jS nt	|ƒdkrt|d S t
dƒ‚d S )Nc                 S   s   g | ]\}}|r|‘qS r#   r#   )Ú.0ÚkeyÚvaluer#   r#   r$   Ú
<listcomp>ˆ   s   úz8ConfigurationCommand._determine_file.<locals>.<listcomp>c                 s   s   | ]}t j |¡V  qd S )N)ÚosÚpathÚexists)rC   Úsite_config_filer#   r#   r$   Ú	<genexpr>–   s   ÿz7ConfigurationCommand._determine_file.<locals>.<genexpr>r1   r   zLNeed exactly one file to operate upon (--user, --site, --global) to perform.)r   ÚUSERr   ÚGLOBALr   ÚSITEr   Úanyr   Úlenr   )r"   r&   r.   Zfile_optionsr#   r#   r$   r<   ‡   s&    


ýþ

þÿz$ConfigurationCommand._determine_filec                 C   s8   | j |ddd� t| j ¡ ƒD ]\}}td||ƒ qd S )Nr(   r   ©Únú%s=%r)Ú_get_n_argsr;   r>   Úitemsr   ©r"   r&   r'   rD   rE   r#   r#   r$   r2   ¥   s    z ConfigurationCommand.list_valuesc                 C   s*   | j |ddd�}| j |¡}td|ƒ d S )Nz
get [name]r1   rQ   z%s)rT   r>   Ú	get_valuer   rV   r#   r#   r$   r4   «   s    zConfigurationCommand.get_namec                 C   s.   | j |ddd�\}}| j ||¡ |  ¡  d S )Nzset [name] [value]é   rQ   )rT   r>   Ú	set_valueÚ_save_configurationrV   r#   r#   r$   r5   ±   s    z#ConfigurationCommand.set_name_valuec                 C   s(   | j |ddd�}| j |¡ |  ¡  d S )Nzunset [name]r1   rQ   )rT   r>   Úunset_valuerZ   )r"   r&   r'   rD   r#   r#   r$   r6   ·   s    zConfigurationCommand.unset_namec              
   C   s”   | j |ddd� |  ¡  t| j ¡ ƒD ]h\}}td|ƒ |D ]P}tƒ �6 tj 	|¡}td||ƒ |rn|  
|¡ W d  ƒ q<1 s‚0    Y  q<q&dS )z9List config key-value pairs across different config filesr-   r   rQ   ú%s:z%s, exists: %rN)rT   Úprint_env_var_valuesr;   r>   Úiter_config_filesr   r   rG   rH   rI   Úprint_config_file_values)r"   r&   r'   ÚvariantÚfilesÚfnameZfile_existsr#   r#   r$   r7   ½   s    
z'ConfigurationCommand.list_config_values)r`   r   c              	   C   sP   | j  |¡ ¡ D ]:\}}tƒ � td||ƒ W d  ƒ q1 s@0    Y  qdS )z.Get key-value pairs from the file of a variantz%s: %sN)r>   Úget_values_in_configrU   r   r   )r"   r`   ÚnamerE   r#   r#   r$   r_   Í   s    z-ConfigurationCommand.print_config_file_valuesc                 C   sf   t ddƒ tƒ �B t| j ¡ ƒD ]"\}}d| ¡ › �}t d||ƒ q W d  ƒ n1 sX0    Y  dS )z5Get key-values pairs present as environment variablesr\   Úenv_varÚPIP_rS   N)r   r   r;   r>   Úget_environ_varsÚupper)r"   rD   rE   re   r#   r#   r$   r]   Ó   s
    
z)ConfigurationCommand.print_env_var_valuesc              
   C   sr   |   |¡}| j ¡ }|d u r$tdƒ‚zt ||g¡ W n6 tjyl } ztd |j¡ƒ‚W Y d }~n
d }~0 0 d S )Nz%Could not determine appropriate file.z*Editor Subprocess exited with exit code {})	Ú_determine_editorr>   Úget_file_to_editr   Ú
subprocessÚ
check_callÚCalledProcessErrorÚformatÚ
returncode)r"   r&   r'   r   rb   rA   r#   r#   r$   r3   Û   s    


ÿz#ConfigurationCommand.open_in_editor)r'   ÚexamplerR   r   c                 C   s<   t |ƒ|kr$d |tƒ |¡}t|ƒ‚|dkr4|d S |S dS )zAHelper to make sure the command got the right number of argumentszJGot unexpected number of arguments, expected {}. (example: "{} config {}")r1   r   N)rP   rn   r   r   )r"   r'   rp   rR   Úmsgr#   r#   r$   rT   é   s    ÿýz ConfigurationCommand._get_n_argsc                 C   s8   z| j  ¡  W n$ ty2   t d¡ tdƒ‚Y n0 d S )Nz:Unable to save configuration. Please report this as a bug.zInternal Error.)r>   ÚsaveÚ	Exceptionr8   Ú	exceptionr   r!   r#   r#   r$   rZ   ÷   s    ÿz(ConfigurationCommand._save_configuration)r&   r   c                 C   sD   |j d ur|j S dtjv r$tjd S dtjv r8tjd S tdƒ‚d S )NZVISUALZEDITORz"Could not determine editor to use.)r   rG   Úenvironr   )r"   r&   r#   r#   r$   ri     s    




z&ConfigurationCommand._determine_editor)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úignore_require_venvÚusager%   r   r   ÚstrÚintrB   Úboolr   r
   r<   r2   r4   r5   r6   r7   r_   r]   r3   r   rT   rZ   ri   r#   r#   r#   r$   r      s"   
&-r   )ÚloggingrG   rk   Úoptparser   Útypingr   r   r   Úpip._internal.cli.base_commandr   Úpip._internal.cli.status_codesr   r   Úpip._internal.configurationr	   r
   r   r   Úpip._internal.exceptionsr   Úpip._internal.utils.loggingr   Úpip._internal.utils.miscr   r   Ú	getLoggerrv   r8   r   r#   r#   r#   r$   Ú<module>   s   
