bgJUdZddlZddlZddlZddlmZddlmZddlmZddlmZGddZ ej d rE ddl Z n#e$rejd YnwxYwe Zee ed <d ejd dfdZdSd ejd dfdZdZdS)aAllow bash-completion for argparse with argcomplete if installed. Needs argcomplete>=0.5.6 for python 3.2/3.3 (older versions fail to find the magic string, so _ARGCOMPLETE env. var is never set, and this does not need special code). Function try_argcomplete(parser) should be called directly before the call to ArgumentParser.parse_args(). The filescompleter is what you normally would use on the positional arguments specification, in order to get "dirname/" after "dirn" instead of the default "dirname ": optparser.add_argument(Config._file_or_dir, nargs='*').completer=filescompleter Other, application specific, completers should go in the file doing the add_argument calls as they need to be specified as .completer attributes as well. (If argcomplete is not installed, the function the attribute points to will not be used). SPEEDUP ======= The generic argcomplete script for bash-completion (/etc/bash_completion.d/python-argcomplete.sh) uses a python program to determine startup script generated by pip. You can speed up completion somewhat by changing this script to include # PYTHON_ARGCOMPLETE_OK so the python-argcomplete-check-easy-install-script does not need to be called to find the entry point of the code and see if that is marked with PYTHON_ARGCOMPLETE_OK. INSTALL/DEBUGGING ================= To include this support in another application that has setup.py generated scripts: - Add the line: # PYTHON_ARGCOMPLETE_OK near the top of the main python entry point. - Include in the file calling parse_args(): from _argcomplete import try_argcomplete, filescompleter Call try_argcomplete just before parse_args(), and optionally add filescompleter to the positional arguments' add_argument(). If things do not work right away: - Switch on argcomplete debugging with (also helpful when doing custom completers): export _ARC_DEBUG=1 - Run: python-argcomplete-check-easy-install-script $(which appname) echo $? will echo 0 if the magic line has been found, 1 if not. - Sometimes it helps to find early on errors using: _ARGCOMPLETE=1 _ARC_DEBUG=1 appname which should throw a KeyError: 'COMPLINE' (which is properly set by the global argcomplete script). N)glob)Any)List)OptionalcDeZdZdZd deddfdZdededeefd Z dS) FastFilesCompleterzFast file completer class.T directoriesreturnNc||_dSN)r )selfr s e/builddir/build/BUILD/cloudlinux-venv-1.0.7/venv/lib/python3.11/site-packages/_pytest/_argcomplete.py__init__zFastFilesCompleter.__init__Ls&prefixkwargsc 0tj|ddvr:ttj|tjz}nd}g}g}d|vrFd|vrB|r|dtjkr%|t |dz|dz }|t |t|D]C}tj|r|dz }| ||dD|S)Nr*?z.*/) osseplenpathdirnameextendrsortedisdirappend)r rr prefix_dir completionglobbedxs r__call__zFastFilesCompleter.__call__Os 6VABBZ  RW__V44rv=>>JJJ  f  F!2!2 4VBZ2611tFTM22333 cMFtF||$$$ . .Aw}}Q S   a n - - - -r)T) __name__ __module__ __qualname____doc__boolrstrrrr&rrrrIsn$$''D'D''''scd3irr _ARGCOMPLETErfilescompleterparserr c2tj|ddS)NF)always_complete_options) argcomplete autocompleter0s rtry_argcompleter6ls GGGGGGrcdSr r-r5s rr6r6qs r)r*argparsersysrtypingrrrrenvirongetargcomplete.completersr3 ImportErrorexitr/__annotations__ArgumentParserr6r-rrrBs>>>~ 8:>>.!!%%%%%  3E3E3G3GNH/0GGGH 7HDHHHHHH   7 D    NNNsAA-,A-