B
    He                 @   s   d Z ddlZddlZddlZddlmZ ddl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d	d
Ze	e eee e
e dddZeeee dddZdS )zBLogic that powers autocompletion installed by ``pip completion``.
    N)chain)AnyIterableListOptional)create_main_parser)commands_dictcreate_command)get_default_environment)returnc                 s  dt jkrdS t jd  dd tt jd } y| d   W n tk
rZ   d Y nX t }tt}g }d}xD ]}||krx|}P qxW |dk	r`|dkrt	d  
d o|d	k}|rt }  fd
d|jddD }|rx|D ]}	t|	 qW t	d  
d o(|dk}
|
rXxt dD ]}t| q<W t	d t|}xH|jjD ]<}|jtjkrjx&|j|j D ]}|||jf qW qjW dd d| d  D fdd|D } fdd|D }t| |jj}|rt |}dd |D }x|D ]>}|d }|d rP|d dd dkrP|d7 }t| qW ndd |jD }||j t|} 
drxN|D ]$}|jtjkr||j|j 7 }qW n t| |}|rtt |}td fdd|D  t	d dS )z:Entry Point for completion of main and subcommand options.PIP_AUTO_COMPLETEN
COMP_WORDS   
COMP_CWORD help-)show	uninstallc                s0   g | ](}|j r|j  d d kr|j qS )r   N)canonical_name
startswith).0dist)cwordslc t/var/www/downstreamdata.science/rtclock/rtclock-venv/lib/python3.7/site-packages/pip/_internal/cli/autocompletion.py
<listcomp>3   s   z autocomplete.<locals>.<listcomp>T)
local_onlyinstallpathc             S   s   g | ]}| d d qS )=r   )split)r   xr   r   r   r   N   s    c                s    g | ]\}}| kr||fqS r   r   )r   r#   v)	prev_optsr   r   r   O   s    c                s"   g | ]\}}|  r||fqS r   )r   )r   kr$   )currentr   r   r   Q   s    c             S   s   g | ]}|d fqS )r   r   )r   r    r   r   r   r   \   s    r      z--r!   c             S   s   g | ]
}|j qS r   )option_list)r   ir   r   r   r   f   s     c                s   g | ]}|  r|qS r   )r   )r   r#   )r'   r   r   r   s   s    ) osenvironr"   int
IndexErrorr   listr   sysexitr   r
   loweriter_installed_distributionsprintauto_complete_pathsr	   parseroption_list_allr   optparseSUPPRESS_HELP
_long_opts_short_optsappendnargsget_path_completion_typeoption_groupsr)   r   from_iterablejoin)cwordr7   subcommandsoptionssubcommand_namewordshould_list_installedenv	installedr   should_list_installablesr    
subcommandoptopt_strcompletion_typepathsoption	opt_labeloptsflattened_optsr   )r'   r   r   r%   r   autocomplete   s    










 

rU   )r   rC   rS   r   c             C   s   |dk s| |d   dsdS xr|D ]j}|jtjkr6q$xVt|dD ]D}| |d  dd |krF|jrtdd |jdD rF|jS qFW q$W dS )	aL  Get the type of path completion (``file``, ``dir``, ``path`` or None)

    :param cwords: same as the environmental variable ``COMP_WORDS``
    :param cword: same as the environmental variable ``COMP_CWORD``
    :param opts: The available options to check
    :return: path completion type (``file``, ``dir``, ``path`` or None)
    r(   r   N/r!   r   c             s   s   | ]}|d kV  qdS ))r    filedirNr   )r   r#   r   r   r   	<genexpr>   s    z+get_path_completion_type.<locals>.<genexpr>)r   r   r9   r:   strr"   metavarany)r   rC   rS   rM   or   r   r   r?   w   s    

r?   )r'   rO   r   c             #   s   t j| \} t j|}t |t js.dS t j   fddt |D }xh|D ]`}t j||}t jt j||}|dkrt j	|r|V  qXt j
|rXt j|dV  qXW dS )at  If ``completion_type`` is ``file`` or ``path``, list all regular files
    and directories starting with ``current``; otherwise only list directories
    starting with ``current``.

    :param current: The word to be completed
    :param completion_type: path completion type(``file``, ``path`` or ``dir``)
    :return: A generator of regular files and/or directories
    Nc             3   s$   | ]}t j| r|V  qd S )N)r,   r    normcaser   )r   r#   )filenamer   r   rY      s    z&auto_complete_paths.<locals>.<genexpr>rX   r   )r,   r    r"   abspathaccessR_OKr^   listdirrB   isfileisdir)r'   rO   	directorycurrent_path	file_listfrM   	comp_filer   )r_   r   r6      s    	
r6   )__doc__r9   r,   r1   	itertoolsr   typingr   r   r   r   pip._internal.cli.main_parserr   pip._internal.commandsr   r	   pip._internal.metadatar
   rU   rZ   r.   r?   r6   r   r   r   r   <module>   s   i