From a49f4c1ca8bedf6ad2f11a55fcb556e64c141ae9 Mon Sep 17 00:00:00 2001 From: MasatoSaeki Date: Thu, 19 Dec 2024 16:19:23 +0900 Subject: [PATCH] add validator Signed-off-by: MasatoSaeki --- .../driving_log_replayer_v2/perception.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/driving_log_replayer_v2/driving_log_replayer_v2/perception.py b/driving_log_replayer_v2/driving_log_replayer_v2/perception.py index 79f90560..9c8b4240 100644 --- a/driving_log_replayer_v2/driving_log_replayer_v2/perception.py +++ b/driving_log_replayer_v2/driving_log_replayer_v2/perception.py @@ -12,17 +12,23 @@ # See the License for the specific language governing permissions and # limitations under the License. +from __future__ import annotations + from dataclasses import dataclass import sys from typing import Literal +from typing import TYPE_CHECKING -from perception_eval.evaluation import PerceptionFrameResult from pydantic import BaseModel from pydantic import field_validator +from pydantic import model_validator from std_msgs.msg import ColorRGBA from std_msgs.msg import Header from visualization_msgs.msg import MarkerArray +if TYPE_CHECKING: + from perception_eval.evaluation import PerceptionFrameResult + from driving_log_replayer_v2.criteria import PerceptionCriteria import driving_log_replayer_v2.perception_eval_conversions as eval_conversions from driving_log_replayer_v2.perception_eval_conversions import FrameDescriptionWriter @@ -82,6 +88,13 @@ def validate_distance_range(cls, v: str | None) -> tuple[number, number] | None: raise ValueError(err_msg) return (lower, upper) + @model_validator(mode="after") + def validate_duplicate_filter(self) -> Filter: + if self.Distance is not None and self.Region is not None: + error_msg = "Distance and Region filter cannot be used at the same time." + raise ValueError(error_msg) + return self + class Criteria(BaseModel): PassRate: number