Skip to content

Commit a6f857c

Browse files
authored
Fix upload_code limit message (#2691)
* Fix upload_code limit message * test: add comprehensive test cases for sizeof_fmt function
1 parent 9e86c4e commit a6f857c

File tree

2 files changed

+33
-4
lines changed

2 files changed

+33
-4
lines changed

src/dstack/_internal/server/routers/repos.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
from typing import List, Tuple
22

33
from fastapi import APIRouter, Depends, Request, UploadFile
4-
from humanize import naturalsize
54
from sqlalchemy.ext.asyncio import AsyncSession
65

76
from dstack._internal.core.errors import ResourceNotExistsError, ServerClientError
@@ -20,6 +19,7 @@
2019
get_base_api_additional_responses,
2120
get_request_size,
2221
)
22+
from dstack._internal.utils.common import sizeof_fmt
2323

2424
router = APIRouter(
2525
prefix="/api/project/{project_name}/repos",
@@ -98,10 +98,15 @@ async def upload_code(
9898
):
9999
request_size = get_request_size(request)
100100
if SERVER_CODE_UPLOAD_LIMIT > 0 and request_size > SERVER_CODE_UPLOAD_LIMIT:
101+
diff_size_fmt = sizeof_fmt(request_size)
102+
limit_fmt = sizeof_fmt(SERVER_CODE_UPLOAD_LIMIT)
103+
if diff_size_fmt == limit_fmt:
104+
diff_size_fmt = f"{request_size}B"
105+
limit_fmt = f"{SERVER_CODE_UPLOAD_LIMIT}B"
101106
raise ServerClientError(
102-
f"Repo diff size is {naturalsize(request_size)}, which exceeds the limit of "
103-
f"{naturalsize(SERVER_CODE_UPLOAD_LIMIT)}. Use .gitignore to exclude large files from the repo. This "
104-
f"limit can be modified by setting the DSTACK_SERVER_CODE_UPLOAD_LIMIT environment variable"
107+
f"Repo diff size is {diff_size_fmt}, which exceeds the limit of {limit_fmt}."
108+
" Use .gitignore to exclude large files from the repo."
109+
" This limit can be modified by setting the DSTACK_SERVER_CODE_UPLOAD_LIMIT environment variable."
105110
)
106111
_, project = user_project
107112
await repos.upload_code(

src/tests/_internal/utils/test_common.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
make_proxy_url,
1212
parse_memory,
1313
pretty_date,
14+
sizeof_fmt,
1415
split_chunks,
1516
)
1617

@@ -211,3 +212,26 @@ def test_concat_url_path(a: str, b: str, result: str) -> None:
211212
)
212213
def test_make_proxy_url(server_url, proxy_url, expected_url):
213214
assert make_proxy_url(server_url, proxy_url) == expected_url
215+
216+
217+
class TestSizeofFmt:
218+
@pytest.mark.parametrize(
219+
("num", "suffix", "expected"),
220+
[
221+
(0, "B", "0.0B"),
222+
(1023, "B", "1023.0B"),
223+
(1024, "B", "1.0KiB"),
224+
(1536, "B", "1.5KiB"),
225+
(1048576, "B", "1.0MiB"),
226+
(1073741824, "B", "1.0GiB"),
227+
(1099511627776, "B", "1.0TiB"),
228+
(1125899906842624, "B", "1.0PiB"),
229+
(1152921504606846976, "B", "1.0EiB"),
230+
(1180591620717411303424, "B", "1.0ZiB"),
231+
(1208925819614629174706176, "B", "1.0YiB"),
232+
(2000, "", "2.0Ki"),
233+
(3000000, "Hz", "2.9MiHz"),
234+
],
235+
)
236+
def test_sizeof_fmt(self, num: int, suffix: str, expected: str) -> None:
237+
assert sizeof_fmt(num, suffix) == expected

0 commit comments

Comments
 (0)