refactor: centralize progress reporters, default user-agent, improve error propagation and aria2 fetch usage
This commit is contained in:
@@ -41,3 +41,24 @@ def report_progress(
|
||||
progress_callback(payload)
|
||||
except Exception as e:
|
||||
log.debug(f"{error_context} failed: {e}")
|
||||
|
||||
|
||||
def get_progress_reporter(error_context: str) -> Callable[[Optional[Callable[[Dict[str, Any]], None]], str, str, Optional[float]], None]:
|
||||
"""Return a closure for reporting progress with a pre-configured error context."""
|
||||
def reporter(
|
||||
progress_callback: Optional[Callable[[Dict[str, Any]], None]],
|
||||
stage: str,
|
||||
message: str,
|
||||
percent: Optional[float] = None,
|
||||
**extra: Any,
|
||||
) -> None:
|
||||
report_progress(
|
||||
progress_callback,
|
||||
stage,
|
||||
message,
|
||||
percent,
|
||||
error_context=error_context,
|
||||
**extra,
|
||||
)
|
||||
return reporter
|
||||
|
||||
|
||||
@@ -29,8 +29,9 @@ from ..type_utils import (
|
||||
select_primary_model_file,
|
||||
parse_size_to_bytes,
|
||||
get_version_sort_key,
|
||||
DEFAULT_BROWSER_USER_AGENT,
|
||||
)
|
||||
from ..progress import report_progress
|
||||
from ..progress import report_progress, get_progress_reporter
|
||||
from ..log_system.log_funcs import create_module_logger
|
||||
log = create_module_logger(__name__)
|
||||
|
||||
@@ -57,11 +58,7 @@ _download_size_cache: Dict[str, Optional[int]] = {}
|
||||
|
||||
REQUEST_HEADERS = {
|
||||
"accept": "application/json,text/html;q=0.9,*/*;q=0.8",
|
||||
"user-agent": (
|
||||
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
|
||||
"AppleWebKit/537.36 (KHTML, like Gecko) "
|
||||
"Chrome/147.0.0.0 Safari/537.36"
|
||||
),
|
||||
"user-agent": DEFAULT_BROWSER_USER_AGENT,
|
||||
}
|
||||
|
||||
# Imported CIVARCHIVE_API_TYPE_MAP
|
||||
@@ -77,21 +74,7 @@ def clear_search_cache():
|
||||
_download_size_cache.clear()
|
||||
|
||||
|
||||
def _report_progress(
|
||||
progress_callback: Optional[Callable[[Dict[str, Any]], None]],
|
||||
stage: str,
|
||||
message: str,
|
||||
percent: Optional[float] = None,
|
||||
**extra: Any,
|
||||
) -> None:
|
||||
report_progress(
|
||||
progress_callback,
|
||||
stage,
|
||||
message,
|
||||
percent,
|
||||
error_context="CivArchive progress callback",
|
||||
**extra,
|
||||
)
|
||||
_report_progress = get_progress_reporter("CivArchive progress callback")
|
||||
|
||||
|
||||
def is_civarchive_available() -> bool:
|
||||
|
||||
+6
-31
@@ -27,8 +27,9 @@ from ..type_utils import (
|
||||
parse_size_to_bytes,
|
||||
get_version_sort_key,
|
||||
check_credential_http,
|
||||
DEFAULT_BROWSER_USER_AGENT,
|
||||
)
|
||||
from ..progress import report_progress
|
||||
from ..progress import report_progress, get_progress_reporter
|
||||
from ..path_utils import calculate_file_sha256
|
||||
from ..log_system.log_funcs import create_module_logger
|
||||
log = create_module_logger(__name__)
|
||||
@@ -57,21 +58,7 @@ def clear_search_cache():
|
||||
_hash_cache.clear()
|
||||
|
||||
|
||||
def _report_progress(
|
||||
progress_callback: Optional[Callable[[Dict[str, Any]], None]],
|
||||
stage: str,
|
||||
message: str,
|
||||
percent: Optional[float] = None,
|
||||
**extra: Any,
|
||||
) -> None:
|
||||
report_progress(
|
||||
progress_callback,
|
||||
stage,
|
||||
message,
|
||||
percent,
|
||||
error_context="CivitAI progress callback",
|
||||
**extra,
|
||||
)
|
||||
_report_progress = get_progress_reporter("CivitAI progress callback")
|
||||
|
||||
|
||||
def check_civitai_session_token(session_token: Optional[str]) -> Dict[str, Any]:
|
||||
@@ -88,11 +75,7 @@ def check_civitai_session_token(session_token: Optional[str]) -> Dict[str, Any]:
|
||||
headers = {
|
||||
"accept": "application/json",
|
||||
"Cookie": f"__Secure-civitai-token={token}",
|
||||
"user-agent": (
|
||||
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
|
||||
"AppleWebKit/537.36 (KHTML, like Gecko) "
|
||||
"Chrome/147.0.0.0 Safari/537.36"
|
||||
),
|
||||
"user-agent": DEFAULT_BROWSER_USER_AGENT,
|
||||
}
|
||||
|
||||
def get_user(data):
|
||||
@@ -121,11 +104,7 @@ def check_civitai_api_key(api_key: Optional[str]) -> Dict[str, Any]:
|
||||
headers = {
|
||||
"accept": "application/json",
|
||||
"Authorization": f"Bearer {key}",
|
||||
"user-agent": (
|
||||
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
|
||||
"AppleWebKit/537.36 (KHTML, like Gecko) "
|
||||
"Chrome/147.0.0.0 Safari/537.36"
|
||||
),
|
||||
"user-agent": DEFAULT_BROWSER_USER_AGENT,
|
||||
}
|
||||
|
||||
def get_user(data):
|
||||
@@ -419,11 +398,7 @@ def _search_civitai_trpc_candidates(
|
||||
"accept": "application/json",
|
||||
"content-type": "application/json",
|
||||
"referer": f"https://civitai.red/models?query={quote(filename)}",
|
||||
"user-agent": (
|
||||
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
|
||||
"AppleWebKit/537.36 (KHTML, like Gecko) "
|
||||
"Chrome/147.0.0.0 Safari/537.36"
|
||||
),
|
||||
"user-agent": DEFAULT_BROWSER_USER_AGENT,
|
||||
"x-client": "web",
|
||||
"x-client-version": "5.0.1657",
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ import requests
|
||||
from typing import Dict, Any, Optional, List, Callable
|
||||
from urllib.parse import urlparse, quote
|
||||
|
||||
from ..progress import report_progress
|
||||
from ..progress import report_progress, get_progress_reporter
|
||||
from ..log_system.log_funcs import create_module_logger
|
||||
log = create_module_logger(__name__)
|
||||
|
||||
@@ -46,21 +46,7 @@ def clear_search_cache():
|
||||
_author_index_cache.clear()
|
||||
|
||||
|
||||
def _report_progress(
|
||||
progress_callback: Optional[Callable[[Dict[str, Any]], None]],
|
||||
stage: str,
|
||||
message: str,
|
||||
percent: Optional[float] = None,
|
||||
**extra: Any,
|
||||
) -> None:
|
||||
report_progress(
|
||||
progress_callback,
|
||||
stage,
|
||||
message,
|
||||
percent,
|
||||
error_context="HuggingFace progress callback",
|
||||
**extra,
|
||||
)
|
||||
_report_progress = get_progress_reporter("HuggingFace progress callback")
|
||||
|
||||
|
||||
def check_huggingface_token(token: Optional[str]) -> Dict[str, Any]:
|
||||
|
||||
@@ -19,7 +19,7 @@ from ..matcher import (
|
||||
calculate_candidate_rank,
|
||||
)
|
||||
from ..type_utils import select_primary_model_file
|
||||
from ..progress import report_progress
|
||||
from ..progress import report_progress, get_progress_reporter
|
||||
from ..log_system.log_funcs import create_module_logger
|
||||
log = create_module_logger(__name__)
|
||||
|
||||
@@ -54,21 +54,7 @@ def clear_search_cache():
|
||||
_db_path_cache = None
|
||||
|
||||
|
||||
def _report_progress(
|
||||
progress_callback: Optional[Callable[[Dict[str, Any]], None]],
|
||||
stage: str,
|
||||
message: str,
|
||||
percent: Optional[float] = None,
|
||||
**extra: Any,
|
||||
) -> None:
|
||||
report_progress(
|
||||
progress_callback,
|
||||
stage,
|
||||
message,
|
||||
percent,
|
||||
error_context="LoRA Manager archive progress callback",
|
||||
**extra,
|
||||
)
|
||||
_report_progress = get_progress_reporter("LoRA Manager archive progress callback")
|
||||
|
||||
|
||||
def get_lora_manager_archive_db_path() -> Optional[str]:
|
||||
|
||||
@@ -449,6 +449,14 @@ def format_size_bytes(bytes_value: Any, include_space: bool = True) -> Optional[
|
||||
return f"{val:.1f}{space}{sizes[i]}"
|
||||
|
||||
|
||||
DEFAULT_BROWSER_USER_AGENT = (
|
||||
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
|
||||
"AppleWebKit/537.36 (KHTML, like Gecko) "
|
||||
"Chrome/147.0.0.0 Safari/537.36"
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -249,7 +249,9 @@ export class ResolverManagerDialog extends ComfyDialog {
|
||||
errorMsg = errData.error;
|
||||
}
|
||||
} catch (_) {}
|
||||
throw new Error(errorMsg);
|
||||
const error = new Error(errorMsg);
|
||||
error.status = response.status;
|
||||
throw error;
|
||||
}
|
||||
if (response.status === 204) {
|
||||
return null;
|
||||
|
||||
@@ -1081,22 +1081,11 @@ export const optionsMethods = {
|
||||
};
|
||||
|
||||
const requestAria2Control = async (endpoint, { method = 'POST', body = {} } = {}) => {
|
||||
const response = await api.fetchApi(endpoint, {
|
||||
return this.fetchJson(endpoint, {
|
||||
method,
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
...(method === 'POST' ? { body: JSON.stringify(body) } : {})
|
||||
});
|
||||
if (!response.ok) {
|
||||
let errorMsg = `Server returned ${response.status}: ${response.statusText}`;
|
||||
try {
|
||||
const errData = await response.json();
|
||||
if (errData?.error) errorMsg = errData.error;
|
||||
} catch (_) { }
|
||||
const error = new Error(errorMsg);
|
||||
error.status = response.status;
|
||||
throw error;
|
||||
}
|
||||
return response.json();
|
||||
...(method === 'POST' ? { body: JSON.stringify(body) } : {}),
|
||||
silent: true
|
||||
}, 'Aria2 Control');
|
||||
};
|
||||
|
||||
const startAria2 = async () => {
|
||||
|
||||
Reference in New Issue
Block a user