o g$*@sdZddlZddlZddlZddlZddlZddlmZddlm Z m Z m Z m Z m Z ddlmZddlmZmZddlmZmZeeZGdd d ejZGd d d eZGd d d ejZGdddeZdS)zBase option parser setupN)suppress)AnyDictIteratorListTuple) UNKNOWN_ERROR) ConfigurationConfigurationError)redact_auth_from_url strtoboolc seZdZdZdededdffdd Zdejdefd d Z d!dejd ededefddZ dedefddZ dedefddZ dedefddZ dedefddZdededefdd ZZS)"PrettyHelpFormatterz4A prettier/less verbose help formatter for optparse.argskwargsreturnNcs:d|d<d|d<tdd|d<tj|i|dS)Nmax_help_positionindent_incrementrwidth)shutilget_terminal_sizesuper__init__)selfrr __class__:/usr/lib/python3/dist-packages/pip/_internal/cli/parser.pyrszPrettyHelpFormatter.__init__optioncCs ||SN)_format_option_strings)rr rrrformat_option_stringss z)PrettyHelpFormatter.format_option_strings <{}>, mvarfmtoptsepcCsg}|jr ||jd|jr||jdt|dkr$|d||rA|jdus/J|jp6|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_valuedestmetavarlowerformatjoin)rr r&r'optsr0rrrr"s    z*PrettyHelpFormatter._format_option_stringsheadingcCs|dkrdS|dS)NOptionsr(: r)rr5rrrformat_heading9sz"PrettyHelpFormatter.format_headingusagecCsd|t|d}|S)zz Ensure there is only one newline between usage and the first heading if there is no description. z Usage: {}  )r2 indent_linestextwrapdedent)rr9msgrrr format_usage>sz PrettyHelpFormatter.format_usage descriptioncCsV|r)t|jdr d}nd}|d}|}|t|d}|d|d}|SdS)NmainCommands Description r:r7r()hasattrparserlstriprstripr;r<r=)rr@labelrrrformat_descriptionFs  z&PrettyHelpFormatter.format_descriptionepilogcCs |r|SdS)Nr(r)rrKrrr format_epilogXsz!PrettyHelpFormatter.format_epilogtextindentcs"fdd|dD}d|S)Ncsg|]}|qSrr).0linerNrr `sz4PrettyHelpFormatter.indent_lines..rD)splitr3)rrMrN new_linesrrQrr;_s z PrettyHelpFormatter.indent_lines)r$r%)__name__ __module__ __qualname____doc__rroptparseOptionstrr#r"r8r?rJrLr; __classcell__rrrrr s& r cs,eZdZdZdejdeffdd 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 rcsd}|jdur&t|jtsJ|j|jj|jdusJ|jj|j}t|}|rO|j dkrOt|t r;|g}t|t sBg}|D] }| |t |}qD|S)NURL)rF isinstanceConfigOptionParser_update_defaultsdefaultsr/getrexpand_defaultr0r[listreplacer )rr default_values help_textvalrrrrdms    z,UpdatingDefaultsHelpFormatter.expand_default) rUrVrWrXrYrZr[rdr\rrrrr]ds r]c@s@eZdZdedededejfddZede ej fddZ d S) CustomOptionParseridxrrrcOs,|j|i|}|j|j|||S)z*Insert an OptionGroup at a given position.)add_option_group option_groupspopr-)rrkrrgrouprrrinsert_option_groups z&CustomOptionParser.insert_option_groupcCs*|jdd}|jD]}||jq |S)zq8dS)Nglobalz:env:cSsi|]}|gqSrr)rOrzrrr szGConfigOptionParser._get_ordered_configuration_items..z7Ignoring configuration key '%s' as it's value is empty..r)rzr{itemsloggerdebugrSr*)roverride_order section_items section_keyrisectionr|rrr _get_ordered_configuration_itemss*  z3ConfigOptionParser._get_ordered_configuration_itemsrbc stj_t}D]\}ddurqjdus%JjdvrCzt |}Wnt yB d |Ynwjdkrt t  t |}Wdn1s[wYt t  t|}Wdn1sswYt|tr|dkr d |nRjdkr|}fd d |D}n=jd krֈjdusJ|j}||}jpd }jpi}j||g|Ri|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_falsezm{} is not a valid value for {} option, please specify a boolean value like yes/no, true/false or 1/0 instead.countrz{} is not a valid value for {} 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)rOvr|r rrrrRsz7ConfigOptionParser._update_defaults..callbackr)rYValuesrbvaluessetr get_optionr/actionr ValueErrorerrorr2rrvr_rSraddget_opt_string convert_value callback_argscallback_kwargsrgetattr)rrb late_evalriopt_strrrrrrras\                z#ConfigOptionParser._update_defaultsc Cs|js t|jSz|jWnty*}z|tt |WYd}~nd}~ww| |j }| D]!}|j dus@J||j }t|t rX|}|||||j <q7t|S)zOverriding to make updating the defaults after instantiation of the option parser possible, _update_defaults() does the dirty work.N)process_default_valuesrYrrbr{loadr rrr[racopy_get_all_optionsr/rcr_rr~)rerrrbr defaultrrrrget_default_values s"     z%ConfigOptionParser.get_default_valuesr>cCs"|tj|t|ddS)NrD) print_usagerstderrrr)rr>rrrr"s zConfigOptionParser.error)rUrVrWrXrr[boolrrYrZrrrrrrarrrr\rrrrr`s& "@r`)rXloggingrYrrr< contextlibrtypingrrrrrpip._internal.cli.status_codesrpip._internal.configurationr r pip._internal.utils.miscr r getLoggerrUrIndentedHelpFormatterr r] OptionParserrjr`rrrrs    R