'L iUdZddlmZddlZddlmZddlZddlZddlmZGddZ ejjdr ddl Z e Zd ed <dd Zydd ZdZy#e$rejd Y1wxYw)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). ) annotationsN)glob)Anyc"eZdZdZdddZddZy)FastFilesCompleterzFast file completer class.c||_yN) directories)selfr s Z/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/_pytest/_argcomplete.py__init__zFastFilesCompleter.__init__Ms &c tj|ddvr:ttjj |tjz}nd}g}g}d|vr>d|vr:|r|dtjk(r|j t |dz|dz }|j t |t|D]:}tjj|r|dz }|j||d<|S)Nr*?z.*/) osseplenpathdirnameextendrsortedisdirappend)r prefixkwargs prefix_dir completionglobbedxs r __call__zFastFilesCompleter.__call__Ps 66VABZ RWW__V4rvv=>JJ  f F!2VBZ2661tFTM23 cMFtF|$ .Aww}}QS   a n -  . rN)T)r boolreturnNone)rstrrrr&z list[str])__name__ __module__ __qualname____doc__r r$rr rrJs$'rr _ARGCOMPLETErzFastFilesCompleter | Nonefilescompleterc2tj|dy)NF)always_complete_options) argcomplete autocompleteparsers r try_argcompleter6ms  Grcyr r-r4s r r6r6rs r)r5zargparse.ArgumentParserr&r')r, __future__rargparserrsystypingrrenvirongetargcomplete.completersr2 ImportErrorexitr/__annotations__r6r-rr rBs>@# 8::>>.!%1C0DN-DH  N  sA$$A>=A>