Team Ai
Apppublic

blackopsrepl/portfolio-optimization-python

sourceHugging Faceapache-2.0updated 10mo agoView on Hugging Face
1likes
json_serialization.py43 linesDownload Raw Back to portfolio_optimization
1"""
2JSON serialization utilities for the Portfolio Optimization quickstart.
3
4Provides Pydantic configuration for REST API models with camelCase support.
5"""
6from solverforge_legacy.solver.score import HardSoftScore
7from typing import Any
8from pydantic import BaseModel, ConfigDict, PlainSerializer, BeforeValidator
9from pydantic.alias_generators import to_camel
10
11
12ScoreSerializer = PlainSerializer(
13    lambda score: str(score) if score is not None else None, return_type=str | None
14)
15
16
17def validate_score(v: Any) -> Any:
18    """Validate and parse score from string or HardSoftScore."""
19    if isinstance(v, HardSoftScore) or v is None:
20        return v
21    if isinstance(v, str):
22        return HardSoftScore.parse(v)
23    raise ValueError('"score" should be a string')
24
25
26ScoreValidator = BeforeValidator(validate_score)
27
28
29class JsonDomainBase(BaseModel):
30    """
31    Base class for Pydantic REST models.
32
33    Provides:
34    - Automatic camelCase conversion for JSON keys
35    - Support for both camelCase and snake_case in input
36    - Attribute access from dataclass instances
37    """
38    model_config = ConfigDict(
39        alias_generator=to_camel,
40        populate_by_name=True,
41        from_attributes=True,
42    )
43