| | from solverforge_legacy.solver.score import HardMediumSoftScore |
| | from pydantic import ( |
| | BaseModel, |
| | ConfigDict, |
| | PlainSerializer, |
| | BeforeValidator, |
| | ValidationInfo, |
| | ) |
| | from pydantic.alias_generators import to_camel |
| | from typing import Any |
| |
|
| |
|
| | def make_list_item_validator(key: str): |
| | def validator(v: Any, info: ValidationInfo) -> Any: |
| | if v is None: |
| | return None |
| |
|
| | if not isinstance(v, str) or not info.context: |
| | return v |
| |
|
| | return info.context.get(key, {}).get(v, v) |
| |
|
| | return BeforeValidator(validator) |
| |
|
| |
|
| | |
| | MeetingDeserializer = make_list_item_validator("meetings") |
| | RoomDeserializer = make_list_item_validator("rooms") |
| | TimeGrainDeserializer = make_list_item_validator("timeGrains") |
| |
|
| | IdSerializer = PlainSerializer( |
| | lambda item: item.id if item is not None else None, return_type=str | None |
| | ) |
| | ScoreSerializer = PlainSerializer( |
| | lambda score: str(score) if score is not None else None, return_type=str | None |
| | ) |
| |
|
| |
|
| | def validate_score(v: Any, info: ValidationInfo) -> Any: |
| | if isinstance(v, HardMediumSoftScore) or v is None: |
| | return v |
| | if isinstance(v, str): |
| | return HardMediumSoftScore.parse(v) |
| | raise ValueError('"score" should be a string') |
| |
|
| |
|
| | ScoreValidator = BeforeValidator(validate_score) |
| |
|
| |
|
| | class JsonDomainBase(BaseModel): |
| | model_config = ConfigDict( |
| | alias_generator=to_camel, |
| | populate_by_name=True, |
| | from_attributes=True, |
| | ) |
| |
|