U
    +|jö#  ã                   @   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„ Zdd„ Zdd	„ Zd
d„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd S )!ÚConfigurationCommandah  
    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 on the 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
    c                 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"   úlC:\Users\snmko\Desktop\web_content\django_cbt\venv\Lib\site-packages\pip/_internal/commands/configuration.pyÚadd_options4   s:    úûûûz ConfigurationCommand.add_optionsc              
   C   s  | j | j| j| j| j| jdœ}|r.|d |krHt dd t	|ƒ¡¡ t
S |d }z| j||dkd�}W n: tk
r  } zt |jd ¡ t
 W Y ¢S d }~X Y nX t|j|d�| _| j ¡  z|| ||dd … ƒ W n< tk
�r } zt |jd ¡ t
 W Y ¢S d }~X Y nX 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   Úargsr	   Úisolated_modeÚconfigurationÚloadr   )r!   Úoptionsr:   Úhandlersr   r-   Úer"   r"   r#   Úrun[   sB    ú
þ ÿ
 ÿ
zConfigurationCommand.runc                 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)rB   Úsite_config_filer"   r"   r#   Ú	<genexpr>•   s   ÿz7ConfigurationCommand._determine_file.<locals>.<genexpr>r.   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#   r9   ‰   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_argsr8   r<   Úitemsr   ©r!   r>   r:   rC   rD   r"   r"   r#   r/   ¤   s    z ConfigurationCommand.list_valuesc                 C   s*   | j |ddd�}| j |¡}td|ƒ d S )Nz
get [name]r.   rP   z%s)rS   r<   Ú	get_valuer   rU   r"   r"   r#   r1   «   s    zConfigurationCommand.get_namec                 C   s.   | j |ddd�\}}| j ||¡ |  ¡  d S )Nzset [name] [value]é   rP   )rS   r<   Ú	set_valueÚ_save_configurationrU   r"   r"   r#   r2   ²   s    z#ConfigurationCommand.set_name_valuec                 C   s(   | j |ddd�}| j |¡ |  ¡  d S )Nzunset [name]r.   rP   )rS   r<   Úunset_valuerY   )r!   r>   r:   rC   r"   r"   r#   r3   ¹   s    zConfigurationCommand.unset_namec                 C   s€   | j |ddd� |  ¡  t| j ¡ ƒD ]T\}}td|ƒ |D ]<}tƒ �, tj 	|¡}td||ƒ |rn|  
|¡ W 5 Q R X q<q&dS )z9List config key-value pairs across different config filesr*   r   rP   ú%s:z%s, exists: %rN)rS   Úprint_env_var_valuesr8   r<   Úiter_config_filesr   r   rF   rG   rH   Úprint_config_file_values)r!   r>   r:   ÚvariantÚfilesÚfnameZfile_existsr"   r"   r#   r4   À   s    
 ÿz'ConfigurationCommand.list_config_valuesc              
   C   s<   | j  |¡ ¡ D ]&\}}tƒ � td||ƒ W 5 Q R X qdS )z.Get key-value pairs from the file of a variantz%s: %sN)r<   Úget_values_in_configrT   r   r   )r!   r_   ÚnamerD   r"   r"   r#   r^   Ò   s
    ÿz-ConfigurationCommand.print_config_file_valuesc              	   C   sR   t ddƒ tƒ �8 t| j ¡ ƒD ]"\}}d| ¡ › �}t d||ƒ q W 5 Q R X dS )z5Get key-values pairs present as environment variablesr[   Úenv_varÚPIP_rR   N)r   r   r8   r<   Úget_environ_varsÚupper)r!   rC   rD   rd   r"   r"   r#   r\   Ú   s
    
z)ConfigurationCommand.print_env_var_valuesc              
   C   sp   |   |¡}| j ¡ }|d kr$tdƒ‚zt ||g¡ W n4 tjk
rj } ztd |j¡ƒ‚W 5 d }~X Y nX 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   ra   r@   r"   r"   r#   r0   ã   s    

ÿÿz#ConfigurationCommand.open_in_editorc                 C   s<   t |ƒ|kr$d |tƒ |¡}t|ƒ‚|dkr4|d S |S dS )zJHelper to make sure the command got the right number of arguments
        zJGot unexpected number of arguments, expected {}. (example: "{} config {}")r.   r   N)rO   rm   r   r   )r!   r:   ZexamplerQ   Úmsgr"   r"   r#   rS   ó   s    ÿ  ýz ConfigurationCommand._get_n_argsc                 C   s:   z| j  ¡  W n& tk
r4   t d¡ tdƒ‚Y nX d S )Nz:Unable to save configuration. Please report this as a bug.zInternal Error.)r<   ÚsaveÚ	Exceptionr5   Ú	exceptionr   r    r"   r"   r#   rY     s    ÿz(ConfigurationCommand._save_configurationc                 C   sD   |j d k	r|j S dtjkr$tjd S dtjkr8tjd S tdƒ‚d S )NZVISUALZEDITORz"Could not determine editor to use.)r   rF   Úenvironr   )r!   r>   r"   r"   r#   rh     s    




z&ConfigurationCommand._determine_editorN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úignore_require_venvÚusager$   rA   r9   r/   r1   r2   r3   r4   r^   r\   r0   rS   rY   rh   r"   r"   r"   r#   r      s"   
'.	r   )ÚloggingrF   rj   Ú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   Ú	getLoggerrt   r5   r   r"   r"   r"   r#   Ú<module>   s   
