From 84c82fb6224186611fe941e97b0651decfadc311 Mon Sep 17 00:00:00 2001 From: Mark Smith Date: Mon, 5 Oct 2026 16:17:43 +0200 Subject: [PATCH 1/4] Fix rate limiting groups with zero int group_id --- aikido_zen/middleware/set_rate_limit_group.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aikido_zen/middleware/set_rate_limit_group.py b/aikido_zen/middleware/set_rate_limit_group.py index 09f8f9c76..7a0ab61ed 100644 --- a/aikido_zen/middleware/set_rate_limit_group.py +++ b/aikido_zen/middleware/set_rate_limit_group.py @@ -5,7 +5,7 @@ def set_rate_limit_group(group_id: Union[str, int]): - if not group_id: + if group_id == None or group_id == "": logger.warning("Group ID cannot be empty.") return From 84aa3cc135af60c9c1d1a2519f5906604e398ef0 Mon Sep 17 00:00:00 2001 From: Mark Smith Date: Mon, 5 Oct 2026 16:57:16 +0200 Subject: [PATCH 2/4] Add tests --- .../middleware/set_rate_limit_group_test.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/aikido_zen/middleware/set_rate_limit_group_test.py b/aikido_zen/middleware/set_rate_limit_group_test.py index 019185871..792c7832f 100644 --- a/aikido_zen/middleware/set_rate_limit_group_test.py +++ b/aikido_zen/middleware/set_rate_limit_group_test.py @@ -39,6 +39,7 @@ def test_set_rate_limit_group_none_group_id(caplog): set_rate_limit_group(None) assert context1.rate_limit_group is None assert "Group ID cannot be empty." in caplog.text + assert "must be a string or a number" not in caplog.text def test_set_rate_limit_group_no_context(caplog): @@ -64,6 +65,22 @@ def test_set_rate_limit_group_non_string_group_id(caplog): assert context1.rate_limit_group == "123" +def test_set_rate_limit_group_zero_int_group_id(caplog): + context1 = test_utils.generate_and_set_context() + assert context1.rate_limit_group is None + set_rate_limit_group(0) + assert context1.rate_limit_group == "0" + assert "Group ID cannot be empty." not in caplog.text + + +def test_set_rate_limit_group_zero_string_group_id(caplog): + context1 = test_utils.generate_and_set_context() + assert context1.rate_limit_group is None + set_rate_limit_group("0") + assert context1.rate_limit_group == "0" + assert "Group ID cannot be empty." not in caplog.text + + def test_set_rate_limit_group_non_string_group_id_non_number(caplog): context1 = test_utils.generate_and_set_context() assert context1.rate_limit_group is None From e6452e24b6a22ccee98e401cf07439232926ce3e Mon Sep 17 00:00:00 2001 From: Daniel Iulian Iacob Date: Mon, 5 Oct 2026 19:08:54 +0300 Subject: [PATCH 3/4] Reject bool group ids in set_rate_limit_group --- aikido_zen/middleware/set_rate_limit_group.py | 6 ++++-- .../middleware/set_rate_limit_group_test.py | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/aikido_zen/middleware/set_rate_limit_group.py b/aikido_zen/middleware/set_rate_limit_group.py index 7a0ab61ed..cfda8c6df 100644 --- a/aikido_zen/middleware/set_rate_limit_group.py +++ b/aikido_zen/middleware/set_rate_limit_group.py @@ -5,12 +5,14 @@ def set_rate_limit_group(group_id: Union[str, int]): - if group_id == None or group_id == "": + if group_id is None or group_id == "": logger.warning("Group ID cannot be empty.") return # Check if it's string of number, ensure string. - if not isinstance(group_id, str) and not isinstance(group_id, int): + if isinstance(group_id, bool) or ( + not isinstance(group_id, str) and not isinstance(group_id, int) + ): logger.warning("Group ID must be a string or a number") return group_id = str(group_id) diff --git a/aikido_zen/middleware/set_rate_limit_group_test.py b/aikido_zen/middleware/set_rate_limit_group_test.py index 792c7832f..2de57d246 100644 --- a/aikido_zen/middleware/set_rate_limit_group_test.py +++ b/aikido_zen/middleware/set_rate_limit_group_test.py @@ -81,6 +81,22 @@ def test_set_rate_limit_group_zero_string_group_id(caplog): assert "Group ID cannot be empty." not in caplog.text +def test_set_rate_limit_group_false_group_id(caplog): + context1 = test_utils.generate_and_set_context() + assert context1.rate_limit_group is None + set_rate_limit_group(False) + assert context1.rate_limit_group is None + assert "Group ID must be a string or a number" in caplog.text + + +def test_set_rate_limit_group_true_group_id(caplog): + context1 = test_utils.generate_and_set_context() + assert context1.rate_limit_group is None + set_rate_limit_group(True) + assert context1.rate_limit_group is None + assert "Group ID must be a string or a number" in caplog.text + + def test_set_rate_limit_group_non_string_group_id_non_number(caplog): context1 = test_utils.generate_and_set_context() assert context1.rate_limit_group is None From 5c0951d118cbb6e3a75eb0125b135730ccdf937e Mon Sep 17 00:00:00 2001 From: Daniel Iulian Iacob Date: Tue, 6 Oct 2026 11:36:52 +0300 Subject: [PATCH 4/4] Simplified if condition --- aikido_zen/middleware/set_rate_limit_group.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/aikido_zen/middleware/set_rate_limit_group.py b/aikido_zen/middleware/set_rate_limit_group.py index cfda8c6df..7fa30ac76 100644 --- a/aikido_zen/middleware/set_rate_limit_group.py +++ b/aikido_zen/middleware/set_rate_limit_group.py @@ -10,9 +10,7 @@ def set_rate_limit_group(group_id: Union[str, int]): return # Check if it's string of number, ensure string. - if isinstance(group_id, bool) or ( - not isinstance(group_id, str) and not isinstance(group_id, int) - ): + if isinstance(group_id, bool) or not isinstance(group_id, (str, int)): logger.warning("Group ID must be a string or a number") return group_id = str(group_id)