locust 2.42.4.dev3__tar.gz → 2.42.4.dev16__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/PKG-INFO +2 -2
  2. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/_version.py +2 -2
  3. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/argument_parser.py +13 -0
  4. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/web.py +5 -1
  5. locust-2.42.4.dev3/locust/webui/dist/assets/index-Bk5WNA9e.js → locust-2.42.4.dev16/locust/webui/dist/assets/index-Mvj-aOsx.js +1 -1
  6. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/webui/dist/auth.html +1 -1
  7. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/webui/dist/index.html +1 -1
  8. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/pyproject.toml +3 -5
  9. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/.gitignore +0 -0
  10. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/LICENSE +0 -0
  11. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/README.md +0 -0
  12. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/hatch_build.py +0 -0
  13. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/__init__.py +0 -0
  14. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/__main__.py +0 -0
  15. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/clients.py +0 -0
  16. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/contrib/__init__.py +0 -0
  17. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/contrib/dns.py +0 -0
  18. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/contrib/fasthttp.py +0 -0
  19. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/contrib/milvus.py +0 -0
  20. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/contrib/mongodb.py +0 -0
  21. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/contrib/mqtt.py +0 -0
  22. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/contrib/oai.py +0 -0
  23. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/contrib/postgres.py +0 -0
  24. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/contrib/socketio.py +0 -0
  25. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/debug.py +0 -0
  26. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/dispatch.py +0 -0
  27. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/env.py +0 -0
  28. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/event.py +0 -0
  29. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/exception.py +0 -0
  30. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/html.py +0 -0
  31. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/input_events.py +0 -0
  32. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/log.py +0 -0
  33. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/main.py +0 -0
  34. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/py.typed +0 -0
  35. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/rpc/__init__.py +0 -0
  36. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/rpc/protocol.py +0 -0
  37. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/rpc/zmqrpc.py +0 -0
  38. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/runners.py +0 -0
  39. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/shape.py +0 -0
  40. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/stats.py +0 -0
  41. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/user/__init__.py +0 -0
  42. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/user/inspectuser.py +0 -0
  43. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/user/markov_taskset.py +0 -0
  44. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/user/sequential_taskset.py +0 -0
  45. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/user/task.py +0 -0
  46. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/user/users.py +0 -0
  47. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/user/wait_time.py +0 -0
  48. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/util/__init__.py +0 -0
  49. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/util/cache.py +0 -0
  50. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/util/date.py +0 -0
  51. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/util/deprecation.py +0 -0
  52. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/util/directory.py +0 -0
  53. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/util/exception_handler.py +0 -0
  54. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/util/load_locustfile.py +0 -0
  55. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/util/rounding.py +0 -0
  56. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/util/timespan.py +0 -0
  57. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/util/url.py +0 -0
  58. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/webui/dist/assets/favicon-dark.png +0 -0
  59. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/webui/dist/assets/favicon-light.png +0 -0
  60. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/webui/dist/assets/graphs-dark.png +0 -0
  61. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/webui/dist/assets/graphs-light.png +0 -0
  62. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/webui/dist/assets/terminal.gif +0 -0
  63. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/webui/dist/assets/testruns-dark.png +0 -0
  64. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/webui/dist/assets/testruns-light.png +0 -0
  65. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/locust/webui/dist/report.html +0 -0
  66. {locust-2.42.4.dev3 → locust-2.42.4.dev16}/pytest_locust/plugin.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: locust
3
- Version: 2.42.4.dev3
3
+ Version: 2.42.4.dev16
4
4
  Summary: Developer-friendly load testing framework
5
5
  Project-URL: homepage, https://locust.io/
6
6
  Project-URL: repository, https://github.com/locustio/locust
@@ -34,7 +34,7 @@ Requires-Dist: geventhttpclient>=2.3.1
34
34
  Requires-Dist: locust-cloud>=1.28.1
35
35
  Requires-Dist: msgpack>=1.0.0
36
36
  Requires-Dist: psutil>=5.9.1
37
- Requires-Dist: pytest<9.0.0,>=8.3.3
37
+ Requires-Dist: pytest<10,>=8.3.3
38
38
  Requires-Dist: python-engineio>=4.12.2
39
39
  Requires-Dist: python-socketio[client]>=5.13.0
40
40
  Requires-Dist: pywin32; sys_platform == 'win32'
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '2.42.4.dev3'
32
- __version_tuple__ = version_tuple = (2, 42, 4, 'dev3')
31
+ __version__ = version = '2.42.4.dev16'
32
+ __version_tuple__ = version_tuple = (2, 42, 4, 'dev16')
33
33
 
34
34
  __commit_id__ = commit_id = None
@@ -79,6 +79,7 @@ class LocustArgumentParser(configargparse.ArgumentParser):
79
79
  include_in_web_ui: If True (default), the argument will show in the UI.
80
80
  is_secret: If True (default is False) and include_in_web_ui is True, the argument will show in the UI with a password masked text input.
81
81
  is_required: If True (default is False) and include_in_web_ui is True, the argument will show in the UI as a required form field.
82
+ is_multiple: If True (default is False) and include_in_web_ui is True, the argument will show in the UI as a multiple select form field.
82
83
 
83
84
  Returns:
84
85
  argparse.Action: the new argparse action
@@ -86,10 +87,12 @@ class LocustArgumentParser(configargparse.ArgumentParser):
86
87
  include_in_web_ui = kwargs.pop("include_in_web_ui", True)
87
88
  is_secret = kwargs.pop("is_secret", False)
88
89
  is_required = kwargs.pop("is_required", False)
90
+ is_multiple = kwargs.pop("is_multiple", False)
89
91
  action = super().add_argument(*args, **kwargs)
90
92
  action.include_in_web_ui = include_in_web_ui
91
93
  action.is_secret = is_secret
92
94
  action.is_required = is_required
95
+ action.is_multiple = is_multiple
93
96
  return action
94
97
 
95
98
  @property
@@ -112,6 +115,14 @@ class LocustArgumentParser(configargparse.ArgumentParser):
112
115
  if a.dest in self.args_included_in_web_ui and hasattr(a, "is_required") and a.is_required
113
116
  }
114
117
 
118
+ @property
119
+ def multiple_args_included_in_web_ui(self) -> dict[str, configargparse.Action]:
120
+ return {
121
+ a.dest: a
122
+ for a in self._actions
123
+ if a.dest in self.args_included_in_web_ui and hasattr(a, "is_multiple") and a.is_multiple
124
+ }
125
+
115
126
 
116
127
  class LocustTomlConfigParser(configargparse.TomlConfigParser):
117
128
  def parse(self, stream):
@@ -909,6 +920,7 @@ class UIExtraArgOptions(NamedTuple):
909
920
  is_secret: bool
910
921
  is_required: bool
911
922
  help_text: str
923
+ is_multiple: bool
912
924
  choices: list[str] | None = None
913
925
 
914
926
 
@@ -925,6 +937,7 @@ def ui_extra_args_dict(args=None) -> dict[str, dict[str, Any]]:
925
937
  is_secret=k in parser.secret_args_included_in_web_ui,
926
938
  is_required=k in parser.required_args_included_in_web_ui,
927
939
  help_text=parser.args_included_in_web_ui[k].help,
940
+ is_multiple=k in parser.multiple_args_included_in_web_ui,
928
941
  choices=parser.args_included_in_web_ui[k].choices,
929
942
  )._asdict()
930
943
  for k, v in all_args.items()
@@ -59,6 +59,7 @@ class InputField(TypedDict, total=False):
59
59
  type: str | None
60
60
  default_value: bool | None
61
61
  choices: list[str] | None
62
+ is_multiple: bool | None
62
63
  is_secret: bool | None
63
64
  is_required: bool | None
64
65
 
@@ -291,7 +292,10 @@ class WebUI:
291
292
  elif parsed_options_value is None:
292
293
  parsed_options_dict[key] = value
293
294
  elif isinstance(parsed_options_value, list):
294
- value_as_list = value.split(",")
295
+ if "," in value:
296
+ value_as_list = value.split(",")
297
+ else:
298
+ value_as_list = request.form.getlist(key)
295
299
  if all(isinstance(x, int) for x in parsed_options_value):
296
300
  parsed_options_dict[key] = list(map(int, value_as_list))
297
301
  else: