fix: v0.5.1 — pull_image API (Image/pull_start, not Registry/pull_start)
The 0.5.0 prompt mis-attributed the API: pull_start lives on SYNO.Docker.Image, not SYNO.Docker.Registry (live DSM capture). search and tags ARE correctly on Registry; only pull_start belongs to Image. Registry/pull_start returns "Method does not exist". Parameters are unchanged (repository + tag both JSON-encoded), and the Image/list polling for completion detection is untouched. Tests updated to assert SYNO.Docker.Image/pull_start. CLAUDE.md DSM-quirks section consolidates the Image vs. Registry split so this trap is documented for future surface additions. References #3 (already closed). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -279,7 +279,7 @@ async def test_pull_image_already_present():
|
||||
result = await tools["pull_image"](repository="nginx", tag="1.24", confirmed=True)
|
||||
assert "already present" in result
|
||||
|
||||
# Only the Image/list pre-check was called; pull_start must NOT fire.
|
||||
# Only the Image/list pre-check was called; no pull_start of any kind.
|
||||
calls = client.request.call_args_list
|
||||
assert all(c.args[1] != "pull_start" for c in calls)
|
||||
|
||||
@@ -307,7 +307,7 @@ async def test_pull_image_confirmed_success(monkeypatch):
|
||||
]
|
||||
}
|
||||
return {"images": []}
|
||||
if api == "SYNO.Docker.Registry" and method == "pull_start":
|
||||
if api == "SYNO.Docker.Image" and method == "pull_start":
|
||||
state["pulled"] = True
|
||||
return {}
|
||||
raise AssertionError(f"Unexpected call: {api}/{method}")
|
||||
@@ -322,9 +322,11 @@ async def test_pull_image_confirmed_success(monkeypatch):
|
||||
assert "Pulled" in result
|
||||
assert "nginx:1.24" in result
|
||||
|
||||
# Verify pull_start was invoked with JSON-encoded params
|
||||
# Verify pull_start was invoked on SYNO.Docker.Image (not Registry)
|
||||
# with JSON-encoded params.
|
||||
pull_calls = [c for c in client.request.call_args_list if c.args[1] == "pull_start"]
|
||||
assert len(pull_calls) == 1
|
||||
assert pull_calls[0].args[0] == "SYNO.Docker.Image"
|
||||
params = pull_calls[0].kwargs.get("params", {})
|
||||
assert json.loads(params["repository"]) == "nginx"
|
||||
assert json.loads(params["tag"]) == "1.24"
|
||||
@@ -348,7 +350,7 @@ async def test_pull_image_timeout(monkeypatch):
|
||||
async def mock_request(api, method, **kwargs):
|
||||
if api == "SYNO.Docker.Image" and method == "list":
|
||||
return {"images": []}
|
||||
if api == "SYNO.Docker.Registry" and method == "pull_start":
|
||||
if api == "SYNO.Docker.Image" and method == "pull_start":
|
||||
return {}
|
||||
raise AssertionError(f"Unexpected call: {api}/{method}")
|
||||
|
||||
@@ -371,7 +373,7 @@ async def test_pull_image_start_error():
|
||||
async def mock_request(api, method, **kwargs):
|
||||
if api == "SYNO.Docker.Image" and method == "list":
|
||||
return {"images": []}
|
||||
if api == "SYNO.Docker.Registry" and method == "pull_start":
|
||||
if api == "SYNO.Docker.Image" and method == "pull_start":
|
||||
raise SynologyError("Permission denied", code=105)
|
||||
raise AssertionError(f"Unexpected call: {api}/{method}")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user