refactor(CivArchiveModelMetadataProvider): remove session management and use downloader for HTTP requests

This commit is contained in:
Will Miao
2025-09-13 20:04:41 +08:00
parent e5339c178a
commit 6b606a5cc8

View File

@@ -4,7 +4,8 @@ import aiosqlite
import logging import logging
import aiohttp import aiohttp
from bs4 import BeautifulSoup from bs4 import BeautifulSoup
from typing import Optional, Dict, List, Tuple, Any from typing import Optional, Dict, Tuple
from .downloader import get_downloader
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -60,22 +61,6 @@ class CivitaiModelMetadataProvider(ModelMetadataProvider):
class CivArchiveModelMetadataProvider(ModelMetadataProvider): class CivArchiveModelMetadataProvider(ModelMetadataProvider):
"""Provider that uses CivArchive HTML page parsing for metadata""" """Provider that uses CivArchive HTML page parsing for metadata"""
def __init__(self, session: aiohttp.ClientSession = None):
self.session = session
self._own_session = session is None
async def _get_session(self):
"""Get or create HTTP session"""
if self.session is None:
self.session = aiohttp.ClientSession()
return self.session
async def close(self):
"""Close HTTP session if we own it"""
if self._own_session and self.session:
await self.session.close()
self.session = None
async def get_model_by_hash(self, model_hash: str) -> Optional[Dict]: async def get_model_by_hash(self, model_hash: str) -> Optional[Dict]:
"""Not supported by CivArchive provider""" """Not supported by CivArchive provider"""
return None return None
@@ -92,8 +77,9 @@ class CivArchiveModelMetadataProvider(ModelMetadataProvider):
try: try:
# Construct CivArchive URL # Construct CivArchive URL
url = f"https://civarchive.com/models/{model_id}?modelVersionId={version_id}" url = f"https://civarchive.com/models/{model_id}?modelVersionId={version_id}"
session = await self._get_session() downloader = await get_downloader()
session = await downloader.session
async with session.get(url) as response: async with session.get(url) as response:
if response.status != 200: if response.status != 200:
return None return None