added: /v2/snapshot/diff

modified: use 'packaging.version` instead custom StrictVersion
This commit is contained in:
Dr.Lt.Data
2025-07-29 23:15:11 +09:00
parent 5316ec1b4d
commit 62da330182
6 changed files with 316 additions and 46 deletions

View File

@@ -15,7 +15,7 @@ import re
import logging
import platform
import shlex
from packaging import version
cache_lock = threading.Lock()
session_lock = threading.Lock()
@@ -58,62 +58,32 @@ def make_pip_cmd(cmd):
# print(f"[ComfyUI-Manager] 'distutils' package not found. Activating fallback mode for compatibility.")
class StrictVersion:
def __init__(self, version_string):
self.obj = version.parse(version_string)
self.version_string = version_string
self.major = 0
self.minor = 0
self.patch = 0
self.pre_release = None
self.parse_version_string()
def parse_version_string(self):
parts = self.version_string.split('.')
if not parts:
raise ValueError("Version string must not be empty")
self.major = int(parts[0])
self.minor = int(parts[1]) if len(parts) > 1 else 0
self.patch = int(parts[2]) if len(parts) > 2 else 0
# Handling pre-release versions if present
if len(parts) > 3:
self.pre_release = parts[3]
self.major = self.obj.major
self.minor = self.obj.minor
self.patch = self.obj.micro
def __str__(self):
version = f"{self.major}.{self.minor}.{self.patch}"
if self.pre_release:
version += f"-{self.pre_release}"
return version
return self.version_string
def __eq__(self, other):
return (self.major, self.minor, self.patch, self.pre_release) == \
(other.major, other.minor, other.patch, other.pre_release)
return self.obj == other.obj
def __lt__(self, other):
if (self.major, self.minor, self.patch) == (other.major, other.minor, other.patch):
return self.pre_release_compare(self.pre_release, other.pre_release) < 0
return (self.major, self.minor, self.patch) < (other.major, other.minor, other.patch)
@staticmethod
def pre_release_compare(pre1, pre2):
if pre1 == pre2:
return 0
if pre1 is None:
return 1
if pre2 is None:
return -1
return -1 if pre1 < pre2 else 1
return self.obj < other.obj
def __le__(self, other):
return self == other or self < other
return self.obj == other.obj or self.obj < other.obj
def __gt__(self, other):
return not self <= other
return not self.obj <= other.obj
def __ge__(self, other):
return not self < other
return not self.obj < other.obj
def __ne__(self, other):
return not self == other
return not self.obj == other.obj
def simple_hash(input_string):