U
    +|jÎ  ã                   @   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	„ Zd
d„ Z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_installed_distributionsc                     sª  dt jkrdS t jd  ¡ dd… ‰tt jd ƒ} zˆ| d  ‰ W n tk
rZ   d‰ Y nX tƒ }ttƒ}g }d}ˆD ]}||krv|} qŒqv|dk	�r|dkr¨t 	d¡ ˆ  
d¡ oº|d	k}|�rˆ  ¡ ‰‡‡fd
d„tdd�D ƒ}|�r|D ]}t|ƒ qît 	d¡ t|ƒ}	|	jjD ]8}
|
jtjk�r|
j|
j D ]}| ||
jf¡ �q4�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 �rô|d dd… dk�rô|d7 }t|ƒ �qÀnšdd„ |jD ƒ}| |j¡ t |¡}ˆ  
d¡�r`|D ]$}
|
jtjk�r8||
j|
j 7 }�q8n tˆ| |ƒ}|�r€t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)ÚkeyÚ
startswith)Ú.0Údist)ÚcwordsÚlc© úhC:\Users\snmko\Desktop\web_content\django_cbt\venv\Lib\site-packages\pip/_internal/cli/autocompletion.pyÚ
<listcomp>2   s    þz autocomplete.<locals>.<listcomp>T)Ú
local_onlyc                 S   s   g | ]}|  d ¡d ‘qS )ú=r   )Úsplit©r   Úxr   r   r   r   E   s     c                    s    g | ]\}}|ˆ kr||f‘qS r   r   )r   r!   Úv)Ú	prev_optsr   r   r   F   s      c                    s"   g | ]\}}|  ˆ ¡r||f‘qS r   ©r   )r   Úkr"   ©Úcurrentr   r   r   H   s     
 c                 S   s   g | ]}|d f‘qS )r   r   )r   Úpathr   r   r   r   S   s     r   é   z--r   c                 S   s   g | ]
}|j ‘qS r   )Úoption_list)r   Úir   r   r   r   ]   s     ú c                    s   g | ]}|  ˆ ¡r|‘qS r   r$   r    r&   r   r   r   j   s     
 )ÚosÚenvironr   ÚintÚ
IndexErrorr   Úlistr   ÚsysÚexitr   Úlowerr
   Úprintr	   ÚparserÚoption_list_allr   ÚoptparseÚSUPPRESS_HELPÚ
_long_optsÚ_short_optsÚappendÚnargsÚget_path_completion_typeÚauto_complete_pathsÚoption_groupsr*   r   Úfrom_iterableÚjoin)Úcwordr6   ÚsubcommandsÚoptionsÚsubcommand_nameÚwordÚshould_list_installedÚ	installedr   Ú
subcommandÚoptÚopt_strÚcompletion_typeÚpathsÚoptionÚ	opt_labelÚoptsÚflattened_optsr   )r'   r   r   r#   r   Úautocomplete   s|    



þ

ý
 
rS   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r€t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   r8   r9   Ústrr   ÚmetavarÚany)r   rC   rQ   rK   Úor   r   r   r>   n   s    	
ÿ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ršt j 	|¡rš|V  qVt j 
|¡rVt j |d¡V  qVd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 |¡ ˆ ¡r|V  qd S )N)r-   r(   Únormcaser   r    ©Úfilenamer   r   rW   –   s     z&auto_complete_paths.<locals>.<genexpr>rV   r   )r-   r(   r   ÚabspathÚaccessÚR_OKr\   ÚlistdirrB   ÚisfileÚisdir)r'   rM   Ú	directoryÚcurrent_pathÚ	file_listÚfrK   Ú	comp_filer   r]   r   r?   …   s    

ÿr?   )Ú__doc__r8   r-   r2   Ú	itertoolsr   Útypingr   r   r   r   Úpip._internal.cli.main_parserr   Úpip._internal.commandsr   r	   Úpip._internal.utils.miscr
   rS   r>   r?   r   r   r   r   Ú<module>   s   _