from typing import Type, List, NamedTuple from comfy_api.internal.singleton import ProxiedSingleton from packaging import version as packaging_version class ComfyAPIBase(ProxiedSingleton): def __init__(self): pass class ComfyAPIWithVersion(NamedTuple): version: str api_class: Type[ComfyAPIBase] def parse_version(version_str: str) -> packaging_version.Version: """ Parses a version string into a packaging_version.Version object. Raises ValueError if the version string is invalid. """ if version_str == "latest": return packaging_version.parse("9999999.9999999.9999999") return packaging_version.parse(version_str) registered_versions: List[ComfyAPIWithVersion] = [] def register_versions(versions: List[ComfyAPIWithVersion]): versions.sort(key=lambda x: parse_version(x.version)) global registered_versions registered_versions = versions def get_all_versions() -> List[ComfyAPIWithVersion]: """ Returns a list of all registered ComfyAPI versions. """ return registered_versions