§
    
Á³gÙ4  ã                   óÔ  — d Z ddlZddlZddlZddlZddlmZmZmZm	Z	m
Z
mZmZ ddlmZmZ ddlmZ ddlmZ ddlmZ ddlmZmZ ej        Z e
d	e¦  «        Zerd
ndZdZ eddddd¬¦  «        Zej        ej         ej!        ej"        ej#        fZ$ej         ej        ej!        fZ% ee&¦  «        Z'dedefd„Z(dede	e         fd„Z)deee	e         f         fd„Z* G d„ d¦  «        Z+dS )a  Configuration 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ÚKindzpip.inizpip.conf)ÚversionÚhelpÚuserÚglobalÚsiteÚenvzenv-var)ÚUSERÚGLOBALÚSITEÚENVÚENV_VARÚnameÚreturnc                 ó”   — |                       ¦   «                              dd¦  «        } |                      d¦  «        r
| dd…         } | S )zAMake a name consistent regardless of source (environment or file)Ú_ú-z--é   N)ÚlowerÚreplaceÚ
startswith)r   s    úY/var/www/html/mpstechhub/venv/lib/python3.11/site-packages/pip/_internal/configuration.pyÚ_normalize_namer'   2   sE   € à�:Š:‰<Œ<×Ò  SÑ)Ô)€DØ‡‚�tÑÔð Ø�A�B�BŒxˆØ€Kó    c                 ó~   — d| vr$d                      | ¦  «        }t          |¦  «        ‚|                      dd¦  «        S )Nú.zbKey does not contain dot separated section and key. Perhaps you wanted to use 'global.{}' instead?é   )Úformatr
   Úsplit)r   Úerror_messages     r&   Ú_disassemble_keyr/   :   sD   € Ø
�$€€ð=ç
Š&�‰,Œ,ð 	õ ! Ñ/Ô/Ð/Ø�:Š:�c˜1ÑÔÐr(   c                  óô  — d„ t          j        d¦  «        D ¦   «         } t          j                             t
          j        t          ¦  «        }t          j                             t          j                             d¦  «        t          rdndt          ¦  «        }t          j                             t          j
        d¦  «        t          ¦  «        }t          j        | t          j        |gt          j        ||giS )Nc                 óX   — g | ]'}t           j                             |t          ¦  «        ‘Œ(S © )ÚosÚpathÚjoinÚCONFIG_BASENAME)Ú.0r4   s     r&   ú
<listcomp>z+get_configuration_files.<locals>.<listcomp>E   s5   € ð ð ð Ø04�Œ�Š�T�?Ñ+Ô+ðð ð r(   Úpipú~z.pip)r   Úsite_config_dirsr3   r4   r5   ÚsysÚprefixr6   Ú
expanduserr   Úuser_config_dirÚkindsr   r   r   )Úglobal_config_filesÚsite_config_fileÚlegacy_config_fileÚnew_config_files       r&   Úget_configuration_filesrE   D   sË   € ðð Ý8?Ô8PÐQVÑ8WÔ8Wðñ ô Ðõ ”w—|’|¥C¤JµÑ@Ô@ÐÝœŸšÝ
Œ×Ò˜3ÑÔÝÐ$ˆˆ˜fÝñô Ðõ
 ”g—l’l¥7Ô#:¸5Ñ#AÔ#AÅ?ÑSÔS€OåŒÐ)ÝŒ
Ð%Ð&ÝŒ
Ð'¨Ð9ðð r(   c                   ó"  ‡ — e Zd ZdZd"dedee         ddfˆ fd„Zd#d„Zdee	         fd„Z
deee	ef                  fd	„Zd
e	defd„Zd
e	deddfd„Zd
e	ddfd„Zd#d„Zd#d„Zedee	ef         fd„¦   «         Zd#d„Zdede	defd„Zde	defd„Zd#d„Zde	deee	ef                  dee	ef         fd„Zdeee	e	f                  fd„Zdeeeee	         f                  fd„Zdedee	ef         fd„Z dee	ef         fd„Z!de	deddfd „Z"de	fd!„Z#ˆ xZ$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_onlyr   c           
      óz  •— t          ¦   «                              ¦   «          |�V|t          vrMt          d                     d                     t          t          t          ¦  «        ¦  «        ¦  «        ¦  «        ‚|| _        || _	        d„ t          D ¦   «         | _        d„ t          D ¦   «         | _        g | _        d S )Nz5Got invalid value for load_only - should be one of {}z, c                 ó   — i | ]}|g “ŒS r2   r2   ©r7   Úvariants     r&   ú
<dictcomp>z*Configuration.__init__.<locals>.<dictcomp>r   s-   € ð H
ð H
ð H
Ø#ˆG�RðH
ð H
ð H
r(   c                 ó   — i | ]}|i “ŒS r2   r2   rL   s     r&   rN   z*Configuration.__init__.<locals>.<dictcomp>u   s'   € ð 4
ð 4
ð 4
Ø#ˆG�Rð4
ð 4
ð 4
r(   )ÚsuperÚ__init__ÚVALID_LOAD_ONLYr
   r,   r5   ÚmapÚreprrH   rI   ÚOVERRIDE_ORDERÚ_parsersÚ_configÚ_modified_parsers)ÚselfrH   rI   Ú	__class__s      €r&   rQ   zConfiguration.__init__e   sÎ   ø€ Ý‰Œ×ÒÑÔÐàÐ  YµoÐ%EÐ%EÝ$ØG×NÒNØ—I’I�c¥$­Ñ8Ô8Ñ9Ô9ñô ñô ð ð
 !ˆŒØ"ˆŒðH
ð H
Ý'5ðH
ñ H
ô H
ˆŒð4
ð 4
Ý'5ð4
ñ 4
ô 4
ˆŒð EGˆÔÐÐr(   c                 óh   — |                       ¦   «          | j        s|                      ¦   «          dS dS )z<Loads configuration from configuration files and environmentN)Ú_load_config_filesrH   Ú_load_environment_vars©rY   s    r&   ÚloadzConfiguration.loadz   s@   € à×ÒÑ!Ô!Ð!ØŒ}ð 	*Ø×'Ò'Ñ)Ô)Ð)Ð)Ð)ð	*ð 	*r(   c                 ó|   — | j         €
J d¦   «         ‚	 |                      ¦   «         d         S # t          $ r Y dS w xY w)z7Returns the file with highest priority in configurationNz)Need to be specified a file to be editingr   )rI   Ú_get_parser_to_modifyÚ
IndexErrorr^   s    r&   Úget_file_to_editzConfiguration.get_file_to_edit€   sW   € àŒ~Ð)Ð)Ð+VÑ)Ô)Ð)ð	Ø×-Ò-Ñ/Ô/°Ô2Ð2øÝð 	ð 	ð 	Ø�4�4ð	øøøs   “- ­
;º;c                 ó4   — | j                              ¦   «         S )z`Returns key-value pairs like dict.items() representing the loaded
        configuration
        )Ú_dictionaryÚitemsr^   s    r&   rf   zConfiguration.items‰   s   € ð Ô×%Ò%Ñ'Ô'Ð'r(   Úkeyc                 óž   — |}t          |¦  «        }	 | j        |         S # t          $ r" t          |¦  «         t	          d|› �¦  «        ‚w xY w)z#Get a value from the configuration.úNo such key - )r'   re   ÚKeyErrorr/   r
   )rY   rg   Úorig_keys      r&   Ú	get_valuezConfiguration.get_value�   sn   € àˆÝ˜cÑ"Ô"ˆð	BØÔ# CÔ(Ð(øÝð 	Bð 	Bð 	Bõ ˜SÑ!Ô!Ð!Ý$Ð%@°hÐ%@Ð%@ÑAÔAÐAð		Bøøøs	   “   ,AÚvaluec                 óŒ  — t          |¦  «        }|                      ¦   «          | j        sJ ‚|                      ¦   «         \  }}|�St	          |¦  «        \  }}|                     |¦  «        s|                     |¦  «         |                     |||¦  «         || j        | j                 |<   |  	                    ||¦  «         dS )z$Modify a value in the configuration.N)
r'   Ú_ensure_have_load_onlyrI   ra   r/   Úhas_sectionÚadd_sectionÚsetrW   Ú_mark_as_modified)rY   rg   rm   ÚfnameÚparserÚsectionr   s          r&   Ú	set_valuezConfiguration.set_value›   sÌ   € å˜cÑ"Ô"ˆØ×#Ò#Ñ%Ô%Ð%àŒ~ÐÐÐØ×2Ò2Ñ4Ô4‰ˆˆvàÐÝ,¨SÑ1Ô1‰MˆG�Tð ×%Ò% gÑ.Ô.ð ,Ø×"Ò" 7Ñ+Ô+Ð+Ø�JŠJ�w  eÑ,Ô,Ð,à,1ˆŒ�T”^Ô$ SÑ)Ø×Ò˜u fÑ-Ô-Ð-Ð-Ð-r(   c                 ó  — |}t          |¦  «        }|                      ¦   «          | j        sJ ‚|| j        | j                 vrt	          d|› �¦  «        ‚|                      ¦   «         \  }}|�Œt          |¦  «        \  }}|                     |¦  «        r|                     ||¦  «        st	          d¦  «        ‚| 	                    |¦  «        s| 
                    |¦  «         |                      ||¦  «         | j        | j                 |= dS )z#Unset a value in the configuration.ri   Nz4Fatal Internal error [id=1]. Please report as a bug.)r'   ro   rI   rW   r
   ra   r/   rp   Úremove_optionrf   Úremove_sectionrs   )rY   rg   rk   rt   ru   rv   r   s          r&   Úunset_valuezConfiguration.unset_value®   s'  € àˆÝ˜cÑ"Ô"ˆØ×#Ò#Ñ%Ô%Ð%àŒ~ÐÐÐØ�d”l 4¤>Ô2Ð2Ð2Ý$Ð%@°hÐ%@Ð%@ÑAÔAÐAà×2Ò2Ñ4Ô4‰ˆˆvàÐÝ,¨SÑ1Ô1‰MˆG�Tà×"Ò" 7Ñ+Ô+ðØ06×0DÒ0DÀWÈdÑ0SÔ0Sðõ )ØJñô ð ð
 —<’< Ñ(Ô(ð /Ø×%Ò% gÑ.Ô.Ð.Ø×"Ò" 5¨&Ñ1Ô1Ð1àŒL˜œÔ(¨Ð-Ð-Ð-r(   c                 óP  — |                       ¦   «          | j        D ]‰\  }}t                               d|¦  «         t	          t
          j                             |¦  «        ¦  «         t          |d¦  «        5 }| 	                    |¦  «         ddd¦  «         n# 1 swxY w Y   ŒŠdS )z!Save the current in-memory state.zWriting to %sÚwN)
ro   rX   ÚloggerÚinfor   r3   r4   ÚdirnameÚopenÚwrite)rY   rt   ru   Úfs       r&   ÚsavezConfiguration.saveË   sØ   € à×#Ò#Ñ%Ô%Ð%à!Ô3ð 	 ð 	 ‰MˆE�6Ý�KŠK˜¨Ñ/Ô/Ð/õ •r”w—’ uÑ-Ô-Ñ.Ô.Ð.å�e˜SÑ!Ô!ð   QØ—’˜Q‘”�ð ð  ð  ñ  ô  ð  ð  ð  ð  ð  ð  øøøð  ð  ð  ð  øð	 ð 	 s   Á8BÂB	Â!B	c                 ór   — | j         €t          d¦  «        ‚t                               d| j         ¦  «         d S )Nz'Needed a specific file to be modifying.z$Will be working with %s variant only)rI   r
   r~   Údebugr^   s    r&   ro   z$Configuration._ensure_have_load_onlyÜ   s6   € ØŒ>Ð!Ý$Ð%NÑOÔOÐOÝ�ŠÐ;¸T¼^ÑLÔLÐLÐLÐLr(   c                 ó^   — i }t           D ]"}|                     | j        |         ¦  «         Œ#|S )z3A dictionary representing the loaded configuration.)rU   ÚupdaterW   )rY   ÚretvalrM   s      r&   re   zConfiguration._dictionaryá   s9   € ð
 ˆå%ð 	1ð 	1ˆGØ�MŠM˜$œ, wÔ/Ñ0Ô0Ð0Ð0àˆr(   c                 óÞ  — t          |                      ¦   «         ¦  «        }|t          j                 dd…         t          j        gk    rt                               d¦  «         dS |                     ¦   «         D ]q\  }}|D ]i}| j	        �(|| j	        k    rt                               d||¦  «         Œ1|  
                    ||¦  «        }| j        |                              ||f¦  «         ŒjŒrdS )z,Loads configuration from configuration filesr   r+   zZSkipping loading configuration files due to environment's PIP_CONFIG_FILE being os.devnullNz Skipping file '%s' (variant: %s))ÚdictÚiter_config_filesr@   r   r3   Údevnullr~   r†   rf   rI   Ú
_load_filerV   Úappend)rY   Úconfig_filesrM   Úfilesrt   ru   s         r&   r\   z Configuration._load_config_filesí   s  € å˜D×2Ò2Ñ4Ô4Ñ5Ô5ˆØ�œ	Ô" 1 Q 3Ô'­B¬J¨<Ò7Ð7Ý�LŠLðAñô ð ð ˆFà*×0Ò0Ñ2Ô2ð 	?ð 	?‰NˆG�UØð 
?ð 
?�ð ”>Ð-°'¸T¼^Ò2KÐ2KÝ—L’LÐ!CÀUÈGÑTÔTÐTØàŸš¨°%Ñ8Ô8�ð ”˜gÔ&×-Ò-¨u°f¨oÑ>Ô>Ð>Ð>ð
?ð	?ð 	?r(   rM   rt   c                 ó(  — t                                d||¦  «         |                      |¦  «        }|                     ¦   «         D ]K}|                     |¦  «        }| j        |                              |                      ||¦  «        ¦  «         ŒL|S )Nz'For variant '%s', will try loading '%s')r~   ÚverboseÚ_construct_parserÚsectionsrf   rW   rˆ   Ú_normalized_keys)rY   rM   rt   ru   rv   rf   s         r&   rŽ   zConfiguration._load_file  s‹   € Ý�ŠÐ@À'È5ÑQÔQÐQØ×'Ò'¨Ñ.Ô.ˆà—’Ñ(Ô(ð 	Pð 	PˆGØ—L’L Ñ)Ô)ˆEØŒL˜Ô!×(Ò(¨×)>Ò)>¸wÈÑ)NÔ)NÑOÔOÐOÐOàˆr(   c                 óN  — t          j        ¦   «         }t          j                             |¦  «        rrt          j        d¦  «        }	 |                     ||¬¦  «         nE# t          $ r t          d|› d�|¬¦  «        ‚t           j
        $ r}t          |¬¦  «        ‚d }~ww xY w|S )NF)Úencodingzcontains invalid z characters)Úreasonrt   )Úerror)ÚconfigparserÚRawConfigParserr3   r4   ÚexistsÚlocaleÚgetpreferredencodingÚreadÚUnicodeDecodeErrorr   ÚError)rY   rt   ru   Úlocale_encodingrš   s        r&   r”   zConfiguration._construct_parser  sÒ   € ÝÔ-Ñ/Ô/ˆõ
 Œ7�>Š>˜%Ñ Ô ð 	EÝ$Ô9¸%Ñ@Ô@ˆOð
EØ—’˜E¨O�Ñ<Ô<Ð<Ð<øÝ%ð ð ð å7ØK¨ÐKÐKÐKØðñ ô ð õ  Ô%ð Eð Eð Eå7¸eÐDÑDÔDÐDøøøøðEøøøð ˆs   ÁA  Á -B"ÂBÂB"c                 ó¦   — | j         t          j                                      |                      d|                      ¦   «         ¦  «        ¦  «         dS )z.Loads configuration from environment variablesz:env:N)rW   r@   r   rˆ   r–   Úget_environ_varsr^   s    r&   r]   z$Configuration._load_environment_vars#  sL   € àŒ•U”]Ô#×*Ò*Ø×!Ò! '¨4×+@Ò+@Ñ+BÔ+BÑCÔCñ	
ô 	
ð 	
ð 	
ð 	
r(   rv   rf   c                 óN   — i }|D ]\  }}|dz   t          |¦  «        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'   )rY   rv   rf   Ú
normalizedr   Úvalrg   s          r&   r–   zConfiguration._normalized_keys)  sC   € ð ˆ
Øð 	"ð 	"‰IˆD�#Ø˜C‘-¥/°$Ñ"7Ô"7Ñ7ˆCØ!ˆJ�s‰OˆOØÐr(   c              #   óÒ   K  — t           j                             ¦   «         D ]E\  }}|                     d¦  «        r+|dd…                              ¦   «         }|t
          vr||fV — ŒFdS )z@Returns a generator with all environmental vars with prefix PIP_ÚPIP_é   N)r3   Úenvironrf   r%   r#   ÚENV_NAMES_IGNORED)rY   rg   r¨   r   s       r&   r¥   zConfiguration.get_environ_vars7  st   è è € åœ
×(Ò(Ñ*Ô*ð 	$ð 	$‰HˆC�Ø�~Š~˜fÑ%Ô%ð $Ø˜1˜2˜2”w—}’}‘”�ØÕ0Ð0Ð0Ø ˜)�O�O�Oøð		$ð 	$r(   c              #   óÆ  K  — t           j                             dd¦  «        }|�t          j        |gfV — nt          j        g fV — t          ¦   «         }t          j        |t          j                 fV — | j         o!|ot           j         	                    |¦  «         }|r t          j
        |t          j
                 fV — t          j        |t          j                 fV — dS )zYields variant and configuration files associated with it.

        This should be treated like items of a dictionary.
        ÚPIP_CONFIG_FILEN)r3   r¬   Úgetr@   r   rE   r   rH   r4   r�   r   r   )rY   Úconfig_filer�   Úshould_load_user_configs       r&   rŒ   zConfiguration.iter_config_files@  sè   è è € õ ”j—n’nÐ%6¸Ñ=Ô=ˆØÐ"Ý”)˜k˜]Ð*Ð*Ð*Ð*Ð*å”)˜R�-ÐÐÐå.Ñ0Ô0ˆõ Œl˜L­¬Ô6Ð6Ð6Ð6Ð6ð '+¤mÐ"3ð #
ØÐ7�BœGŸNšN¨;Ñ7Ô7ð9
Ðð #ð 	7å”*˜l­5¬:Ô6Ð6Ð6Ð6Ð6õ Œj˜,¥u¤zÔ2Ð2Ð2Ð2Ð2Ð2Ð2r(   c                 ó   — | j         |         S )z#Get values present in a config file)rW   )rY   rM   s     r&   Úget_values_in_configz"Configuration.get_values_in_config^  s   € àŒ|˜GÔ$Ð$r(   c                 ój   — | j         sJ ‚| j        | j                  }|st          d¦  «        ‚|d         S )Nz4Fatal Internal error [id=2]. Please report as a bug.éÿÿÿÿ)rI   rV   r
   )rY   Úparserss     r&   ra   z#Configuration._get_parser_to_modifyb  sG   € àŒ~ÐÐÐØ”- ¤Ô/ˆØð 	å$ØFñô ð ð
 �rŒ{Ðr(   ru   c                 óX   — ||f}|| j         vr| j                              |¦  «         d S d S ©N)rX   r�   )rY   rt   ru   Úfile_parser_tuples       r&   rs   zConfiguration._mark_as_modifiedp  s@   € Ø" F˜OÐØ DÔ$:Ð:Ð:ØÔ"×)Ò)Ð*;Ñ<Ô<Ð<Ð<Ð<ð ;Ð:r(   c                 ó0   — | j         j        › d| j        ›d�S )Nú(ú))rZ   Ú__name__re   r^   s    r&   Ú__repr__zConfiguration.__repr__u  s!   € Ø”.Ô)ÐAÐA¨DÔ,<ÐAÐAÐAÐAr(   r¹   )r   N)%r¾   Ú
__module__Ú__qualname__Ú__doc__Úboolr   r   rQ   r_   Ústrrc   r   r	   r   rf   rl   rw   r{   r„   ro   Úpropertyr   re   r\   rœ   rŽ   r”   r]   r–   r¥   r   rŒ   r´   ra   rs   r¿   Ú__classcell__)rZ   s   @r&   rG   rG   W   s=  ø€ € € € € ðð ðGð G ð G°(¸4´.ð GÈDð Gð Gð Gð Gð Gð Gð**ð *ð *ð *ð (¨3¤-ð ð ð ð ð(�x  c¨3 h¤Ô0ð (ð (ð (ð (ð
B˜Sð 
B Sð 
Bð 
Bð 
Bð 
Bð.˜Sð .¨ð .°ð .ð .ð .ð .ð&.˜sð . tð .ð .ð .ð .ð: ð  ð  ð  ð"Mð Mð Mð Mð
 ð	˜T # s (œ^ð 	ð 	ð 	ñ „Xð	ð?ð ?ð ?ð ?ð. $ð ¨sð °ð ð ð ð ð sð ¨ð ð ð ð ð*
ð 
ð 
ð 
ðØðØ#+¨E°#°s°(¬OÔ#<ðà	ˆc�3ˆhŒðð ð ð ð$ (¨5°°c°¬?Ô";ð $ð $ð $ð $ð3 8¨E°$¸¸S¼	°/Ô,BÔ#Cð 3ð 3ð 3ð 3ð<%¨Dð %°T¸#¸s¸(´^ð %ð %ð %ð %ð u¨S°/Ð-AÔ'Bð ð ð ð ð= sð =°Oð =Èð =ð =ð =ð =ð
B˜#ð Bð Bð Bð Bð Bð Bð Bð Br(   rG   ),rÂ   r›   rž   r3   r<   Útypingr   r   r   r   r   r   r	   Úpip._internal.exceptionsr
   r   Úpip._internal.utilsr   Úpip._internal.utils.compatr   Úpip._internal.utils.loggingr   Úpip._internal.utils.miscr   r   rœ   rÄ   r   r6   r­   r@   r   r   r   r   r   rU   rR   r¾   r~   r'   r/   rE   rG   r2   r(   r&   ú<module>rÍ      s-  ððð ð Ð Ð Ð Ø €€€Ø 	€	€	€	Ø 
€
€
€
Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ Fðð ð ð ð ð ð ð ð (Ð 'Ð 'Ð 'Ð 'Ð 'Ø .Ð .Ð .Ð .Ð .Ð .Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5àÔ.€Ø€wˆv�sÑÔ€à&Ð6�)�)¨J€Ø%Ð ð 	ˆØ	ØØ	ØØð	ñ 	ô 	€ð ”˜uœz¨5¬:°u´yÀ%Ä-ÐO€Ø”*˜eœl¨E¬JÐ6€à	ˆ�8Ñ	Ô	€ð˜#ð  #ð ð ð ð ð˜3ð  4¨¤9ð ð ð ð ð  d¨D°¬I oÔ!6ð ð ð ð ð&_Bð _Bð _Bð _Bð _Bñ _Bô _Bð _Bð _Bð _Br(   