Skip to content

Commit

Permalink
Merge pull request #2423 from singingwolfboy/argcomplete
Browse files Browse the repository at this point in the history
Support argcomplete as an optional dependency
  • Loading branch information
cyberw authored Oct 15, 2023
2 parents a39eccc + 4a8bc29 commit 2700a5d
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 0 deletions.
23 changes: 23 additions & 0 deletions docs/installation.rst
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,27 @@ Installation
3. Done! Now you can :ref:`create your first test <quickstart>`

Optional: CLI tab completion
----------------------------

Locust uses the argcomplete_ module to provide tab completions for the ``locust`` command line interface.
This is entirely optional; if you don't care about tab completion, you can skip this section entirely!
If you do want to enable tab completion, first install the ``argcomplete`` module
into the same environment where you installed ``locust``:

.. code-block:: console
$ pip3 install argcomplete
Then add this line to your shell config file
(``~/.bashrc`` if you use ``bash``, ``~/.zshrc`` if you use ``zsh``):

.. code-block:: console
eval "$(register-python-argcomplete locust)"
Restart your shell, and you should have working tab completion for the ``locust`` CLI!
If this doesn't work, `check the argcomplete documentation <https://kislyuk.github.io/argcomplete/>`_.

Pre-release builds
------------------
Expand All @@ -37,3 +58,5 @@ Install for development
-----------------------

If you want to modify Locust, or contribute to the project, see :ref:`developing-locust`.

.. _argcomplete: https://github.com/kislyuk/argcomplete
10 changes: 10 additions & 0 deletions locust/argument_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,14 @@
from typing import Dict, List, NamedTuple, Optional, Any
import configargparse

try:
from argcomplete import autocomplete
except ImportError:

def autocomplete(parser):
return None


import locust

version = locust.__version__
Expand Down Expand Up @@ -606,6 +614,7 @@ def get_parser(default_config_files=DEFAULT_CONFIG_FILES) -> LocustArgumentParse

def parse_options(args=None) -> configargparse.Namespace:
parser = get_parser()
autocomplete(parser)
parsed_opts = parser.parse_args(args=args)
if parsed_opts.stats_history_enabled and (parsed_opts.csv_prefix is None):
parser.error("'--csv-full-history' requires '--csv'.")
Expand Down Expand Up @@ -633,6 +642,7 @@ def ui_extra_args_dict(args=None) -> Dict[str, Dict[str, Any]]:
locust_args = default_args_dict()

parser = get_parser()
autocomplete(parser)
all_args = vars(parser.parse_args(args))

extra_args = {
Expand Down
3 changes: 3 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,9 @@ classifiers = [
"Topic :: System :: Distributed Computing",
]

[project.optional-dependencies]
completion = ["argcomplete"]

[project.urls]
Homepage = "https://locust.io/"
Documentation = "https://docs.locust.io/"
Expand Down

0 comments on commit 2700a5d

Please sign in to comment.