outo-models-cli 0.2.1__tar.gz → 0.2.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/PKG-INFO +1 -1
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/pyproject.toml +1 -1
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/src/outo_models_cli/api/lfs_upload.py +12 -2
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/tests/test_lfs_upload.py +35 -0
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/uv.lock +1 -1
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/.gitignore +0 -0
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/LICENSE +0 -0
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/README.md +0 -0
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/src/outo_models_cli/__init__.py +0 -0
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/src/outo_models_cli/__main__.py +0 -0
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/src/outo_models_cli/api/__init__.py +0 -0
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/src/outo_models_cli/api/auth.py +0 -0
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/src/outo_models_cli/api/lfs.py +0 -0
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/src/outo_models_cli/api/lfs_batch.py +0 -0
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/src/outo_models_cli/api/repos.py +0 -0
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/src/outo_models_cli/api/upload.py +0 -0
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/src/outo_models_cli/commands/__init__.py +0 -0
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/src/outo_models_cli/commands/_shared.py +0 -0
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/src/outo_models_cli/commands/_upload_commit.py +0 -0
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/src/outo_models_cli/commands/auth.py +0 -0
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/src/outo_models_cli/commands/download.py +0 -0
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/src/outo_models_cli/commands/ls.py +0 -0
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/src/outo_models_cli/commands/repo.py +0 -0
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/src/outo_models_cli/commands/upload.py +0 -0
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/src/outo_models_cli/config.py +0 -0
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/src/outo_models_cli/downloader/__init__.py +0 -0
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/src/outo_models_cli/downloader/transfer.py +0 -0
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/src/outo_models_cli/downloader/walk.py +0 -0
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/src/outo_models_cli/errors.py +0 -0
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/src/outo_models_cli/http.py +0 -0
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/src/outo_models_cli/main.py +0 -0
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/src/outo_models_cli/matchers.py +0 -0
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/tests/conftest.py +0 -0
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/tests/test_api_crud.py +0 -0
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/tests/test_api_upload.py +0 -0
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/tests/test_cli_auth.py +0 -0
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/tests/test_cli_errors.py +0 -0
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/tests/test_cli_help.py +0 -0
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/tests/test_cli_repo.py +0 -0
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/tests/test_cli_upload_lfs.py +0 -0
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/tests/test_cli_xfer.py +0 -0
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/tests/test_config.py +0 -0
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/tests/test_download_lfs.py +0 -0
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/tests/test_download_repo.py +0 -0
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/tests/test_download_transfer.py +0 -0
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/tests/test_download_walk.py +0 -0
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/tests/test_errors.py +0 -0
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/tests/test_lfs.py +0 -0
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/tests/test_matchers.py +0 -0
- {outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/tests/test_upload_commit.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: outo-models-cli
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.2
|
|
4
4
|
Summary: Command-line client for self-hosted outo-models servers — auth, repo, download, and upload.
|
|
5
5
|
Project-URL: Homepage, https://github.com/outo-models/outo-models
|
|
6
6
|
Project-URL: Documentation, https://github.com/outo-models/outo-models/blob/main/omc/README.md
|
|
@@ -84,7 +84,8 @@ def _put_stream(
|
|
|
84
84
|
chunk = fp.read(PUT_CHUNK_BYTES)
|
|
85
85
|
if not chunk:
|
|
86
86
|
break
|
|
87
|
-
progress
|
|
87
|
+
if progress is not None and task_id is not None:
|
|
88
|
+
progress.update(task_id, advance=len(chunk))
|
|
88
89
|
yield chunk
|
|
89
90
|
|
|
90
91
|
response = client.put(url, content=_chunk_iter(), headers=headers)
|
|
@@ -96,8 +97,17 @@ def _put_stream(
|
|
|
96
97
|
"Check that the configured PAT matches the account owner.",
|
|
97
98
|
)
|
|
98
99
|
if response.status_code == 413:
|
|
100
|
+
# Prefer the server's reason: it names the configured limit and the
|
|
101
|
+
# env var that raises it (field failure: the generic line gave the
|
|
102
|
+
# operator nothing actionable).
|
|
103
|
+
detail = ""
|
|
104
|
+
try:
|
|
105
|
+
detail = str(response.json().get("error", ""))
|
|
106
|
+
except ValueError:
|
|
107
|
+
detail = response.text[:200]
|
|
108
|
+
suffix = f" ({detail})" if detail else ""
|
|
99
109
|
raise FileTooLargeError(
|
|
100
|
-
f"
|
|
110
|
+
f"{path.name} was rejected by the server as too large.{suffix}",
|
|
101
111
|
)
|
|
102
112
|
if response.status_code >= 400:
|
|
103
113
|
raise map_response_error(response)
|
|
@@ -64,3 +64,38 @@ class TestPartitionHashingProgress:
|
|
|
64
64
|
partition = partition_files([big, small], cap_bytes=512, show_progress=True)
|
|
65
65
|
assert [f.name for f in partition.small] == ["small.txt"]
|
|
66
66
|
assert partition.large and partition.large[0].path.name == "big.bin"
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
class Test413SurfacesServerReason:
|
|
70
|
+
def test_put_413_includes_server_detail(self, tmp_path):
|
|
71
|
+
import httpx
|
|
72
|
+
import pytest
|
|
73
|
+
|
|
74
|
+
from outo_models_cli.api.lfs_upload import _put_stream
|
|
75
|
+
from outo_models_cli.errors import FileTooLargeError
|
|
76
|
+
|
|
77
|
+
big = tmp_path / "shard-00001.safetensors"
|
|
78
|
+
big.write_bytes(b"z" * 32)
|
|
79
|
+
transport = httpx.MockTransport(
|
|
80
|
+
lambda req: httpx.Response(
|
|
81
|
+
413,
|
|
82
|
+
json={
|
|
83
|
+
"error": (
|
|
84
|
+
"object exceeds per-object limit 107374182400 bytes "
|
|
85
|
+
"(raise OUTO_LFS_MAX_OBJECT_BYTES ...)"
|
|
86
|
+
)
|
|
87
|
+
},
|
|
88
|
+
)
|
|
89
|
+
)
|
|
90
|
+
client = httpx.Client(transport=transport)
|
|
91
|
+
with pytest.raises(FileTooLargeError) as excinfo:
|
|
92
|
+
_put_stream(
|
|
93
|
+
client,
|
|
94
|
+
url="http://srv/put",
|
|
95
|
+
path=big,
|
|
96
|
+
extra_headers={},
|
|
97
|
+
progress=None,
|
|
98
|
+
task_id=None,
|
|
99
|
+
)
|
|
100
|
+
assert "shard-00001.safetensors" in str(excinfo.value)
|
|
101
|
+
assert "OUTO_LFS_MAX_OBJECT_BYTES" in str(excinfo.value)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{outo_models_cli-0.2.1 → outo_models_cli-0.2.2}/src/outo_models_cli/commands/_upload_commit.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|