refactor(context): require scanner service dependencies

This commit is contained in:
Dariusz L
2026-08-02 02:52:37 +02:00
parent 8744da536b
commit 39a0606afa
4 changed files with 31 additions and 6 deletions
+6 -6
View File
@@ -7,16 +7,16 @@ class ScannerService:
"""Coordinate local model listing and path-template discovery."""
def __init__(self, context: RouteContext):
self.asyncio = context.get("asyncio")
self.get_model_files = context.get("get_model_files")
self.infer_download_path_templates = context.get(
self.asyncio = context.require("asyncio")
self.get_model_files = context.require("get_model_files")
self.infer_download_path_templates = context.require(
"infer_download_path_templates"
)
self.invalidate_local_hash_match_cache = context.get(
self.invalidate_local_hash_match_cache = context.require(
"invalidate_local_hash_match_cache"
)
self.to_bool = context.get("to_bool")
self.web = context.get("web")
self.to_bool = context.require("to_bool")
self.web = context.require("web")
async def get_models(self, request):
"""Return the locally available models, optionally forcing a rescan."""
+3
View File
@@ -11,6 +11,7 @@ from aiohttp import web
from core.routes.context import RouteContext
from core.routes.directories import register_directory_routes
from core.type_utils import to_bool
class _Routes:
@@ -58,6 +59,7 @@ def _build_routes(**overrides):
),
"get_model_files": MagicMock(return_value=[]),
"infer_download_path_templates": MagicMock(return_value=[]),
"invalidate_local_hash_match_cache": MagicMock(),
"is_civarchive_available": MagicMock(return_value=False),
"is_lora_manager_archive_available": MagicMock(return_value=False),
"json_api_endpoint": _json_api_endpoint,
@@ -70,6 +72,7 @@ def _build_routes(**overrides):
"split_path_segments": lambda value: [
part for part in str(value).replace("\\", "/").split("/") if part
],
"to_bool": to_bool,
"web": web,
}
values.update(overrides)
+19
View File
@@ -0,0 +1,19 @@
import pytest
from core.routes.context import RouteContext
from core.services.scanner_service import ScannerService
def test_route_context_remains_immutable_after_construction():
values = {"dependency": "original"}
context = RouteContext(values)
values["dependency"] = "changed"
assert context.get("dependency") == "original"
with pytest.raises(KeyError, match="Missing route dependency: absent"):
context.require("absent")
def test_scanner_service_requires_mandatory_route_dependencies():
with pytest.raises(KeyError, match="Missing route dependency: asyncio"):
ScannerService(RouteContext({}))
+3
View File
@@ -46,6 +46,7 @@ def _build_metadata_routes():
"get_model_files": MagicMock(
return_value=[{"filename": "model.safetensors"}]
),
"infer_download_path_templates": MagicMock(return_value=[]),
"get_progress_response": MagicMock(),
"invalidate_local_hash_match_cache": MagicMock(),
"json_api_endpoint": _json_api_endpoint,
@@ -86,6 +87,7 @@ def _build_directory_routes():
"infer_download_path_templates": MagicMock(
return_value=[{"category": "checkpoints"}]
),
"invalidate_local_hash_match_cache": MagicMock(),
"is_civarchive_available": MagicMock(return_value=False),
"is_lora_manager_archive_available": MagicMock(return_value=False),
"json_api_endpoint": _json_api_endpoint,
@@ -98,6 +100,7 @@ def _build_directory_routes():
"routes": routes,
"self": SimpleNamespace(logger=MagicMock()),
"split_path_segments": MagicMock(return_value=[]),
"to_bool": to_bool,
"web": web,
}
register_directory_routes(RouteContext(values))