U
    P^h                     @   s6  d Z ddlmZmZ ddlZddlZddl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mZ ddlmZmZmZmZmZ ddlmZmZmZmZmZ dd	lmZ dd
l m!Z!m"Z" ddl#m$Z$ ddl%m&Z& ddl'm(Z( e&rddl)m*Z*m+Z+m,Z, ddlm-Z- dgZ.e/e0Z1G dd deZ2dS )z(Base Command class, and related routines    )absolute_importprint_functionN)
cmdoptions)CommandContextMixIn)ConfigOptionParserUpdatingDefaultsHelpFormatter)ERRORPREVIOUS_BUILD_DIR_ERRORSUCCESSUNKNOWN_ERRORVIRTUALENV_NOT_FOUND)
BadCommandCommandErrorInstallationErrorPreviousBuildDirErrorUninstallationError)
deprecated)BrokenStdoutLoggingErrorsetup_logging)get_prog)MYPY_CHECK_RUNNING)running_under_virtualenv)ListTupleAny)ValuesCommandc                       sN   e Zd ZdZdZd fdd	Zdd Zdd Zd	d
 Zdd Z	dd Z
  ZS )r   NFc                    s   t t|   | jdt |f t d|| j|d}|| _|| _t	f || _
d| j  }t| j
|| _ttj| j
}| j
| d S )Nz%s %sF)usageprog	formatteradd_help_optionnamedescriptionisolatedz
%s Options)superr   __init__r   r   r   __doc__r!   summaryr   parser
capitalizeoptparseOptionGroupcmd_optsr   make_option_groupgeneral_groupadd_option_group)selfr!   r'   r#   	parser_kwoptgroup_namegen_opts	__class__ ?/tmp/pip-install-220asx0h/pip/pip/_internal/cli/base_command.pyr%   4   s&    
zCommand.__init__c                 C   s   t |drtdS )zf
        This is a no-op so that commands by default do not do the pip version
        check.
        no_indexN)hasattrAssertionError)r0   optionsr6   r6   r7   handle_pip_version_checkP   s    z Command.handle_pip_version_checkc                 C   s   t d S N)NotImplementedError)r0   r;   argsr6   r6   r7   runZ   s    zCommand.runc                 C   s   | j |S r=   )r(   
parse_argsr0   r?   r6   r6   r7   rA   ^   s    zCommand.parse_argsc              
   C   s>   z.|   | |W  5 Q R  W S Q R X W 5 t   X d S r=   )loggingshutdownZmain_context_mainrB   r6   r6   r7   mainc   s    
$zCommand.mainc              
   C   s  |  |\}}|j|j | _t| j|j|jd}tjd d dkrhd}t	
 dkrZd| }t|d d d |jrxdtjd	< |jrd
|jtjd< |jr| jst std tt zz(| ||}t|tr|W W S W n tk
r2 } z.tt| tjddd t W Y W RS d }~X Y n> t t!t"fk
r } z.tt| tjddd t# W Y W  S d }~X Y n t$k
r } z*td| tjddd t# W Y W S d }~X Y n t%k
r   t&dtj'd |t(j)krt*j+tj'd t# Y W fS  t,k
rD   td tjddd t# Y W 2S  t-k
rn   tjddd t. Y W S X W 5 | | X t/S )N)	verbosityno_coloruser_log_file   )rJ      zA future version of pip will drop support for Python 2.7. More details about Python 2 support in pip, can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-supportCPythonzPython 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. )replacementgone_in1PIP_NO_INPUT PIP_EXISTS_ACTIONz2Could not find an activated virtualenv (required).zException information:T)exc_infoz%sz ERROR: Pipe to stdout was broken)filezOperation cancelled by userz
Exception:)0rA   verbosequietrG   r   rH   logsysversion_infoplatformpython_implementationr   no_inputosenvironexists_actionjoinrequire_venvignore_require_venvr   loggercriticalexitr   r<   r@   
isinstanceintr   strdebugr	   r   r   r   r   r   r   printstderrrC   DEBUG	traceback	print_excKeyboardInterruptBaseExceptionr   r
   )r0   r?   r;   level_numbermessagestatusexcr6   r6   r7   rE   k   sn    


 
zCommand._main)F)__name__
__module____qualname__r   rb   r%   r<   r@   rA   rF   rE   __classcell__r6   r6   r4   r7   r   0   s   
)3r&   
__future__r   r   rC   logging.configr*   r]   rZ   rX   rm   Zpip._internal.clir   Z!pip._internal.cli.command_contextr   pip._internal.cli.parserr   r   pip._internal.cli.status_codesr   r	   r
   r   r   pip._internal.exceptionsr   r   r   r   r   pip._internal.utils.deprecationr   pip._internal.utils.loggingr   r   pip._internal.utils.miscr   pip._internal.utils.typingr   Zpip._internal.utils.virtualenvr   typingr   r   r   r   __all__	getLoggerru   rc   r   r6   r6   r6   r7   <module>   s0   
