locust 2.42.7.dev7__tar.gz → 2.42.7.dev9__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 (67) hide show
  1. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/PKG-INFO +1 -1
  2. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/_version.py +2 -2
  3. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/stats.py +40 -30
  4. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/.gitignore +0 -0
  5. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/LICENSE +0 -0
  6. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/README.md +0 -0
  7. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/hatch_build.py +0 -0
  8. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/__init__.py +0 -0
  9. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/__main__.py +0 -0
  10. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/argument_parser.py +0 -0
  11. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/clients.py +0 -0
  12. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/contrib/__init__.py +0 -0
  13. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/contrib/dns.py +0 -0
  14. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/contrib/fasthttp.py +0 -0
  15. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/contrib/milvus.py +0 -0
  16. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/contrib/mongodb.py +0 -0
  17. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/contrib/mqtt.py +0 -0
  18. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/contrib/oai.py +0 -0
  19. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/contrib/postgres.py +0 -0
  20. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/contrib/socketio.py +0 -0
  21. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/debug.py +0 -0
  22. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/dispatch.py +0 -0
  23. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/env.py +0 -0
  24. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/event.py +0 -0
  25. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/exception.py +0 -0
  26. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/html.py +0 -0
  27. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/input_events.py +0 -0
  28. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/log.py +0 -0
  29. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/main.py +0 -0
  30. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/opentelemetry.py +0 -0
  31. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/py.typed +0 -0
  32. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/rpc/__init__.py +0 -0
  33. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/rpc/protocol.py +0 -0
  34. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/rpc/zmqrpc.py +0 -0
  35. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/runners.py +0 -0
  36. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/shape.py +0 -0
  37. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/user/__init__.py +0 -0
  38. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/user/inspectuser.py +0 -0
  39. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/user/markov_taskset.py +0 -0
  40. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/user/sequential_taskset.py +0 -0
  41. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/user/task.py +0 -0
  42. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/user/users.py +0 -0
  43. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/user/wait_time.py +0 -0
  44. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/util/__init__.py +0 -0
  45. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/util/cache.py +0 -0
  46. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/util/date.py +0 -0
  47. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/util/deprecation.py +0 -0
  48. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/util/directory.py +0 -0
  49. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/util/exception_handler.py +0 -0
  50. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/util/load_locustfile.py +0 -0
  51. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/util/rounding.py +0 -0
  52. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/util/timespan.py +0 -0
  53. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/util/url.py +0 -0
  54. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/web.py +0 -0
  55. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/webui/dist/assets/favicon-dark.png +0 -0
  56. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/webui/dist/assets/favicon-light.png +0 -0
  57. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/webui/dist/assets/graphs-dark.png +0 -0
  58. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/webui/dist/assets/graphs-light.png +0 -0
  59. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/webui/dist/assets/index-Mvj-aOsx.js +0 -0
  60. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/webui/dist/assets/terminal.gif +0 -0
  61. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/webui/dist/assets/testruns-dark.png +0 -0
  62. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/webui/dist/assets/testruns-light.png +0 -0
  63. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/webui/dist/auth.html +0 -0
  64. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/webui/dist/index.html +0 -0
  65. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/webui/dist/report.html +0 -0
  66. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/pyproject.toml +0 -0
  67. {locust-2.42.7.dev7 → locust-2.42.7.dev9}/pytest_locust/plugin.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: locust
3
- Version: 2.42.7.dev7
3
+ Version: 2.42.7.dev9
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
@@ -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.7.dev7'
32
- __version_tuple__ = version_tuple = (2, 42, 7, 'dev7')
31
+ __version__ = version = '2.42.7.dev9'
32
+ __version_tuple__ = version_tuple = (2, 42, 7, 'dev9')
33
33
 
34
34
  __commit_id__ = commit_id = None
@@ -23,13 +23,14 @@ from .util.rounding import proper_round
23
23
  if TYPE_CHECKING:
24
24
  from collections.abc import Callable, Iterable
25
25
  from types import FrameType
26
- from typing import Any, NoReturn
26
+ from typing import Any
27
27
 
28
28
  from .env import Environment
29
29
  from .event import Events
30
30
  from .runners import Runner
31
31
 
32
32
  console_logger = logging.getLogger("locust.stats_logger")
33
+ logger = logging.getLogger(__name__)
33
34
 
34
35
  """Space in table for request name. Auto shrink it if terminal is small (<160 characters)"""
35
36
  try:
@@ -894,9 +895,12 @@ def get_error_report_summary(stats) -> list[str]:
894
895
 
895
896
  def stats_printer(stats: RequestStats) -> Callable[[], None]:
896
897
  def stats_printer_func() -> None:
897
- while True:
898
- print_stats(stats)
899
- gevent.sleep(CONSOLE_STATS_INTERVAL_SEC)
898
+ try:
899
+ while True:
900
+ print_stats(stats)
901
+ gevent.sleep(CONSOLE_STATS_INTERVAL_SEC)
902
+ except KeyboardInterrupt as e:
903
+ logger.debug(e, exc_info=True)
900
904
 
901
905
  return stats_printer_func
902
906
 
@@ -929,14 +933,17 @@ def update_stats_history(runner: Runner, timestamp: str | None = None) -> None:
929
933
 
930
934
  def stats_history(runner: Runner) -> None:
931
935
  """Save current stats info to history for charts of report."""
932
- while True:
933
- if not runner.stats.total.use_response_times_cache:
934
- break
936
+ try:
937
+ while True:
938
+ if not runner.stats.total.use_response_times_cache:
939
+ break
935
940
 
936
- if runner.state != "ready" and runner.state != "stopped":
937
- update_stats_history(runner)
941
+ if runner.state != "ready" and runner.state != "stopped":
942
+ update_stats_history(runner)
938
943
 
939
- gevent.sleep(HISTORY_STATS_INTERVAL_SEC)
944
+ gevent.sleep(HISTORY_STATS_INTERVAL_SEC)
945
+ except KeyboardInterrupt as e:
946
+ logger.debug(e, exc_info=True)
940
947
 
941
948
 
942
949
  class StatsCSV:
@@ -1087,7 +1094,7 @@ class StatsCSVFileWriter(StatsCSV):
1087
1094
  def __call__(self) -> None:
1088
1095
  self.stats_writer()
1089
1096
 
1090
- def stats_writer(self) -> NoReturn:
1097
+ def stats_writer(self) -> None:
1091
1098
  """Writes all the csv files for the locust run."""
1092
1099
 
1093
1100
  # Write header row for all files and save position for non-append files
@@ -1104,31 +1111,34 @@ class StatsCSVFileWriter(StatsCSV):
1104
1111
 
1105
1112
  # Continuously write date rows for all files
1106
1113
  last_flush_time: float = 0.0
1107
- while True:
1108
- now = time.time()
1114
+ try:
1115
+ while True:
1116
+ now = time.time()
1109
1117
 
1110
- self.requests_csv_filehandle.seek(requests_csv_data_start)
1111
- self._requests_data_rows(self.requests_csv_writer)
1112
- self.requests_csv_filehandle.truncate()
1118
+ self.requests_csv_filehandle.seek(requests_csv_data_start)
1119
+ self._requests_data_rows(self.requests_csv_writer)
1120
+ self.requests_csv_filehandle.truncate()
1113
1121
 
1114
- self._stats_history_data_rows(self.stats_history_csv_writer, now)
1122
+ self._stats_history_data_rows(self.stats_history_csv_writer, now)
1115
1123
 
1116
- self.failures_csv_filehandle.seek(self.failures_csv_data_start)
1117
- self._failures_data_rows(self.failures_csv_writer)
1118
- self.failures_csv_filehandle.truncate()
1124
+ self.failures_csv_filehandle.seek(self.failures_csv_data_start)
1125
+ self._failures_data_rows(self.failures_csv_writer)
1126
+ self.failures_csv_filehandle.truncate()
1119
1127
 
1120
- self.exceptions_csv_filehandle.seek(self.exceptions_csv_data_start)
1121
- self._exceptions_data_rows(self.exceptions_csv_writer)
1122
- self.exceptions_csv_filehandle.truncate()
1128
+ self.exceptions_csv_filehandle.seek(self.exceptions_csv_data_start)
1129
+ self._exceptions_data_rows(self.exceptions_csv_writer)
1130
+ self.exceptions_csv_filehandle.truncate()
1123
1131
 
1124
- if now - last_flush_time > CSV_STATS_FLUSH_INTERVAL_SEC:
1125
- self.requests_flush()
1126
- self.stats_history_flush()
1127
- self.failures_flush()
1128
- self.exceptions_flush()
1129
- last_flush_time = now
1132
+ if now - last_flush_time > CSV_STATS_FLUSH_INTERVAL_SEC:
1133
+ self.requests_flush()
1134
+ self.stats_history_flush()
1135
+ self.failures_flush()
1136
+ self.exceptions_flush()
1137
+ last_flush_time = now
1130
1138
 
1131
- gevent.sleep(CSV_STATS_INTERVAL_SEC)
1139
+ gevent.sleep(CSV_STATS_INTERVAL_SEC)
1140
+ except KeyboardInterrupt as e:
1141
+ logger.debug(e, exc_info=True)
1132
1142
 
1133
1143
  def _stats_history_data_rows(self, csv_writer: CSVWriter, now: float) -> None:
1134
1144
  """
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes