Source code for swcstudio.core.validation_registry
"""Validation check registry."""
from __future__ import annotations
from dataclasses import dataclass
from typing import Any, Callable
ValidationCheckCallable = Callable[[Any, dict[str, Any]], Any]
[docs]
@dataclass
class CheckDefinition:
key: str
label: str
source: str
runner: ValidationCheckCallable
class ValidationRegistry:
def __init__(self):
self._checks: dict[str, CheckDefinition] = {}
def register(
self,
*,
key: str,
label: str,
source: str,
runner: ValidationCheckCallable,
) -> None:
self._checks[key] = CheckDefinition(
key=str(key),
label=str(label),
source=str(source),
runner=runner,
)
def get(self, key: str) -> CheckDefinition | None:
return self._checks.get(key)
def all(self) -> list[CheckDefinition]:
return [self._checks[k] for k in sorted(self._checks.keys())]
def keys(self) -> list[str]:
return sorted(self._checks.keys())
def clear(self) -> None:
self._checks.clear()
REGISTRY = ValidationRegistry()
[docs]
def register_check(
*,
key: str,
label: str,
source: str,
runner: ValidationCheckCallable,
) -> None:
REGISTRY.register(key=key, label=label, source=source, runner=runner)
[docs]
def get_check(key: str) -> CheckDefinition | None:
return REGISTRY.get(key)
[docs]
def list_checks() -> list[CheckDefinition]:
return REGISTRY.all()
[docs]
def register_plugin_check(
*,
key: str,
label: str,
runner: ValidationCheckCallable,
) -> None:
"""Register custom user-defined checks in the shared validation registry."""
REGISTRY.register(key=key, label=label, source="plugin", runner=runner)