Current File : //usr/lib/python3/dist-packages/pip/_internal/__pycache__/configuration.cpython-312.pyc
�

/�g�6���dZddlZddlZddlZddlZddlmZmZmZm	Z	m
Z
mZmZddl
mZmZddlmZddlmZddlmZddlmZmZej2Ze
d	e�Zerd
ndZdZed
dddd��Zej>ej@ejBejDejFfZ$ej@ej>ejBfZ%ee&�Z'dedefd�Z(dede	efd�Z)deee	effd�Z*Gd�d�Z+y)aConfiguration management setup

Some terminology:
- name
  As written in config files.
- value
  Value associated with a name
- key
  Name combined with it's section (section.name)
- variant
  A single word describing where the configuration key-value pair came from
�N)�Any�Dict�Iterable�List�NewType�Optional�Tuple)�ConfigurationError�!ConfigurationFileCouldNotBeLoaded)�appdirs)�WINDOWS)�	getLogger)�
ensure_dir�enum�Kindzpip.inizpip.conf)�version�help�user�global�site�envzenv-var)�USER�GLOBAL�SITE�ENV�ENV_VAR�name�returnc�r�|j�jdd�}|jd�r|dd}|S)zAMake a name consistent regardless of source (environment or file)�_�-z--�N)�lower�replace�
startswith)rs �=/usr/lib/python3/dist-packages/pip/_internal/configuration.py�_normalize_namer'2s6���:�:�<����S�)�D����t���A�B�x���K�c�P�d|vrd|�d�}t|��|jdd�S)N�.zVKey does not contain dot separated section and key. Perhaps you wanted to use 'global.z
' instead?�)r
�split)r�
error_messages  r&�_disassemble_keyr.:s>��
�$��
1�15��j�
B�	�!��/�/��:�:�c�1��r(c�d�tjd�D�cgc]&}tjj	|t
���(}}tjj	tjt
�}tjj	tjjd�trdndt
�}tjj	tjd�t
�}tj|tj|gtj||giScc}w)N�pip�~z.pip)r�site_config_dirs�os�path�join�CONFIG_BASENAME�sys�prefix�
expanduserr
�user_config_dir�kindsrrr)r4�global_config_files�site_config_file�legacy_config_file�new_config_files     r&�get_configuration_filesr@Ds���8?�8P�8P�QV�8W��04������T�?�+�����w�w�|�|�C�J�J��@�������
�����3����f����
�g�g�l�l�7�#:�#:�5�#A�?�S�O�
���)�
�
�
�%�&�
�
�
�'��9����s�+D-c����eZdZdZd"dedeeddf�fd�
Zd#d�Zdee	fd�Z
deee	e
ffd	�Zd
e	de
fd�Zd
e	de
ddfd
�Zd
e	ddfd�Zd#d�Zd#d�Zedee	e
ffd��Zd#d�Zdede	defd�Zde	defd�Zd#d�Zde	deee	e
fdee	e
ffd�Zdeee	e	ffd�Zdeeeee	ffd�Zdedee	e
ffd�Z dee	effd�Z!de	deddfd �Z"de	fd!�Z#�xZ$S)$�
Configurationa�Handles management of configuration.

    Provides an interface to accessing and managing configuration files.

    This class converts provides an API that takes "section.key-name" style
    keys and stores the value associated with it as "key-name" under the
    section "section".

    This allows for a clean interface wherein the both the section and the
    key-name are preserved in an easy to manage form in the configuration files
    and the data stored is also nice.
    N�isolated�	load_onlyrc
�R��t�|��|�C|tvr;tdj	djt
tt�����||_||_	tD�cic]}|g��c}|_tD�cic]}|i��c}|_g|_
ycc}wcc}w)Nz5Got invalid value for load_only - should be one of {}z, )�super�__init__�VALID_LOAD_ONLYr
�formatr5�map�reprrCrD�OVERRIDE_ORDER�_parsers�_config�_modified_parsers)�selfrCrD�variant�	__class__s    �r&rGzConfiguration.__init__es����
����� �Y�o�%E�$�G�N�N��I�I�c�$��8�9���
�
!��
�"���(6�H
�#�G�R�K�H
��
�(6�4
�#�G�R�K�4
���EG����
H
��4
s�+
B�
B$c�^�|j�|js|j�yy)z<Loads configuration from configuration files and environmentN)�_load_config_filesrC�_load_environment_vars�rPs r&�loadzConfiguration.loadzs&�����!��}�}��'�'�)�r(c�n�|j�Jd��	|j�dS#t$rYywxYw)z7Returns the file with highest priority in configurationNz)Need to be specified a file to be editingr)rD�_get_parser_to_modify�
IndexErrorrVs r&�get_file_to_editzConfiguration.get_file_to_edit�sC���~�~�)�V�+V�V�)�	��-�-�/��2�2���	��	�s�(�	4�4c�6�|jj�S)z`Returns key-value pairs like dict.items() representing the loaded
        configuration
        )�_dictionary�itemsrVs r&r^zConfiguration.items�s�����%�%�'�'r(�keyc��|}t|�}	|j|S#t$rt|�t	d|����wxYw)z#Get a value from the configuration.�No such key - )r'r]�KeyErrorr.r
)rPr_�orig_keys   r&�	get_valuezConfiguration.get_value�sU�����c�"��	B��#�#�C�(�(���	B�
�S�!�$�~�h�Z�%@�A�A�		B�s	��#A�valuec�b�t|�}|j�|jsJ�|j�\}}|�Ct	|�\}}|j|�s|j
|�|j|||�||j|j|<|j||�y)z$Modify a value in the configuration.N)
r'�_ensure_have_load_onlyrDrYr.�has_section�add_section�setrN�_mark_as_modified)rPr_re�fname�parser�sectionrs       r&�	set_valuezConfiguration.set_value�s����c�"���#�#�%��~�~��~��2�2�4�
��v���,�S�1�M�G�T��%�%�g�.��"�"�7�+��J�J�w��e�,�,1����T�^�^�$�S�)����u�f�-r(c���|}t|�}|j�|jsJ�||j|jvrt	d|����|j�\}}|�pt
|�\}}|j|�r|j||�st	d��|j|�s|j|�|j||�|j|j|=y)z#Unset a value in the configuration.raNz4Fatal Internal error [id=1]. Please report as a bug.)r'rgrDrNr
rYr.rh�
remove_optionr^�remove_sectionrk)rPr_rcrlrmrnrs       r&�unset_valuezConfiguration.unset_value�s������c�"���#�#�%��~�~��~��d�l�l�4�>�>�2�2�$�~�h�Z�%@�A�A��2�2�4�
��v���,�S�1�M�G�T��"�"�7�+��0D�0D�W�d�0S�)�J���
�<�<��(��%�%�g�.��"�"�5�&�1��L�L����(��-r(c�r�|j�|jD]j\}}tjd|�t	t
jj|��	t|d�5}|j|�ddd��ly#1swY�xYw#t$r}td|�d|����d}~wwxYw)z!Save the current in-memory state.z
Writing to %s�wNz:An error occurred while writing to the configuration file z: )rgrO�logger�inforr3r4�dirname�open�write�OSErrorr
)rPrlrm�f�errors     r&�savezConfiguration.save�s����#�#�%�!�3�3�	�M�E�6��K�K���/�
�r�w�w���u�-�.�
��%��%�$���L�L��O�$��	�$�$���
�(�P��g�R��w�(����
�s0�"B�.B�B�B	�B�	B6� B1�1B6c�r�|j�td��tjd|j�y)Nz'Needed a specific file to be modifying.z$Will be working with %s variant only)rDr
rv�debugrVs r&rgz$Configuration._ensure_have_load_only�s+���>�>�!�$�%N�O�O����;�T�^�^�Lr(c�\�i}tD] }|j|j|��"|S)z3A dictionary representing the loaded configuration.)rL�updaterN)rP�retvalrQs   r&r]zConfiguration._dictionary�s4��
��%�	1�G��M�M�$�,�,�w�/�0�	1��
r(c��t|j��}|tjddtj
gk(rtjd�y|j�D]q\}}|D]g}|j�'||jk7rtjd||��6|j||�}|j|j||f��i�sy)z,Loads configuration from configuration filesrr+zZSkipping loading configuration files due to environment's PIP_CONFIG_FILE being os.devnullNz Skipping file '%s' (variant: %s))
�dict�iter_config_filesr;rr3�devnullrvr�r^rD�
_load_filerM�append)rP�config_filesrQ�filesrlrms      r&rTz Configuration._load_config_files�s����D�2�2�4�5����	�	�"�1�Q�'�B�J�J�<�7��L�L�A�
�
�*�0�0�2�	?�N�G�U��

?���>�>�-�'�T�^�^�2K��L�L�!C�U�G�T������%�8���
�
�g�&�-�-�u�f�o�>�

?�	?r(rQrlc��tjd||�|j|�}|j�D]A}|j	|�}|j
|j
|j||���C|S)Nz'For variant '%s', will try loading '%s')rv�verbose�_construct_parser�sectionsr^rNr��_normalized_keys)rPrQrlrmrnr^s      r&r�zConfiguration._load_filest�����@�'�5�Q��'�'��.�����(�	P�G��L�L��)�E��L�L��!�(�(��)>�)>�w��)N�O�	P��
r(c�B�tj�}tjj	|�r+tjd�}	|j||��|S|S#t$rtd|�d�|���tj$r}t|���d}~wwxYw)NF)�encodingzcontains invalid z characters)�reasonrl)r})�configparser�RawConfigParserr3r4�exists�locale�getpreferredencoding�read�UnicodeDecodeErrorr�Error)rPrlrm�locale_encodingr}s     r&r�zConfiguration._construct_parsers����-�-�/��
�7�7�>�>�%� �$�9�9�%�@�O�

E����E�O��<��
�v�
��&�
�7�.��.?�{�K���� �%�%�
E�7�e�D�D��
E�s�
A!�!,B�
B�Bc��|jtjj|j	d|j���y)z.Loads configuration from environment variablesz:env:N)rNr;rr�r��get_environ_varsrVs r&rUz$Configuration._load_environment_vars*s6�����U�]�]�#�*�*��!�!�'�4�+@�+@�+B�C�	
r(rnr^c�J�i}|D]\}}|dzt|�z}|||<�|S)z�Normalizes items to construct a dictionary with normalized keys.

        This routine is where the names become keys and are made the same
        regardless of source - configuration files or environment.
        r*)r')rPrnr^�
normalizedr�valr_s       r&r�zConfiguration._normalized_keys0s@���
��	"�I�D�#��C�-�/�$�"7�7�C�!�J�s�O�	"��r(c#�K�tjj�D]9\}}|jd�s�|ddj	�}|t
vs�4||f���;y�w)z@Returns a generator with all environmental vars with prefix PIP_�PIP_�N)r3�environr^r%r#�ENV_NAMES_IGNORED)rPr_r�rs    r&r�zConfiguration.get_environ_vars>sU�����
�
�(�(�*�	$�H�C���~�~�f�%��1�2�w�}�}����0�0���)�O�		$�s�6A�A�	Ac#�K�tjjdd�}t�}tj
|tj
f��|jxr$|xrtjj|�}|r%tj|tjf��tj|tjf��|�tj|gf��ytjgf��y�w)a�Yields variant and configuration files associated with it.

        This should be treated like items of a dictionary. The order
        here doesn't affect what gets overridden. That is controlled
        by OVERRIDE_ORDER. However this does control the order they are
        displayed to the user. It's probably most ergononmic to display
        things in the same order as OVERRIDE_ORDER
        �PIP_CONFIG_FILEN)r3r��getr@r;rrCr4r�rrr)rP�env_config_filer��should_load_user_configs    r&r�zConfiguration.iter_config_filesGs������*�*�.�.�):�D�A��.�0���l�l�L����6�6�6�'+�m�m�"3�#
��?������� ?�9
��#��*�*�l�5�:�:�6�6�6��j�j�,�u�z�z�2�2�2��&��)�)�o�.�.�.��)�)�R�-��s�C<C>c� �|j|S)z#Get values present in a config file)rN)rPrQs  r&�get_values_in_configz"Configuration.get_values_in_configgs���|�|�G�$�$r(c�t�|jsJ�|j|j}|std��|dS)Nz4Fatal Internal error [id=2]. Please report as a bug.���)rDrMr
)rP�parserss  r&rYz#Configuration._get_parser_to_modifyks?���~�~��~��-�-����/���$�F��
�
�r�{�r(rmc�`�||f}||jvr|jj|�yy�N)rOr�)rPrlrm�file_parser_tuples    r&rkzConfiguration._mark_as_modifiedys4��"�F�O���D�$:�$:�:��"�"�)�)�*;�<�;r(c�N�|jj�d|j�d�S)N�(�))rR�__name__r]rVs r&�__repr__zConfiguration.__repr__~s'���.�.�)�)�*�!�D�,<�,<�+?�q�A�Ar(r�)rN)%r��
__module__�__qualname__�__doc__�boolrrrGrW�strr[rr	rr^rdrorsr~rg�propertyrr]rTr�r�r�rUr�r�rr�r�rYrkr��
__classcell__)rRs@r&rBrBWs�����G��G�(�4�.�G�D�G�**��(�3�-��(�x��c�3�h��0�(�
B�S�
B�S�
B�.�S�.��.��.�&.�s�.�t�.�:�0M�
�	�T�#�s�(�^�	��	�?�.�$��s�����s����*
����#+�E�#�s�(�O�#<��	
�c�3�h���$�(�5��c��?�";�$� �8�E�$��S�	�/�,B�#C� �@%�D�%�T�#�s�(�^�%��u�S�/�-A�'B��=�s�=�O�=��=�
B�#�Br(rB),r�r�r�r3r7�typingrrrrrrr	�pip._internal.exceptionsr
r�pip._internal.utilsr�pip._internal.utils.compatr
�pip._internal.utils.loggingr�pip._internal.utils.miscrrr�r�rr6r�r;rrrrrrLrHr�rvr'r.r@rB�r(r&�<module>r�s����
�	�
�F�F�F��(�.�1�5��.�.���v�s���&�)�J��%��	
�	��	�
��	�����u�z�z�5�:�:�u�y�y�%�-�-�O���*�*�e�l�l�E�J�J�6��	�8�	���#��#���3��4��9����d�D��I�o�!6��&hB�hBr(