a
    ýÓEb  ã                   @   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vrdS t jd  ¡ dd… ‰tt jd ƒ} zˆ| d  ‰ W n tyX   d‰ Y n0 tƒ }ttƒ}g }d}ˆD ]}||v rt|} qŠqt|du�rH|dkr¦t 	d¡ ˆ  
d¡ o¸|d	v }|�rtƒ }ˆ  ¡ ‰‡‡fd
d„|jdd�D ƒ}|�r|D ]}	t|	ƒ qôt 	d¡ ˆ  
d¡ �o |dk}
|
�rLtˆ dƒD ]}t|ƒ �q2t 	d¡ t|ƒ}|jjD ]8}|jtjk�r\|j|j D ]}| ||jf¡ �qz�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�r~||j|j 7 }�q~n tˆ| |ƒ}|�rÆt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_WORDSé   Z
COMP_CWORDÚ Úhelpú-)ZshowZ	uninstallc                    s0   g | ](}|j  ˆ¡r|j ˆ d d… vr|j ‘qS )r   N)Zcanonical_nameÚ
startswith)Ú.0Údist)ÚcwordsÚlc© ú`/home/ja/django-apps/lartica_env/lib/python3.9/site-packages/pip/_internal/cli/autocompletion.pyÚ
<listcomp>2   s   ýz autocomplete.<locals>.<listcomp>T)Z
local_onlyÚinstallÚpathc                 S   s   g | ]}|  d ¡d ‘qS )ú=r   )Úsplit©r   Úxr   r   r   r   N   ó    c                    s    g | ]\}}|ˆ vr||f‘qS r   r   )r   r   Úv)Ú	prev_optsr   r   r   O   r   c                    s"   g | ]\}}|  ˆ ¡r||f‘qS r   ©r   )r   Úkr   ©Úcurrentr   r   r   Q   r   c                 S   s   g | ]}|d f‘qS )r   r   )r   r   r   r   r   r   \   r   r   é   z--r   c                 S   s   g | ]
}|j ‘qS r   )Úoption_list)r   Úir   r   r   r   f   r   ú c                    s   g | ]}|  ˆ ¡r|‘qS r   r!   r   r#   r   r   r   s   r   ) ÚosÚenvironr   Ú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ÚappendÚnargsÚget_path_completion_typeZoption_groupsr&   r   Úfrom_iterableÚjoin)Úcwordr3   ZsubcommandsZoptionsZsubcommand_nameZwordZshould_list_installedÚenvZ	installedr   Zshould_list_installablesr   Z
subcommandÚoptZopt_strÚcompletion_typeÚpathsZoptionZ	opt_labelÚoptsZflattened_optsr   )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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 v V  qdS ))r   ÚfileÚdirNr   r   r   r   r   Ú	<genexpr>ˆ   s   z+get_path_completion_type.<locals>.<genexpr>)r   r   r4   r5   Ústrr   ÚmetavarÚany)r   r;   r@   r=   Úor   r   r   r8   w   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ršt 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   r2   �   s    	
ÿr2   )Ú__doc__r4   r)   r.   Ú	itertoolsr   Útypingr   r   r   r   Úpip._internal.cli.main_parserr   Úpip._internal.commandsr   r	   Zpip._internal.metadatar
   rA   rF   r+   r8   r2   r   r   r   r   Ú<module>   s   iþ