locust 2.19.2.dev35__py3-none-any.whl → 2.19.2.dev41__py3-none-any.whl

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.

Potentially problematic release.


This version of locust might be problematic. Click here for more details.

locust/_version.py CHANGED
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '2.19.2.dev35'
16
- __version_tuple__ = version_tuple = (2, 19, 2, 'dev35')
15
+ __version__ = version = '2.19.2.dev41'
16
+ __version_tuple__ = version_tuple = (2, 19, 2, 'dev41')
locust/rpc/protocol.py CHANGED
@@ -1,4 +1,30 @@
1
1
  import msgpack
2
+ import datetime
3
+ from typing import Type
4
+
5
+ try:
6
+ from bson import ObjectId # type: ignore
7
+ except ImportError:
8
+
9
+ class ObjectId: # type: ignore
10
+ def __init__(self, s):
11
+ raise Exception("You need to install pymongo or at least bson to be able to send/receive ObjectIds")
12
+
13
+
14
+ def decode(obj):
15
+ if "__datetime__" in obj:
16
+ obj = datetime.datetime.strptime(obj["as_str"], "%Y%m%dT%H:%M:%S.%f")
17
+ elif "__ObjectId__" in obj:
18
+ obj = ObjectId(obj["as_str"])
19
+ return obj
20
+
21
+
22
+ def encode(obj):
23
+ if isinstance(obj, datetime.datetime):
24
+ return {"__datetime__": True, "as_str": obj.strftime("%Y%m%dT%H:%M:%S.%f")}
25
+ elif isinstance(obj, ObjectId):
26
+ return {"__ObjectId__": True, "as_str": str(obj)}
27
+ return obj
2
28
 
3
29
 
4
30
  class Message:
@@ -11,9 +37,9 @@ class Message:
11
37
  return f"<Message {self.type}:{self.node_id}>"
12
38
 
13
39
  def serialize(self):
14
- return msgpack.dumps((self.type, self.data, self.node_id))
40
+ return msgpack.dumps((self.type, self.data, self.node_id), default=encode)
15
41
 
16
42
  @classmethod
17
43
  def unserialize(cls, data):
18
- msg = cls(*msgpack.loads(data, raw=False, strict_map_key=False))
44
+ msg = cls(*msgpack.loads(data, raw=False, strict_map_key=False, object_hook=decode))
19
45
  return msg
locust/runners.py CHANGED
@@ -37,6 +37,7 @@ import greenlet
37
37
  import psutil
38
38
  from gevent.event import Event
39
39
  from gevent.pool import Group
40
+ import inspect
40
41
 
41
42
  from . import User
42
43
  from locust import __version__
@@ -380,7 +381,11 @@ class Runner:
380
381
  """
381
382
  if self.state == STATE_STOPPED:
382
383
  return
383
- logger.debug("Stopping all users")
384
+ try:
385
+ caller = inspect.getframeinfo(inspect.stack()[1][0])
386
+ logger.debug(f"Stopping all users (called from {caller.filename}:{caller.lineno})")
387
+ except Exception:
388
+ logger.debug("Stopping all users (couldnt determine where stop() was called from)")
384
389
  self.environment.events.test_stopping.fire(environment=self.environment)
385
390
  self.final_user_classes_count = {**self.user_classes_count}
386
391
  self.update_state(STATE_CLEANUP)
@@ -1104,7 +1109,11 @@ class MasterRunner(DistributedRunner):
1104
1109
  logger.debug(
1105
1110
  f"Received {msg.type} message from worker {msg.node_id} (index {self.get_worker_index(msg.node_id)})"
1106
1111
  )
1107
- self.custom_messages[msg.type](environment=self.environment, msg=msg)
1112
+ try:
1113
+ self.custom_messages[msg.type](environment=self.environment, msg=msg)
1114
+ except Exception:
1115
+ logging.error(f"Uncaught exception in handler for {msg.type}\n{traceback.format_exc()}")
1116
+
1108
1117
  else:
1109
1118
  logger.warning(
1110
1119
  f"Unknown message type received from worker {msg.node_id} (index {self.get_worker_index(msg.node_id)}): {msg.type}"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: locust
3
- Version: 2.19.2.dev35
3
+ Version: 2.19.2.dev41
4
4
  Summary: Developer friendly load testing framework
5
5
  License: MIT
6
6
  Project-URL: Homepage, https://locust.io/
@@ -1,6 +1,6 @@
1
1
  locust/__init__.py,sha256=Q6sqz7YDUaMKPEqcDjWcXEFG2ilVRQR7kl0fG0yK_5A,1402
2
2
  locust/__main__.py,sha256=vBQ82334kX06ImDbFlPFgiBRiLIinwNk3z8Khs6hd74,31
3
- locust/_version.py,sha256=MBO6Q4w8eDPw8VrLjs9LCr9Q2Zb2ObRijqxVTTy8T9g,428
3
+ locust/_version.py,sha256=pvgJAygxeD6uE6FLJUuG6Hrsg6ADbJuc_CmPLsBOT3M,428
4
4
  locust/argument_parser.py,sha256=H2tzJLu1F3oxxYkXLRUT6GtpV5UG5aGTcPWI3XwE4-c,26365
5
5
  locust/clients.py,sha256=GJXTWcyBAepE6O-o-V92WboV8XKOXxWR-AixlcL74_w,14768
6
6
  locust/debug.py,sha256=pEnZ74679vCdDODEMTNvjYcVdWCe4sWolHDJvdXh9dU,4818
@@ -13,14 +13,14 @@ locust/input_events.py,sha256=ARmzf5K_t4OnsNilkx0adDnNqvU9-NxtQvKOOjwgA_A,3048
13
13
  locust/log.py,sha256=2IVp9YL4ZPfWdj3sBFuOHfgneg3g7m7tUGR-sy2s3E8,3155
14
14
  locust/main.py,sha256=Kf9zoml_ZpRdTSgSA9-wtzJtcSzTZw-T0YIwV_Lgf50,27009
15
15
  locust/py.typed,sha256=gkWLl8yD4mIZnNYYAIRM8g9VarLvWmTAFeUfEbxJLBw,65
16
- locust/runners.py,sha256=ezvG4vjW7pmB66-VZ3yeoWfOuEpXf6VGCKVh36vjPeQ,65210
16
+ locust/runners.py,sha256=MnlroX5PUMzrzGMyTWIN1YAT4lgRFY_dma-1hgDu3AQ,65647
17
17
  locust/shape.py,sha256=SrKDabGtZ5bqMopJDdivvLbPencaYfAPUv1qzQiAgiA,1969
18
18
  locust/stats.py,sha256=4_FRxgJltr16oWOOv2BIf7OvMJ0g2sa1s307F6BqdcM,45480
19
19
  locust/web.py,sha256=PWwRXTMt9X5KpzLvR0Ap8SokDfLc7unk5dktNgPtFCI,26045
20
20
  locust/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
21
  locust/contrib/fasthttp.py,sha256=BqHzpjqcYupQErm-1QJKh2gInpowuMhrvZluPQyo2EA,26479
22
22
  locust/rpc/__init__.py,sha256=nVGoHWFQxZjnhCDWjbgXIbmFbN9sizAjkhvSs9_642c,58
23
- locust/rpc/protocol.py,sha256=D-Wpb0YbDMwdrsojxhzbhoMv0UGzTHMZiI2c5hGskFA,489
23
+ locust/rpc/protocol.py,sha256=AGFtveF7-_i5ipsRYhT-ily4blxnjZ3FXeIL6ZabO4c,1285
24
24
  locust/rpc/zmqrpc.py,sha256=zG6hli3RouftrI28XqAlHtZ-UUSM9Wn41HkY9cKgAU4,2591
25
25
  locust/static/chart.js,sha256=Aue4SxJZhv9I3k0Nr2uXTrdrLxsrX7x_a0d4u3a1e_Q,4796
26
26
  locust/static/echarts.common.min.js,sha256=2h6zIZeHk-eGAiC-qYvxv7uW5S1HcyM72K5FbcVhky4,620458
@@ -94,9 +94,9 @@ locust/webui/dist/report.html,sha256=Vyi9LIAjBNiAsvn6LVFkdAZ9R4Fa8UjHnqscjAeOFp8
94
94
  locust/webui/dist/assets/favicon.ico,sha256=IUl-rYqfpHdV38e-s0bkmFIeLS-n3Ug0DQxk-h202hI,8348
95
95
  locust/webui/dist/assets/index-d0af3b25.js,sha256=GUjx823w5GDMYQrm7g9dNhANSRaMP_9axaakCcSPQIs,1619387
96
96
  locust/webui/dist/assets/logo.png,sha256=lPCYhpDsPXYY3gUMlq3bzABI5WBtdBOvtay8R9hRFv4,2943
97
- locust-2.19.2.dev35.dist-info/LICENSE,sha256=78XGpIn3fHVBfaxlPNUfjVufSN7QsdhpJMRJHv2AFpo,1095
98
- locust-2.19.2.dev35.dist-info/METADATA,sha256=Nf-J2mMLWW86LImdrXxF9P5IC3UE1EDZ4E4VBuPPZ1Y,7150
99
- locust-2.19.2.dev35.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
100
- locust-2.19.2.dev35.dist-info/entry_points.txt,sha256=RAdt8Ku-56m7bFjmdj-MBhbF6h4NX7tVODR9QNnOg0E,44
101
- locust-2.19.2.dev35.dist-info/top_level.txt,sha256=XSsjgPA8Ggf9TqKVbkwSqZFuPlZ085X13M9orDycE20,7
102
- locust-2.19.2.dev35.dist-info/RECORD,,
97
+ locust-2.19.2.dev41.dist-info/LICENSE,sha256=78XGpIn3fHVBfaxlPNUfjVufSN7QsdhpJMRJHv2AFpo,1095
98
+ locust-2.19.2.dev41.dist-info/METADATA,sha256=t6fsiw0k0BDhcntVjkk9TwUcVFOw2mu-ZvV8AICJ4yY,7150
99
+ locust-2.19.2.dev41.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
100
+ locust-2.19.2.dev41.dist-info/entry_points.txt,sha256=RAdt8Ku-56m7bFjmdj-MBhbF6h4NX7tVODR9QNnOg0E,44
101
+ locust-2.19.2.dev41.dist-info/top_level.txt,sha256=XSsjgPA8Ggf9TqKVbkwSqZFuPlZ085X13M9orDycE20,7
102
+ locust-2.19.2.dev41.dist-info/RECORD,,