U
    cUh                     @   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r&t jds*dS t jd  dd tt jd } z| d   W n tk
rv   d Y nX t }tt}g }d}D ]}||kr|} qq|dk	rb|dkrt	
d  d o|d	k}|r,t }  fd
d|jddD }|r,|D ]}	t|	 qt	
d  d o@|dk}
|
rlt dD ]}t| qRt	
d t|}|jjD ]2jtjkr||fddjj D 7 }q|dd d| d  D fdd|D } fdd|D }t| |jj}|rt |}dd |D }|D ]>}|d }|d rT|d dd dkrT|d7 }t| q ndd |jD }||j t|} dr|D ]$jtjkr|jj 7 }qn t| |}|rtt |}td fdd|D  t	
d dS )z:Entry Point for completion of main and subcommand options.ZPIP_AUTO_COMPLETENZ
COMP_WORDSZ
COMP_CWORD    help-)ZshowZ	uninstallc                    s0   g | ](}|j r|j  d d kr|j qS )r   N)Zcanonical_name
startswith).0dist)cwordslc `/opt/bot/vods_filmes/script/venv/lib/python3.8/site-packages/pip/_internal/cli/autocompletion.py
<listcomp>6   s   z autocomplete.<locals>.<listcomp>T)Z
local_onlyinstallpathc                    s   g | ]}| j fqS r   )nargs)r   Zopt_str)optr   r   r   N   s    c                 S   s   g | ]}| d d qS )=r   )splitr   xr   r   r   r   S   s     c                    s    g | ]\}}| kr||fqS r   r   )r   r   v)	prev_optsr   r   r   T   s      c                    s"   g | ]\}}|  r||fqS r   r   )r   kr    currentr   r   r   V   s     
 c                 S   s   g | ]}|d fqS )r   r   )r   r   r   r   r   r   a   s     r      z--r   c                 S   s   g | ]
}|j qS r   )option_list)r   ir   r   r   r   k   s      c                    s   g | ]}|  r|qS r   r"   r   r$   r   r   r   x   s     
 ) osenvirongetr   int
IndexErrorr   listr   sysexitr   r
   lowerZiter_installed_distributionsprintauto_complete_pathsr	   parserZoption_list_allr   optparseSUPPRESS_HELPZ
_long_optsZ_short_optsget_path_completion_typeZoption_groupsappendr'   r   from_iterablejoin)cwordr5   ZsubcommandsZoptionsZsubcommand_nameZwordZshould_list_installedenvZ	installedr   Zshould_list_installablesr   Z
subcommandcompletion_typepathsZoptionZ	opt_labeloptsZflattened_optsr   )r%   r   r   r   r!   r   autocomplete   s    








 
rA   )r   r<   r@   r   c                 C   s   |dk s| |d   dsdS |D ]n}|jtjkr4q"t|dD ]L}| |d  dd |krB|jrtdd |jdD rB|j    S qBq"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   	<genexpr>   s    z+get_path_completion_type.<locals>.<genexpr>)r   r   r6   r7   strr   metavarany)r   r<   r@   r   or   r   r   r8   |   s    

r8   )r%   r>   r   c                 #   s   t j| \} t j|}t |t js.dS t j   fddt |D }|D ]`}t j||}t jt j||}|dkrt j	|r|V  qVt j
|rVt j|dV  qVd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   filenamer   r   rE      s     z&auto_complete_paths.<locals>.<genexpr>rD   r   )r*   r   r   abspathaccessR_OKrJ   listdirr;   isfileisdir)r%   r>   Z	directoryZcurrent_pathZ	file_listfr   Z	comp_filer   rK   r   r4      s    	
r4   )__doc__r6   r*   r0   	itertoolsr   typingr   r   r   r   pip._internal.cli.main_parserr   pip._internal.commandsr   r	   Zpip._internal.metadatar
   rA   rF   r-   r8   r4   r   r   r   r   <module>   s   n  