fix: show unsaved F95 covers and clarify import results
This commit is contained in:
1 parent
ad622389bd
commit
785233f763
7 files changed
+152
-23
No files matched your search
@@ -1,3 +1,4 @@
|
||||
import base64
|
||||
from urllib.parse import quote
|
||||
|
||||
from fastapi import APIRouter, HTTPException, status
|
||||
@@ -6,6 +7,7 @@ from pydantic import BaseModel, SecretStr
|
||||
from starlette.concurrency import run_in_threadpool
|
||||
|
||||
from app import f95
|
||||
from app.blobs import read_bytes
|
||||
from app.deps import DB, CurrentUser, has_perm
|
||||
from app.f95_session import open_session, seal
|
||||
from app.routers.games import make_cover
|
||||
@@ -31,6 +33,7 @@ class MetaOut(BaseModel):
|
||||
description: str = ""
|
||||
tags: list[str] = []
|
||||
cover_hash: str | None = None
|
||||
cover_preview: str | None = None
|
||||
cover_warning: str | None = None
|
||||
auth_required: bool = False
|
||||
metadata_available: bool = True
|
||||
@@ -47,6 +50,9 @@ def load_metadata(url: str, cookie: str = "", user_agent: str = "") -> dict:
|
||||
if image := metadata.pop("image_url", None):
|
||||
try:
|
||||
metadata["cover_hash"] = make_cover(f95.fetch_image(image, metadata["url"], cookie, user_agent))
|
||||
# Unsaved covers cannot be read through the protected /blobs route yet.
|
||||
metadata["cover_preview"] = "data:image/webp;base64," + base64.b64encode(
|
||||
read_bytes(metadata["cover_hash"])).decode("ascii")
|
||||
except f95.F95AuthError as e:
|
||||
metadata["auth_required"] = True
|
||||
metadata["cover_warning"] = f"{e}. Остальные данные загружены."
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import asyncio
|
||||
import base64
|
||||
import io
|
||||
import urllib.error
|
||||
from email.message import Message
|
||||
@@ -123,6 +124,9 @@ def test_import_stores_local_webp_and_keeps_metadata_on_image_failure(tmp_path,
|
||||
assert cover.format == "WEBP"
|
||||
assert cover.size == (640, 427)
|
||||
assert "image_url" not in result
|
||||
prefix, encoded = result["cover_preview"].split(",", 1)
|
||||
assert prefix == "data:image/webp;base64"
|
||||
assert base64.b64decode(encoded) == blob_path(result["cover_hash"]).read_bytes()
|
||||
assert metadata.MetaOut(**result).cover_hash == result["cover_hash"]
|
||||
monkeypatch.setattr(f95, "fetch_image", lambda *_: b"not an image")
|
||||
failed = metadata.load_metadata(THREAD)
|
||||
|
||||
Reference in new issue
Block a user