3
g                 @   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 j 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j	d  j
d o|dk}|rt } j fdd|jddD }|rx|D ]}	t|	 qW tj	d t|}
xH|
jjD ]<}|jtjkr&x&|j|j D ]}|j||jf qFW q&W dd d| d  D fdd|D } fdd|D }t| |
jj}|rt |}dd |D }x|D ]>}|d }|d r|d dd dkr|d7 }t| qW ndd |jD }|j|j tj|} j
dr~xN|D ]$}|jtjkrT||j|j 7 }qTW n t| |}|rtt |}tdj fdd|D  tj	d dS )z:Entry Point for completion of main and subcommand options.ZPIP_AUTO_COMPLETENZ
COMP_WORDS   Z
COMP_CWORD help-show	uninstallc                s0   g | ](}|j jr|j  d d kr|j qS )r   N)Zcanonical_name
startswith).0dist)cwordslc ^/var/www/tester-filtro-web/env/lib/python3.6/site-packages/pip/_internal/cli/autocompletion.py
<listcomp>3   s   z autocomplete.<locals>.<listcomp>T)Z
local_onlyc             S   s   g | ]}|j d d qS )=r   )split)r   xr   r   r   r   F   s    c                s    g | ]\}}| kr||fqS r   r   )r   r   v)	prev_optsr   r   r   G   s    c                s"   g | ]\}}|j  r||fqS r   )r   )r   kr   )currentr   r   r   I   s    c             S   s   g | ]}|d fqS )r   r   )r   pathr   r   r   r   T   s    r      z--r   c             S   s   g | ]
}|j qS r   )option_list)r   ir   r   r   r   ^   s     c                s   g | ]}|j  r|qS r   )r   )r   r   )r    r   r   r   k   s    )r   r   ) osenvironr   int
IndexErrorr   listr   sysexitr   r
   lowerZiter_installed_distributionsprintr	   parserZoption_list_allr   optparseSUPPRESS_HELPZ
_long_optsZ_short_optsappendnargsget_path_completion_typeauto_complete_pathsZoption_groupsr#   r   from_iterablejoin)cwordr/   ZsubcommandsZoptionsZsubcommand_nameZwordZshould_list_installedenvZ	installedr   Z
subcommandoptZopt_strcompletion_typepathsZoptionZ	opt_labeloptsZflattened_optsr   )r    r   r   r   r   autocomplete   s~    




 




 

r>   )r   r8   r=   r   c             C   s   |dk s| |d  j d r dS xt|D ]l}|jtjkr8q&xXt|jdD ]F}| |d  jdd |krH|j stdd |jjdD rH|jS qHW 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dirN)r!   r@   rA   r   )r   r   r   r   r   	<genexpr>   s    z+get_path_completion_type.<locals>.<genexpr>)r   r   r0   r1   strr   metavarany)r   r8   r=   r:   or   r   r   r4   o   s    


r4   )r    r;   r   c             #   s   t jj| \} t jj|}t j|t js.dS t jj   fddt j|D }xh|D ]`}t jj||}t jjt jj||}|dkrt jj	|r|V  qXt jj
|rXt jj|dV  qXW dS )ao  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`)i
    :return: A generator of regular files and/or directories
    Nc             3   s$   | ]}t jj|j r|V  qd S )N)r&   r!   normcaser   )r   r   )filenamer   r   rB      s    z&auto_complete_paths.<locals>.<genexpr>rA   r   )r&   r!   r   abspathaccessR_OKrG   listdirr7   isfileisdir)r    r;   Z	directoryZcurrent_pathZ	file_listfr:   Z	comp_filer   )rH   r   r5      s    	
r5   )__doc__r0   r&   r+   	itertoolsr   typingr   r   r   r   pip._internal.cli.main_parserr   pip._internal.commandsr   r	   Zpip._internal.metadatar
   r>   rC   r(   r4   r5   r   r   r   r   <module>   s   a