o
    ©„j¹  ã                   @  sŠ   d Z ddlmZ ddlZddlZddlZddlmZ ddlm	Z	 ddl
mZ ddlmZ ddlmZmZ ddd„Zddd„Zddd„ZdS )zALogic that powers autocompletion installed by ``pip completion``.é    )ÚannotationsN)ÚIterable)Úchain)ÚAny)Úcreate_main_parser)Úcommands_dictÚcreate_commandÚreturnÚNonec                    sD  dt jv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y:   d‰ Y nw tƒ }ttƒ}g }d}ˆD ]
}||v rR|} nqH|du�rN|dkrat	 
d¡ ˆ  d¡ oj|d	v }|r˜d
dlm} |ƒ }ˆ  ¡ ‰‡‡fdd„|jdd�D ƒ}	|	r˜|	D ]}
t|
ƒ qŒt	 
d¡ ˆ  d¡ o¡|dk}|rµtˆ dƒD ]}t|ƒ q©t	 
d¡ t|ƒ}|jjD ]‰ˆ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 �r'|d
 dd… dk�r'|d7 }t|ƒ �qt‡fdd„| ¡ D ƒƒ�sM| ¡ D ]}| ˆ ¡�rKt|ƒ �q?nMdd„ |jD ƒ}| |j¡ t  !|¡}ˆ  d¡�r}|D ]‰ˆjtjk�rz|ˆjˆj 7 }�qin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Ú	uninstallr   )Úget_default_environmentc                   s0   g | ]}|j  ˆ¡r|j ˆ d d… vr|j ‘qS )r   N)Úcanonical_nameÚ
startswith)Ú.0Údist)ÚcwordsÚlc© ú^/var/www/html/django_cbt/venv/lib/python3.10/site-packages/pip/_internal/cli/autocompletion.pyÚ
<listcomp>;   s    
ýýz autocomplete.<locals>.<listcomp>T)Ú
local_onlyÚinstallÚpathc                   s   g | ]}|ˆ j f‘qS r   )Únargs)r   Úopt_str)Úoptr   r   r   S   s    
ÿc                 S  s   g | ]	}|  d ¡d ‘qS )ú=r   )Úsplit©r   Úxr   r   r   r   X   ó    c                   s    g | ]\}}|ˆ vr||f‘qS r   r   )r   r'   Úv)Ú	prev_optsr   r   r   Y   s     c                   s"   g | ]\}}|  ˆ ¡r||f‘qS r   ©r   )r   Úkr)   ©Úcurrentr   r   r   [   s   " c                 S  s   g | ]}|d f‘qS )r   r   )r   r    r   r   r   r   f   s    é   z--r$   c                 3  s   � | ]}|ˆ v V  qd S ©Nr   )r   Úname)r   r   r   Ú	<genexpr>o   s   € zautocomplete.<locals>.<genexpr>c                 S  s   g | ]}|j ‘qS r   )Úoption_list)r   Úir   r   r   r   v   s    ú c                   s   g | ]	}|  ˆ ¡r|‘qS r   r+   r&   r-   r   r   r   ƒ   r(   )#ÚosÚenvironÚgetr%   ÚintÚ
IndexErrorr   Úlistr   ÚsysÚexitr   Úpip._internal.metadatar   ÚlowerÚiter_installed_distributionsÚprintÚauto_complete_pathsr   ÚparserÚoption_list_allr   ÚoptparseÚSUPPRESS_HELPÚ
_long_optsÚ_short_optsÚget_path_completion_typeÚanyÚhandler_mapÚoption_groupsÚappendr3   r   Úfrom_iterableÚjoin)ÚcwordrC   ÚsubcommandsÚoptionsÚsubcommand_nameÚwordÚshould_list_installedr   ÚenvÚ	installedr   Úshould_list_installablesr    Ú
subcommandÚcompletion_typeÚpathsÚoptionÚ	opt_labelÚhandler_nameÚoptsÚflattened_optsr   )r.   r   r   r#   r*   r   Úautocomplete   s¦   
ÿþ


þ

ÿ


ÿ€ý
 €
€þra   r   ú	list[str]rP   r9   r_   úIterable[Any]ú
str | Nonec                 C  s–   |dk s| |d    d¡sdS |D ]7}|jtjkrqt|ƒ d¡D ]&}| |d   d¡d |krG|jr@tdd„ |j d¡D ƒƒrG|j    S q!q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   r2   ˜   s   € 
ÿz+get_path_completion_type.<locals>.<genexpr>)r   r   rE   rF   Ústrr%   ÚmetavarrJ   )r   rP   r_   r#   Úor   r   r   rI   ‡   s   

ÿ€ûrI   r.   rh   rZ   úIterable[str]c                 #  s¾   � t j | ¡\}‰ t j |¡}t  |t j¡sdS t j ˆ ¡‰ ‡ fdd„t  |¡D ƒ}|D ]0}t j ||¡}t j t j ||¡¡}|dkrNt j 	|¡rN|V  q,t j 
|¡r\t j |d¡V  q,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 r0   )r6   r    Únormcaser   r&   ©Úfilenamer   r   r2   ¯   s   € ÿ
ÿz&auto_complete_paths.<locals>.<genexpr>rg   r   )r6   r    r%   ÚabspathÚaccessÚR_OKrl   ÚlistdirrO   ÚisfileÚisdir)r.   rZ   Ú	directoryÚcurrent_pathÚ	file_listÚfr#   Ú	comp_filer   rm   r   rB   Ÿ   s$   €	
ÿ€÷rB   )r	   r
   )r   rb   rP   r9   r_   rc   r	   rd   )r.   rh   rZ   rh   r	   rk   )Ú__doc__Ú
__future__r   rE   r6   r<   Úcollections.abcr   Ú	itertoolsr   Útypingr   Úpip._internal.cli.main_parserr   Úpip._internal.commandsr   r   ra   rI   rB   r   r   r   r   Ú<module>   s    

w