<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
U
    .e%                     @   s   d Z ddlmZ ddlZddlZddlZddlZddlmZ ddl	m
Z
 ddlmZ ddlmZmZ ddlmZ eeZG d	d
 d
ejZG dd deZG dd dejZG dd deZdd ZdS )zBase option parser setup    )absolute_importN)	strtobool)string_types)UNKNOWN_ERROR)ConfigurationConfigurationError)get_terminal_sizec                   @   sR   e Zd ZdZdd Zdd Zddd	Zd
d Zdd Zdd Z	dd Z
dd ZdS )PrettyHelpFormatterz4A prettier/less verbose help formatter for optparse.c                 O   s:   d|d< d|d< t  d d |d< tjj| f|| d S )N   Zmax_help_position   Zindent_incrementr      width)r   optparseIndentedHelpFormatter__init__)selfargskwargs r   </usr/lib/python3.8/site-packages/pip/_internal/cli/parser.pyr      s    zPrettyHelpFormatter.__init__c                 C   s   |  |ddS )N <%s>, )_format_option_stringsr   optionr   r   r   format_option_strings!   s    z)PrettyHelpFormatter.format_option_stringsr   r   c                 C   s|   g }|j r||j d  |jr0||jd  t|dkrH|d| | rr|jp^|j }|||   d	|S )a  
        Return a comma-separated list of option strings and metavars.

        :param option:  tuple of (short opt, long opt), e.g: ('-f', '--format')
        :param mvarfmt: metavar format string - evaluated as mvarfmt % metavar
        :param optsep:  separator
        r   r    )
Z_short_optsappendZ
_long_optsleninsertZtakes_valuemetavardestlowerjoin)r   r   ZmvarfmtZoptsepZoptsr    r   r   r   r   $   s    z*PrettyHelpFormatter._format_option_stringsc                 C   s   |dkrdS |d S )NZOptionsr   z:
r   )r   Zheadingr   r   r   format_heading;   s    z"PrettyHelpFormatter.format_headingc                 C   s   d|  t|d }|S )zz
        Ensure there is only one newline between usage and the first heading
        if there is no description.
        z
Usage: %s
  )indent_linestextwrapdedent)r   Zusagemsgr   r   r   format_usage@   s    z PrettyHelpFormatter.format_usagec                 C   sV   |rNt | jdrd}nd}|d}| }| t|d}d||f }|S dS d S )NmainZCommandsZDescription
r%   z%s:
%s
r   )hasattrparserlstriprstripr&   r'   r(   )r   descriptionZlabelr   r   r   format_descriptionH   s    
z&PrettyHelpFormatter.format_descriptionc                 C   s   |r|S dS d S )Nr   r   )r   Zepilogr   r   r   format_epilogZ   s    z!PrettyHelpFormatter.format_epilogc                    s"    fdd| dD }d|S )Nc                    s   g | ]} | qS r   r   ).0lineindentr   r   
<listcomp>b   s     z4PrettyHelpFormatter.indent_lines.<locals>.<listcomp>r,   )splitr#   )r   textr7   Z	new_linesr   r6   r   r&   a   s    z PrettyHelpFormatter.indent_linesN)r   r   )__name__
__module____qualname____doc__r   r   r   r$   r*   r2   r3   r&   r   r   r   r   r	      s   
r	   c                   @   s   e Zd ZdZdd ZdS )UpdatingDefaultsHelpFormatterzCustom help formatter for use in ConfigOptionParser.

    This is updates the defaults before expanding them, allowing
    them to show up correctly in the help listing.
    c                 C   s(   | j d k	r| j | j j tj| |S )N)r.   _update_defaultsdefaultsr   r   expand_defaultr   r   r   r   rB   m   s    
z,UpdatingDefaultsHelpFormatter.expand_defaultN)r;   r<   r=   r>   rB   r   r   r   r   r?   f   s   r?   c                   @   s    e Zd Zdd Zedd ZdS )CustomOptionParserc                 O   s(   | j ||}| j  | j|| |S )z*Insert an OptionGroup at a given position.)Zadd_option_groupoption_groupspopr   )r   idxr   r   groupr   r   r   insert_option_groupu   s    
z&CustomOptionParser.insert_option_groupc                 C   s*   | j dd }| jD ]}||j  q|S )z<Get a list of all options, including those in option groups.N)Zoption_listrD   extend)r   resir   r   r   option_list_all~   s    
z"CustomOptionParser.option_list_allN)r;   r<   r=   rH   propertyrL   r   r   r   r   rC   s   s   	rC   c                   @   s@   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dS )ConfigOptionParserzsCustom option parser which updates its defaults by checking the
    configuration files and environmental variablesc                 O   sD   | d| _| dd}t|| _| js,ttjj| f|| d S )NnameisolatedF)rE   rO   r   configAssertionErrorr   OptionParserr   )r   r   r   rP   r   r   r   r      s
    

zConfigOptionParser.__init__c              
   C   sN   z| ||W S  tjk
rH } ztd|  td W 5 d }~X Y nX d S )Nz*An error occurred during configuration: %s   )check_valuer   ZOptionValueErrorprintsysexit)r   r   keyvalexcr   r   r   check_default   s
    z ConfigOptionParser.check_defaultc                 c   s   d| j dg}dd |D }| j D ]D\}}|s>td| q$|dd\}}||kr$|| ||f q$|D ] }|| D ]\}}||fV  qzqnd S )Nglobalz:env:c                 S   s   i | ]
}|g qS r   r   )r4   rO   r   r   r   
<dictcomp>   s      zGConfigOptionParser._get_ordered_configuration_items.<locals>.<dictcomp>z7Ignoring configuration key '%s' as it's value is empty..r   )rO   rQ   itemsloggerdebugr9   r   )r   Zoverride_orderZsection_itemsZsection_keyrZ   ZsectionrY   r   r   r    _get_ordered_configuration_items   s    z3ConfigOptionParser._get_ordered_configuration_itemsc              	      sH  t j_t } D ]\ }d  dkr>qjdkrzt|}W n, t	k
r   t
j |}| Y nX njdkr| } fdd|D }nhjdkr|j  }||}jpd}jpi }j||f|| n |}||j< q|D ] tj | < q&d_|S )	zUpdates the given defaults with values from the config files and
        the environ. Does a little special handling for certain types of
        options (lists).z--N)
store_truestore_falsecountr   c                    s   g | ]}  |qS r   )r\   )r4   vrY   r   r   r   r   r8      s     z7ConfigOptionParser._update_defaults.<locals>.<listcomp>callbackr   )r   ValuesrA   valuessetrc   Z
get_optionactionr   
ValueErrorinvalid_config_error_messageerrorr9   addr!   get_opt_stringZconvert_valueZcallback_argsZcallback_kwargsri   r\   getattr)r   rA   Z	late_evalrZ   Z	error_msgopt_strr   r   r   rh   r   r@      s@    
  


z#ConfigOptionParser._update_defaultsc              
   C   s   | j st| jS z| j  W n2 tk
rR } z| tt	| W 5 d}~X Y nX | 
| j }|  D ]4}||j}t|trl| }|||||j< qlt|S )zOverriding to make updating the defaults after instantiation of
        the option parser possible, _update_defaults() does the dirty work.N)Zprocess_default_valuesr   rj   rA   rQ   loadr   rX   r   strr@   copyZ_get_all_optionsgetr!   
isinstancer   rr   rU   )r   errrA   r   defaultrt   r   r   r   get_default_values   s    "
z%ConfigOptionParser.get_default_valuesc                 C   s    |  tj | td|  d S )Nz%s
)Zprint_usagerW   stderrrX   r   )r   r)   r   r   r   rp      s    zConfigOptionParser.errorN)
r;   r<   r=   r>   r   r\   rc   r@   r|   rp   r   r   r   r   rN      s   	1rN   c                 C   s    | dkrd ||S d ||S )zQReturns a better error message when invalid configuration option
    is provided.)rd   re   zo{0} is not a valid value for {1} option, please specify a boolean value like yes/no, true/false or 1/0 instead.z[{0} is not a valid value for {1} option, please specify a numerical value like 1/0 instead.)format)rm   rY   rZ   r   r   r   ro      s      ro   )r>   Z
__future__r   Zloggingr   rW   r'   Zdistutils.utilr   Zpip._vendor.sixr   Zpip._internal.cli.status_codesr   Zpip._internal.configurationr   r   Zpip._internal.utils.compatr   Z	getLoggerr;   ra   r   r	   r?   rS   rC   rN   ro   r   r   r   r   <module>   s    
Ow