mirror of
https://github.com/willmiao/ComfyUI-Lora-Manager.git
synced 2026-03-25 15:15:44 -03:00
feat(metadata): batch refresh model versions
This commit is contained in:
@@ -15,14 +15,22 @@ class DummyScanner:
|
||||
|
||||
|
||||
class DummyProvider:
|
||||
def __init__(self, response):
|
||||
def __init__(self, response, *, support_bulk: bool = True):
|
||||
self.response = response
|
||||
self.calls: int = 0
|
||||
self.bulk_calls: list[list[int]] = []
|
||||
self.support_bulk = support_bulk
|
||||
|
||||
async def get_model_versions(self, model_id):
|
||||
self.calls += 1
|
||||
return self.response
|
||||
|
||||
async def get_model_versions_bulk(self, model_ids):
|
||||
if not self.support_bulk:
|
||||
raise NotImplementedError
|
||||
self.bulk_calls.append(list(model_ids))
|
||||
return {model_id: self.response for model_id in model_ids}
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_refresh_persists_versions_and_uses_cache(tmp_path):
|
||||
@@ -38,14 +46,16 @@ async def test_refresh_persists_versions_and_uses_cache(tmp_path):
|
||||
await service.refresh_for_model_type("lora", scanner, provider)
|
||||
record = await service.get_record("lora", 1)
|
||||
|
||||
assert provider.calls == 1
|
||||
assert provider.calls == 0
|
||||
assert provider.bulk_calls == [[1]]
|
||||
assert record is not None
|
||||
assert record.version_ids == [11, 15]
|
||||
assert record.in_library_version_ids == [11, 15]
|
||||
assert record.has_update() is False
|
||||
|
||||
await service.refresh_for_model_type("lora", scanner, provider)
|
||||
assert provider.calls == 1, "provider should not be called again within TTL"
|
||||
assert provider.calls == 0, "provider should not be called again within TTL"
|
||||
assert provider.bulk_calls == [[1]]
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@@ -60,8 +70,45 @@ async def test_refresh_respects_ignore_flag(tmp_path):
|
||||
await service.set_should_ignore("lora", 2, True)
|
||||
|
||||
provider.calls = 0
|
||||
provider.bulk_calls = []
|
||||
await service.refresh_for_model_type("lora", scanner, provider)
|
||||
assert provider.calls == 0
|
||||
assert provider.bulk_calls == []
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_refresh_falls_back_when_bulk_not_supported(tmp_path):
|
||||
db_path = tmp_path / "updates.sqlite"
|
||||
service = ModelUpdateService(str(db_path), ttl_seconds=3600)
|
||||
raw_data = [{"civitai": {"modelId": 4, "id": 41}}]
|
||||
scanner = DummyScanner(raw_data)
|
||||
provider = DummyProvider({"modelVersions": [{"id": 41}]}, support_bulk=False)
|
||||
|
||||
await service.refresh_for_model_type("lora", scanner, provider)
|
||||
record = await service.get_record("lora", 4)
|
||||
|
||||
assert record is not None
|
||||
assert provider.calls == 1
|
||||
assert provider.bulk_calls == []
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_refresh_batches_large_collections(tmp_path):
|
||||
db_path = tmp_path / "updates.sqlite"
|
||||
service = ModelUpdateService(str(db_path), ttl_seconds=3600)
|
||||
raw_data = [
|
||||
{"civitai": {"modelId": idx, "id": idx * 10}}
|
||||
for idx in range(1, 151)
|
||||
]
|
||||
scanner = DummyScanner(raw_data)
|
||||
provider = DummyProvider({"modelVersions": []})
|
||||
|
||||
await service.refresh_for_model_type("lora", scanner, provider)
|
||||
|
||||
# Expect two batches: 100 ids and remaining 50 ids
|
||||
assert len(provider.bulk_calls) == 2
|
||||
assert len(provider.bulk_calls[0]) == 100
|
||||
assert len(provider.bulk_calls[1]) == 50
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
|
||||
Reference in New Issue
Block a user