ó
    Þ j¶6  ã                   ó  • S r SSKrSSKrSSKrSSKrSSKJrJrJrJ	r	J
r
JrJr  SSKJrJr  SSKJr  SSKJr  SSKJr  SSKJrJr  \R2                  r\
" S	\5      r\(       a  S
OSrSr\" SSSSSS9r\R>                  \R@                  \RB                  \RD                  \RF                  4r$\R@                  \R>                  \RB                  4r%\" \&5      r'S\S\4S jr(S\S\	\   4S jr)S\\\	\   4   4S jr* " S S5      r+g)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                 ó|   • U R                  5       R                  SS5      n U R                  S5      (       a  U SS n U $ )zAMake a name consistent regardless of source (environment or file)Ú_Ú-z--é   N)ÚlowerÚreplaceÚ
startswith)r   s    ÚU/var/www/html/gaurav/venv/lib/python3.13/site-packages/pip/_internal/configuration.pyÚ_normalize_namer'   2   s9   € à�:‰:‹<×Ñ  SÓ)€DØ‡��t×ÑØ�A�BˆxˆØ€Kó    c                 óT   • SU ;  a  SU  S3n[        U5      eU R                  SS5      $ )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                  ót  • [         R                  " S5       V s/ sH'  n [        R                  R	                  U [
        5      PM)     nn [        R                  R	                  [        R                  [
        5      n[        R                  R	                  [        R                  R                  S5      [        (       a  SOS[
        5      n[        R                  R	                  [         R                  " S5      [
        5      n[        R                  U[        R                  U/[        R                  X4/0$ s  sn f )NÚpipÚ~z.pip)r   Úsite_config_dirsÚosÚpathÚjoinÚCONFIG_BASENAMEÚsysÚprefixÚ
expanduserr   Úuser_config_dirÚkindsr   r   r   )r4   Úglobal_config_filesÚsite_config_fileÚlegacy_config_fileÚnew_config_files        r&   Úget_configuration_filesr@   D   sÚ   € ä8?×8PÒ8PÐQVÔ8WóÙ8W°Œ�‰�‰�Tœ?Ö+Ñ8Wð ð ô —w‘w—|‘|¤C§J¡J´Ó@ÐÜŸ™Ÿ™Ü
�‰×Ñ˜3Óß’‰˜fÜóÐô
 —g‘g—l‘l¤7×#:Ò#:¸5Ó#AÄ?ÓS€Oä�‰Ð)Ü�
‰
Ð%Ð&Ü�
‰
Ð'Ð9ðð ùòs   ™-D5c                   óø  ^ • \ rS rSrSrS$S\S\\   SS4U 4S jjjrS%S jr	S\\
   4S	 jrS\\\
\4      4S
 jrS\
S\4S jrS\
S\SS4S jrS\
SS4S jrS%S jrS%S jr\S\\
\4   4S j5       rS%S jrS\S\
S\4S jrS\
S\4S jrS%S jrS\
S\\\
\4      S\\
\4   4S jrS\\\
\
4      4S jrS\\\\\
   4      4S jr S\S\\
\4   4S jr!S\\
\4   4S jr"S\
S \SS4S! jr#S\
4S" jr$S#r%U =r&$ )&ÚConfigurationéW   aÂ  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           
      óX  >• [         TU ]  5         UbE  U[        ;  a;  [        SR	                  SR                  [        [        [        5      5      5      5      eXl        X l	        [         Vs0 sH  o3/ _M     snU l        [         Vs0 sH  o30 _M     snU l        / U l        g s  snf s  snf )Nz5Got invalid value for load_only - should be one of {}z, )ÚsuperÚ__init__ÚVALID_LOAD_ONLYr
   Úformatr5   ÚmapÚreprrD   rE   ÚOVERRIDE_ORDERÚ_parsersÚ_configÚ_modified_parsers)ÚselfrD   rE   ÚvariantÚ	__class__s       €r&   rH   ÚConfiguration.__init__e   s¬   ø€ Ü‰ÑÔàÑ  Y´oÓ%EÜ$ØG×NÑNØ—I‘Iœc¤$¬Ó8Ó9óóð ð
 !ŒØ"Œõ (6óH
Ù'5˜G�RŠK¡~ñH
ˆŒõ (6ó4
Ù'5˜G�RŠK¡~ñ4
ˆŒð EGˆÕùòH
ùò4
s   Á,B"ÂB'c                 óh   • U R                  5         U R                  (       d  U R                  5         gg)z<Loads configuration from configuration files and environmentN)Ú_load_config_filesrD   Ú_load_environment_vars©rQ   s    r&   ÚloadÚConfiguration.loadz   s&   € à×ÑÔ!Ø�}�}Ø×'Ñ'Õ)ð r(   c                 ór   • U R                   c   S5       e U R                  5       S   $ ! [         a     gf = f)z7Returns the file with highest priority in configurationNz)Need to be specified a file to be editingr   )rE   Ú_get_parser_to_modifyÚ
IndexErrorrX   s    r&   Úget_file_to_editÚConfiguration.get_file_to_edit€   sC   € à�~‰~Ñ)ÐVÐ+VÓVÐ)ð	Ø×-Ñ-Ó/°Ñ2Ð2øÜó 	Ùð	ús   –) ©
6µ6c                 ó6   • U R                   R                  5       $ )zPReturns key-value pairs like dict.items() representing the loaded
configuration
)Ú_dictionaryÚitemsrX   s    r&   rb   ÚConfiguration.items‰   s   € ð ×Ñ×%Ñ%Ó'Ð'r(   Úkeyc                 óŠ   • Un[        U5      n U R                  U   $ ! [         a    [        U5        [	        SU 35      ef = f)z#Get a value from the configuration.úNo such key - )r'   ra   ÚKeyErrorr.   r
   )rQ   rd   Úorig_keys      r&   Ú	get_valueÚConfiguration.get_value�   sU   € àˆÜ˜cÓ"ˆð	BØ×#Ñ# CÑ(Ð(øÜó 	Bô ˜SÔ!Ü$ ~°h°ZÐ%@ÓAÐAð		Bús	   � ž$AÚvaluec                 ón  • [        U5      nU R                  5         U R                  (       d   eU R                  5       u  p4UbF  [	        U5      u  pVUR                  U5      (       d  UR                  U5        UR                  XVU5        X R                  U R                     U'   U R                  X45        g)z$Modify a value in the configuration.N)
r'   Ú_ensure_have_load_onlyrE   r\   r.   Úhas_sectionÚadd_sectionÚsetrO   Ú_mark_as_modified)rQ   rd   rk   ÚfnameÚparserÚsectionr   s          r&   Ú	set_valueÚConfiguration.set_value›   s˜   € ä˜cÓ"ˆØ×#Ñ#Ô%à�~�~Ðˆ~Ø×2Ñ2Ó4‰ˆàÑÜ,¨SÓ1‰MˆGð ×%Ñ% g×.Ñ.Ø×"Ñ" 7Ô+Ø�J‰J�w eÔ,à,1�‰�T—^‘^Ñ$ SÑ)Ø×Ñ˜uÕ-r(   c                 ó  • Un[        U5      nU R                  5         U R                  (       d   eXR                  U R                     ;  a  [	        SU 35      eU R                  5       u  p4Ub|  [        U5      u  pVUR                  U5      (       a  UR                  XV5      (       d  [	        S5      eUR                  U5      (       d  UR                  U5        U R                  X45        U R                  U R                     U	 g)z#Unset a value in the configuration.rf   Nz4Fatal Internal error [id=1]. Please report as a bug.)r'   rm   rE   rO   r
   r\   r.   rn   Úremove_optionrb   Úremove_sectionrq   )rQ   rd   rh   rr   rs   rt   r   s          r&   Úunset_valueÚConfiguration.unset_value®   så   € àˆÜ˜cÓ"ˆØ×#Ñ#Ô%à�~�~Ðˆ~Ø—l‘l 4§>¡>Ñ2Ó2Ü$ ~°h°ZÐ%@ÓAÐAà×2Ñ2Ó4‰ˆàÑÜ,¨SÓ1‰MˆGà×"Ñ" 7×+Ñ+°×0DÑ0DÀW×0SÑ0Sô )ØJóð ð
 —<‘< ×(Ñ(Ø×%Ñ% gÔ.Ø×"Ñ" 5Ô1à�L‰L˜Ÿ™Ñ(¨Ñ-r(   c                 ó‚  • U R                  5         U R                   Hj  u  p[        R                  SU5        [	        [
        R                  R                  U5      5         [        US5       nUR                  U5        SSS5        Ml     g! , (       d  f       M~  = f! [         a  n[        SU SU 35      eSnAff = f)z!Save the current in-memory state.zWriting to %sÚwNz:An error occurred while writing to the configuration file z: )rm   rP   ÚloggerÚinfor   r3   r4   ÚdirnameÚopenÚwriteÚOSErrorr
   )rQ   rr   rs   ÚfÚerrors        r&   ÚsaveÚConfiguration.saveË   s¡   € à×#Ñ#Ô%à!×3Ô3‰MˆEÜ�K‰K˜¨Ô/ô ”r—w‘w—‘ uÓ-Ô.ðÜ˜% Ô%¨Ø—L‘L ”O÷ &Ñ%ò 4÷ &Ö%ûäó Ü(ØPØ�g˜R ˜wð(óð ûðús6   Á!BÁ-BÁ?BÂ
B	ÂBÂBÂ
B>Â(B9Â9B>c                 ót   • U R                   c  [        S5      e[        R                  SU R                   5        g )Nz'Needed a specific file to be modifying.z$Will be working with %s variant only)rE   r
   r~   ÚdebugrX   s    r&   rm   Ú$Configuration._ensure_have_load_onlyã   s+   € Ø�>‰>Ñ!Ü$Ð%NÓOÐOÜ�‰Ð;¸T¿^¹^ÕLr(   c                 ó`   • 0 n[          H!  nUR                  U R                  U   5        M#     U$ )z3A dictionary representing the loaded configuration.)rM   ÚupdaterO   )rQ   ÚretvalrR   s      r&   ra   ÚConfiguration._dictionaryè   s/   € ð
 ˆç%ˆGØ�M‰M˜$Ÿ,™, wÑ/Ö0ñ &ð ˆr(   c                 óÀ  • [        U R                  5       5      nU[        R                     SS [        R
                  /:X  a  [        R                  S5        gUR                  5        Hr  u  p#U Hg  nU R                  b'  X R                  :w  a  [        R                  SXB5        M7  U R                  X$5      nU R                  U   R                  XE45        Mi     Mt     g)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‰   rb   rE   Ú
_load_filerN   Úappend)rQ   Úconfig_filesrR   Úfilesrr   rs   s         r&   rV   Ú Configuration._load_config_filesô   s¹   € ä˜D×2Ñ2Ó4Ó5ˆØœŸ	™	Ñ" 1 QÐ'¬B¯J©J¨<Ó7Ü�L‰LðAôð à*×0Ñ0Ö2‰NˆGÛ�ð —>‘>Ñ-°'¿^¹^Ó2KÜ—L‘LÐ!CÀUÔTÙàŸ™¨Ó8�ð —‘˜gÑ&×-Ñ-¨u¨oÖ>ó ò 3r(   rR   rr   c                 óþ   • [         R                  SX5        U R                  U5      nUR                  5        HA  nUR	                  U5      nU R
                  U   R                  U R                  XE5      5        MC     U$ )Nz'For variant '%s', will try loading '%s')r~   ÚverboseÚ_construct_parserÚsectionsrb   rO   rŒ   Ú_normalized_keys)rQ   rR   rr   rs   rt   rb   s         r&   r“   ÚConfiguration._load_file  si   € Ü�‰Ð@À'ÔQØ×'Ñ'¨Ó.ˆà—‘Ö(ˆGØ—L‘L Ó)ˆEØ�L‰L˜Ñ!×(Ñ(¨×)>Ñ)>¸wÓ)NÖOñ )ð ˆr(   c                 ó@  • [         R                  " 5       n[        R                  R	                  U5      (       a(  [
        R                  " S5      n UR                  XS9  U$ U$ ! [         a    [        SU S3US9e[         R                   a  n[        US9eS nAff = f)NF)Úencodingzcontains invalid z characters)Úreasonrr   )r…   )ÚconfigparserÚRawConfigParserr3   r4   ÚexistsÚlocaleÚgetpreferredencodingÚreadÚUnicodeDecodeErrorr   ÚError)rQ   rr   rs   Úlocale_encodingr…   s        r&   rš   ÚConfiguration._construct_parser  s    € Ü×-Ò-Ó/ˆô
 �7‰7�>‰>˜%× Ñ Ü$×9Ò9¸%Ó@ˆOð
EØ—‘˜E�Ñ<ð ˆˆvˆøô &ó ä7Ø.¨Ð.?¸{ÐKØñð ô  ×%Ñ%ó Eä7¸eÑDÐDûðEús   ÁA$ Á$+BÂ	BÂBc                 ó˜   • U R                   [        R                     R                  U R	                  SU R                  5       5      5        g)z.Loads configuration from environment variablesz:env:N)rO   r;   r   rŒ   rœ   Úget_environ_varsrX   s    r&   rW   Ú$Configuration._load_environment_vars*  s6   € à�‰”U—]‘]Ñ#×*Ñ*Ø×!Ñ! '¨4×+@Ñ+@Ó+BÓCõ	
r(   rt   rb   c                 óJ   • 0 nU H  u  pEUS-   [        U5      -   nXSU'   M     U$ )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'   )rQ   rt   rb   Ú
normalizedr   Úvalrd   s          r&   rœ   ÚConfiguration._normalized_keys0  s7   € ð ˆ
Û‰IˆDØ˜C‘-¤/°$Ó"7Ñ7ˆCØ!�s‹Oñ ð Ðr(   c              #   óÒ   #   • [         R                  R                  5        HA  u  pUR                  S5      (       d  M  USS R	                  5       nU[
        ;  d  M<  X24v •  MC     g7f)z@Returns a generator with all environmental vars with prefix PIP_ÚPIP_é   N)r3   Úenvironrb   r%   r#   ÚENV_NAMES_IGNORED)rQ   rd   r°   r   s       r&   r¬   ÚConfiguration.get_environ_vars>  sN   é € äŸ
™
×(Ñ(Ö*‰HˆCØ�~‰~˜f×%Ó%Ø˜1˜2�w—}‘}“�ØÔ0Õ0Ø˜)”Oò	 +ùs   ‚8A'¾A'Á
A'c              #   ó0  #   • [         R                  R                  SS5      n[        5       n[        R
                  U[        R
                     4v •  U R                  (       + =(       a-    U=(       a    [         R                  R                  U5      (       + nU(       a%  [        R                  U[        R                     4v •  [        R                  U[        R                     4v •  Ub  [        R                  U/4v •  g[        R                  / 4v •  g7f)aa  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)r3   rµ   Úgetr@   r;   r   rD   r4   r£   r   r   r   )rQ   Úenv_config_filer•   Úshould_load_user_configs       r&   r‘   ÚConfiguration.iter_config_filesG  sÇ   é € ô Ÿ*™*Ÿ.™.Ð):¸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   ‚DDc                 ó    • U R                   U   $ )z#Get values present in a config file)rO   )rQ   rR   s     r&   Úget_values_in_configÚ"Configuration.get_values_in_configg  s   € à�|‰|˜GÑ$Ð$r(   c                 óˆ   • U R                   (       d   eU R                  U R                      nU(       d  [        S5      eUS   $ )Nz4Fatal Internal error [id=2]. Please report as a bug.éÿÿÿÿ)rE   rN   r
   )rQ   Úparserss     r&   r\   Ú#Configuration._get_parser_to_modifyk  s?   € à�~�~Ðˆ~Ø—-‘- §¡Ñ/ˆÞä$ØFóð ð
 �r‰{Ðr(   rs   c                 ó`   • X4nX0R                   ;  a  U R                   R                  U5        g g ©N)rP   r”   )rQ   rr   rs   Úfile_parser_tuples       r&   rq   ÚConfiguration._mark_as_modifiedy  s0   € Ø"˜OÐØ×$:Ñ$:Ó:Ø×"Ñ"×)Ñ)Ð*;Õ<ð ;r(   c                 óP   • U R                   R                   SU R                  < S3$ )NÚ(Ú))rS   Ú__name__ra   rX   s    r&   Ú__repr__ÚConfiguration.__repr__~  s'   € Ø—.‘.×)Ñ)Ð*¨!¨D×,<Ñ,<Ñ+?¸qÐAÐAr(   )rO   rP   rN   rD   rE   rÆ   )r   N)'rÌ   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Úboolr   r   rH   rY   Ústrr^   r   r	   r   rb   ri   ru   rz   r†   rm   Úpropertyr   ra   rV   r¢   r“   rš   rW   rœ   r¬   r   r‘   r¿   r\   rq   rÍ   Ú__static_attributes__Ú__classcell__)rS   s   @r&   rB   rB   W   sÏ  ø† ññG ð G°(¸4±.ð GÈD÷ Gð Gô**ð (¨3¡-ô ð(�x  c¨3 h¡Ñ0ô (ð
B˜Sð 
B Sô 
Bð.˜Sð .¨ð .°ô .ð&.˜sð . tô .ô:ô0Mð
 ð	˜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˜#÷ Bò Br(   rB   ),rÒ   r¡   r¤   r3   r7   Ú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   rM   rI   rÌ   r~   r'   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ô ÷&hBò hBr(   