Skip to content

Commit 91603f5

Browse files
authored
Better json handling (#707)
* Better json handling. * Backend changes.
1 parent 4df3399 commit 91603f5

File tree

4 files changed

+19
-11
lines changed

4 files changed

+19
-11
lines changed

pyproject.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "truss"
3-
version = "0.7.13"
3+
version = "0.7.14rc2"
44
description = "A seamless bridge from model development to model delivery"
55
license = "MIT"
66
readme = "README.md"

truss/cli/cli.py

+11-8
Original file line numberDiff line numberDiff line change
@@ -258,14 +258,17 @@ def _extract_and_validate_model_identifier(
258258

259259

260260
def _extract_request_data(data: Optional[str], file: Optional[Path]):
261-
if data is not None:
262-
return json.loads(data)
263-
elif file is not None:
264-
return json.loads(Path(file).read_text())
265-
else:
266-
raise click.UsageError(
267-
"You must provide exactly one of '--data (-d)' or '--file (-f)' options."
268-
)
261+
try:
262+
if data is not None:
263+
return json.loads(data)
264+
if file is not None:
265+
return json.loads(Path(file).read_text())
266+
except json.JSONDecodeError:
267+
raise click.UsageError("Request data must be valid json.")
268+
269+
raise click.UsageError(
270+
"You must provide exactly one of '--data (-d)' or '--file (-f)' options."
271+
)
269272

270273

271274
@truss_cli.command()

truss/remote/truss_remote.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ def _send_request(
5959
if method == "GET":
6060
response = requests.request(method, url, headers=headers, stream=stream)
6161
elif method == "POST":
62-
if not data:
62+
if data is None:
6363
raise ValueError("POST request must have data")
6464
response = requests.request(
6565
method, url, json=data, headers=headers, stream=stream

truss/templates/server/common/truss_server.py

+6-1
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,12 @@ async def predict(
132132
if self.is_binary(request):
133133
body = truss_msgpack_deserialize(body_raw)
134134
else:
135-
body = json.loads(body_raw)
135+
try:
136+
body = json.loads(body_raw)
137+
except json.JSONDecodeError as e:
138+
raise HTTPException(
139+
status_code=400, detail=f"Invalid JSON payload: {str(e)}"
140+
)
136141

137142
# calls ModelWrapper.__call__, which runs validate, preprocess, predict, and postprocess
138143
response: Union[Dict, Generator] = await model(

0 commit comments

Comments
 (0)