mirror of
https://github.com/comfyanonymous/ComfyUI.git
synced 2025-12-18 18:43:05 +08:00
removed non-needed code, fix tests, +1 new test
This commit is contained in:
parent
964de8a8ad
commit
a9096f6c97
@ -66,19 +66,13 @@ async def list_assets(request: web.Request) -> web.Response:
|
|||||||
|
|
||||||
@ROUTES.get(f"/api/assets/{{id:{UUID_RE}}}/content")
|
@ROUTES.get(f"/api/assets/{{id:{UUID_RE}}}/content")
|
||||||
async def download_asset_content(request: web.Request) -> web.Response:
|
async def download_asset_content(request: web.Request) -> web.Response:
|
||||||
asset_info_id_raw = request.match_info.get("id", "")
|
|
||||||
try:
|
|
||||||
asset_info_id = str(uuid.UUID(asset_info_id_raw))
|
|
||||||
except Exception:
|
|
||||||
return _error_response(400, "INVALID_ID", f"AssetInfo id '{asset_info_id_raw}' is not a valid UUID.")
|
|
||||||
|
|
||||||
disposition = request.query.get("disposition", "attachment").lower().strip()
|
disposition = request.query.get("disposition", "attachment").lower().strip()
|
||||||
if disposition not in {"inline", "attachment"}:
|
if disposition not in {"inline", "attachment"}:
|
||||||
disposition = "attachment"
|
disposition = "attachment"
|
||||||
|
|
||||||
try:
|
try:
|
||||||
abs_path, content_type, filename = await assets_manager.resolve_asset_content_for_download(
|
abs_path, content_type, filename = await assets_manager.resolve_asset_content_for_download(
|
||||||
asset_info_id=asset_info_id,
|
asset_info_id=str(uuid.UUID(request.match_info["id"])),
|
||||||
owner_id=UserManager.get_request_user_id(request),
|
owner_id=UserManager.get_request_user_id(request),
|
||||||
)
|
)
|
||||||
except ValueError as ve:
|
except ValueError as ve:
|
||||||
@ -300,12 +294,7 @@ async def upload_asset(request: web.Request) -> web.Response:
|
|||||||
|
|
||||||
@ROUTES.get(f"/api/assets/{{id:{UUID_RE}}}")
|
@ROUTES.get(f"/api/assets/{{id:{UUID_RE}}}")
|
||||||
async def get_asset(request: web.Request) -> web.Response:
|
async def get_asset(request: web.Request) -> web.Response:
|
||||||
asset_info_id_raw = request.match_info.get("id", "")
|
asset_info_id = str(uuid.UUID(request.match_info["id"]))
|
||||||
try:
|
|
||||||
asset_info_id = str(uuid.UUID(asset_info_id_raw))
|
|
||||||
except Exception:
|
|
||||||
return _error_response(400, "INVALID_ID", f"AssetInfo id '{asset_info_id_raw}' is not a valid UUID.")
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
result = await assets_manager.get_asset(
|
result = await assets_manager.get_asset(
|
||||||
asset_info_id=asset_info_id,
|
asset_info_id=asset_info_id,
|
||||||
@ -320,12 +309,7 @@ async def get_asset(request: web.Request) -> web.Response:
|
|||||||
|
|
||||||
@ROUTES.put(f"/api/assets/{{id:{UUID_RE}}}")
|
@ROUTES.put(f"/api/assets/{{id:{UUID_RE}}}")
|
||||||
async def update_asset(request: web.Request) -> web.Response:
|
async def update_asset(request: web.Request) -> web.Response:
|
||||||
asset_info_id_raw = request.match_info.get("id", "")
|
asset_info_id = str(uuid.UUID(request.match_info["id"]))
|
||||||
try:
|
|
||||||
asset_info_id = str(uuid.UUID(asset_info_id_raw))
|
|
||||||
except Exception:
|
|
||||||
return _error_response(400, "INVALID_ID", f"AssetInfo id '{asset_info_id_raw}' is not a valid UUID.")
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
body = schemas_in.UpdateAssetBody.model_validate(await request.json())
|
body = schemas_in.UpdateAssetBody.model_validate(await request.json())
|
||||||
except ValidationError as ve:
|
except ValidationError as ve:
|
||||||
@ -350,12 +334,7 @@ async def update_asset(request: web.Request) -> web.Response:
|
|||||||
|
|
||||||
@ROUTES.delete(f"/api/assets/{{id:{UUID_RE}}}")
|
@ROUTES.delete(f"/api/assets/{{id:{UUID_RE}}}")
|
||||||
async def delete_asset(request: web.Request) -> web.Response:
|
async def delete_asset(request: web.Request) -> web.Response:
|
||||||
asset_info_id_raw = request.match_info.get("id", "")
|
asset_info_id = str(uuid.UUID(request.match_info["id"]))
|
||||||
try:
|
|
||||||
asset_info_id = str(uuid.UUID(asset_info_id_raw))
|
|
||||||
except Exception:
|
|
||||||
return _error_response(400, "INVALID_ID", f"AssetInfo id '{asset_info_id_raw}' is not a valid UUID.")
|
|
||||||
|
|
||||||
delete_content = request.query.get("delete_content")
|
delete_content = request.query.get("delete_content")
|
||||||
delete_content = True if delete_content is None else delete_content.lower() not in {"0", "false", "no"}
|
delete_content = True if delete_content is None else delete_content.lower() not in {"0", "false", "no"}
|
||||||
|
|
||||||
@ -398,12 +377,7 @@ async def get_tags(request: web.Request) -> web.Response:
|
|||||||
|
|
||||||
@ROUTES.post(f"/api/assets/{{id:{UUID_RE}}}/tags")
|
@ROUTES.post(f"/api/assets/{{id:{UUID_RE}}}/tags")
|
||||||
async def add_asset_tags(request: web.Request) -> web.Response:
|
async def add_asset_tags(request: web.Request) -> web.Response:
|
||||||
asset_info_id_raw = request.match_info.get("id", "")
|
asset_info_id = str(uuid.UUID(request.match_info["id"]))
|
||||||
try:
|
|
||||||
asset_info_id = str(uuid.UUID(asset_info_id_raw))
|
|
||||||
except Exception:
|
|
||||||
return _error_response(400, "INVALID_ID", f"AssetInfo id '{asset_info_id_raw}' is not a valid UUID.")
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
payload = await request.json()
|
payload = await request.json()
|
||||||
data = schemas_in.TagsAdd.model_validate(payload)
|
data = schemas_in.TagsAdd.model_validate(payload)
|
||||||
@ -429,12 +403,7 @@ async def add_asset_tags(request: web.Request) -> web.Response:
|
|||||||
|
|
||||||
@ROUTES.delete(f"/api/assets/{{id:{UUID_RE}}}/tags")
|
@ROUTES.delete(f"/api/assets/{{id:{UUID_RE}}}/tags")
|
||||||
async def delete_asset_tags(request: web.Request) -> web.Response:
|
async def delete_asset_tags(request: web.Request) -> web.Response:
|
||||||
asset_info_id_raw = request.match_info.get("id", "")
|
asset_info_id = str(uuid.UUID(request.match_info["id"]))
|
||||||
try:
|
|
||||||
asset_info_id = str(uuid.UUID(asset_info_id_raw))
|
|
||||||
except Exception:
|
|
||||||
return _error_response(400, "INVALID_ID", f"AssetInfo id '{asset_info_id_raw}' is not a valid UUID.")
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
payload = await request.json()
|
payload = await request.json()
|
||||||
data = schemas_in.TagsRemove.model_validate(payload)
|
data = schemas_in.TagsRemove.model_validate(payload)
|
||||||
|
|||||||
@ -30,16 +30,21 @@ async def test_download_missing_file_returns_404(
|
|||||||
):
|
):
|
||||||
# Remove the underlying file then attempt download.
|
# Remove the underlying file then attempt download.
|
||||||
# We initialize fixture without additional tags to know exactly the asset file path.
|
# We initialize fixture without additional tags to know exactly the asset file path.
|
||||||
aid = seeded_asset["id"]
|
try:
|
||||||
async with http.get(f"{api_base}/api/assets/{aid}") as rg:
|
aid = seeded_asset["id"]
|
||||||
detail = await rg.json()
|
async with http.get(f"{api_base}/api/assets/{aid}") as rg:
|
||||||
assert rg.status == 200
|
detail = await rg.json()
|
||||||
rel_inside_category = detail["name"]
|
assert rg.status == 200
|
||||||
abs_path = comfy_tmp_base_dir / "models" / "checkpoints" / rel_inside_category
|
rel_inside_category = detail["name"]
|
||||||
if abs_path.exists():
|
abs_path = comfy_tmp_base_dir / "models" / "checkpoints" / rel_inside_category
|
||||||
abs_path.unlink()
|
if abs_path.exists():
|
||||||
|
abs_path.unlink()
|
||||||
|
|
||||||
async with http.get(f"{api_base}/api/assets/{aid}/content") as r2:
|
async with http.get(f"{api_base}/api/assets/{aid}/content") as r2:
|
||||||
body = await r2.json()
|
body = await r2.json()
|
||||||
assert r2.status == 404
|
assert r2.status == 404
|
||||||
assert body["error"]["code"] == "FILE_NOT_FOUND"
|
assert body["error"]["code"] == "FILE_NOT_FOUND"
|
||||||
|
finally:
|
||||||
|
# We created asset without the "unit-tests" tag(see `autoclean_unit_test_assets`), we need to clear it manually.
|
||||||
|
async with http.delete(f"{api_base}/api/assets/{aid}") as dr:
|
||||||
|
await dr.read()
|
||||||
|
|||||||
23
tests-assets/test_validation.py
Normal file
23
tests-assets/test_validation.py
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
import aiohttp
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_get_update_download_bad_ids(http: aiohttp.ClientSession, api_base: str):
|
||||||
|
# All endpoints should be not found, as we UUID regex directly in the route definition.
|
||||||
|
bad_id = "not-a-uuid"
|
||||||
|
|
||||||
|
async with http.get(f"{api_base}/api/assets/{bad_id}") as r1:
|
||||||
|
assert r1.status == 404
|
||||||
|
|
||||||
|
async with http.get(f"{api_base}/api/assets/{bad_id}/content") as r3:
|
||||||
|
assert r3.status == 404
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_update_requires_at_least_one_field(http: aiohttp.ClientSession, api_base: str, seeded_asset: dict):
|
||||||
|
aid = seeded_asset["id"]
|
||||||
|
async with http.put(f"{api_base}/api/assets/{aid}", json={}) as r:
|
||||||
|
body = await r.json()
|
||||||
|
assert r.status == 400
|
||||||
|
assert body["error"]["code"] == "INVALID_BODY"
|
||||||
Loading…
Reference in New Issue
Block a user