U ʗRe@sdZddlZddlZddlZddlmZddlmZmZm Z m Z ddl m Z ddl mZmZddlmZddd d Ze eeeee ed d d ZeeeedddZdS)zBLogic that powers autocompletion installed by ``pip completion``. N)chain)AnyIterableListOptional)create_main_parser) commands_dictcreate_command)get_default_environment)returncsdtjkrdStjdddttjd}z|dWntk rZdYnXt}tt}g}d}D]}||krv|}qqv|dk rJ|dkrt d d o|d k}|rt } fd d |j d d D}|r|D] } t| qt d d o"|dk} | rNtdD]} t| q4t dt|} | jjD]8} | jtjkr^| j| jD]}||| jfq|q^dd d|dDfdd |D}fdd |D}t|| jj}|rt|}dd |D}|D]>}|d}|dr<|ddddkr<|d7}t|qndd |jD}||jt|} dr|D]$} | jtjkr|| j| j7}qn t||}|rtt|}tdfdd |Dt ddS)z:Entry Point for completion of main and subcommand options.PIP_AUTO_COMPLETEN COMP_WORDS COMP_CWORDhelp-)show uninstallcs0g|](}|jr|jddkr|jqS)rN)canonical_name startswith).0dist)cwordslc/builddir/build/BUILDROOT/alt-python38-pip-22.2.1-2.el8.x86_64/opt/alt/python38/lib/python3.8/site-packages/pip/_internal/cli/autocompletion.py 2s z autocomplete..T) local_onlyinstallpathcSsg|]}|ddqS)=r)splitrxrrrrNscs g|]\}}|kr||fqSrr)rr$v) prev_optsrrrOscs"g|]\}}|r||fqSrr)rkr%currentrrrQs cSsg|] }|dfqS)rr)rr rrrr\srz--r!cSsg|] }|jqSr) option_list)rirrrrfs csg|]}|r|qSrr'r#r)rrrss ) osenvironr"int IndexErrorrlistrsysexitrr loweriter_installed_distributionsprintauto_complete_pathsr parseroption_list_allroptparse SUPPRESS_HELP _long_opts _short_optsappendnargsget_path_completion_type option_groupsr,r from_iterablejoin)cwordr: subcommandsoptionssubcommand_namewordshould_list_installedenv installedrshould_list_installablesr subcommandoptopt_strcompletion_typepathsoption opt_labeloptsflattened_optsr)r*rrr&r autocompletes                 rX)rrFrVr cCs|dks||ddsdS|D]n}|jtjkr4q"t|dD]L}||ddd|krB|jrtdd|jdDrB|jSqBq"dS) 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/r!rcss|]}|dkVqdS))r filedirNrr#rrr sz+get_path_completion_type..)rrr<r=strr"metavarany)rrFrVrPorrrrBws   rB)r*rRr c#stj|\}tj|}t|tjs.dStjfddt|D}|D]`}tj||}tjtj||}|dkrtj |r|VqVtj |rVtj|dVqVdS)atIf ``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 Nc3s$|]}tj|r|VqdS)N)r/r normcaserr#filenamerrr\sz&auto_complete_paths..r[r) r/r r"abspathaccessR_OKralistdirrEisfileisdir)r*rR directory current_path file_listfrP comp_filerrbrr9s     r9)__doc__r<r/r4 itertoolsrtypingrrrrpip._internal.cli.main_parserrpip._internal.commandsrr pip._internal.metadatar rXr]r1rBr9rrrrs   i