diff --git a/sagemaker-core/src/sagemaker/core/utils/utils.py b/sagemaker-core/src/sagemaker/core/utils/utils.py index 8a8d90be6e..75a77cfa78 100644 --- a/sagemaker-core/src/sagemaker/core/utils/utils.py +++ b/sagemaker-core/src/sagemaker/core/utils/utils.py @@ -273,7 +273,8 @@ def pascal_to_snake(pascal_str): def is_not_primitive(obj): - return not isinstance(obj, (int, float, str, bool, datetime.datetime)) + return not isinstance(obj, (int, float, str, bool, bytes, datetime.datetime)) + def is_not_str_dict(obj): @@ -285,7 +286,8 @@ def is_primitive_list(obj): def is_primitive_class(cls): - return cls in (str, int, bool, float, datetime.datetime) + return cls in (str, int, bool, float, bytes, datetime.datetime) + class Unassigned: diff --git a/sagemaker-core/tests/unit/generated/test_utils.py b/sagemaker-core/tests/unit/generated/test_utils.py index 44856d17d5..e9454c64af 100644 --- a/sagemaker-core/tests/unit/generated/test_utils.py +++ b/sagemaker-core/tests/unit/generated/test_utils.py @@ -373,6 +373,31 @@ def test_serialize_method_nested_shape(): } + +def test_serialize_with_bytes_value_returns_bytes(): + result = serialize({"body": b"1"}) + assert result == {"body": b"1"} + + +def test_serialize_with_empty_bytes_returns_empty_dict(): + # Empty bytes is falsy, so the walrus operator in _serialize_dict skips it + result = serialize({"body": b""}) + assert result == {} + + +def test_serialize_with_bytes_in_list(): + result = serialize([b"hello", b"world"]) + assert result == [b"hello", b"world"] + + +def test_is_not_primitive_with_bytes_returns_false(): + assert is_not_primitive(b"test") is False + + +def test_is_primitive_class_with_bytes_returns_true(): + assert is_primitive_class(bytes) is True + + class TestUnassignedBehavior: """Test Unassigned class methods for proper behavior.