From c372eaac63fd462f227b8590cfab928f04da98dc Mon Sep 17 00:00:00 2001 From: kwy404 Date: Sat, 26 Sep 2026 19:10:15 -0300 Subject: [PATCH 1/2] fix(scim): keep lists of plain values flat in snake_cased_body _convert_dict_keys appended a copy of the whole list for every element of a list that does not hold dicts, so a value like schemas: ["a", "b"] became [["a", "b"], ["a", "b"]]. Append a copy of each element instead. --- slack_sdk/scim/v1/internal_utils.py | 2 +- tests/slack_sdk/scim/test_internals.py | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/slack_sdk/scim/v1/internal_utils.py b/slack_sdk/scim/v1/internal_utils.py index cbb90dd72..8e658aac6 100644 --- a/slack_sdk/scim/v1/internal_utils.py +++ b/slack_sdk/scim/v1/internal_utils.py @@ -108,7 +108,7 @@ def _convert_dict_keys( ) result_dict[new_key].append(new_element) else: - result_dict[new_key].append(_create_copy(original_value)) + result_dict[new_key].append(_create_copy(element)) else: result_dict[new_key] = _create_copy(original_value) return result_dict diff --git a/tests/slack_sdk/scim/test_internals.py b/tests/slack_sdk/scim/test_internals.py index d0a27b17b..18ccca67e 100644 --- a/tests/slack_sdk/scim/test_internals.py +++ b/tests/slack_sdk/scim/test_internals.py @@ -16,3 +16,7 @@ def test_snake_cased(self): result = _to_snake_cased(json.loads(response_body)) self.assertEqual(result["start_index"], 1) self.assertIsNotNone(result["resources"][0]["id"]) + + def test_snake_cased_list_of_plain_values(self): + result = _to_snake_cased({"schemas": ["urn:scim:schemas:core:1.0", "urn:scim:schemas:extension:enterprise:1.0"]}) + self.assertEqual(result["schemas"], ["urn:scim:schemas:core:1.0", "urn:scim:schemas:extension:enterprise:1.0"]) From 7f59173e82401d5f023507809ff6cefcf58af5ed Mon Sep 17 00:00:00 2001 From: kwy404 Date: Thu, 22 Oct 2026 07:56:09 -0300 Subject: [PATCH 2/2] test(scim): assert the response body keeps schemas flat --- tests/slack_sdk/scim/test_response.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/slack_sdk/scim/test_response.py b/tests/slack_sdk/scim/test_response.py index 781f45ad3..5e6d6cdf0 100644 --- a/tests/slack_sdk/scim/test_response.py +++ b/tests/slack_sdk/scim/test_response.py @@ -74,6 +74,7 @@ def test_snake_cased(self): ) ) user = response.users[0] + self.assertEqual(response.snake_cased_body["schemas"], ["urn:scim:schemas:core:1.0"]) self.assertIsNotNone(user.unknown_fields.get("new_attribute")) # the unknown fields need to be also camel-cased self.assertIsNotNone(user.to_dict().get("newAttribute"))