ó â\e[c@@sýdZddlmZddlZddlZddlZddlZddlmZddl m Z ddl m Z ddl mZmZejeƒZdejfd „ƒYZd efd „ƒYZd ejfd „ƒYZdefd„ƒYZdS(sBase option parser setupi(tabsolute_importN(t strtobool(t string_types(tget_terminal_size(t ConfigurationtConfigurationErrortPrettyHelpFormattercB@s\eZdZd„Zd„Zddd„Zd„Zd„Zd„Zd „Z d „Z RS( s4A prettier/less verbose help formatter for optparse.cO@sCd|ds, (t_format_option_strings(R toption((s7/tmp/pip-install-0xiv62/pip/pip/_internal/baseparser.pytformat_option_stringsss <%s>s, cC@s¶g}|jr&|j|jdƒn|jrF|j|jdƒnt|ƒdkrk|jd|ƒn|jƒr©|jpŒ|jjƒ}|j||jƒƒndj |ƒS(s 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 iit( t _short_optstappendt _long_optstlentinsertt takes_valuetmetavartdesttlowertjoin(R RtmvarfmttoptseptoptsR((s7/tmp/pip-install-0xiv62/pip/pip/_internal/baseparser.pyRs   cC@s|dkrdS|dS(NtOptionsRs: ((R theading((s7/tmp/pip-install-0xiv62/pip/pip/_internal/baseparser.pytformat_heading6s cC@s#d|jtj|ƒdƒ}|S(sz Ensure there is only one newline between usage and the first heading if there is no description. s Usage: %s s (t indent_linesttextwraptdedent(R tusagetmsg((s7/tmp/pip-install-0xiv62/pip/pip/_internal/baseparser.pyt format_usage;scC@sy|rqt|jdƒr!d}nd}|jdƒ}|jƒ}|jtj|ƒdƒ}d||f}|SdSdS(NtmaintCommandst Descriptions s s%s: %s R(thasattrtparsertlstriptrstripR$R%R&(R t descriptiontlabel((s7/tmp/pip-install-0xiv62/pip/pip/_internal/baseparser.pytformat_descriptionCs  cC@s|r |SdSdS(NR((R tepilog((s7/tmp/pip-install-0xiv62/pip/pip/_internal/baseparser.pyt format_epilogUscC@s3g|jdƒD]}||^q}dj|ƒS(Ns (tsplitR(R ttexttindenttlinet new_lines((s7/tmp/pip-install-0xiv62/pip/pip/_internal/baseparser.pyR$\s&( t__name__t __module__t__doc__R RRR#R)R3R5R$(((s7/tmp/pip-install-0xiv62/pip/pip/_internal/baseparser.pyRs      tUpdatingDefaultsHelpFormattercB@seZdZd„ZRS(s®Custom help formatter for use in ConfigOptionParser. This is updates the defaults before expanding them, allowing them to show up correctly in the help listing. cC@s;|jdk r(|jj|jjƒntjj||ƒS(N(R.tNonet_update_defaultstdefaultsR R texpand_default(R R((s7/tmp/pip-install-0xiv62/pip/pip/_internal/baseparser.pyRBhs(R;R<R=RB(((s7/tmp/pip-install-0xiv62/pip/pip/_internal/baseparser.pyR>astCustomOptionParsercB@s eZd„Zed„ƒZRS(cO@s6|j||Ž}|jjƒ|jj||ƒ|S(s*Insert an OptionGroup at a given position.(tadd_option_groupt option_groupstpopR(R tidxRRtgroup((s7/tmp/pip-install-0xiv62/pip/pip/_internal/baseparser.pytinsert_option_groupps cC@s2|j}x!|jD]}|j|jƒqW|S(s<Get a list of all options, including those in option groups.(t option_listREtextend(R tresti((s7/tmp/pip-install-0xiv62/pip/pip/_internal/baseparser.pytoption_list_allys (R;R<RItpropertyRN(((s7/tmp/pip-install-0xiv62/pip/pip/_internal/baseparser.pyRCns tConfigOptionParsercB@sDeZdZd„Zd„Zd„Zd„Zd„Zd„ZRS(ssCustom option parser which updates its defaults by checking the configuration files and environmental variablescO@s\|jdƒ|_|jdtƒ}t|ƒ|_|jsBt‚tjj|||ŽdS(Ntnametisolated( RFRQtFalseRtconfigtAssertionErrorR t OptionParserR (R RRRR((s7/tmp/pip-install-0xiv62/pip/pip/_internal/baseparser.pyR ‡s cC@sGy|j||ƒSWn,tjk rB}d|GHtjdƒnXdS(Ns*An error occurred during configuration: %si(t check_valueR tOptionValueErrortsystexit(R Rtkeytvaltexc((s7/tmp/pip-install-0xiv62/pip/pip/_internal/baseparser.pyt check_defaults  cc@s×d|jdg}d„|Dƒ}xw|jjƒD]f\}}|sZtjd|ƒq2n|jddƒ\}}||kr2||j||fƒq2q2Wx4|D],}x#||D]\}}||fVq´Wq£WdS(Ntglobals:env:cS@si|]}g|“qS(((t.0RQ((s7/tmp/pip-install-0xiv62/pip/pip/_internal/baseparser.pys œs s7Ignoring configuration key '%s' as it's value is empty.t.i(RQRTtitemstloggertdebugR6R(R toverride_ordert section_itemst section_keyR\tsectionR[((s7/tmp/pip-install-0xiv62/pip/pip/_internal/baseparser.pyt _get_ordered_configuration_items—s  c C@s”tj|jƒ|_tƒ}x?|jƒD]1\}}|jd|ƒ}|dkr\q+n|jdkrzt |ƒ}nÕ|jdkrÀ|j ƒ}g|D]}|j |||ƒ^qœ}n|jdkr:|j |j ƒ|jƒ}|j||ƒ}|jp d }|jpi} |j|||||| Žn|j |||ƒ}|||j RVRCRP(((s7/tmp/pip-install-0xiv62/pip/pip/_internal/baseparser.pyts    O