Mercurial > repos > shellac > sam_consensus_v3
diff env/lib/python3.9/site-packages/argcomplete/_check_console_script.py @ 0:4f3585e2f14b draft default tip
"planemo upload commit 60cee0fc7c0cda8592644e1aad72851dec82c959"
author | shellac |
---|---|
date | Mon, 22 Mar 2021 18:12:50 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/env/lib/python3.9/site-packages/argcomplete/_check_console_script.py Mon Mar 22 18:12:50 2021 +0000 @@ -0,0 +1,57 @@ +""" +Utility for locating the module (or package's __init__.py) +associated with a given console_script name +and verifying it contains the PYTHON_ARGCOMPLETE_OK marker. + +Such scripts are automatically generated and cannot contain +the marker themselves, so we defer to the containing module or package. + +For more information on setuptools console_scripts, see +https://setuptools.readthedocs.io/en/latest/setuptools.html#automatic-script-creation + +Intended to be invoked by argcomplete's global completion function. +""" +import os +import sys + +try: + from importlib.metadata import entry_points as importlib_entry_points +except ImportError: + from importlib_metadata import entry_points as importlib_entry_points + +from ._check_module import ArgcompleteMarkerNotFound, find + + +def main(): + # Argument is the full path to the console script. + script_path = sys.argv[1] + + # Find the module and function names that correspond to this + # assuming it is actually a console script. + name = os.path.basename(script_path) + entry_points = [ep for ep in importlib_entry_points()["console_scripts"] if ep.name == name] + if not entry_points: + raise ArgcompleteMarkerNotFound('no entry point found matching script') + entry_point = entry_points[0] + module_name, function_name = entry_point.value.split(":", 1) + + # Check this looks like the script we really expected. + with open(script_path) as f: + script = f.read() + if 'from {} import {}'.format(module_name, function_name) not in script: + raise ArgcompleteMarkerNotFound('does not appear to be a console script') + if 'sys.exit({}())'.format(function_name) not in script: + raise ArgcompleteMarkerNotFound('does not appear to be a console script') + + # Look for the argcomplete marker in the script it imports. + with open(find(module_name, return_package=True)) as f: + head = f.read(1024) + if 'PYTHON_ARGCOMPLETE_OK' not in head: + raise ArgcompleteMarkerNotFound('marker not found') + + +if __name__ == '__main__': + try: + main() + except ArgcompleteMarkerNotFound as e: + sys.exit(e)