fix: normalize tuhui asset urls
This commit is contained in:
@@ -10,6 +10,7 @@ import mimetypes
|
|||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Iterator, Optional
|
from typing import Iterator, Optional
|
||||||
|
from urllib.parse import urlparse
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
@@ -89,6 +90,36 @@ class TuhuiUploadService:
|
|||||||
def _build_work_url(work_id: int) -> str:
|
def _build_work_url(work_id: int) -> str:
|
||||||
return f"{TUHUI_WEB_BASE_URL}/detail/{int(work_id)}"
|
return f"{TUHUI_WEB_BASE_URL}/detail/{int(work_id)}"
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _normalize_asset_url(raw_url: str) -> str:
|
||||||
|
url = str(raw_url or "").strip()
|
||||||
|
if not url:
|
||||||
|
return ""
|
||||||
|
if url.startswith("/"):
|
||||||
|
return f"{TUHUI_WEB_BASE_URL}{url}"
|
||||||
|
|
||||||
|
parsed = urlparse(url)
|
||||||
|
if not parsed.scheme or not parsed.netloc:
|
||||||
|
return url
|
||||||
|
|
||||||
|
host = (parsed.netloc or "").lower()
|
||||||
|
if host in {
|
||||||
|
"tuhui.cloud",
|
||||||
|
"www.tuhui.cloud",
|
||||||
|
"aidg168.uk",
|
||||||
|
"www.aidg168.uk",
|
||||||
|
"156.226.181.204:8002",
|
||||||
|
"1.12.50.92:8002",
|
||||||
|
"127.0.0.1:8002",
|
||||||
|
}:
|
||||||
|
path = parsed.path or ""
|
||||||
|
if parsed.query:
|
||||||
|
path = f"{path}?{parsed.query}"
|
||||||
|
if parsed.fragment:
|
||||||
|
path = f"{path}#{parsed.fragment}"
|
||||||
|
return f"{TUHUI_WEB_BASE_URL}{path}"
|
||||||
|
return url
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _guess_file_meta(image_path: str) -> tuple[str, str]:
|
def _guess_file_meta(image_path: str) -> tuple[str, str]:
|
||||||
path = Path(image_path)
|
path = Path(image_path)
|
||||||
@@ -214,11 +245,13 @@ class TuhuiUploadService:
|
|||||||
)
|
)
|
||||||
|
|
||||||
work_id = int(payload.get("work_id") or payload.get("work", {}).get("id") or 0)
|
work_id = int(payload.get("work_id") or payload.get("work", {}).get("id") or 0)
|
||||||
image_url = str(payload.get("image_url") or payload.get("work", {}).get("original_image") or "")
|
image_url = self._normalize_asset_url(
|
||||||
thumbnail_url = str(
|
payload.get("image_url") or payload.get("work", {}).get("original_image") or ""
|
||||||
|
)
|
||||||
|
thumbnail_url = self._normalize_asset_url(
|
||||||
payload.get("thumbnail_url") or payload.get("work", {}).get("thumbnail_image") or ""
|
payload.get("thumbnail_url") or payload.get("work", {}).get("thumbnail_image") or ""
|
||||||
)
|
)
|
||||||
watermarked_url = str(
|
watermarked_url = self._normalize_asset_url(
|
||||||
payload.get("watermarked_url") or payload.get("work", {}).get("watermarked_image") or ""
|
payload.get("watermarked_url") or payload.get("work", {}).get("watermarked_image") or ""
|
||||||
)
|
)
|
||||||
download_url = self._build_work_url(work_id) if work_id else ""
|
download_url = self._build_work_url(work_id) if work_id else ""
|
||||||
|
|||||||
Reference in New Issue
Block a user