B
    `dX                 @   sf  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! ddl"m#Z#m$Z$ ddl%m&Z&m'Z' ddl(m)Z)m*Z* ddl+m,Z, ddl-m.Z. e,rBddl/m0Z0m1Z1m2Z2m3Z3 ddlm4Z4 ddl(m5Z6 dgZ7e8e9Z:G dd deZ;d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)check_path_owner)BrokenStdoutLoggingErrorsetup_logging)get_prognormalize_path)global_tempdir_managertempdir_registry)MYPY_CHECK_RUNNING)running_under_virtualenv)ListOptionalTupleAny)Values)TempDirectoryTypeRegistry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 |t d|| j|d}|| _|| _	t
f || _d | _d| j }t| j|| _ttj| j}| j| d S )Nz{} {}F)usageprog	formatteradd_help_optionnamedescriptionisolatedz
{} Options)superr"   __init__r#   formatr   r   __doc__r'   summaryr   parserr   
capitalizeoptparseOptionGroupcmd_optsr   make_option_groupgeneral_groupadd_option_group)selfr'   r.   r)   	parser_kwoptgroup_namegen_opts)	__class__ B/tmp/pip-unpacked-wheel-hu9qqap1/pip/_internal/cli/base_command.pyr+   =   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)r7   optionsr<   r<   r=   handle_pip_version_check[   s    z Command.handle_pip_version_checkc             C   s   t d S )N)NotImplementedError)r7   rA   argsr<   r<   r=   rune   s    zCommand.runc             C   s   | j |S )N)r/   
parse_args)r7   rD   r<   r<   r=   rF   i   s    zCommand.parse_argsc          	   C   s.   z|    | |S Q R X W d t  X d S )N)main_context_mainloggingshutdown)r7   rD   r<   r<   r=   mainn   s    
zCommand.mainc          
   C   s  |  t | _|  t  | |\}}|j|j | _t| j|j|j	d}t
jd d dkr|jsd}t dkrzd| }t|d d d |jrdtjd	< |jrd
|jtjd< |jr| jst std t
t |jr
t|j|_t|js
td|j d |_zty"|  ||}t!|t"r,|S W nL t#k
rr } z tt$| tj%ddd t&S d }~X Y n t't(t)fk
r } z tt$| tj%ddd t*S d }~X Y n t+k
r } ztd| tj%ddd t*S d }~X Y n t,k
r.   t-dt
j.d |t/j0kr*t1j2t
j.d t*S  t3k
rZ   td tj%ddd t*S  t4k
r|   tjddd t5S X W d | 6| X t7S )N)	verbosityno_coloruser_log_file   )rO      zpip 21.0 will drop support for Python 2.7 in January 2021. More details about Python 2 support in pip, can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-supportCPythonzPython 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. )replacementgone_in1PIP_NO_INPUT PIP_EXISTS_ACTIONz2Could not find an activated virtualenv (required).zThe directory '%s' or its parent directory is not owned or is not writable by the current user. The cache has been disabled. Check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.zException information:T)exc_infoz%sz ERROR: Pipe to stdout was broken)filezOperation cancelled by userz
Exception:)8enter_contextr   r   rF   verbosequietrL   r   rM   logsysversion_infono_python_version_warningplatformpython_implementationr   no_inputosenvironexists_actionjoinrequire_venvignore_require_venvr   loggercriticalexitr   	cache_dirr   r   warningrE   
isinstanceintr   strdebugr	   r   r   r   r   r   r   printstderrrI   DEBUG	traceback	print_excKeyboardInterruptBaseExceptionr   rB   r
   )r7   rD   rA   level_numbermessagestatusexcr<   r<   r=   rH   v   sz    





zCommand._main)F)__name__
__module____qualname__r#   ri   r+   rB   rE   rF   rK   rH   __classcell__r<   r<   )r;   r=   r"   9   s   
)<r-   
__future__r   r   rI   logging.configr1   rd   ra   r^   rv   Zpip._internal.clir   !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.filesystemr   pip._internal.utils.loggingr   r   pip._internal.utils.miscr   r   pip._internal.utils.temp_dirr   r   pip._internal.utils.typingr   pip._internal.utils.virtualenvr   typingr   r   r   r   r    r!   ZTempDirRegistry__all__	getLoggerr~   rj   r"   r<   r<   r<   r=   <module>   s6   
