o
    h"                     @   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                   @   sH  e Zd ZdZdZdZd(ddZded	ee	 de
fd
dZdededee fddZded	ee	 ddfddZded	ee	 ddfddZded	ee	 ddfddZded	ee	 ddfddZded	ee	 ddfddZdeddfddZd(ddZded	ee	 ddfddZd	ee	 d e	d!e
defd"d#Zd(d$d%Zdede	f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
    returnNc                 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#   `/var/www/html/olx_land/venv/lib/python3.10/site-packages/pip/_internal/commands/configuration.pyadd_options4   s:   z ConfigurationCommand.add_optionsoptionsargsc              
   C   s  | j | j| j| j| j| jd}|r|d |vr$tddt	| t
S |d }z| j||dv d}W n tyO } zt|jd  t
W  Y d }~S d }~ww t|j|d| _| j  z|| ||dd   W tS  ty } zt|jd  t
W  Y d }~S d }~ww )	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   sF   


zConfigurationCommand.runr.   c                 C   sz   dd t j|jft j|jft j|jffD }|s/|sd S tdd t t j D r,t jS t jS t	|dkr9|d S t
d)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.   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   rR   z%s)rU   r>   	get_valuer   rW   r#   r#   r$   r4      s   zConfigurationCommand.get_namec                 C   s.   | j |ddd\}}| j|| |   d S )Nzset [name] [value]   rR   )rU   r>   	set_value_save_configurationrW   r#   r#   r$   r5      s   z#ConfigurationCommand.set_name_valuec                 C   s(   | j |ddd}| j| |   d S )Nzunset [name]r1   rR   )rU   r>   unset_valuer[   )r"   r&   r'   rD   r#   r#   r$   r6      s   zConfigurationCommand.unset_namec              
   C   s   | j |ddd |   t| j D ]4\}}td| |D ](}t  tj	|}td|| |r7| 
| W d   n1 sAw   Y  qqdS )z9List config key-value pairs across different config filesr-   r   rR   %s:z%s, exists: %rN)rU   print_env_var_valuesr;   r>   iter_config_filesr   r   rG   rH   rI   print_config_file_values)r"   r&   r'   variantfilesfnamefile_existsr#   r#   r$   r7      s   

z'ConfigurationCommand.list_config_valuesra   c              	   C   sP   | j | D ]\}}t  td|| W d   n1 s w   Y  qdS )z.Get key-value pairs from the file of a variantz%s: %sN)r>   get_values_in_configrV   r   r   )r"   ra   namerE   r#   r#   r$   r`      s   z-ConfigurationCommand.print_config_file_valuesc                 C   sh   t dd t " t| j D ]\}}d|  }t d|| qW d   dS 1 s-w   Y  dS )z5Get key-values pairs present as environment variablesr]   env_varPIP_rT   N)r   r   r;   r>   get_environ_varsupper)r"   rD   rE   rg   r#   r#   r$   r^      s   
"z)ConfigurationCommand.print_env_var_valuesc              
   C   sd   |  |}| j }|d u rtdz
t||g W d S  tjy1 } ztd|jd }~ww )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   rc   rA   r#   r#   r$   r3      s   


z#ConfigurationCommand.open_in_editorexamplerS   c                 C   s8   t ||krd|t |}t||dkr|d S |S )zAHelper to make sure the command got the right number of argumentszJGot unexpected number of arguments, expected {}. (example: "{} config {}")r1   r   )rP   rp   r   r   )r"   r'   rr   rS   msgr#   r#   r$   rU      s   z ConfigurationCommand._get_n_argsc                 C   s2   z| j   W d S  ty   td tdw )Nz:Unable to save configuration. Please report this as a bug.zInternal Error.)r>   save	Exceptionr8   	exceptionr   r!   r#   r#   r$   r[      s   z(ConfigurationCommand._save_configurationc                 C   s@   |j d ur|j S dtjv rtjd S dtjv rtjd S td)NVISUALEDITORz"Could not determine editor to use.)r   rG   environr   )r"   r&   r#   r#   r$   rk     s   




z&ConfigurationCommand._determine_editor)r   N)__name__
__module____qualname____doc__ignore_require_venvusager%   r   r   strintrB   boolr   r
   r<   r2   r4   r5   r6   r7   r`   r^   r3   r   rU   r[   rk   r#   r#   r#   r$   r      s$    

&-

r   )loggingrG   rm   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   	getLoggerrz   r8   r   r#   r#   r#   r$   <module>   s    
