fix: use natural sorting when sorting by name

This commit is contained in:
Karl Woditsch
2025-05-05 22:25:50 +02:00
parent 2b405ae164
commit 59b67e1e10
5 changed files with 10 additions and 5 deletions

View File

@@ -2,6 +2,7 @@ import asyncio
from typing import List, Dict from typing import List, Dict
from dataclasses import dataclass from dataclasses import dataclass
from operator import itemgetter from operator import itemgetter
from natsort import natsorted
@dataclass @dataclass
class LoraCache: class LoraCache:
@@ -17,7 +18,7 @@ class LoraCache:
async def resort(self, name_only: bool = False): async def resort(self, name_only: bool = False):
"""Resort all cached data views""" """Resort all cached data views"""
async with self._lock: async with self._lock:
self.sorted_by_name = sorted( self.sorted_by_name = natsorted(
self.raw_data, self.raw_data,
key=lambda x: x['model_name'].lower() # Case-insensitive sort key=lambda x: x['model_name'].lower() # Case-insensitive sort
) )

View File

@@ -2,6 +2,7 @@ import asyncio
from typing import List, Dict from typing import List, Dict
from dataclasses import dataclass from dataclasses import dataclass
from operator import itemgetter from operator import itemgetter
from natsort import natsorted
@dataclass @dataclass
class ModelCache: class ModelCache:
@@ -17,7 +18,7 @@ class ModelCache:
async def resort(self, name_only: bool = False): async def resort(self, name_only: bool = False):
"""Resort all cached data views""" """Resort all cached data views"""
async with self._lock: async with self._lock:
self.sorted_by_name = sorted( self.sorted_by_name = natsorted(
self.raw_data, self.raw_data,
key=lambda x: x['model_name'].lower() # Case-insensitive sort key=lambda x: x['model_name'].lower() # Case-insensitive sort
) )

View File

@@ -2,6 +2,7 @@ import asyncio
from typing import List, Dict from typing import List, Dict
from dataclasses import dataclass from dataclasses import dataclass
from operator import itemgetter from operator import itemgetter
from natsort import natsorted
@dataclass @dataclass
class RecipeCache: class RecipeCache:
@@ -16,7 +17,7 @@ class RecipeCache:
async def resort(self, name_only: bool = False): async def resort(self, name_only: bool = False):
"""Resort all cached data views""" """Resort all cached data views"""
async with self._lock: async with self._lock:
self.sorted_by_name = sorted( self.sorted_by_name = natsorted(
self.raw_data, self.raw_data,
key=lambda x: x.get('title', '').lower() # Case-insensitive sort key=lambda x: x.get('title', '').lower() # Case-insensitive sort
) )

View File

@@ -9,6 +9,7 @@ from .recipe_cache import RecipeCache
from .service_registry import ServiceRegistry from .service_registry import ServiceRegistry
from .lora_scanner import LoraScanner from .lora_scanner import LoraScanner
from ..utils.utils import fuzzy_match from ..utils.utils import fuzzy_match
from natsort import natsorted
import sys import sys
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -164,7 +165,7 @@ class RecipeScanner:
if hasattr(self._cache, "resort"): if hasattr(self._cache, "resort"):
try: try:
# Sort by name # Sort by name
self._cache.sorted_by_name = sorted( self._cache.sorted_by_name = natsorted(
self._cache.raw_data, self._cache.raw_data,
key=lambda x: x.get('title', '').lower() key=lambda x: x.get('title', '').lower()
) )

View File

@@ -10,3 +10,4 @@ requests
toml toml
numpy numpy
torch torch
natsort