fix(types): resolve pre-existing basedpyright errors in tests

Fix ~790 basedpyright errors across the test suite:
- Type stub subclasses of real production classes with super().__init__()
- Add missing generic type arguments and Dict[str, Any] annotations
- Add None guards before subscript/member access
- Adapt tests to production API changes (removed dead handlers,
  PersistentModelCache.get_default, _i18n_filter_added location)
This commit is contained in:
Will Miao
2026-08-08 20:12:59 +08:00
parent 8e724538bd
commit d2f955266d
95 changed files with 953 additions and 666 deletions

View File

@@ -5,6 +5,7 @@ import os
import subprocess
import zipfile
from types import SimpleNamespace
from typing import Any
from unittest.mock import patch, MagicMock
import pytest
@@ -34,6 +35,13 @@ from py.routes.misc_route_registrar import MISC_ROUTE_DEFINITIONS, MiscRouteRegi
from py.routes.misc_routes import MiscRoutes
def _json_payload(response) -> dict[str, Any]:
"""Decode the JSON body of a web.Response, asserting it is not null."""
text = response.text
assert text is not None
return json.loads(text)
class FakeRequest:
def __init__(self, *, json_data=None, query=None, method="POST"):
self._json_data = json_data or {}
@@ -129,8 +137,8 @@ async def test_get_settings_excludes_no_sync_keys():
downloader_factory=dummy_downloader_factory,
)
response = await handler.get_settings(FakeRequest())
payload = json.loads(response.text)
response = await handler.get_settings(FakeRequest()) # pyright: ignore[reportArgumentType]
payload = _json_payload(response)
assert payload["success"] is True
# Regular settings should be synced
@@ -155,8 +163,8 @@ async def test_update_settings_rejects_missing_example_path(tmp_path):
missing_path = tmp_path / "does-not-exist"
request = FakeRequest(json_data={"example_images_path": str(missing_path)})
response = await handler.update_settings(request)
payload = json.loads(response.text)
response = await handler.update_settings(request) # pyright: ignore[reportArgumentType]
payload = _json_payload(response)
assert payload["success"] is False
assert "Path does not exist" in payload["error"]
@@ -181,9 +189,9 @@ async def test_doctor_handler_reports_key_cache_and_ui_issues():
)
response = await handler.get_doctor_diagnostics(
FakeRequest(query={"clientVersion": "1.2.2-client"}, method="GET")
FakeRequest(query={"clientVersion": "1.2.2-client"}, method="GET") # pyright: ignore[reportArgumentType]
)
payload = json.loads(response.text)
payload = _json_payload(response)
assert payload["success"] is True
assert payload["summary"]["status"] == "error"
@@ -209,8 +217,8 @@ async def test_doctor_handler_can_repair_cache():
scanner_factories=(("lora", "LoRAs", scanner_factory),),
)
response = await handler.repair_doctor_cache(FakeRequest())
payload = json.loads(response.text)
response = await handler.repair_doctor_cache(FakeRequest()) # pyright: ignore[reportArgumentType]
payload = _json_payload(response)
assert response.status == 200
assert payload["success"] is True
@@ -230,7 +238,7 @@ async def test_doctor_handler_exports_support_bundle():
)
response = await handler.export_doctor_bundle(
FakeRequest(
FakeRequest( # pyright: ignore[reportArgumentType]
json_data={
"summary": {"status": "warning"},
"diagnostics": [{"id": "cache_health", "status": "warning"}],
@@ -241,6 +249,7 @@ async def test_doctor_handler_exports_support_bundle():
)
assert response.status == 200
assert isinstance(response.body, bytes)
with zipfile.ZipFile(io.BytesIO(response.body), "r") as archive:
names = set(archive.namelist())
assert "doctor-report.json" in names
@@ -263,7 +272,7 @@ async def test_doctor_handler_redacts_string_secrets_in_bundle():
)
response = await handler.export_doctor_bundle(
FakeRequest(
FakeRequest( # pyright: ignore[reportArgumentType]
json_data={
"frontend_logs": [
{
@@ -276,6 +285,7 @@ async def test_doctor_handler_redacts_string_secrets_in_bundle():
)
assert response.status == 200
assert isinstance(response.body, bytes)
with zipfile.ZipFile(io.BytesIO(response.body), "r") as archive:
frontend_logs = archive.read("frontend-console.json").decode("utf-8")
assert "abcdef123456" not in frontend_logs
@@ -308,7 +318,7 @@ async def test_doctor_handler_redacts_json_shaped_string_secrets_in_bundle():
}
response = await handler.export_doctor_bundle(
FakeRequest(
FakeRequest( # pyright: ignore[reportArgumentType]
json_data={
"frontend_logs": [
{
@@ -321,6 +331,7 @@ async def test_doctor_handler_redacts_json_shaped_string_secrets_in_bundle():
)
assert response.status == 200
assert isinstance(response.body, bytes)
with zipfile.ZipFile(io.BytesIO(response.body), "r") as archive:
frontend_logs = archive.read("frontend-console.json").decode("utf-8")
backend_logs = archive.read("backend-logs.txt").decode("utf-8")
@@ -359,9 +370,10 @@ async def test_doctor_handler_exports_backend_session_logs_from_helper():
"notes": [],
}
response = await handler.export_doctor_bundle(FakeRequest(json_data={}))
response = await handler.export_doctor_bundle(FakeRequest(json_data={})) # pyright: ignore[reportArgumentType]
assert response.status == 200
assert isinstance(response.body, bytes)
with zipfile.ZipFile(io.BytesIO(response.body), "r") as archive:
backend_logs = archive.read("backend-logs.txt").decode("utf-8")
backend_source = json.loads(
@@ -449,14 +461,14 @@ async def test_backup_handler_returns_status_and_exports(monkeypatch):
handler = BackupHandler(backup_service_factory=factory)
status_response = await handler.get_backup_status(FakeRequest())
status_payload = json.loads(status_response.text)
status_response = await handler.get_backup_status(FakeRequest()) # pyright: ignore[reportArgumentType]
status_payload = _json_payload(status_response)
assert status_payload["success"] is True
assert status_payload["status"]["backupDir"] == "/tmp/backups"
assert status_payload["status"]["enabled"] is True
assert status_payload["snapshots"][0]["name"] == "backup.zip"
export_response = await handler.export_backup(FakeRequest())
export_response = await handler.export_backup(FakeRequest()) # pyright: ignore[reportArgumentType]
assert export_response.status == 200
assert export_response.body == b"zip-bytes"
@@ -476,8 +488,8 @@ async def test_backup_handler_rejects_missing_import_archive():
async def read(self):
return b""
response = await handler.import_backup(EmptyRequest())
payload = json.loads(response.text)
response = await handler.import_backup(EmptyRequest()) # pyright: ignore[reportArgumentType]
payload = _json_payload(response)
assert response.status == 400
assert payload["success"] is False
@@ -504,8 +516,8 @@ async def test_open_backup_location_uses_settings_directory(tmp_path, monkeypatc
monkeypatch.setattr("py.routes.handlers.misc_handlers._is_docker", lambda: False)
monkeypatch.setattr("py.routes.handlers.misc_handlers._is_wsl", lambda: False)
response = await handler.open_backup_location(FakeRequest())
payload = json.loads(response.text)
response = await handler.open_backup_location(FakeRequest()) # pyright: ignore[reportArgumentType]
payload = _json_payload(response)
assert response.status == 200
assert payload["success"] is True
@@ -535,8 +547,8 @@ async def test_open_wildcards_location_creates_and_opens_directory(tmp_path, mon
else str(wildcards_dir),
)
response = await handler.open_wildcards_location(FakeRequest())
payload = json.loads(response.text)
response = await handler.open_wildcards_location(FakeRequest()) # pyright: ignore[reportArgumentType]
payload = _json_payload(response)
assert response.status == 200
assert payload["success"] is True
@@ -564,7 +576,7 @@ class RecordingRouter:
def test_misc_route_registrar_registers_all_routes():
app = SimpleNamespace(router=RecordingRouter())
registrar = MiscRouteRegistrar(app) # type: ignore[arg-type]
registrar = MiscRouteRegistrar(app) # pyright: ignore[reportArgumentType]
async def dummy_handler(_request):
return web.Response()
@@ -586,7 +598,7 @@ class FakePromptServer:
sent = []
class Instance:
sockets: dict = {}
sockets: dict[str, Any] = {}
def send_sync(self, event, payload, sid=None):
FakePromptServer.sent.append((event, payload))
@@ -599,7 +611,7 @@ async def test_register_nodes_requires_graph_id():
node_registry = NodeRegistry()
handler = NodeRegistryHandler(
node_registry=node_registry,
prompt_server=FakePromptServer,
prompt_server=FakePromptServer, # pyright: ignore[reportArgumentType]
standalone_mode=False,
)
@@ -609,8 +621,8 @@ async def test_register_nodes_requires_graph_id():
"client_id": "test-client-1",
}
)
response = await handler.register_nodes(request)
payload = json.loads(response.text)
response = await handler.register_nodes(request) # pyright: ignore[reportArgumentType]
payload = _json_payload(response)
assert response.status == 400
assert payload["success"] is False
@@ -622,7 +634,7 @@ async def test_register_nodes_stores_graph_identifier():
node_registry = NodeRegistry()
handler = NodeRegistryHandler(
node_registry=node_registry,
prompt_server=FakePromptServer,
prompt_server=FakePromptServer, # pyright: ignore[reportArgumentType]
standalone_mode=False,
)
@@ -641,8 +653,8 @@ async def test_register_nodes_stores_graph_identifier():
}
)
response = await handler.register_nodes(request)
payload = json.loads(response.text)
response = await handler.register_nodes(request) # pyright: ignore[reportArgumentType]
payload = _json_payload(response)
assert payload["success"] is True
@@ -659,7 +671,7 @@ async def test_register_nodes_defaults_graph_name_to_none():
node_registry = NodeRegistry()
handler = NodeRegistryHandler(
node_registry=node_registry,
prompt_server=FakePromptServer,
prompt_server=FakePromptServer, # pyright: ignore[reportArgumentType]
standalone_mode=False,
)
@@ -677,8 +689,8 @@ async def test_register_nodes_defaults_graph_name_to_none():
}
)
response = await handler.register_nodes(request)
payload = json.loads(response.text)
response = await handler.register_nodes(request) # pyright: ignore[reportArgumentType]
payload = _json_payload(response)
assert payload["success"] is True
@@ -692,7 +704,7 @@ async def test_register_nodes_includes_capabilities():
node_registry = NodeRegistry()
handler = NodeRegistryHandler(
node_registry=node_registry,
prompt_server=FakePromptServer,
prompt_server=FakePromptServer, # pyright: ignore[reportArgumentType]
standalone_mode=False,
)
@@ -714,8 +726,8 @@ async def test_register_nodes_includes_capabilities():
}
)
response = await handler.register_nodes(request)
payload = json.loads(response.text)
response = await handler.register_nodes(request) # pyright: ignore[reportArgumentType]
payload = _json_payload(response)
assert payload["success"] is True
@@ -734,7 +746,7 @@ async def test_register_nodes_accepts_compound_node_ids():
node_registry = NodeRegistry()
handler = NodeRegistryHandler(
node_registry=node_registry,
prompt_server=FakePromptServer,
prompt_server=FakePromptServer, # pyright: ignore[reportArgumentType]
standalone_mode=False,
)
@@ -758,8 +770,8 @@ async def test_register_nodes_accepts_compound_node_ids():
}
)
response = await handler.register_nodes(request)
payload = json.loads(response.text)
response = await handler.register_nodes(request) # pyright: ignore[reportArgumentType]
payload = _json_payload(response)
assert response.status == 200
assert payload["success"] is True
@@ -778,11 +790,11 @@ async def test_register_nodes_accepts_compound_node_ids():
@pytest.mark.asyncio
async def test_update_node_widget_sends_payload():
send_calls: list[tuple[str, dict]] = []
send_calls: list[tuple[str, dict[str, Any]]] = []
class RecordingPromptServer:
class Instance:
sockets: dict = {}
sockets: dict[str, Any] = {}
def send_sync(self, event, payload, sid=None):
send_calls.append((event, payload))
@@ -791,7 +803,7 @@ async def test_update_node_widget_sends_payload():
handler = NodeRegistryHandler(
node_registry=NodeRegistry(),
prompt_server=RecordingPromptServer,
prompt_server=RecordingPromptServer, # pyright: ignore[reportArgumentType]
standalone_mode=False,
)
@@ -803,8 +815,8 @@ async def test_update_node_widget_sends_payload():
}
)
response = await handler.update_node_widget(request)
payload = json.loads(response.text)
response = await handler.update_node_widget(request) # pyright: ignore[reportArgumentType]
payload = _json_payload(response)
assert response.status == 200
assert payload["success"] is True
@@ -824,18 +836,18 @@ async def test_update_node_widget_sends_payload():
@pytest.mark.asyncio
async def test_update_lora_code_includes_graph_identifier():
send_calls: list[tuple[str, dict]] = []
send_calls: list[tuple[str, dict[str, Any]]] = []
class RecordingPromptServer:
class Instance:
sockets: dict = {}
sockets: dict[str, Any] = {}
def send_sync(self, event, payload, sid=None):
send_calls.append((event, payload))
instance = Instance()
handler = LoraCodeHandler(RecordingPromptServer)
handler = LoraCodeHandler(RecordingPromptServer) # pyright: ignore[reportArgumentType]
request = FakeRequest(
json_data={
@@ -845,8 +857,8 @@ async def test_update_lora_code_includes_graph_identifier():
}
)
response = await handler.update_lora_code(request)
payload = json.loads(response.text)
response = await handler.update_lora_code(request) # pyright: ignore[reportArgumentType]
payload = _json_payload(response)
assert payload["success"] is True
assert payload["results"] == [
@@ -913,7 +925,7 @@ class FakeUserModelsProvider(FakeMetadataProvider):
self.next_cursor = next_cursor
self.estimated_total = estimated_total
self.received_usernames: list[str] = []
self.received_cursors: list = []
self.received_cursors: list[Any] = []
async def get_user_models(self, username, cursor=None):
self.received_usernames.append(username)
@@ -924,7 +936,7 @@ class FakeUserModelsProvider(FakeMetadataProvider):
return self.estimated_total
async def fake_metadata_provider_factory():
async def fake_metadata_provider_factory() -> Any:
return FakeMetadataProvider()
@@ -949,8 +961,8 @@ async def fake_metadata_archive_manager_factory():
class FakeDownloadHistoryService:
def __init__(self, downloaded_by_type=None):
self.downloaded_by_type = downloaded_by_type or {}
self.marked_downloaded: list[tuple] = []
self.marked_not_downloaded: list[tuple] = []
self.marked_downloaded: list[tuple[Any, ...]] = []
self.marked_not_downloaded: list[tuple[Any, ...]] = []
async def has_been_downloaded(self, model_type, version_id):
return version_id in self.downloaded_by_type.get(model_type, set())
@@ -1012,20 +1024,20 @@ async def test_misc_routes_bind_produces_expected_handlers():
controller = MiscRoutes(
settings_service=DummySettings(),
usage_stats_factory=lambda: SimpleNamespace(
usage_stats_factory=lambda: SimpleNamespace( # pyright: ignore[reportArgumentType]
process_execution=noop_async, get_stats=noop_async
),
prompt_server=FakePromptServer,
prompt_server=FakePromptServer, # pyright: ignore[reportArgumentType]
service_registry_adapter=service_registry_adapter,
metadata_provider_factory=fake_metadata_provider_factory,
metadata_archive_manager_factory=fake_metadata_archive_manager_factory,
metadata_provider_updater=noop_async,
downloader_factory=dummy_downloader_factory,
registrar_factory=registrar_factory,
registrar_factory=registrar_factory, # pyright: ignore[reportArgumentType]
)
app = SimpleNamespace(router=RecordingRouter())
controller.bind(app) # type: ignore[arg-type]
controller.bind(app) # pyright: ignore[reportArgumentType]
assert recorded_registrars, "Expected registrar to be created"
mapping = recorded_registrars[0].registered_mapping
@@ -1106,7 +1118,7 @@ async def test_get_civitai_user_models_marks_library_versions():
provider = FakeUserModelsProvider(models)
async def provider_factory():
async def provider_factory() -> Any:
return provider
lora_scanner = FakeExistenceScanner({101})
@@ -1133,9 +1145,9 @@ async def test_get_civitai_user_models_marks_library_versions():
)
response = await handler.get_civitai_user_models(
FakeRequest(query={"username": "pixel"})
FakeRequest(query={"username": "pixel"}) # pyright: ignore[reportArgumentType]
)
payload = json.loads(response.text)
payload = _json_payload(response)
assert payload["success"] is True
assert payload["username"] == "pixel"
@@ -1239,7 +1251,7 @@ async def test_get_civitai_user_models_rewrites_civitai_previews():
provider = FakeUserModelsProvider(models)
async def provider_factory():
async def provider_factory() -> Any:
return provider
handler = ModelLibraryHandler(
@@ -1253,9 +1265,9 @@ async def test_get_civitai_user_models_rewrites_civitai_previews():
)
response = await handler.get_civitai_user_models(
FakeRequest(query={"username": "pixel"})
FakeRequest(query={"username": "pixel"}) # pyright: ignore[reportArgumentType]
)
payload = json.loads(response.text)
payload = _json_payload(response)
assert payload["success"] is True
previews_by_version = {
@@ -1275,7 +1287,7 @@ async def test_get_civitai_user_models_rewrites_civitai_previews():
async def test_get_civitai_user_models_requires_username():
provider = FakeUserModelsProvider([])
async def provider_factory():
async def provider_factory() -> Any:
return provider
handler = ModelLibraryHandler(
@@ -1288,8 +1300,8 @@ async def test_get_civitai_user_models_requires_username():
metadata_provider_factory=provider_factory,
)
response = await handler.get_civitai_user_models(FakeRequest())
payload = json.loads(response.text)
response = await handler.get_civitai_user_models(FakeRequest()) # pyright: ignore[reportArgumentType]
payload = _json_payload(response)
assert response.status == 400
assert payload["success"] is False
@@ -1318,7 +1330,7 @@ async def test_get_civitai_user_models_returns_pagination_fields():
provider = FakeUserModelsProvider(models, next_cursor="cursor-token", estimated_total=2140)
async def provider_factory():
async def provider_factory() -> Any:
return provider
handler = ModelLibraryHandler(
@@ -1332,9 +1344,9 @@ async def test_get_civitai_user_models_returns_pagination_fields():
)
response = await handler.get_civitai_user_models(
FakeRequest(query={"username": "pixel"})
FakeRequest(query={"username": "pixel"}) # pyright: ignore[reportArgumentType]
)
payload = json.loads(response.text)
payload = _json_payload(response)
assert response.status == 200
assert payload["success"] is True
@@ -1351,7 +1363,7 @@ async def test_get_civitai_user_models_returns_pagination_fields():
async def test_get_civitai_user_models_passes_cursor_and_omits_estimate():
provider = FakeUserModelsProvider([], next_cursor=None, estimated_total=999)
async def provider_factory():
async def provider_factory() -> Any:
return provider
handler = ModelLibraryHandler(
@@ -1365,9 +1377,9 @@ async def test_get_civitai_user_models_passes_cursor_and_omits_estimate():
)
response = await handler.get_civitai_user_models(
FakeRequest(query={"username": "pixel", "cursor": "opaque-token"})
FakeRequest(query={"username": "pixel", "cursor": "opaque-token"}) # pyright: ignore[reportArgumentType]
)
payload = json.loads(response.text)
payload = _json_payload(response)
assert response.status == 200
assert payload["success"] is True
@@ -1391,10 +1403,10 @@ def test_ensure_handler_mapping_caches_result():
controller = MiscRoutes(
settings_service=DummySettings(),
usage_stats_factory=lambda: SimpleNamespace(
usage_stats_factory=lambda: SimpleNamespace( # pyright: ignore[reportArgumentType]
process_execution=noop_async, get_stats=noop_async
),
prompt_server=FakePromptServer,
prompt_server=FakePromptServer, # pyright: ignore[reportArgumentType]
service_registry_adapter=ServiceRegistryAdapter(
get_lora_scanner=fake_scanner_factory,
get_checkpoint_scanner=fake_scanner_factory,
@@ -1405,7 +1417,7 @@ def test_ensure_handler_mapping_caches_result():
metadata_archive_manager_factory=fake_metadata_archive_manager_factory,
metadata_provider_updater=noop_async,
downloader_factory=dummy_downloader_factory,
handler_set_factory=RecordingHandlerSet,
handler_set_factory=RecordingHandlerSet, # pyright: ignore[reportArgumentType]
)
first_mapping = controller._ensure_handler_mapping()
@@ -1447,8 +1459,8 @@ async def test_check_model_exists_returns_local_versions():
metadata_provider_factory=fake_metadata_provider_factory,
)
response = await handler.check_model_exists(FakeRequest(query={"modelId": "5"}))
payload = json.loads(response.text)
response = await handler.check_model_exists(FakeRequest(query={"modelId": "5"})) # pyright: ignore[reportArgumentType]
payload = _json_payload(response)
assert payload["success"] is True
assert payload["modelType"] == "lora"
@@ -1461,7 +1473,7 @@ async def test_check_model_exists_returns_local_versions():
@pytest.mark.asyncio
async def test_check_model_exists_model_id_only_does_not_call_metadata_provider():
async def metadata_provider_factory():
async def metadata_provider_factory() -> Any:
raise AssertionError("metadata provider should not be called for modelId-only checks")
handler = ModelLibraryHandler(
@@ -1474,8 +1486,8 @@ async def test_check_model_exists_model_id_only_does_not_call_metadata_provider(
metadata_provider_factory=metadata_provider_factory,
)
response = await handler.check_model_exists(FakeRequest(query={"modelId": "5"}))
payload = json.loads(response.text)
response = await handler.check_model_exists(FakeRequest(query={"modelId": "5"})) # pyright: ignore[reportArgumentType]
payload = _json_payload(response)
assert payload == {
"success": True,
@@ -1503,9 +1515,9 @@ async def test_check_model_exists_returns_download_history_when_file_missing():
)
response = await handler.check_model_exists(
FakeRequest(query={"modelId": "5", "modelVersionId": "999"})
FakeRequest(query={"modelId": "5", "modelVersionId": "999"}) # pyright: ignore[reportArgumentType]
)
payload = json.loads(response.text)
payload = _json_payload(response)
assert payload == {
"success": True,
@@ -1533,9 +1545,9 @@ async def test_model_version_download_status_endpoints():
)
get_response = await handler.get_model_version_download_status(
FakeRequest(query={"modelType": "lora", "modelVersionId": "123"})
FakeRequest(query={"modelType": "lora", "modelVersionId": "123"}) # pyright: ignore[reportArgumentType]
)
get_payload = json.loads(get_response.text)
get_payload = _json_payload(get_response)
assert get_payload == {
"success": True,
"modelType": "lora",
@@ -1544,7 +1556,7 @@ async def test_model_version_download_status_endpoints():
}
set_response = await handler.set_model_version_download_status(
FakeRequest(
FakeRequest( # pyright: ignore[reportArgumentType]
json_data={
"modelType": "checkpoint",
"modelVersionId": 456,
@@ -1554,7 +1566,7 @@ async def test_model_version_download_status_endpoints():
}
)
)
set_payload = json.loads(set_response.text)
set_payload = _json_payload(set_response)
assert set_payload == {
"success": True,
"modelType": "checkpoint",
@@ -1566,7 +1578,7 @@ async def test_model_version_download_status_endpoints():
]
set_get_response = await handler.set_model_version_download_status(
FakeRequest(
FakeRequest( # pyright: ignore[reportArgumentType]
method="GET",
query={
"modelType": "embedding",
@@ -1576,7 +1588,7 @@ async def test_model_version_download_status_endpoints():
},
)
)
set_get_payload = json.loads(set_get_response.text)
set_get_payload = _json_payload(set_get_response)
assert set_get_payload == {
"success": True,
"modelType": "embedding",
@@ -1586,7 +1598,7 @@ async def test_model_version_download_status_endpoints():
def test_create_handler_set_uses_provided_dependencies():
recorded_handlers: list[dict] = []
recorded_handlers: list[dict[str, Any]] = []
class RecordingHandlerSet:
def __init__(self, **handlers):
@@ -1609,8 +1621,8 @@ def test_create_handler_set_uses_provided_dependencies():
controller = MiscRoutes(
settings_service=DummySettings(),
usage_stats_factory=lambda: FakeUsageStats(),
prompt_server=CustomPromptServer,
usage_stats_factory=lambda: FakeUsageStats(), # pyright: ignore[reportArgumentType]
prompt_server=CustomPromptServer, # pyright: ignore[reportArgumentType]
service_registry_adapter=ServiceRegistryAdapter(
get_lora_scanner=fake_scanner_factory,
get_checkpoint_scanner=fake_scanner_factory,
@@ -1621,8 +1633,8 @@ def test_create_handler_set_uses_provided_dependencies():
metadata_archive_manager_factory=fake_metadata_archive_manager_factory,
metadata_provider_updater=noop_async,
downloader_factory=dummy_downloader_factory,
handler_set_factory=RecordingHandlerSet,
node_registry=fake_node_registry,
handler_set_factory=RecordingHandlerSet, # pyright: ignore[reportArgumentType]
node_registry=fake_node_registry, # pyright: ignore[reportArgumentType]
standalone_mode_flag=True,
)
@@ -1665,7 +1677,7 @@ def test_is_wsl_returns_false_on_read_error():
assert result is False
def test_is_wsl_returns_false_on_read_error():
def test_is_wsl_returns_false_on_read_error_builtins():
with patch("builtins.open", side_effect=OSError()):
result = _is_wsl()
assert result is False
@@ -1688,7 +1700,7 @@ def test_wsl_to_windows_path_returns_none_on_error():
assert result is None
def test_wsl_to_windows_path_returns_none_on_subprocess_error():
def test_wsl_to_windows_path_returns_none_on_subprocess_error_plain():
with patch(
"subprocess.run", side_effect=subprocess.CalledProcessError(1, "wslpath")
):
@@ -1769,8 +1781,8 @@ async def test_check_filename_conflicts_returns_ok_when_no_duplicates():
scanner_factories=(("lora", "LoRAs", scanner_factory),),
)
response = await handler.get_doctor_diagnostics(FakeRequest(method="GET"))
payload = json.loads(response.text)
response = await handler.get_doctor_diagnostics(FakeRequest(method="GET")) # pyright: ignore[reportArgumentType]
payload = _json_payload(response)
diagnostic_map = {item["id"]: item for item in payload["diagnostics"]}
assert diagnostic_map["filename_conflicts"]["status"] == "ok"
@@ -1798,8 +1810,8 @@ async def test_check_filename_conflicts_detects_duplicates():
scanner_factories=(("lora", "LoRAs", scanner_factory),),
)
response = await handler.get_doctor_diagnostics(FakeRequest(method="GET"))
payload = json.loads(response.text)
response = await handler.get_doctor_diagnostics(FakeRequest(method="GET")) # pyright: ignore[reportArgumentType]
payload = _json_payload(response)
diagnostic_map = {item["id"]: item for item in payload["diagnostics"]}
conflict_diag = diagnostic_map["filename_conflicts"]
@@ -1826,8 +1838,8 @@ async def test_resolve_filename_conflicts_returns_renamed_list():
scanner_factories=(("lora", "LoRAs", scanner_factory),),
)
response = await handler.resolve_filename_conflicts(FakeRequest(method="POST"))
payload = json.loads(response.text)
response = await handler.resolve_filename_conflicts(FakeRequest(method="POST")) # pyright: ignore[reportArgumentType]
payload = _json_payload(response)
assert payload["success"] is True
# Files don't exist on disk, so nothing gets renamed
@@ -1850,8 +1862,8 @@ async def test_resolve_filename_conflicts_handles_scanner_error_gracefully():
scanner_factories=(("lora", "LoRAs", scanner_factory),),
)
response = await handler.resolve_filename_conflicts(FakeRequest(method="POST"))
payload = json.loads(response.text)
response = await handler.resolve_filename_conflicts(FakeRequest(method="POST")) # pyright: ignore[reportArgumentType]
payload = _json_payload(response)
assert payload["success"] is True
assert payload["count"] == 0