Skip to content

Commit d552bf4

Browse files
committed
Use match-case instead of if-elif when iterating over form items
1 parent 03f0304 commit d552bf4

File tree

1 file changed

+45
-44
lines changed

1 file changed

+45
-44
lines changed

locust/web.py

Lines changed: 45 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -257,51 +257,52 @@ def swarm() -> Response:
257257
user_count = None
258258
spawn_rate = None
259259
for key, value in request.form.items():
260-
if key == "user_count": # if we just renamed this field to "users" we wouldn't need this
261-
user_count = int(value)
262-
parsed_options_dict["users"] = user_count
263-
elif key == "spawn_rate":
264-
spawn_rate = float(value)
265-
parsed_options_dict[key] = spawn_rate
266-
elif key == "host":
267-
# Replace < > to guard against XSS
268-
environment.host = str(request.form["host"]).replace("<", "").replace(">", "")
269-
parsed_options_dict[key] = environment.host
270-
elif key == "user_classes":
271-
# Set environment.parsed_options.user_classes to the selected user_classes
272-
parsed_options_dict[key] = request.form.getlist("user_classes")
273-
elif key == "run_time":
274-
if not value:
275-
continue
276-
try:
277-
run_time = parse_timespan(value)
278-
parsed_options_dict[key] = run_time
279-
except ValueError:
280-
err_msg = "Valid run_time formats are : 20, 20s, 3m, 2h, 1h20m, 3h30m10s, etc."
281-
logger.error(err_msg)
282-
return jsonify({"success": False, "message": err_msg, "host": environment.host})
283-
elif key == "profile":
284-
environment.profile = str(request.form["profile"]) or None
285-
parsed_options_dict[key] = environment.profile
286-
elif key in parsed_options_dict:
287-
# update the value in environment.parsed_options, but dont change the type.
288-
parsed_options_value = parsed_options_dict[key]
289-
290-
if isinstance(parsed_options_value, bool):
291-
parsed_options_dict[key] = value == "true"
292-
elif parsed_options_value is None:
293-
parsed_options_dict[key] = value
294-
elif isinstance(parsed_options_value, list):
295-
if "," in value:
296-
value_as_list = value.split(",")
260+
match key:
261+
case "user_count": # if we just renamed this field to "users" we wouldn't need this
262+
user_count = int(value)
263+
parsed_options_dict["users"] = user_count
264+
case "spawn_rate":
265+
spawn_rate = float(value)
266+
parsed_options_dict[key] = spawn_rate
267+
case "host":
268+
# Replace < > to guard against XSS
269+
environment.host = str(request.form["host"]).replace("<", "").replace(">", "")
270+
parsed_options_dict[key] = environment.host
271+
case "user_classes":
272+
# Set environment.parsed_options.user_classes to the selected user_classes
273+
parsed_options_dict[key] = request.form.getlist("user_classes")
274+
case "run_time":
275+
if not value:
276+
continue
277+
try:
278+
run_time = parse_timespan(value)
279+
parsed_options_dict[key] = run_time
280+
except ValueError:
281+
err_msg = "Valid run_time formats are : 20, 20s, 3m, 2h, 1h20m, 3h30m10s, etc."
282+
logger.error(err_msg)
283+
return jsonify({"success": False, "message": err_msg, "host": environment.host})
284+
case "profile":
285+
environment.profile = str(request.form["profile"]) or None
286+
parsed_options_dict[key] = environment.profile
287+
case _ if key in parsed_options_dict:
288+
# update the value in environment.parsed_options, but dont change the type.
289+
parsed_options_value = parsed_options_dict[key]
290+
291+
if isinstance(parsed_options_value, bool):
292+
parsed_options_dict[key] = value == "true"
293+
elif parsed_options_value is None:
294+
parsed_options_dict[key] = value
295+
elif isinstance(parsed_options_value, list):
296+
if "," in value:
297+
value_as_list = value.split(",")
298+
else:
299+
value_as_list = request.form.getlist(key)
300+
if all(isinstance(x, int) for x in parsed_options_value):
301+
parsed_options_dict[key] = list(map(int, value_as_list))
302+
else:
303+
parsed_options_dict[key] = value_as_list
297304
else:
298-
value_as_list = request.form.getlist(key)
299-
if all(isinstance(x, int) for x in parsed_options_value):
300-
parsed_options_dict[key] = list(map(int, value_as_list))
301-
else:
302-
parsed_options_dict[key] = value_as_list
303-
else:
304-
parsed_options_dict[key] = type(parsed_options_value)(value)
305+
parsed_options_dict[key] = type(parsed_options_value)(value)
305306

306307
if environment.shape_class and environment.runner is not None:
307308
environment.runner.start_shape()

0 commit comments

Comments
 (0)