U 巀gI*@sdZddlZddlZddlZddlZddlZddlmZddlm Z m Z m Z m Z m Z mZmZddlmZddlmZmZddlmZmZeeZGdd d ejZGd d d eZGd d d ejZGdddeZ dS)zBase option parser setupN)suppress)AnyDict GeneratorListNoReturnOptionalTuple) UNKNOWN_ERROR) ConfigurationConfigurationError)redact_auth_from_url strtoboolcseZdZdZeeddfdd ZejedddZ dejeeed d d Z eedddZ eedddZ e eedddZe eedddZeeedddZZS)PrettyHelpFormatterz4A prettier/less verbose help formatter for optparse.N)argskwargsreturncs6d|d<d|d<tdd|d<tj||dS)Nmax_help_positionindent_incrementrwidth)shutilget_terminal_sizesuper__init__)selfrr __class__F/opt/hc_python/lib/python3.8/site-packages/pip/_internal/cli/parser.pyrszPrettyHelpFormatter.__init__optionrcCs ||SN)_format_option_strings)rr#r r r!format_option_stringssz)PrettyHelpFormatter.format_option_strings <{}>, )r#mvarfmtoptseprcCsg}|jr||jd|jr0||jdt|dkrH|d||r|jdk s^t|jpl|j }|| | d |S)z 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 :param optsep: separator rrN) _short_optsappend _long_optsleninsert takes_valuedestAssertionErrormetavarlowerformatjoin)rr#r)r*optsr4r r r!r%s   z*PrettyHelpFormatter._format_option_strings)headingrcCs|dkr dS|dS)NOptionsr+: r )rr9r r r!format_heading9sz"PrettyHelpFormatter.format_heading)usagercCsd|t|d}|S)zz Ensure there is only one newline between usage and the first heading if there is no description. z Usage: {}  )r6 indent_linestextwrapdedent)rr=msgr r r! format_usage>sz PrettyHelpFormatter.format_usage) descriptionrcCsZ|rRt|jdrd}nd}|d}|}|t|d}|d|d}|SdSdS)NmainCommands Description r>r;r+)hasattrparserlstriprstripr?r@rA)rrDlabelr r r!format_descriptionFs  z&PrettyHelpFormatter.format_description)epilogrcCs|r|SdSdS)Nr+r )rrOr r r! format_epilogXsz!PrettyHelpFormatter.format_epilog)textindentrcs"fdd|dD}d|S)Ncsg|] }|qSr r ).0linerRr r! `sz4PrettyHelpFormatter.indent_lines..rH)splitr7)rrQrR new_linesr rUr!r?_sz PrettyHelpFormatter.indent_lines)r'r()__name__ __module__ __qualname____doc__rroptparseOptionstrr&r%r<rCrrNrPr? __classcell__r r rr!rs  rcs*eZdZdZejedfdd ZZS)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. Also redact auth from url type options r"csd}|jdk rLt|jtst|j|jj|jdk std|q$|dd\}}||kr$||||fq$|D] }||D]\}}||fVqzqndS)Nglobalz:env:cSsi|] }|gqSr r )rSrr r r! szGConfigOptionParser._get_ordered_configuration_items..z7Ignoring configuration key '%s' as it's value is empty..r)rritemsloggerdebugrWr-)roverride_order section_items section_keyrmsectionrr r r! _get_ordered_configuration_itemss" z3ConfigOptionParser._get_ordered_configuration_items)rfrc stj_t}D]\}ddkr>qjdk sLtj dkrz t |}Wn*t k r |ddYnXnj dkrt t t |}W5QRXt t t|}W5QRXt|tr|dkr |ddnj d kr*|}fd d |D}n|j d krjdk sFt|j}||}jppd }jp|i}j||f||n|}||j<q|D]tj|<qd_|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_falsez is not a valid value for zO option, please specify a boolean value like yes/no, true/false or 1/0 instead.countrz option, please instead specify either a non-negative integer or a boolean value like yes/no or false/true which is equivalent to 1/0.r-csg|]}|qSr )r)rSvrr#rr r!rVsz7ConfigOptionParser._update_defaults..callbackr )r]Valuesrfvaluessetr get_optionr2r3actionr ValueErrorerrorrr{rcrWraddget_opt_string convert_value callback_argscallback_kwargsrgetattr)rrf late_evalrmopt_strrrr rr!resP            z#ConfigOptionParser._update_defaultsc Cs|jst|jSz|jWn2tk rR}z|tt |W5d}~XYnX| |j }| D]B}|j dk s~t||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)process_default_valuesr]rrfrloadr rr r_recopy_get_all_optionsr2r3rgrcrr)rerrrfr#defaultrr r r!get_default_valuess "   z%ConfigOptionParser.get_default_values)rBrcCs"|tj|t|ddS)NrH) print_usagerstderrrr )rrBr r r!r$s zConfigOptionParser.error)rYrZr[r\rr_boolrr]r^rrr rrrerrrrr`r r rr!rds    @rd)!r\loggingr]rrr@ contextlibrtypingrrrrrrr pip._internal.cli.status_codesr pip._internal.configurationr r pip._internal.utils.miscr r getLoggerrYrIndentedHelpFormatterrra OptionParserrnrdr r r r!s $  R