import os.path from enum import Enum class ModelType(Enum): CHECKPOINT = 'Checkpoint' VAE = 'VAE' LORA = 'Lora' HYPER_NETWORK = 'Hyper Network' LYCORIS = 'LyCORIS' EMBEDDING = 'Embedding' OTHER = 'Other' @staticmethod def by_value(value: str): for model_type in ModelType: if model_type.value == value.strip(): return model_type raise ValueError(f'There is no model type defined with name "{value}"') class ModelSort(Enum): TIME_ADDED_ASC = 'Time Added' TIME_ADDED_DESC = 'Time Added Reversed' NAME_ASC = 'Name' NAME_DESC = 'Name Reversed' @staticmethod def by_value(value: str): for model_sort in ModelSort: if model_sort.value == value.strip(): return model_sort raise ValueError(f'There is no model sort defined with name "{value}"') class Record: def __init__(self, id_, name: str, model_type: ModelType, download_url: str = '', url: str = '', download_path: str = '', download_filename: str = '', preview_url: str = '', description: str = '', positive_prompts: str = '', negative_prompts: str = '', sha256_hash: str = '', md5_hash: str = '', location: str = '', created_at: float = 0, groups=None, subdir: str = '', weight: float = 1): if groups is None: groups = [] self.id_ = id_ self.name = name self.model_type = model_type self.url = url self.download_url = download_url self.download_path = download_path self.download_filename = download_filename self.preview_url = preview_url self.description = description self.positive_prompts = positive_prompts self.negative_prompts = negative_prompts self.sha256_hash = sha256_hash self.md5_hash = md5_hash self.location = location self.created_at = created_at self.groups = groups self.subdir = subdir self.weight = weight; def is_file_exists(self) -> bool: return bool(self.location) and os.path.isfile(self.location) def is_downloadable(self) -> bool: return bool(self.download_url) def is_download_possible(self) -> bool: return self.is_downloadable() and not self.is_file_exists() def is_local_file_record(self): return self.id_ is None and self.is_file_exists() def __str__(self): return f'id="{self.id_}", ' \ f'name="{self.name}", ' \ f'model_type="{self.model_type}", ' \ f'url="{self.url}", ' \ f'download_url="{self.download_url}", ' \ f'download_path="{self.download_path}", ' \ f'download_filename="{self.download_filename}", ' \ f'preview_url="{self.preview_url}", ' \ f'description="{self.description}", ' \ f'positive_prompts="{self.positive_prompts}", ' \ f'negative_prompts="{self.negative_prompts}", ' \ f'sha256_hash="{self.sha256_hash}", ' \ f'md5_hash="{self.md5_hash}", ' \ f'location="{self.location}", ' \ f'created_at="{self.created_at}", ' \ f'groups="{self.groups}", ' \ f'subdir="{self.subdir}",' \ f'weight="{self.weight}".'