From 881a6730d7fce837a22a2e43d88c8617b52242ad Mon Sep 17 00:00:00 2001 From: Dariusz L Date: Sun, 2 Aug 2026 17:17:40 +0200 Subject: [PATCH] refactor: extract metadata sidecar writer --- core/download/metadata.py | 42 +++++++++++++++++++++++++++++++++++++++ core/downloader.py | 41 +++++++------------------------------- 2 files changed, 49 insertions(+), 34 deletions(-) diff --git a/core/download/metadata.py b/core/download/metadata.py index e365566..f813213 100644 --- a/core/download/metadata.py +++ b/core/download/metadata.py @@ -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) diff --git a/core/downloader.py b/core/downloader.py index 1bfe501..ba20ea0 100644 --- a/core/downloader.py +++ b/core/downloader.py @@ -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