o
    h                     @  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	l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)get_default_environmentreturnNonec                    s8  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rH|dkrat	
d  d oj|d	v }|rt }  fd
d|jddD }|r|D ]}	t|	 qt	
d  d o|dk}
|
rt dD ]}t| qt	
d t|}|jjD ]jtjkr|fddjj D 7 }qd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 sG| D ]}| rEt| q9nMdd |jD }||j t |} drw|D ]jtjkrt|jj 7 }qcnt| |}|rt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 vr|j qS )r   N)canonical_name
startswith).0dist)cwordslc S/var/www/html/venv/lib/python3.10/site-packages/pip/_internal/cli/autocompletion.py
<listcomp>8   s    
z autocomplete.<locals>.<listcomp>T)
local_onlyinstallpathc                   s   g | ]}| j fqS r   )nargs)r   opt_str)optr   r   r   P   s    
c                 S  s   g | ]	}| d d qS )=r   )splitr   xr   r   r   r   U       c                   s    g | ]\}}| vr||fqS r   r   )r   r'   v)	prev_optsr   r   r   V   s     c                   s"   g | ]\}}|  r||fqS r   r   )r   kr)   currentr   r   r   X   s   " c                 S  s   g | ]}|d fqS )r   r   )r   r    r   r   r   r   c   s    r      z--r$   c                 3  s    | ]}| v V  qd S Nr   )r   name)r   r   r   	<genexpr>l   s    zautocomplete.<locals>.<genexpr>c                 S  s   g | ]}|j qS r   )option_list)r   ir   r   r   r   s   s     c                   s   g | ]	}|  r|qS r   r+   r&   r-   r   r   r      r(   )"osenvirongetr%   int
IndexErrorr   listr   sysexitr   r	   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)cwordrB   subcommandsoptionssubcommand_namewordshould_list_installed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   









 
r`   r   	list[str]rO   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   rD   rE   strr%   metavarrI   )r   rO   r^   r#   or   r   r   rH      s   

rH   r.   rg   rY   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>rf   r   )r6   r    r%   abspathaccessR_OKrk   listdirrN   isfileisdir)r.   rY   	directorycurrent_path	file_listfr#   	comp_filer   rl   r   rA      s$   	
rA   )r
   r   )r   ra   rO   r9   r^   rb   r
   rc   )r.   rg   rY   rg   r
   rj   )__doc__
__future__r   rD   r6   r<   collections.abcr   	itertoolsr   typingr   pip._internal.cli.main_parserr   pip._internal.commandsr   r   pip._internal.metadatar	   r`   rH   rA   r   r   r   r   <module>   s    

s