refactor: extract metadata sidecar writer
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
"""Metadata normalization and sidecar payload helpers for downloads."""
|
||||
|
||||
import importlib
|
||||
import os
|
||||
import time
|
||||
from typing import Any, Dict, Optional
|
||||
@@ -31,6 +32,47 @@ _as_list = as_list
|
||||
_first_present = first_non_empty
|
||||
|
||||
|
||||
def _downloader_module():
|
||||
"""Return the facade so runtime patches remain effective."""
|
||||
return importlib.import_module("core.downloader")
|
||||
|
||||
|
||||
def write_model_resolver_metadata(
|
||||
dest_path: str,
|
||||
metadata: Optional[Dict[str, Any]] = None,
|
||||
category: str = "",
|
||||
source_url: str = "",
|
||||
create_preview: bool = False,
|
||||
) -> Optional[str]:
|
||||
"""Write metadata only to the sidecar owned by Model Resolver."""
|
||||
facade = _downloader_module()
|
||||
metadata_path = facade.get_model_resolver_sidecar_path(dest_path)
|
||||
|
||||
try:
|
||||
payload = facade.build_model_resolver_metadata(
|
||||
dest_path,
|
||||
metadata,
|
||||
category,
|
||||
source_url,
|
||||
)
|
||||
if create_preview:
|
||||
preview_source = {
|
||||
**payload,
|
||||
**(metadata if isinstance(metadata, dict) else {}),
|
||||
}
|
||||
preview_path = facade.create_model_preview(dest_path, preview_source)
|
||||
if preview_path:
|
||||
payload["preview_url"] = facade._normalise_metadata_file_path(
|
||||
preview_path
|
||||
)
|
||||
facade.write_json_atomic(metadata_path, payload, indent=2)
|
||||
facade.log.info(f"Metadata saved: {metadata_path}")
|
||||
return metadata_path
|
||||
except Exception as e:
|
||||
facade.log.warning(f"Could not save metadata sidecar for {dest_path}: {e}")
|
||||
return None
|
||||
|
||||
|
||||
def _json_safe_metadata(value: Any, depth: int = 0) -> Any:
|
||||
if depth > 10:
|
||||
return str(value)
|
||||
|
||||
+7
-34
@@ -126,7 +126,7 @@ from .download.previews import (
|
||||
_rewrite_civitai_preview_url, # noqa: F401
|
||||
_save_optimized_jpeg, # noqa: F401
|
||||
_save_preview_video, # noqa: F401
|
||||
create_model_preview,
|
||||
create_model_preview, # noqa: F401
|
||||
get_existing_model_preview_path, # noqa: F401
|
||||
)
|
||||
from .network_utils import (
|
||||
@@ -138,10 +138,10 @@ from .path_utils import (
|
||||
calculate_file_sha256, # noqa: F401
|
||||
get_comfy_root_path,
|
||||
get_filename_from_path,
|
||||
get_model_resolver_sidecar_path,
|
||||
get_model_resolver_sidecar_path, # noqa: F401
|
||||
get_path_identity,
|
||||
is_path_within,
|
||||
write_json_atomic,
|
||||
write_json_atomic, # noqa: F401
|
||||
)
|
||||
from .resolver import invalidate_local_hash_match_cache # noqa: F401
|
||||
from .scanner import invalidate_model_files_cache # noqa: F401
|
||||
@@ -189,17 +189,18 @@ HF_XET_ARIA2_AUTH_HOSTS = {
|
||||
"cas-bridge-direct.xethub-eu.hf.co",
|
||||
}
|
||||
|
||||
from .download.metadata import (
|
||||
from .download.metadata import ( # noqa: I001
|
||||
_coerce_int_or_value, # noqa: F401
|
||||
_coerce_size, # noqa: F401
|
||||
_extract_expected_sha256, # noqa: F401
|
||||
_find_metadata_file_info, # noqa: F401
|
||||
_json_safe_metadata, # noqa: F401
|
||||
_metadata_source_value, # noqa: F401
|
||||
_normalise_metadata_file_path,
|
||||
_normalise_metadata_file_path, # noqa: F401
|
||||
_resolve_lora_manager_model_type, # noqa: F401
|
||||
build_model_resolver_metadata,
|
||||
build_model_resolver_metadata, # noqa: F401
|
||||
read_completed_metadata_sha256, # noqa: F401
|
||||
write_model_resolver_metadata, # noqa: F401
|
||||
)
|
||||
from .download.validation import (
|
||||
DOWNLOAD_USER_AGENT, # noqa: F401
|
||||
@@ -218,34 +219,6 @@ from .settings import (
|
||||
)
|
||||
|
||||
|
||||
def write_model_resolver_metadata(
|
||||
dest_path: str,
|
||||
metadata: Optional[Dict[str, Any]] = None,
|
||||
category: str = "",
|
||||
source_url: str = "",
|
||||
create_preview: bool = False,
|
||||
) -> Optional[str]:
|
||||
"""Write metadata only to the sidecar owned by Model Resolver."""
|
||||
metadata_path = get_model_resolver_sidecar_path(dest_path)
|
||||
|
||||
try:
|
||||
payload = build_model_resolver_metadata(dest_path, metadata, category, source_url)
|
||||
if create_preview:
|
||||
preview_source = {
|
||||
**payload,
|
||||
**(metadata if isinstance(metadata, dict) else {}),
|
||||
}
|
||||
preview_path = create_model_preview(dest_path, preview_source)
|
||||
if preview_path:
|
||||
payload["preview_url"] = _normalise_metadata_file_path(preview_path)
|
||||
write_json_atomic(metadata_path, payload, indent=2)
|
||||
log.info(f"Metadata saved: {metadata_path}")
|
||||
return metadata_path
|
||||
except Exception as e:
|
||||
log.warning(f"Could not save metadata sidecar for {dest_path}: {e}")
|
||||
return None
|
||||
|
||||
|
||||
# Imported from .settings
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user