diff --git a/src/_bentoml_sdk/validators.py b/src/_bentoml_sdk/validators.py index 3231d7ab8a5..76aa33ca2e0 100644 --- a/src/_bentoml_sdk/validators.py +++ b/src/_bentoml_sdk/validators.py @@ -128,12 +128,12 @@ def decode(self, obj: bytes | t.BinaryIO | UploadFile | PurePath | str) -> t.Any media_type: str | None = None + if isinstance(obj, PurePath): + return Path(obj) if isinstance(obj, str): body = obj.encode("utf-8") filename = None - if isinstance(obj, PurePath): - return Path(obj) - if isinstance(obj, UploadFile): + elif isinstance(obj, UploadFile): body = obj.file.read() filename = obj.filename media_type = obj.content_type diff --git a/tests/unit/_bentoml_sdk/test_validators.py b/tests/unit/_bentoml_sdk/test_validators.py index 65a9a7ae2e2..8cb43a09b85 100644 --- a/tests/unit/_bentoml_sdk/test_validators.py +++ b/tests/unit/_bentoml_sdk/test_validators.py @@ -25,3 +25,16 @@ def test_file_schema_decode_with_path_separator_in_filename(tmp_path: Path): assert result.exists() assert result.read_bytes() == file_content assert result.suffix == ".pdf" + + +def test_file_schema_decode_with_string_payload(tmp_path: Path): + file_content = "test content" + + with patch( + "bentoml._internal.context.request_temp_dir", return_value=str(tmp_path) + ): + result = FileSchema().decode(file_content) + + assert isinstance(result, Path) + assert result.exists() + assert result.read_text() == file_content