Skip to content

Commit 9c0cd60

Browse files
ktro2828Copilot
andauthored
refactor: update custom validator definition (#250)
* refactor: update custom validator definition Signed-off-by: ktro2828 <kotaro.uetake@tier4.jp> * Update t4_devkit/schema/tables/base.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Signed-off-by: ktro2828 <kotaro.uetake@tier4.jp> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
1 parent 0523223 commit 9c0cd60

13 files changed

Lines changed: 38 additions & 33 deletions

t4_devkit/schema/tables/autolabel_metadata.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,12 @@ class AutolabelModel:
1818

1919
name: str = field(validator=validators.instance_of(str))
2020
score: float = field(
21-
validator=[
22-
validators.instance_of(float),
23-
validators.and_(validators.ge(0.0), validators.le(1.0)),
24-
]
21+
validator=(validators.instance_of(float), validators.ge(0.0), validators.le(1.0))
2522
)
2623
uncertainty: float | None = field(
2724
default=None,
2825
validator=validators.optional(
29-
(validators.instance_of(float), validators.and_(validators.ge(0.0), validators.le(1.0)))
26+
validators.and_(validators.instance_of(float), validators.ge(0.0), validators.le(1.0))
3027
),
3128
)
3229

t4_devkit/schema/tables/base.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,23 @@
1111
__all__ = ["SchemaBase", "SchemaTable"]
1212

1313

14-
def impossible_empty(instance, attribute, value: Sized) -> None:
15-
"""A validator that raises ValueError if value is empty."""
16-
if len(value) == 0:
17-
raise ValueError(f"{attribute.name} cannot be empty")
14+
def impossible_empty():
15+
"""Factory function that returns a validator instance which raises ValueError if value is empty."""
16+
return _ImpossibleEmptyValidator()
17+
18+
19+
@define(slots=True, unsafe_hash=True)
20+
class _ImpossibleEmptyValidator:
21+
def __call__(self, instance, attribute, value: Sized) -> None:
22+
if len(value) == 0:
23+
raise ValueError(f"{attribute.name} cannot be empty")
1824

1925

2026
@define
2127
class SchemaBase(ABC):
2228
"""Abstract base dataclass of schema tables."""
2329

24-
token: str = field(validator=(validators.instance_of(str), impossible_empty))
30+
token: str = field(validator=(validators.instance_of(str), impossible_empty()))
2531

2632
@classmethod
2733
def from_json(cls, filepath: str) -> list[SchemaTable]:

t4_devkit/schema/tables/calibrated_sensor.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class CalibratedSensor(SchemaBase):
2626
camera_distortion (CameraDistortion): Camera distortion array. Empty for sensors that are not cameras.
2727
"""
2828

29-
sensor_token: str = field(validator=(validators.instance_of(str), impossible_empty))
29+
sensor_token: str = field(validator=(validators.instance_of(str), impossible_empty()))
3030
translation: Vector3 = field(converter=Vector3)
3131
rotation: Quaternion = field(converter=to_quaternion)
3232
camera_intrinsic: CameraIntrinsic = field(converter=CameraIntrinsic)

t4_devkit/schema/tables/instance.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ class Instance(SchemaBase):
2525
Empty if the dataset only contains 2D annotations.
2626
"""
2727

28-
category_token: str = field(validator=(validators.instance_of(str), impossible_empty))
28+
category_token: str = field(validator=(validators.instance_of(str), impossible_empty()))
2929
instance_name: str = field(validator=validators.instance_of(str))
3030
nbr_annotations: int = field(validator=validators.instance_of(int))
3131
first_annotation_token: str = field(validator=validators.instance_of(str))

t4_devkit/schema/tables/keypoint.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,10 @@ class Keypoint(SchemaBase):
2929
num_keypoints (int): The number of keypoints to be annotated.
3030
"""
3131

32-
sample_data_token: str = field(validator=(validators.instance_of(str), impossible_empty))
33-
instance_token: str = field(validator=(validators.instance_of(str), impossible_empty))
32+
sample_data_token: str = field(validator=(validators.instance_of(str), impossible_empty()))
33+
instance_token: str = field(validator=(validators.instance_of(str), impossible_empty()))
3434
category_tokens: list[str] = field(
35-
validator=validators.deep_iterable((validators.instance_of(str), impossible_empty))
35+
validator=validators.deep_iterable((validators.instance_of(str), impossible_empty()))
3636
)
3737
keypoints: KeypointLike = field(converter=np.array)
3838
num_keypoints: int = field(validator=validators.instance_of(int))

t4_devkit/schema/tables/lidarseg.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,4 @@ class LidarSeg(SchemaBase):
2121
"""
2222

2323
filename: str = field(validator=validators.instance_of(str))
24-
sample_data_token: str = field(validator=(validators.instance_of(str), impossible_empty))
24+
sample_data_token: str = field(validator=(validators.instance_of(str), impossible_empty()))

t4_devkit/schema/tables/map.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ class Map(SchemaBase):
2222
"""
2323

2424
log_tokens: list[str] = field(
25-
validator=validators.deep_iterable((validators.instance_of(str), impossible_empty))
25+
validator=validators.deep_iterable((validators.instance_of(str), impossible_empty()))
2626
)
2727
category: str = field(validator=validators.instance_of(str))
2828
filename: str = field(validator=validators.instance_of(str))

t4_devkit/schema/tables/object_ann.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -76,11 +76,11 @@ class ObjectAnn(SchemaBase, AutolabelMixin):
7676
category_name (str): Category name. This should be set after instantiated.
7777
"""
7878

79-
sample_data_token: str = field(validator=(validators.instance_of(str), impossible_empty))
80-
instance_token: str = field(validator=(validators.instance_of(str), impossible_empty))
81-
category_token: str = field(validator=(validators.instance_of(str), impossible_empty))
79+
sample_data_token: str = field(validator=(validators.instance_of(str), impossible_empty()))
80+
instance_token: str = field(validator=(validators.instance_of(str), impossible_empty()))
81+
category_token: str = field(validator=(validators.instance_of(str), impossible_empty()))
8282
attribute_tokens: list[str] = field(
83-
validator=validators.deep_iterable((validators.instance_of(str), impossible_empty))
83+
validator=validators.deep_iterable((validators.instance_of(str), impossible_empty()))
8484
)
8585
bbox: Roi = field(converter=Roi)
8686
mask: RLEMask | None = field(

t4_devkit/schema/tables/sample.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class Sample(SchemaBase):
3434
"""
3535

3636
timestamp: int = field(validator=validators.instance_of(int))
37-
scene_token: str = field(validator=(validators.instance_of(str), impossible_empty))
37+
scene_token: str = field(validator=(validators.instance_of(str), impossible_empty()))
3838
next: str = field(validator=validators.instance_of(str))
3939
prev: str = field(validator=validators.instance_of(str))
4040

t4_devkit/schema/tables/sample_annotation.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,12 @@ class SampleAnnotation(SchemaBase, AutolabelMixin):
4848
category_name (str): Category name. This should be set after instantiated.
4949
"""
5050

51-
sample_token: str = field(validator=(validators.instance_of(str), impossible_empty))
52-
instance_token: str = field(validator=(validators.instance_of(str), impossible_empty))
51+
sample_token: str = field(validator=(validators.instance_of(str), impossible_empty()))
52+
instance_token: str = field(validator=(validators.instance_of(str), impossible_empty()))
5353
attribute_tokens: list[str] = field(
54-
validator=validators.deep_iterable((validators.instance_of(str), impossible_empty))
54+
validator=validators.deep_iterable((validators.instance_of(str), impossible_empty()))
5555
)
56-
visibility_token: str = field(validator=(validators.instance_of(str), impossible_empty))
56+
visibility_token: str = field(validator=(validators.instance_of(str), impossible_empty()))
5757
translation: Vector3 = field(converter=Vector3)
5858
size: Vector3 = field(converter=Vector3)
5959
rotation: Quaternion = field(converter=to_quaternion)

0 commit comments

Comments
 (0)