3 (\@s`dZddlZddlZddlZddlmZddlmZmZddl m Z ddZ dd Z d d Z dS) zBLogic that powers autocompletion installed by ``pip completion``. N)create_main_parser) commands_dict get_summaries)get_installed_distributionscsdtjkrdStjdjdd}ttjd}y||dWntk rZdYnXddtDg}yfd d|Dd }Wntk rd}YnXt}|rX|d krtjd|dkoԈj d }|rNg}j }x} | d }| drH| d dddkrH|d7}t|qWndd|jD}|j |jdd|D}j drxJ|D]$} | jtjkr| j| j7qWnt|||} | rt| tdjfddDtjddS)z?Entry Point for completion of main and subcommand options. PIP_AUTO_COMPLETEN COMP_WORDS COMP_CWORDcSsg|] \}}|qSr ).0cmdsummaryr r s/private/var/folders/pf/wv4htv3x0qs2c2mp0dnn0kchsvlck3/T/pip-build-k1a8l1r5/pip/pip/_internal/cli/autocompletion.py sz autocomplete..csg|]}|kr|qSr r )r w) subcommandsr rrsrhelpshow uninstall-T) local_onlycSsg|]}|jddqS)=r)split)r xr r rrAscs g|]\}}|kr||fqSr r )r rv) prev_optsr rrBscs"g|]\}}|jr||fqSr ) startswith)r kr)currentr rrDscss|]}|dfVqdS)rNr )r optr r r Mszautocomplete..z--rcSsg|] }|jqSr ) option_list)r ir r rrWscss|]}|D] }|Vq qdS)Nr )r itor r rr!Ys csg|]}|jr|qSr )r)r r)rr rrds)rr)osenvironrint IndexErrorrrsysexitrlowerrkeyappendprintrparseroption_list_allroptparse SUPPRESS_HELP _long_opts _short_optsnargsget_path_completion_typeauto_complete_paths option_groupsr#join)cwordscwordoptionssubcommand_namer2Zshould_list_installed installedlcdist subcommandr opt_strcompletion_typeoption opt_labeloptsr )rrrr autocomplete sx                rJcCs|dks||djd r dSxt|D]l}|jtjkr8q&xXt|jdD]F}||djdd|krH|j stdd|jjdDrH|jSqHWq&WdS) aLGet 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"rN/rrcss|]}|dkVqdS)pathfiledirN)rLrMrNr )r rr r rr!xsz+get_path_completion_type..)rrr4r5strrmetavarany)r=r>rIr r&r r rr9hs   r9c#stjj|\}tjj|}tj|tjs.dStjjfddtj|D}xh|D]`}tjj||}tjjtjj||}|dkrtjj |r|VqXtjj |rXtjj|dVqXWdS)aoIf ``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 Nc3s$|]}tjj|jr|VqdS)N)r(rLnormcaser)r r)filenamer rr!sz&auto_complete_paths..rNr ) r(rLrabspathaccessR_OKrRlistdirr<isfileisdir)rrF directoryZ current_path file_listfr Z comp_filer )rSrr:}s     r:)__doc__r4r(r,Zpip._internal.cli.main_parserrZpip._internal.commandsrrZpip._internal.utils.miscrrJr9r:r r r rs  [