locust 2.33.3.dev4__tar.gz → 2.33.3.dev10__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 (59) hide show
  1. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/PKG-INFO +1 -1
  2. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/_version.py +2 -2
  3. locust-2.33.3.dev10/locust/contrib/oai.py +73 -0
  4. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/web.py +2 -1
  5. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/.gitignore +0 -0
  6. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/LICENSE +0 -0
  7. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/README.md +0 -0
  8. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/hatch_build.py +0 -0
  9. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/__init__.py +0 -0
  10. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/__main__.py +0 -0
  11. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/argument_parser.py +0 -0
  12. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/clients.py +0 -0
  13. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/contrib/__init__.py +0 -0
  14. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/contrib/fasthttp.py +0 -0
  15. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/contrib/mongodb.py +0 -0
  16. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/contrib/postgres.py +0 -0
  17. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/debug.py +0 -0
  18. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/dispatch.py +0 -0
  19. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/env.py +0 -0
  20. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/event.py +0 -0
  21. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/exception.py +0 -0
  22. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/html.py +0 -0
  23. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/input_events.py +0 -0
  24. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/log.py +0 -0
  25. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/main.py +0 -0
  26. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/py.typed +0 -0
  27. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/rpc/__init__.py +0 -0
  28. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/rpc/protocol.py +0 -0
  29. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/rpc/zmqrpc.py +0 -0
  30. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/runners.py +0 -0
  31. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/shape.py +0 -0
  32. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/stats.py +0 -0
  33. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/user/__init__.py +0 -0
  34. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/user/inspectuser.py +0 -0
  35. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/user/sequential_taskset.py +0 -0
  36. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/user/task.py +0 -0
  37. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/user/users.py +0 -0
  38. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/user/wait_time.py +0 -0
  39. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/util/__init__.py +0 -0
  40. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/util/cache.py +0 -0
  41. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/util/date.py +0 -0
  42. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/util/deprecation.py +0 -0
  43. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/util/directory.py +0 -0
  44. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/util/exception_handler.py +0 -0
  45. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/util/load_locustfile.py +0 -0
  46. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/util/rounding.py +0 -0
  47. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/util/timespan.py +0 -0
  48. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/util/url.py +0 -0
  49. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/webui/dist/assets/favicon-dark.png +0 -0
  50. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/webui/dist/assets/favicon-light.png +0 -0
  51. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/webui/dist/assets/graphs-dark.png +0 -0
  52. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/webui/dist/assets/graphs-light.png +0 -0
  53. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/webui/dist/assets/index-DcS9MJSn.js +0 -0
  54. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/webui/dist/assets/testruns-dark.png +0 -0
  55. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/webui/dist/assets/testruns-light.png +0 -0
  56. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/webui/dist/auth.html +0 -0
  57. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/webui/dist/index.html +0 -0
  58. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/locust/webui/dist/report.html +0 -0
  59. {locust-2.33.3.dev4 → locust-2.33.3.dev10}/pyproject.toml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: locust
3
- Version: 2.33.3.dev4
3
+ Version: 2.33.3.dev10
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
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '2.33.3.dev4'
21
- __version_tuple__ = version_tuple = (2, 33, 3, 'dev4')
20
+ __version__ = version = '2.33.3.dev10'
21
+ __version_tuple__ = version_tuple = (2, 33, 3, 'dev10')
@@ -0,0 +1,73 @@
1
+ # Note: this User is experimental and may change without notice.
2
+ # The filename is oai.py so it doesnt clash with the openai package.
3
+ from locust.user import User
4
+
5
+ import os
6
+ import time
7
+ from collections.abc import Generator
8
+ from contextlib import contextmanager
9
+
10
+ import httpx
11
+ from openai import OpenAI # dont forget to install openai
12
+
13
+ # convenience for when running in Locust Cloud, where only LOCUST_* env vars are forwarded
14
+ if "LOCUST_OPENAI_API_KEY" in os.environ:
15
+ os.environ["OPENAI_API_KEY"] = os.environ["LOCUST_OPENAI_API_KEY"]
16
+
17
+ if not "OPENAI_API_KEY" in os.environ:
18
+ raise Exception("You need to set OPENAI_API_KEY or LOCUST_OPENAI_API_KEY env var to use OpenAIUser")
19
+
20
+
21
+ class OpenAIClient(OpenAI):
22
+ def __init__(self, request_event, user, *args, **kwargs):
23
+ self.request_name = None # used to override url-based request names
24
+ self.user = user # currently unused, but could be useful later
25
+
26
+ def request_start(request):
27
+ request.start_time = time.time()
28
+ request.start_perf_counter = time.perf_counter()
29
+
30
+ def request_end(response):
31
+ exception = None
32
+ response.read()
33
+ response_time = (time.perf_counter() - response.request.start_perf_counter) * 1000
34
+ try:
35
+ response.raise_for_status()
36
+ except httpx.HTTPStatusError as e:
37
+ exception = e
38
+ request_event.fire(
39
+ request_type=response.request.method,
40
+ name=self.request_name if self.request_name else response.url.path,
41
+ context={},
42
+ response=response,
43
+ exception=exception,
44
+ start_time=response.request.start_time,
45
+ response_time=response_time,
46
+ # Store the number of output tokens as response_length instead of the actual payload size because it is more useful
47
+ response_length=response.json().get("usage", {}).get("output_tokens", 0),
48
+ url=response.url,
49
+ )
50
+
51
+ super().__init__(
52
+ *args,
53
+ **kwargs,
54
+ http_client=httpx.Client(event_hooks={"request": [request_start], "response": [request_end]}),
55
+ )
56
+
57
+ @contextmanager
58
+ def rename_request(self, name: str) -> Generator[None]:
59
+ """Group requests using the "with" keyword"""
60
+
61
+ self.request_name = name
62
+ try:
63
+ yield
64
+ finally:
65
+ self.request_name = None
66
+
67
+
68
+ class OpenAIUser(User):
69
+ abstract = True
70
+
71
+ def __init__(self, *args, **kwargs):
72
+ super().__init__(*args, **kwargs)
73
+ self.client = OpenAIClient(self.environment.events.request, user=self)
@@ -628,7 +628,8 @@ class WebUI:
628
628
  session["auth_info"] = None
629
629
  return login_required(view_func)(*args, **kwargs)
630
630
  except Exception as e:
631
- return f"Locust auth exception: {e} See https://docs.locust.io/en/stable/extending-locust.html#adding-authentication-to-the-web-ui for configuring authentication."
631
+ logger.exception("Locust auth exception")
632
+ return f"Locust auth exception: {e}<br/><br/>See https://docs.locust.io/en/stable/extending-locust.html#adding-authentication-to-the-web-ui for configuring authentication, or disable login by removing --web-login argument."
632
633
  else:
633
634
  return view_func(*args, **kwargs)
634
635
 
File without changes
File without changes
File without changes