diff --git a/packages/open_vp_cal/src/open_vp_cal/led_wall_settings.py b/packages/open_vp_cal/src/open_vp_cal/led_wall_settings.py index d46402f..6384f6b 100644 --- a/packages/open_vp_cal/src/open_vp_cal/led_wall_settings.py +++ b/packages/open_vp_cal/src/open_vp_cal/led_wall_settings.py @@ -81,20 +81,35 @@ class LedWallSettings(BaseModel): verification_wall: str = Field(default="") # ===== Runtime Fields (excluded from serialization) ===== - processing_results: ProcessingResults = Field( - default_factory=ProcessingResults, - exclude=True + _processing_results: ProcessingResults = PrivateAttr( + default_factory=ProcessingResults ) - separation_results: Optional[SeparationResults] = Field( + _separation_results: Optional[SeparationResults] = PrivateAttr( default=None, - exclude=True ) + @property + def processing_results(self) -> ProcessingResults: + return self._processing_results + + @processing_results.setter + def processing_results(self, value: ProcessingResults): + self.processing_results = value + + @property + def separation_results(self) -> Optional[SeparationResults]: + return self._separation_results + + @separation_results.setter + def separation_results(self, value: SeparationResults): + self._separation_results = value + # ===== Private Attributes (not in schema at all) ===== _sequence_loader: Optional[SequenceLoader] = PrivateAttr(default=None) _sequence_loader_class: type = PrivateAttr(default=SequenceLoader) _project_settings: Optional["ProjectSettings"] = PrivateAttr(default=None) + @field_validator( "roi", mode="before", diff --git a/packages/open_vp_cal/src/open_vp_cal/project_settings.py b/packages/open_vp_cal/src/open_vp_cal/project_settings.py index 8f3c7c4..d9364c1 100644 --- a/packages/open_vp_cal/src/open_vp_cal/project_settings.py +++ b/packages/open_vp_cal/src/open_vp_cal/project_settings.py @@ -28,7 +28,6 @@ field_validator, field_serializer, model_validator, - model_serializer, PrivateAttr, ConfigDict, ) @@ -128,16 +127,6 @@ def handle_nested_format(cls, data: Any) -> Any: return inner return data - @model_serializer(mode='wrap') - def serialize_nested(self, handler) -> dict: - """Output backwards-compatible nested JSON format.""" - data = handler(self) - version = data.pop('openvp_cal_version', open_vp_cal.__version__) - return { - constants.OpenVPCalSettingsKeys.VERSION: version, - constants.OpenVPCalSettingsKeys.PROJECT_SETTINGS: data - } - def __init__(self, led_wall_class: Optional[Type[LedWallSettings]] = None, **data): """Initialize a ProjectSettings object.