Spaces:
Sleeping
Sleeping
| """Settings-backed Admin config validation.""" | |
| from collections.abc import Mapping | |
| from typing import Any | |
| from pydantic import ValidationError | |
| from free_claude_code.config.settings import Settings | |
| from .manifest import FIELDS, field_input_key | |
| def validate_values(values: Mapping[str, str]) -> tuple[bool, list[str]]: | |
| """Validate proposed env values against the Settings model.""" | |
| settings, errors = settings_from_values(values) | |
| return settings is not None, errors | |
| def settings_from_values( | |
| values: Mapping[str, str], | |
| ) -> tuple[Settings | None, list[str]]: | |
| """Build the prospective Settings snapshot without reading dotenv files.""" | |
| kwargs: dict[str, Any] = {"_env_file": None} | |
| for field in FIELDS: | |
| input_key = field_input_key(field) | |
| if input_key is None: | |
| continue | |
| kwargs[input_key] = values.get(field.key, "") | |
| try: | |
| return Settings(**kwargs), [] | |
| except ValidationError as exc: | |
| return None, format_validation_errors(exc) | |
| def format_validation_errors(exc: ValidationError) -> list[str]: | |
| """Return user-readable validation errors from a Pydantic exception.""" | |
| errors: list[str] = [] | |
| for error in exc.errors(): | |
| loc = ".".join(str(part) for part in error.get("loc", ())) | |
| message = str(error.get("msg", "Invalid value")) | |
| errors.append(f"{loc}: {message}" if loc else message) | |
| return errors | |