mirror of
https://github.com/willmiao/ComfyUI-Lora-Manager.git
synced 2026-03-22 05:32:12 -03:00
Bug fixes: - Add null guards for base_models_roots/embeddings_roots in backup cleanup - Fix null-safety initialization of extra_unet_roots Formatting: - Apply consistent code style across Python files - Fix line wrapping, quote consistency, and trailing commas - Add type ignore comments for dynamic/platform-specific code
67 lines
2.1 KiB
Python
67 lines
2.1 KiB
Python
"""Factory for creating recipe metadata parsers."""
|
|
|
|
import logging
|
|
from .parsers import (
|
|
RecipeFormatParser,
|
|
ComfyMetadataParser,
|
|
MetaFormatParser,
|
|
AutomaticMetadataParser,
|
|
CivitaiApiMetadataParser,
|
|
)
|
|
from .base import RecipeMetadataParser
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class RecipeParserFactory:
|
|
"""Factory for creating recipe metadata parsers"""
|
|
|
|
@staticmethod
|
|
def create_parser(metadata) -> RecipeMetadataParser | None:
|
|
"""
|
|
Create appropriate parser based on the metadata content
|
|
|
|
Args:
|
|
metadata: The metadata from the image (dict or str)
|
|
|
|
Returns:
|
|
Appropriate RecipeMetadataParser implementation
|
|
"""
|
|
# First, try CivitaiApiMetadataParser for dict input
|
|
if isinstance(metadata, dict):
|
|
try:
|
|
if CivitaiApiMetadataParser().is_metadata_matching(metadata):
|
|
return CivitaiApiMetadataParser()
|
|
except Exception as e:
|
|
logger.debug(f"CivitaiApiMetadataParser check failed: {e}")
|
|
pass
|
|
|
|
# Convert dict to string for other parsers that expect string input
|
|
try:
|
|
import json
|
|
|
|
metadata_str = json.dumps(metadata)
|
|
except Exception as e:
|
|
logger.debug(f"Failed to convert dict to JSON string: {e}")
|
|
return None
|
|
else:
|
|
metadata_str = metadata
|
|
|
|
# Try ComfyMetadataParser which requires valid JSON
|
|
try:
|
|
if ComfyMetadataParser().is_metadata_matching(metadata_str):
|
|
return ComfyMetadataParser()
|
|
except Exception:
|
|
# If JSON parsing fails, move on to other parsers
|
|
pass
|
|
|
|
# Check other parsers that expect string input
|
|
if RecipeFormatParser().is_metadata_matching(metadata_str):
|
|
return RecipeFormatParser()
|
|
elif AutomaticMetadataParser().is_metadata_matching(metadata_str):
|
|
return AutomaticMetadataParser()
|
|
elif MetaFormatParser().is_metadata_matching(metadata_str):
|
|
return MetaFormatParser()
|
|
else:
|
|
return None
|