Y(@s1dZddlmZddlZddlZddlZddlZddlZddlm Z ddl m Z ddl m Z ddlmZmZmZmZddlmZmZejd ejZGd d d ejZGd d d eZGdddejZGdddeZdS)zBase option parser setup)absolute_importN) strtobool) string_types) configparser)legacy_config_fileconfig_basenamerunning_under_virtualenvsite_config_files)appdirsget_terminal_sizez^PIP_c@s|eZdZdZddZddZdddd Zd d Zd d ZddZ ddZ ddZ dS)PrettyHelpFormatterz4A prettier/less verbose help formatter for optparse.cOsCd|dz, )_format_option_strings)roptionrrrformat_option_strings!sz)PrettyHelpFormatter.format_option_stringsz <%s>z, cCsg}|jr#|j|jd|jr@|j|jdt|dkrb|jd||jr|jp|jj}|j||jdj |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 rr) _short_optsappend _long_optsleninsert takes_valuemetavardestlowerjoin)rrmvarfmtoptsepoptsr%rrrr$s   z*PrettyHelpFormatter._format_option_stringscCs|dkrdS|dS)NOptionsrz: r)rheadingrrrformat_heading;s z"PrettyHelpFormatter.format_headingcCs#d|jtj|d}|S)zz Ensure there is only one newline between usage and the first heading if there is no description. z Usage: %s z ) indent_linestextwrapdedent)rusagemsgrrr format_usage@sz PrettyHelpFormatter.format_usagecCsy|rqt|jdr!d}nd}|jd}|j}|jtj|d}d||f}|SdSdS)NmainCommands Description z z%s: %s r)hasattrparserlstriprstripr/r0r1)r descriptionlabelrrrformat_descriptionHs  z&PrettyHelpFormatter.format_descriptioncCs|r |SdSdS)Nrr)repilogrrr format_epilogZsz!PrettyHelpFormatter.format_epilogcs/fdd|jdD}dj|S)Ncsg|]}|qSrr).0line)indentrr bs z4PrettyHelpFormatter.indent_lines..r8)splitr()rtextrD new_linesr)rDrr/as"z PrettyHelpFormatter.indent_linesN) __name__ __module__ __qualname____doc__rrrr.r4r?rAr/rrrrr s       r c@s"eZdZdZddZdS)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. cCs8|jdk r%|jj|jjtjj||S)N)r:_update_defaultsdefaultsrrexpand_default)rrrrrrPmsz,UpdatingDefaultsHelpFormatter.expand_defaultN)rIrJrKrLrPrrrrrMfs rMc@s.eZdZddZeddZdS)CustomOptionParsercOs6|j||}|jj|jj|||S)z*Insert an OptionGroup at a given position.)add_option_group option_groupspopr#)ridxrrgrouprrrinsert_option_groupus z&CustomOptionParser.insert_option_groupcCs;|jdd}x!|jD]}|j|jqW|S)z.callback)z store_truez store_falsezcount)r_updatenormalize_keysget_config_sectionr`get_environ_varsrValuesrOvaluessetitems get_optionactionrrFaddr&get_opt_string convert_value callback_argscallback_kwargsrr~getattr) rrOrbsection late_evalr|opt_strrrr)r{rrrrNs@    "   z#ConfigOptionParser._update_defaultscCsVi}xI|D]A\}}|jdd}|jdsDd|}||||j }|j ||||jWtj|S)zOverriding to make updating the defaults after instantiation of the option parser possible, _update_defaults() does the dirty work.) process_default_valuesrrrOrNcopy_get_all_optionsrlr& isinstancerrrw)rrOrdefaultrrrrget_default_valuess  z%ConfigOptionParser.get_default_valuescCs(|jtj|jdd|dS)Nrz%s ) print_usagerrstderrrz)rr3rrrerror#szConfigOptionParser.errorN)rIrJrKrLr`rrcr~rNrrrrrrrrrr^s  (  5   r^)rL __future__rrrrrjrer0distutils.utilrpip._vendor.sixrpip._vendor.six.movesr pip.locationsrrrr pip.utilsr r compileIrrr rMrgrQr^rrrrs      "O